From e2fb37c0acacdf87f18664b18d21934bedb80e79 Mon Sep 17 00:00:00 2001 From: Julian Sommer <115516918+juliansommer@users.noreply.github.com> Date: Tue, 15 Sep 2026 10:28:35 +1000 Subject: [PATCH] docs: publish only the AWS operations Spinifex serves The coverage pages led with a percentage and an "x of y" count, and every table listed the modelled operations Spinifex does not implement, which reads as a scorecard against AWS rather than a statement of what the platform serves. A published page now opens with the operation count alone, tables the operations the gateway serves, and carries a separate not-applicable table with each reason inline instead of footnotes. The unimplemented operations and the counts move to docs/coverage/internal-report.md, which no docs-site slug points at. A service with no implemented operations has no publishable page. --- docs/README.md | 2 + docs/coverage/README.md | 26 +- docs/coverage/acm/README.md | 32 +- docs/coverage/ec2/README.md | 768 +++++-------------------- docs/coverage/ecr/README.md | 38 +- docs/coverage/ecr/intro.md | 4 +- docs/coverage/ecs/README.md | 24 +- docs/coverage/eks/README.md | 98 ++-- docs/coverage/elbv2/README.md | 16 +- docs/coverage/iam/README.md | 273 ++++----- docs/coverage/internal-report.md | 938 +++++++++++++++++++++++++++++++ docs/coverage/pages.json | 20 +- docs/coverage/rds/README.md | 220 ++------ docs/coverage/sts/README.md | 21 +- internal/awsmodel/coverage.go | 37 ++ internal/awsmodel/page.go | 141 +++-- internal/awsmodel/page_test.go | 92 ++- internal/awsmodel/write.go | 17 +- internal/awsmodel/write_test.go | 26 +- 19 files changed, 1568 insertions(+), 1225 deletions(-) create mode 100644 docs/coverage/internal-report.md diff --git a/docs/README.md b/docs/README.md index b5eed2e4a..7f50fd91b 100644 --- a/docs/README.md +++ b/docs/README.md @@ -4,6 +4,8 @@ This directory contains the Spinifex documentation. This is available in individ The [AWS API coverage](coverage/README.md) pages are generated from Spinifex's dispatch tables and the pinned AWS API models, one page per service. Run `make aws-model-coverage` to regenerate them and print a summary. Only `pages.json` and the `intro.md` files under `coverage/` are hand-written; every `README.md` there is generated and will be overwritten. +A published page names the operations Spinifex serves and the ones the platform will never serve, with the reason for each. It carries no percentage and no unimplemented operation: the same run writes those to [`coverage/internal-report.md`](coverage/internal-report.md), which no slug in the docs site's configuration points at, so it stays internal. + ## Frontmatter Each published page lives at `//README.md` and carries YAML frontmatter that the docs site turns into page metadata. Three fields have length rules, because search engines flag a title tag or meta description that falls outside them: diff --git a/docs/coverage/README.md b/docs/coverage/README.md index 4c76c0e5d..c7b269b85 100644 --- a/docs/coverage/README.md +++ b/docs/coverage/README.md @@ -1,7 +1,7 @@ --- title: "AWS API Coverage" seoTitle: "Which AWS API Operations Spinifex Implements — Spinifex Docs" -description: "Operation-level coverage of every AWS API Spinifex serves, generated from its gateway dispatch tables and the pinned AWS SDK service models on each build." +description: "The AWS API operations Spinifex serves, generated from its gateway dispatch tables and the pinned AWS SDK service models on each build, service by service." category: "Coverage" sections: - overview @@ -17,16 +17,16 @@ tags: ## Overview -Spinifex serves the AWS APIs below. Every page counts the operations in the pinned `aws-sdk-go v1.55.8` `api-2.json` model for its service and reports, operation by operation, whether Spinifex implements it. +Spinifex serves the AWS APIs below. Every page names the operations Spinifex implements from the pinned `aws-sdk-go v1.55.8` `api-2.json` model for its service, alongside those the platform does not offer and why. -| Service | Implemented | Modelled | Coverage | -|---|---:|---:|---:| -| [ACM](/coverage/acm) | 9 | 15 | 60.0% | -| [EC2](/coverage/ec2) | 125 | 625 | 20.0% | -| [ECR](/coverage/ecr) | 19 | 47 | 40.4% | -| [ECS](/coverage/ecs) | 31 | 56 | 55.4% | -| [EKS](/coverage/eks) | 34 | 56 | 60.7% | -| [ELBv2](/coverage/elbv2) | 34 | 46 | 73.9% | -| [IAM](/coverage/iam) | 75 | 159 | 47.2% | -| [RDS](/coverage/rds) | 26 | 162 | 16.0% | -| [STS](/coverage/sts) | 5 | 8 | 62.5% | +| Service | Operations | +|---|---:| +| [ACM](/coverage/acm) | 9 | +| [EC2](/coverage/ec2) | 125 | +| [ECR](/coverage/ecr) | 19 | +| [ECS](/coverage/ecs) | 31 | +| [EKS](/coverage/eks) | 34 | +| [ELBv2](/coverage/elbv2) | 34 | +| [IAM](/coverage/iam) | 75 | +| [RDS](/coverage/rds) | 26 | +| [STS](/coverage/sts) | 5 | diff --git a/docs/coverage/acm/README.md b/docs/coverage/acm/README.md index 3d0f9191b..539c3e9da 100644 --- a/docs/coverage/acm/README.md +++ b/docs/coverage/acm/README.md @@ -1,7 +1,7 @@ --- title: "ACM API Coverage" seoTitle: "AWS Certificate Manager API Coverage — Spinifex Docs" -description: "Every operation in the AWS Certificate Manager API model and whether Spinifex implements it, generated from the gateway dispatch tables on each build." +description: "The AWS Certificate Manager API operations Spinifex implements, generated from the gateway dispatch tables on each build, with those it does not offer and why." category: "Coverage" sections: - overview @@ -18,7 +18,7 @@ tags: ## Overview -Spinifex implements **9 of the 15** operations (**60.0%**) in the ACM `2015-12-08` API model. +Spinifex implements **9 operations** in the ACM `2015-12-08` API model. ### Import and issuance @@ -30,20 +30,14 @@ Terraform's canonical certificate, DNS record and validation flow works unmodifi ### Operations -| Operation | Status | -|---|---| -| `AddTagsToCertificate` | ✅ Implemented | -| `DeleteCertificate` | ✅ Implemented | -| `DescribeCertificate` | ✅ Implemented | -| `ExportCertificate` | ❌ Not implemented | -| `GetAccountConfiguration` | ❌ Not implemented | -| `GetCertificate` | ✅ Implemented | -| `ImportCertificate` | ✅ Implemented | -| `ListCertificates` | ✅ Implemented | -| `ListTagsForCertificate` | ✅ Implemented | -| `PutAccountConfiguration` | ❌ Not implemented | -| `RemoveTagsFromCertificate` | ✅ Implemented | -| `RenewCertificate` | ❌ Not implemented | -| `RequestCertificate` | ✅ Implemented | -| `ResendValidationEmail` | ❌ Not implemented | -| `UpdateCertificateOptions` | ❌ Not implemented | +| Operation | +|---| +| `AddTagsToCertificate` | +| `DeleteCertificate` | +| `DescribeCertificate` | +| `GetCertificate` | +| `ImportCertificate` | +| `ListCertificates` | +| `ListTagsForCertificate` | +| `RemoveTagsFromCertificate` | +| `RequestCertificate` | diff --git a/docs/coverage/ec2/README.md b/docs/coverage/ec2/README.md index 3e25a7b85..d9042f732 100644 --- a/docs/coverage/ec2/README.md +++ b/docs/coverage/ec2/README.md @@ -1,7 +1,7 @@ --- title: "EC2 API Coverage" seoTitle: "Amazon EC2 API Coverage on Spinifex — Spinifex Docs" -description: "Every operation in the Amazon EC2 API model and whether Spinifex implements it, covering instances, EBS volumes, VPC networking, tags and security groups." +description: "The Amazon EC2 API operations Spinifex implements, covering instances, EBS volumes, VPC networking, tags and security groups, with those it does not offer." category: "Coverage" sections: - overview @@ -18,7 +18,7 @@ tags: ## Overview -Spinifex implements **125 of the 625** operations (**20.0%**) in the EC2 `2016-11-15` API model. +Spinifex implements **125 operations** in the EC2 `2016-11-15` API model. ### Spot Instances Are a Mock @@ -26,634 +26,138 @@ Spot Instance Requests are a mock over the on-demand `RunInstances` path. A requ ### Operations -| Operation | Status | +| Operation | +|---| +| `AllocateAddress` | +| `AssociateAddress` | +| `AssociateIamInstanceProfile` | +| `AssociateRouteTable` | +| `AttachInternetGateway` | +| `AttachNetworkInterface` | +| `AttachVolume` | +| `AuthorizeSecurityGroupEgress` | +| `AuthorizeSecurityGroupIngress` | +| `CancelCapacityReservation` | +| `CancelSpotInstanceRequests` | +| `CopyImage` | +| `CopySnapshot` | +| `CreateCapacityReservation` | +| `CreateEgressOnlyInternetGateway` | +| `CreateImage` | +| `CreateInternetGateway` | +| `CreateKeyPair` | +| `CreateLaunchTemplate` | +| `CreateLaunchTemplateVersion` | +| `CreateNatGateway` | +| `CreateNetworkInterface` | +| `CreatePlacementGroup` | +| `CreateRoute` | +| `CreateRouteTable` | +| `CreateSecurityGroup` | +| `CreateSnapshot` | +| `CreateSubnet` | +| `CreateTags` | +| `CreateVolume` | +| `CreateVpc` | +| `DeleteEgressOnlyInternetGateway` | +| `DeleteInternetGateway` | +| `DeleteKeyPair` | +| `DeleteLaunchTemplate` | +| `DeleteLaunchTemplateVersions` | +| `DeleteNatGateway` | +| `DeleteNetworkInterface` | +| `DeletePlacementGroup` | +| `DeleteRoute` | +| `DeleteRouteTable` | +| `DeleteSecurityGroup` | +| `DeleteSnapshot` | +| `DeleteSubnet` | +| `DeleteTags` | +| `DeleteVolume` | +| `DeleteVpc` | +| `DeregisterImage` | +| `DescribeAccountAttributes` | +| `DescribeAddresses` | +| `DescribeAddressesAttribute` | +| `DescribeAvailabilityZones` | +| `DescribeCapacityReservations` | +| `DescribeEgressOnlyInternetGateways` | +| `DescribeIamInstanceProfileAssociations` | +| `DescribeImageAttribute` | +| `DescribeImages` | +| `DescribeInstanceAttribute` | +| `DescribeInstanceCreditSpecifications` | +| `DescribeInstanceStatus` | +| `DescribeInstanceTypeOfferings` | +| `DescribeInstanceTypes` | +| `DescribeInstances` | +| `DescribeInternetGateways` | +| `DescribeKeyPairs` | +| `DescribeLaunchTemplateVersions` | +| `DescribeLaunchTemplates` | +| `DescribeNatGateways` | +| `DescribeNetworkInterfaces` | +| `DescribePlacementGroups` | +| `DescribeRegions` | +| `DescribeRouteTables` | +| `DescribeSecurityGroupRules` | +| `DescribeSecurityGroups` | +| `DescribeSnapshots` | +| `DescribeSpotInstanceRequests` | +| `DescribeSubnets` | +| `DescribeTags` | +| `DescribeVolumeStatus` | +| `DescribeVolumes` | +| `DescribeVolumesModifications` | +| `DescribeVpcAttribute` | +| `DescribeVpcs` | +| `DetachInternetGateway` | +| `DetachNetworkInterface` | +| `DetachVolume` | +| `DisableEbsEncryptionByDefault` | +| `DisableSerialConsoleAccess` | +| `DisassociateAddress` | +| `DisassociateIamInstanceProfile` | +| `DisassociateRouteTable` | +| `EnableEbsEncryptionByDefault` | +| `EnableSerialConsoleAccess` | +| `GetConsoleOutput` | +| `GetEbsEncryptionByDefault` | +| `GetPasswordData` | +| `GetSecurityGroupsForVpc` | +| `GetSerialConsoleAccessStatus` | +| `ImportKeyPair` | +| `ModifyImageAttribute` | +| `ModifyInstanceAttribute` | +| `ModifyInstanceMetadataOptions` | +| `ModifyLaunchTemplate` | +| `ModifyNetworkInterfaceAttribute` | +| `ModifySubnetAttribute` | +| `ModifyVolume` | +| `ModifyVpcAttribute` | +| `MonitorInstances` | +| `RebootInstances` | +| `RegisterImage` | +| `ReleaseAddress` | +| `ReplaceIamInstanceProfileAssociation` | +| `ReplaceRoute` | +| `ReplaceRouteTableAssociation` | +| `RequestSpotInstances` | +| `ResetImageAttribute` | +| `RevokeSecurityGroupEgress` | +| `RevokeSecurityGroupIngress` | +| `RunInstances` | +| `StartInstances` | +| `StopInstances` | +| `TerminateInstances` | +| `UnmonitorInstances` | +| `UpdateSecurityGroupRuleDescriptionsEgress` | +| `UpdateSecurityGroupRuleDescriptionsIngress` | + +### Not applicable + +These operations describe AWS-hosted features this platform does not offer. + +| Operation | Reason | |---|---| -| `AcceptAddressTransfer` | ❌ Not implemented | -| `AcceptReservedInstancesExchangeQuote` | ❌ Not implemented | -| `AcceptTransitGatewayMulticastDomainAssociations` | ❌ Not implemented | -| `AcceptTransitGatewayPeeringAttachment` | ❌ Not implemented | -| `AcceptTransitGatewayVpcAttachment` | ❌ Not implemented | -| `AcceptVpcEndpointConnections` | ❌ Not implemented | -| `AcceptVpcPeeringConnection` | ❌ Not implemented | -| `AdvertiseByoipCidr` | ❌ Not implemented | -| `AllocateAddress` | ✅ Implemented | -| `AllocateHosts` | ❌ Not implemented | -| `AllocateIpamPoolCidr` | ❌ Not implemented | -| `ApplySecurityGroupsToClientVpnTargetNetwork` | ❌ Not implemented | -| `AssignIpv6Addresses` | ❌ Not implemented | -| `AssignPrivateIpAddresses` | ❌ Not implemented | -| `AssignPrivateNatGatewayAddress` | ❌ Not implemented | -| `AssociateAddress` | ✅ Implemented | -| `AssociateClientVpnTargetNetwork` | ❌ Not implemented | -| `AssociateDhcpOptions` | ❌ Not implemented | -| `AssociateEnclaveCertificateIamRole` | ❌ Not implemented | -| `AssociateIamInstanceProfile` | ✅ Implemented | -| `AssociateInstanceEventWindow` | ❌ Not implemented | -| `AssociateIpamByoasn` | ❌ Not implemented | -| `AssociateIpamResourceDiscovery` | ❌ Not implemented | -| `AssociateNatGatewayAddress` | ❌ Not implemented | -| `AssociateRouteTable` | ✅ Implemented | -| `AssociateSubnetCidrBlock` | ❌ Not implemented | -| `AssociateTransitGatewayMulticastDomain` | ❌ Not implemented | -| `AssociateTransitGatewayPolicyTable` | ❌ Not implemented | -| `AssociateTransitGatewayRouteTable` | ❌ Not implemented | -| `AssociateTrunkInterface` | ❌ Not implemented | -| `AssociateVpcCidrBlock` | ❌ Not implemented | -| `AttachClassicLinkVpc` | ❌ Not implemented | -| `AttachInternetGateway` | ✅ Implemented | -| `AttachNetworkInterface` | ✅ Implemented | -| `AttachVerifiedAccessTrustProvider` | ❌ Not implemented | -| `AttachVolume` | ✅ Implemented | -| `AttachVpnGateway` | ❌ Not implemented | -| `AuthorizeClientVpnIngress` | ❌ Not implemented | -| `AuthorizeSecurityGroupEgress` | ✅ Implemented | -| `AuthorizeSecurityGroupIngress` | ✅ Implemented | -| `BundleInstance` | ❌ Not implemented | -| `CancelBundleTask` | ❌ Not implemented | -| `CancelCapacityReservation` | ✅ Implemented | -| `CancelCapacityReservationFleets` | ❌ Not implemented | -| `CancelConversionTask` | ❌ Not implemented | -| `CancelExportTask` | ❌ Not implemented | -| `CancelImageLaunchPermission` | ❌ Not implemented | -| `CancelImportTask` | ❌ Not implemented | -| `CancelReservedInstancesListing` | ❌ Not implemented | -| `CancelSpotFleetRequests` | ❌ Not implemented | -| `CancelSpotInstanceRequests` | ✅ Implemented | -| `ConfirmProductInstance` | ❌ Not implemented | -| `CopyFpgaImage` | ❌ Not implemented | -| `CopyImage` | ✅ Implemented | -| `CopySnapshot` | ✅ Implemented | -| `CreateCapacityReservation` | ✅ Implemented | -| `CreateCapacityReservationFleet` | ❌ Not implemented | -| `CreateCarrierGateway` | ❌ Not implemented | -| `CreateClientVpnEndpoint` | ❌ Not implemented | -| `CreateClientVpnRoute` | ❌ Not implemented | -| `CreateCoipCidr` | ❌ Not implemented | -| `CreateCoipPool` | ❌ Not implemented | -| `CreateCustomerGateway` | ❌ Not implemented | -| `CreateDefaultSubnet` | ❌ Not implemented | -| `CreateDefaultVpc` | ❌ Not implemented | -| `CreateDhcpOptions` | ❌ Not implemented | -| `CreateEgressOnlyInternetGateway` | ✅ Implemented | -| `CreateFleet` | ❌ Not implemented | -| `CreateFlowLogs` | ❌ Not implemented | -| `CreateFpgaImage` | ❌ Not implemented | -| `CreateImage` | ✅ Implemented | -| `CreateInstanceConnectEndpoint` | ❌ Not implemented | -| `CreateInstanceEventWindow` | ❌ Not implemented | -| `CreateInstanceExportTask` | ❌ Not implemented | -| `CreateInternetGateway` | ✅ Implemented | -| `CreateIpam` | ❌ Not implemented | -| `CreateIpamExternalResourceVerificationToken` | ❌ Not implemented | -| `CreateIpamPool` | ❌ Not implemented | -| `CreateIpamResourceDiscovery` | ❌ Not implemented | -| `CreateIpamScope` | ❌ Not implemented | -| `CreateKeyPair` | ✅ Implemented | -| `CreateLaunchTemplate` | ✅ Implemented | -| `CreateLaunchTemplateVersion` | ✅ Implemented | -| `CreateLocalGatewayRoute` | ❌ Not implemented | -| `CreateLocalGatewayRouteTable` | ❌ Not implemented | -| `CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation` | ❌ Not implemented | -| `CreateLocalGatewayRouteTableVpcAssociation` | ❌ Not implemented | -| `CreateManagedPrefixList` | ❌ Not implemented | -| `CreateNatGateway` | ✅ Implemented | -| `CreateNetworkAcl` | ❌ Not implemented | -| `CreateNetworkAclEntry` | ❌ Not implemented | -| `CreateNetworkInsightsAccessScope` | ❌ Not implemented | -| `CreateNetworkInsightsPath` | ❌ Not implemented | -| `CreateNetworkInterface` | ✅ Implemented | -| `CreateNetworkInterfacePermission` | ❌ Not implemented | -| `CreatePlacementGroup` | ✅ Implemented | -| `CreatePublicIpv4Pool` | ❌ Not implemented | -| `CreateReplaceRootVolumeTask` | ❌ Not implemented | -| `CreateReservedInstancesListing` | ❌ Not implemented | -| `CreateRestoreImageTask` | ❌ Not implemented | -| `CreateRoute` | ✅ Implemented | -| `CreateRouteTable` | ✅ Implemented | -| `CreateSecurityGroup` | ✅ Implemented | -| `CreateSnapshot` | ✅ Implemented | -| `CreateSnapshots` | ❌ Not implemented | -| `CreateSpotDatafeedSubscription` | ❌ Not implemented | -| `CreateStoreImageTask` | ❌ Not implemented | -| `CreateSubnet` | ✅ Implemented | -| `CreateSubnetCidrReservation` | ❌ Not implemented | -| `CreateTags` | ✅ Implemented | -| `CreateTrafficMirrorFilter` | ❌ Not implemented | -| `CreateTrafficMirrorFilterRule` | ❌ Not implemented | -| `CreateTrafficMirrorSession` | ❌ Not implemented | -| `CreateTrafficMirrorTarget` | ❌ Not implemented | -| `CreateTransitGateway` | ❌ Not implemented | -| `CreateTransitGatewayConnect` | ❌ Not implemented | -| `CreateTransitGatewayConnectPeer` | ❌ Not implemented | -| `CreateTransitGatewayMulticastDomain` | ❌ Not implemented | -| `CreateTransitGatewayPeeringAttachment` | ❌ Not implemented | -| `CreateTransitGatewayPolicyTable` | ❌ Not implemented | -| `CreateTransitGatewayPrefixListReference` | ❌ Not implemented | -| `CreateTransitGatewayRoute` | ❌ Not implemented | -| `CreateTransitGatewayRouteTable` | ❌ Not implemented | -| `CreateTransitGatewayRouteTableAnnouncement` | ❌ Not implemented | -| `CreateTransitGatewayVpcAttachment` | ❌ Not implemented | -| `CreateVerifiedAccessEndpoint` | ❌ Not implemented | -| `CreateVerifiedAccessGroup` | ❌ Not implemented | -| `CreateVerifiedAccessInstance` | ❌ Not implemented | -| `CreateVerifiedAccessTrustProvider` | ❌ Not implemented | -| `CreateVolume` | ✅ Implemented | -| `CreateVpc` | ✅ Implemented | -| `CreateVpcEndpoint` | ❌ Not implemented | -| `CreateVpcEndpointConnectionNotification` | ❌ Not implemented | -| `CreateVpcEndpointServiceConfiguration` | ❌ Not implemented | -| `CreateVpcPeeringConnection` | ❌ Not implemented | -| `CreateVpnConnection` | ❌ Not implemented | -| `CreateVpnConnectionRoute` | ❌ Not implemented | -| `CreateVpnGateway` | ❌ Not implemented | -| `DeleteCarrierGateway` | ❌ Not implemented | -| `DeleteClientVpnEndpoint` | ❌ Not implemented | -| `DeleteClientVpnRoute` | ❌ Not implemented | -| `DeleteCoipCidr` | ❌ Not implemented | -| `DeleteCoipPool` | ❌ Not implemented | -| `DeleteCustomerGateway` | ❌ Not implemented | -| `DeleteDhcpOptions` | ❌ Not implemented | -| `DeleteEgressOnlyInternetGateway` | ✅ Implemented | -| `DeleteFleets` | ❌ Not implemented | -| `DeleteFlowLogs` | ❌ Not implemented | -| `DeleteFpgaImage` | ❌ Not implemented | -| `DeleteInstanceConnectEndpoint` | ❌ Not implemented | -| `DeleteInstanceEventWindow` | ❌ Not implemented | -| `DeleteInternetGateway` | ✅ Implemented | -| `DeleteIpam` | ❌ Not implemented | -| `DeleteIpamExternalResourceVerificationToken` | ❌ Not implemented | -| `DeleteIpamPool` | ❌ Not implemented | -| `DeleteIpamResourceDiscovery` | ❌ Not implemented | -| `DeleteIpamScope` | ❌ Not implemented | -| `DeleteKeyPair` | ✅ Implemented | -| `DeleteLaunchTemplate` | ✅ Implemented | -| `DeleteLaunchTemplateVersions` | ✅ Implemented | -| `DeleteLocalGatewayRoute` | ❌ Not implemented | -| `DeleteLocalGatewayRouteTable` | ❌ Not implemented | -| `DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation` | ❌ Not implemented | -| `DeleteLocalGatewayRouteTableVpcAssociation` | ❌ Not implemented | -| `DeleteManagedPrefixList` | ❌ Not implemented | -| `DeleteNatGateway` | ✅ Implemented | -| `DeleteNetworkAcl` | ❌ Not implemented | -| `DeleteNetworkAclEntry` | ❌ Not implemented | -| `DeleteNetworkInsightsAccessScope` | ❌ Not implemented | -| `DeleteNetworkInsightsAccessScopeAnalysis` | ❌ Not implemented | -| `DeleteNetworkInsightsAnalysis` | ❌ Not implemented | -| `DeleteNetworkInsightsPath` | ❌ Not implemented | -| `DeleteNetworkInterface` | ✅ Implemented | -| `DeleteNetworkInterfacePermission` | ❌ Not implemented | -| `DeletePlacementGroup` | ✅ Implemented | -| `DeletePublicIpv4Pool` | ❌ Not implemented | -| `DeleteQueuedReservedInstances` | ❌ Not implemented | -| `DeleteRoute` | ✅ Implemented | -| `DeleteRouteTable` | ✅ Implemented | -| `DeleteSecurityGroup` | ✅ Implemented | -| `DeleteSnapshot` | ✅ Implemented | -| `DeleteSpotDatafeedSubscription` | ❌ Not implemented | -| `DeleteSubnet` | ✅ Implemented | -| `DeleteSubnetCidrReservation` | ❌ Not implemented | -| `DeleteTags` | ✅ Implemented | -| `DeleteTrafficMirrorFilter` | ❌ Not implemented | -| `DeleteTrafficMirrorFilterRule` | ❌ Not implemented | -| `DeleteTrafficMirrorSession` | ❌ Not implemented | -| `DeleteTrafficMirrorTarget` | ❌ Not implemented | -| `DeleteTransitGateway` | ❌ Not implemented | -| `DeleteTransitGatewayConnect` | ❌ Not implemented | -| `DeleteTransitGatewayConnectPeer` | ❌ Not implemented | -| `DeleteTransitGatewayMulticastDomain` | ❌ Not implemented | -| `DeleteTransitGatewayPeeringAttachment` | ❌ Not implemented | -| `DeleteTransitGatewayPolicyTable` | ❌ Not implemented | -| `DeleteTransitGatewayPrefixListReference` | ❌ Not implemented | -| `DeleteTransitGatewayRoute` | ❌ Not implemented | -| `DeleteTransitGatewayRouteTable` | ❌ Not implemented | -| `DeleteTransitGatewayRouteTableAnnouncement` | ❌ Not implemented | -| `DeleteTransitGatewayVpcAttachment` | ❌ Not implemented | -| `DeleteVerifiedAccessEndpoint` | ❌ Not implemented | -| `DeleteVerifiedAccessGroup` | ❌ Not implemented | -| `DeleteVerifiedAccessInstance` | ❌ Not implemented | -| `DeleteVerifiedAccessTrustProvider` | ❌ Not implemented | -| `DeleteVolume` | ✅ Implemented | -| `DeleteVpc` | ✅ Implemented | -| `DeleteVpcEndpointConnectionNotifications` | ❌ Not implemented | -| `DeleteVpcEndpointServiceConfigurations` | ❌ Not implemented | -| `DeleteVpcEndpoints` | ❌ Not implemented | -| `DeleteVpcPeeringConnection` | ❌ Not implemented | -| `DeleteVpnConnection` | ❌ Not implemented | -| `DeleteVpnConnectionRoute` | ❌ Not implemented | -| `DeleteVpnGateway` | ❌ Not implemented | -| `DeprovisionByoipCidr` | ❌ Not implemented | -| `DeprovisionIpamByoasn` | ❌ Not implemented | -| `DeprovisionIpamPoolCidr` | ❌ Not implemented | -| `DeprovisionPublicIpv4PoolCidr` | ❌ Not implemented | -| `DeregisterImage` | ✅ Implemented | -| `DeregisterInstanceEventNotificationAttributes` | ❌ Not implemented | -| `DeregisterTransitGatewayMulticastGroupMembers` | ❌ Not implemented | -| `DeregisterTransitGatewayMulticastGroupSources` | ❌ Not implemented | -| `DescribeAccountAttributes` | ✅ Implemented | -| `DescribeAddressTransfers` | ❌ Not implemented | -| `DescribeAddresses` | ✅ Implemented | -| `DescribeAddressesAttribute` | ✅ Implemented | -| `DescribeAggregateIdFormat` | ❌ Not implemented | -| `DescribeAvailabilityZones` | ✅ Implemented | -| `DescribeAwsNetworkPerformanceMetricSubscriptions` | ❌ Not implemented | -| `DescribeBundleTasks` | ❌ Not implemented | -| `DescribeByoipCidrs` | ❌ Not implemented | -| `DescribeCapacityBlockOfferings` | ❌ Not implemented | -| `DescribeCapacityReservationFleets` | ❌ Not implemented | -| `DescribeCapacityReservations` | ✅ Implemented | -| `DescribeCarrierGateways` | ❌ Not implemented | -| `DescribeClassicLinkInstances` | ❌ Not implemented | -| `DescribeClientVpnAuthorizationRules` | ❌ Not implemented | -| `DescribeClientVpnConnections` | ❌ Not implemented | -| `DescribeClientVpnEndpoints` | ❌ Not implemented | -| `DescribeClientVpnRoutes` | ❌ Not implemented | -| `DescribeClientVpnTargetNetworks` | ❌ Not implemented | -| `DescribeCoipPools` | ❌ Not implemented | -| `DescribeConversionTasks` | ❌ Not implemented | -| `DescribeCustomerGateways` | ❌ Not implemented | -| `DescribeDhcpOptions` | ❌ Not implemented | -| `DescribeEgressOnlyInternetGateways` | ✅ Implemented | -| `DescribeElasticGpus` | ❌ Not implemented | -| `DescribeExportImageTasks` | ❌ Not implemented | -| `DescribeExportTasks` | ❌ Not implemented | -| `DescribeFastLaunchImages` | ❌ Not implemented | -| `DescribeFastSnapshotRestores` | ❌ Not implemented | -| `DescribeFleetHistory` | ❌ Not implemented | -| `DescribeFleetInstances` | ❌ Not implemented | -| `DescribeFleets` | ❌ Not implemented | -| `DescribeFlowLogs` | ❌ Not implemented | -| `DescribeFpgaImageAttribute` | ❌ Not implemented | -| `DescribeFpgaImages` | ❌ Not implemented | -| `DescribeHostReservationOfferings` | ❌ Not implemented | -| `DescribeHostReservations` | ❌ Not implemented | -| `DescribeHosts` | ❌ Not implemented | -| `DescribeIamInstanceProfileAssociations` | ✅ Implemented | -| `DescribeIdFormat` | ❌ Not implemented | -| `DescribeIdentityIdFormat` | ❌ Not implemented | -| `DescribeImageAttribute` | ✅ Implemented | -| `DescribeImages` | ✅ Implemented | -| `DescribeImportImageTasks` | ❌ Not implemented | -| `DescribeImportSnapshotTasks` | ❌ Not implemented | -| `DescribeInstanceAttribute` | ✅ Implemented | -| `DescribeInstanceConnectEndpoints` | ❌ Not implemented | -| `DescribeInstanceCreditSpecifications` | ✅ Implemented | -| `DescribeInstanceEventNotificationAttributes` | ❌ Not implemented | -| `DescribeInstanceEventWindows` | ❌ Not implemented | -| `DescribeInstanceStatus` | ✅ Implemented | -| `DescribeInstanceTopology` | ❌ Not implemented | -| `DescribeInstanceTypeOfferings` | ✅ Implemented | -| `DescribeInstanceTypes` | ✅ Implemented | -| `DescribeInstances` | ✅ Implemented | -| `DescribeInternetGateways` | ✅ Implemented | -| `DescribeIpamByoasn` | ❌ Not implemented | -| `DescribeIpamExternalResourceVerificationTokens` | ❌ Not implemented | -| `DescribeIpamPools` | ❌ Not implemented | -| `DescribeIpamResourceDiscoveries` | ❌ Not implemented | -| `DescribeIpamResourceDiscoveryAssociations` | ❌ Not implemented | -| `DescribeIpamScopes` | ❌ Not implemented | -| `DescribeIpams` | ❌ Not implemented | -| `DescribeIpv6Pools` | ❌ Not implemented | -| `DescribeKeyPairs` | ✅ Implemented | -| `DescribeLaunchTemplateVersions` | ✅ Implemented | -| `DescribeLaunchTemplates` | ✅ Implemented | -| `DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations` | ❌ Not implemented | -| `DescribeLocalGatewayRouteTableVpcAssociations` | ❌ Not implemented | -| `DescribeLocalGatewayRouteTables` | ❌ Not implemented | -| `DescribeLocalGatewayVirtualInterfaceGroups` | ❌ Not implemented | -| `DescribeLocalGatewayVirtualInterfaces` | ❌ Not implemented | -| `DescribeLocalGateways` | ❌ Not implemented | -| `DescribeLockedSnapshots` | ❌ Not implemented | -| `DescribeMacHosts` | ❌ Not implemented | -| `DescribeManagedPrefixLists` | ❌ Not implemented | -| `DescribeMovingAddresses` | ❌ Not implemented | -| `DescribeNatGateways` | ✅ Implemented | -| `DescribeNetworkAcls` | ❌ Not implemented | -| `DescribeNetworkInsightsAccessScopeAnalyses` | ❌ Not implemented | -| `DescribeNetworkInsightsAccessScopes` | ❌ Not implemented | -| `DescribeNetworkInsightsAnalyses` | ❌ Not implemented | -| `DescribeNetworkInsightsPaths` | ❌ Not implemented | -| `DescribeNetworkInterfaceAttribute` | ❌ Not implemented | -| `DescribeNetworkInterfacePermissions` | ❌ Not implemented | -| `DescribeNetworkInterfaces` | ✅ Implemented | -| `DescribePlacementGroups` | ✅ Implemented | -| `DescribePrefixLists` | ❌ Not implemented | -| `DescribePrincipalIdFormat` | ❌ Not implemented | -| `DescribePublicIpv4Pools` | ❌ Not implemented | -| `DescribeRegions` | ✅ Implemented | -| `DescribeReplaceRootVolumeTasks` | ❌ Not implemented | -| `DescribeReservedInstances` | ❌ Not implemented | -| `DescribeReservedInstancesListings` | ❌ Not implemented | -| `DescribeReservedInstancesModifications` | ❌ Not implemented | -| `DescribeReservedInstancesOfferings` | ❌ Not implemented | -| `DescribeRouteTables` | ✅ Implemented | -| `DescribeScheduledInstanceAvailability` | ❌ Not implemented | -| `DescribeScheduledInstances` | ❌ Not implemented | -| `DescribeSecurityGroupReferences` | ❌ Not implemented | -| `DescribeSecurityGroupRules` | ✅ Implemented | -| `DescribeSecurityGroups` | ✅ Implemented | -| `DescribeSnapshotAttribute` | ❌ Not implemented | -| `DescribeSnapshotTierStatus` | ❌ Not implemented | -| `DescribeSnapshots` | ✅ Implemented | -| `DescribeSpotDatafeedSubscription` | ❌ Not implemented | -| `DescribeSpotFleetInstances` | ❌ Not implemented | -| `DescribeSpotFleetRequestHistory` | ❌ Not implemented | -| `DescribeSpotFleetRequests` | ❌ Not implemented | -| `DescribeSpotInstanceRequests` | ✅ Implemented | -| `DescribeSpotPriceHistory` | ⛔ Not applicable [1](#notes) | -| `DescribeStaleSecurityGroups` | ❌ Not implemented | -| `DescribeStoreImageTasks` | ❌ Not implemented | -| `DescribeSubnets` | ✅ Implemented | -| `DescribeTags` | ✅ Implemented | -| `DescribeTrafficMirrorFilterRules` | ❌ Not implemented | -| `DescribeTrafficMirrorFilters` | ❌ Not implemented | -| `DescribeTrafficMirrorSessions` | ❌ Not implemented | -| `DescribeTrafficMirrorTargets` | ❌ Not implemented | -| `DescribeTransitGatewayAttachments` | ❌ Not implemented | -| `DescribeTransitGatewayConnectPeers` | ❌ Not implemented | -| `DescribeTransitGatewayConnects` | ❌ Not implemented | -| `DescribeTransitGatewayMulticastDomains` | ❌ Not implemented | -| `DescribeTransitGatewayPeeringAttachments` | ❌ Not implemented | -| `DescribeTransitGatewayPolicyTables` | ❌ Not implemented | -| `DescribeTransitGatewayRouteTableAnnouncements` | ❌ Not implemented | -| `DescribeTransitGatewayRouteTables` | ❌ Not implemented | -| `DescribeTransitGatewayVpcAttachments` | ❌ Not implemented | -| `DescribeTransitGateways` | ❌ Not implemented | -| `DescribeTrunkInterfaceAssociations` | ❌ Not implemented | -| `DescribeVerifiedAccessEndpoints` | ❌ Not implemented | -| `DescribeVerifiedAccessGroups` | ❌ Not implemented | -| `DescribeVerifiedAccessInstanceLoggingConfigurations` | ❌ Not implemented | -| `DescribeVerifiedAccessInstances` | ❌ Not implemented | -| `DescribeVerifiedAccessTrustProviders` | ❌ Not implemented | -| `DescribeVolumeAttribute` | ❌ Not implemented | -| `DescribeVolumeStatus` | ✅ Implemented | -| `DescribeVolumes` | ✅ Implemented | -| `DescribeVolumesModifications` | ✅ Implemented | -| `DescribeVpcAttribute` | ✅ Implemented | -| `DescribeVpcClassicLink` | ❌ Not implemented | -| `DescribeVpcClassicLinkDnsSupport` | ❌ Not implemented | -| `DescribeVpcEndpointConnectionNotifications` | ❌ Not implemented | -| `DescribeVpcEndpointConnections` | ❌ Not implemented | -| `DescribeVpcEndpointServiceConfigurations` | ❌ Not implemented | -| `DescribeVpcEndpointServicePermissions` | ❌ Not implemented | -| `DescribeVpcEndpointServices` | ❌ Not implemented | -| `DescribeVpcEndpoints` | ❌ Not implemented | -| `DescribeVpcPeeringConnections` | ❌ Not implemented | -| `DescribeVpcs` | ✅ Implemented | -| `DescribeVpnConnections` | ❌ Not implemented | -| `DescribeVpnGateways` | ❌ Not implemented | -| `DetachClassicLinkVpc` | ❌ Not implemented | -| `DetachInternetGateway` | ✅ Implemented | -| `DetachNetworkInterface` | ✅ Implemented | -| `DetachVerifiedAccessTrustProvider` | ❌ Not implemented | -| `DetachVolume` | ✅ Implemented | -| `DetachVpnGateway` | ❌ Not implemented | -| `DisableAddressTransfer` | ❌ Not implemented | -| `DisableAwsNetworkPerformanceMetricSubscription` | ❌ Not implemented | -| `DisableEbsEncryptionByDefault` | ✅ Implemented | -| `DisableFastLaunch` | ❌ Not implemented | -| `DisableFastSnapshotRestores` | ❌ Not implemented | -| `DisableImage` | ❌ Not implemented | -| `DisableImageBlockPublicAccess` | ❌ Not implemented | -| `DisableImageDeprecation` | ❌ Not implemented | -| `DisableImageDeregistrationProtection` | ❌ Not implemented | -| `DisableIpamOrganizationAdminAccount` | ❌ Not implemented | -| `DisableSerialConsoleAccess` | ✅ Implemented | -| `DisableSnapshotBlockPublicAccess` | ❌ Not implemented | -| `DisableTransitGatewayRouteTablePropagation` | ❌ Not implemented | -| `DisableVgwRoutePropagation` | ❌ Not implemented | -| `DisableVpcClassicLink` | ❌ Not implemented | -| `DisableVpcClassicLinkDnsSupport` | ❌ Not implemented | -| `DisassociateAddress` | ✅ Implemented | -| `DisassociateClientVpnTargetNetwork` | ❌ Not implemented | -| `DisassociateEnclaveCertificateIamRole` | ❌ Not implemented | -| `DisassociateIamInstanceProfile` | ✅ Implemented | -| `DisassociateInstanceEventWindow` | ❌ Not implemented | -| `DisassociateIpamByoasn` | ❌ Not implemented | -| `DisassociateIpamResourceDiscovery` | ❌ Not implemented | -| `DisassociateNatGatewayAddress` | ❌ Not implemented | -| `DisassociateRouteTable` | ✅ Implemented | -| `DisassociateSubnetCidrBlock` | ❌ Not implemented | -| `DisassociateTransitGatewayMulticastDomain` | ❌ Not implemented | -| `DisassociateTransitGatewayPolicyTable` | ❌ Not implemented | -| `DisassociateTransitGatewayRouteTable` | ❌ Not implemented | -| `DisassociateTrunkInterface` | ❌ Not implemented | -| `DisassociateVpcCidrBlock` | ❌ Not implemented | -| `EnableAddressTransfer` | ❌ Not implemented | -| `EnableAwsNetworkPerformanceMetricSubscription` | ❌ Not implemented | -| `EnableEbsEncryptionByDefault` | ✅ Implemented | -| `EnableFastLaunch` | ❌ Not implemented | -| `EnableFastSnapshotRestores` | ❌ Not implemented | -| `EnableImage` | ❌ Not implemented | -| `EnableImageBlockPublicAccess` | ❌ Not implemented | -| `EnableImageDeprecation` | ❌ Not implemented | -| `EnableImageDeregistrationProtection` | ❌ Not implemented | -| `EnableIpamOrganizationAdminAccount` | ❌ Not implemented | -| `EnableReachabilityAnalyzerOrganizationSharing` | ❌ Not implemented | -| `EnableSerialConsoleAccess` | ✅ Implemented | -| `EnableSnapshotBlockPublicAccess` | ❌ Not implemented | -| `EnableTransitGatewayRouteTablePropagation` | ❌ Not implemented | -| `EnableVgwRoutePropagation` | ❌ Not implemented | -| `EnableVolumeIO` | ❌ Not implemented | -| `EnableVpcClassicLink` | ❌ Not implemented | -| `EnableVpcClassicLinkDnsSupport` | ❌ Not implemented | -| `ExportClientVpnClientCertificateRevocationList` | ❌ Not implemented | -| `ExportClientVpnClientConfiguration` | ❌ Not implemented | -| `ExportImage` | ❌ Not implemented | -| `ExportTransitGatewayRoutes` | ❌ Not implemented | -| `GetAssociatedEnclaveCertificateIamRoles` | ❌ Not implemented | -| `GetAssociatedIpv6PoolCidrs` | ❌ Not implemented | -| `GetAwsNetworkPerformanceData` | ❌ Not implemented | -| `GetCapacityReservationUsage` | ❌ Not implemented | -| `GetCoipPoolUsage` | ❌ Not implemented | -| `GetConsoleOutput` | ✅ Implemented | -| `GetConsoleScreenshot` | ❌ Not implemented | -| `GetDefaultCreditSpecification` | ❌ Not implemented | -| `GetEbsDefaultKmsKeyId` | ❌ Not implemented | -| `GetEbsEncryptionByDefault` | ✅ Implemented | -| `GetFlowLogsIntegrationTemplate` | ❌ Not implemented | -| `GetGroupsForCapacityReservation` | ❌ Not implemented | -| `GetHostReservationPurchasePreview` | ❌ Not implemented | -| `GetImageBlockPublicAccessState` | ❌ Not implemented | -| `GetInstanceMetadataDefaults` | ❌ Not implemented | -| `GetInstanceTpmEkPub` | ❌ Not implemented | -| `GetInstanceTypesFromInstanceRequirements` | ❌ Not implemented | -| `GetInstanceUefiData` | ❌ Not implemented | -| `GetIpamAddressHistory` | ❌ Not implemented | -| `GetIpamDiscoveredAccounts` | ❌ Not implemented | -| `GetIpamDiscoveredPublicAddresses` | ❌ Not implemented | -| `GetIpamDiscoveredResourceCidrs` | ❌ Not implemented | -| `GetIpamPoolAllocations` | ❌ Not implemented | -| `GetIpamPoolCidrs` | ❌ Not implemented | -| `GetIpamResourceCidrs` | ❌ Not implemented | -| `GetLaunchTemplateData` | ❌ Not implemented | -| `GetManagedPrefixListAssociations` | ❌ Not implemented | -| `GetManagedPrefixListEntries` | ❌ Not implemented | -| `GetNetworkInsightsAccessScopeAnalysisFindings` | ❌ Not implemented | -| `GetNetworkInsightsAccessScopeContent` | ❌ Not implemented | -| `GetPasswordData` | ✅ Implemented | -| `GetReservedInstancesExchangeQuote` | ❌ Not implemented | -| `GetSecurityGroupsForVpc` | ✅ Implemented | -| `GetSerialConsoleAccessStatus` | ✅ Implemented | -| `GetSnapshotBlockPublicAccessState` | ❌ Not implemented | -| `GetSpotPlacementScores` | ❌ Not implemented | -| `GetSubnetCidrReservations` | ❌ Not implemented | -| `GetTransitGatewayAttachmentPropagations` | ❌ Not implemented | -| `GetTransitGatewayMulticastDomainAssociations` | ❌ Not implemented | -| `GetTransitGatewayPolicyTableAssociations` | ❌ Not implemented | -| `GetTransitGatewayPolicyTableEntries` | ❌ Not implemented | -| `GetTransitGatewayPrefixListReferences` | ❌ Not implemented | -| `GetTransitGatewayRouteTableAssociations` | ❌ Not implemented | -| `GetTransitGatewayRouteTablePropagations` | ❌ Not implemented | -| `GetVerifiedAccessEndpointPolicy` | ❌ Not implemented | -| `GetVerifiedAccessGroupPolicy` | ❌ Not implemented | -| `GetVpnConnectionDeviceSampleConfiguration` | ❌ Not implemented | -| `GetVpnConnectionDeviceTypes` | ❌ Not implemented | -| `GetVpnTunnelReplacementStatus` | ❌ Not implemented | -| `ImportClientVpnClientCertificateRevocationList` | ❌ Not implemented | -| `ImportImage` | ❌ Not implemented | -| `ImportInstance` | ❌ Not implemented | -| `ImportKeyPair` | ✅ Implemented | -| `ImportSnapshot` | ❌ Not implemented | -| `ImportVolume` | ❌ Not implemented | -| `ListImagesInRecycleBin` | ❌ Not implemented | -| `ListSnapshotsInRecycleBin` | ❌ Not implemented | -| `LockSnapshot` | ❌ Not implemented | -| `ModifyAddressAttribute` | ❌ Not implemented | -| `ModifyAvailabilityZoneGroup` | ❌ Not implemented | -| `ModifyCapacityReservation` | ❌ Not implemented | -| `ModifyCapacityReservationFleet` | ❌ Not implemented | -| `ModifyClientVpnEndpoint` | ❌ Not implemented | -| `ModifyDefaultCreditSpecification` | ❌ Not implemented | -| `ModifyEbsDefaultKmsKeyId` | ❌ Not implemented | -| `ModifyFleet` | ❌ Not implemented | -| `ModifyFpgaImageAttribute` | ❌ Not implemented | -| `ModifyHosts` | ❌ Not implemented | -| `ModifyIdFormat` | ❌ Not implemented | -| `ModifyIdentityIdFormat` | ❌ Not implemented | -| `ModifyImageAttribute` | ✅ Implemented | -| `ModifyInstanceAttribute` | ✅ Implemented | -| `ModifyInstanceCapacityReservationAttributes` | ❌ Not implemented | -| `ModifyInstanceCreditSpecification` | ❌ Not implemented | -| `ModifyInstanceEventStartTime` | ❌ Not implemented | -| `ModifyInstanceEventWindow` | ❌ Not implemented | -| `ModifyInstanceMaintenanceOptions` | ❌ Not implemented | -| `ModifyInstanceMetadataDefaults` | ❌ Not implemented | -| `ModifyInstanceMetadataOptions` | ✅ Implemented | -| `ModifyInstancePlacement` | ❌ Not implemented | -| `ModifyIpam` | ❌ Not implemented | -| `ModifyIpamPool` | ❌ Not implemented | -| `ModifyIpamResourceCidr` | ❌ Not implemented | -| `ModifyIpamResourceDiscovery` | ❌ Not implemented | -| `ModifyIpamScope` | ❌ Not implemented | -| `ModifyLaunchTemplate` | ✅ Implemented | -| `ModifyLocalGatewayRoute` | ❌ Not implemented | -| `ModifyManagedPrefixList` | ❌ Not implemented | -| `ModifyNetworkInterfaceAttribute` | ✅ Implemented | -| `ModifyPrivateDnsNameOptions` | ❌ Not implemented | -| `ModifyReservedInstances` | ❌ Not implemented | -| `ModifySecurityGroupRules` | ❌ Not implemented | -| `ModifySnapshotAttribute` | ❌ Not implemented | -| `ModifySnapshotTier` | ❌ Not implemented | -| `ModifySpotFleetRequest` | ❌ Not implemented | -| `ModifySubnetAttribute` | ✅ Implemented | -| `ModifyTrafficMirrorFilterNetworkServices` | ❌ Not implemented | -| `ModifyTrafficMirrorFilterRule` | ❌ Not implemented | -| `ModifyTrafficMirrorSession` | ❌ Not implemented | -| `ModifyTransitGateway` | ❌ Not implemented | -| `ModifyTransitGatewayPrefixListReference` | ❌ Not implemented | -| `ModifyTransitGatewayVpcAttachment` | ❌ Not implemented | -| `ModifyVerifiedAccessEndpoint` | ❌ Not implemented | -| `ModifyVerifiedAccessEndpointPolicy` | ❌ Not implemented | -| `ModifyVerifiedAccessGroup` | ❌ Not implemented | -| `ModifyVerifiedAccessGroupPolicy` | ❌ Not implemented | -| `ModifyVerifiedAccessInstance` | ❌ Not implemented | -| `ModifyVerifiedAccessInstanceLoggingConfiguration` | ❌ Not implemented | -| `ModifyVerifiedAccessTrustProvider` | ❌ Not implemented | -| `ModifyVolume` | ✅ Implemented | -| `ModifyVolumeAttribute` | ❌ Not implemented | -| `ModifyVpcAttribute` | ✅ Implemented | -| `ModifyVpcEndpoint` | ❌ Not implemented | -| `ModifyVpcEndpointConnectionNotification` | ❌ Not implemented | -| `ModifyVpcEndpointServiceConfiguration` | ❌ Not implemented | -| `ModifyVpcEndpointServicePayerResponsibility` | ❌ Not implemented | -| `ModifyVpcEndpointServicePermissions` | ❌ Not implemented | -| `ModifyVpcPeeringConnectionOptions` | ❌ Not implemented | -| `ModifyVpcTenancy` | ❌ Not implemented | -| `ModifyVpnConnection` | ❌ Not implemented | -| `ModifyVpnConnectionOptions` | ❌ Not implemented | -| `ModifyVpnTunnelCertificate` | ❌ Not implemented | -| `ModifyVpnTunnelOptions` | ❌ Not implemented | -| `MonitorInstances` | ✅ Implemented | -| `MoveAddressToVpc` | ❌ Not implemented | -| `MoveByoipCidrToIpam` | ❌ Not implemented | -| `ProvisionByoipCidr` | ❌ Not implemented | -| `ProvisionIpamByoasn` | ❌ Not implemented | -| `ProvisionIpamPoolCidr` | ❌ Not implemented | -| `ProvisionPublicIpv4PoolCidr` | ❌ Not implemented | -| `PurchaseCapacityBlock` | ❌ Not implemented | -| `PurchaseHostReservation` | ❌ Not implemented | -| `PurchaseReservedInstancesOffering` | ❌ Not implemented | -| `PurchaseScheduledInstances` | ❌ Not implemented | -| `RebootInstances` | ✅ Implemented | -| `RegisterImage` | ✅ Implemented | -| `RegisterInstanceEventNotificationAttributes` | ❌ Not implemented | -| `RegisterTransitGatewayMulticastGroupMembers` | ❌ Not implemented | -| `RegisterTransitGatewayMulticastGroupSources` | ❌ Not implemented | -| `RejectTransitGatewayMulticastDomainAssociations` | ❌ Not implemented | -| `RejectTransitGatewayPeeringAttachment` | ❌ Not implemented | -| `RejectTransitGatewayVpcAttachment` | ❌ Not implemented | -| `RejectVpcEndpointConnections` | ❌ Not implemented | -| `RejectVpcPeeringConnection` | ❌ Not implemented | -| `ReleaseAddress` | ✅ Implemented | -| `ReleaseHosts` | ❌ Not implemented | -| `ReleaseIpamPoolAllocation` | ❌ Not implemented | -| `ReplaceIamInstanceProfileAssociation` | ✅ Implemented | -| `ReplaceNetworkAclAssociation` | ❌ Not implemented | -| `ReplaceNetworkAclEntry` | ❌ Not implemented | -| `ReplaceRoute` | ✅ Implemented | -| `ReplaceRouteTableAssociation` | ✅ Implemented | -| `ReplaceTransitGatewayRoute` | ❌ Not implemented | -| `ReplaceVpnTunnel` | ❌ Not implemented | -| `ReportInstanceStatus` | ❌ Not implemented | -| `RequestSpotFleet` | ❌ Not implemented | -| `RequestSpotInstances` | ✅ Implemented | -| `ResetAddressAttribute` | ❌ Not implemented | -| `ResetEbsDefaultKmsKeyId` | ❌ Not implemented | -| `ResetFpgaImageAttribute` | ❌ Not implemented | -| `ResetImageAttribute` | ✅ Implemented | -| `ResetInstanceAttribute` | ❌ Not implemented | -| `ResetNetworkInterfaceAttribute` | ❌ Not implemented | -| `ResetSnapshotAttribute` | ❌ Not implemented | -| `RestoreAddressToClassic` | ❌ Not implemented | -| `RestoreImageFromRecycleBin` | ❌ Not implemented | -| `RestoreManagedPrefixListVersion` | ❌ Not implemented | -| `RestoreSnapshotFromRecycleBin` | ❌ Not implemented | -| `RestoreSnapshotTier` | ❌ Not implemented | -| `RevokeClientVpnIngress` | ❌ Not implemented | -| `RevokeSecurityGroupEgress` | ✅ Implemented | -| `RevokeSecurityGroupIngress` | ✅ Implemented | -| `RunInstances` | ✅ Implemented | -| `RunScheduledInstances` | ❌ Not implemented | -| `SearchLocalGatewayRoutes` | ❌ Not implemented | -| `SearchTransitGatewayMulticastGroups` | ❌ Not implemented | -| `SearchTransitGatewayRoutes` | ❌ Not implemented | -| `SendDiagnosticInterrupt` | ❌ Not implemented | -| `StartInstances` | ✅ Implemented | -| `StartNetworkInsightsAccessScopeAnalysis` | ❌ Not implemented | -| `StartNetworkInsightsAnalysis` | ❌ Not implemented | -| `StartVpcEndpointServicePrivateDnsVerification` | ❌ Not implemented | -| `StopInstances` | ✅ Implemented | -| `TerminateClientVpnConnections` | ❌ Not implemented | -| `TerminateInstances` | ✅ Implemented | -| `UnassignIpv6Addresses` | ❌ Not implemented | -| `UnassignPrivateIpAddresses` | ❌ Not implemented | -| `UnassignPrivateNatGatewayAddress` | ❌ Not implemented | -| `UnlockSnapshot` | ❌ Not implemented | -| `UnmonitorInstances` | ✅ Implemented | -| `UpdateSecurityGroupRuleDescriptionsEgress` | ✅ Implemented | -| `UpdateSecurityGroupRuleDescriptionsIngress` | ✅ Implemented | -| `WithdrawByoipCidr` | ❌ Not implemented | - -### Notes - -1. On owned hardware there is no spot-to-on-demand price differential, so any figure would be invented. +| `DescribeSpotPriceHistory` | On owned hardware there is no spot-to-on-demand price differential, so any figure would be invented. | diff --git a/docs/coverage/ecr/README.md b/docs/coverage/ecr/README.md index bbcde45f3..d9b4b3323 100644 --- a/docs/coverage/ecr/README.md +++ b/docs/coverage/ecr/README.md @@ -1,7 +1,7 @@ --- title: "ECR API Coverage" seoTitle: "Elastic Container Registry API Coverage — Spinifex Docs" -description: "Every operation in the Amazon ECR API model and whether Spinifex implements it, alongside the OCI distribution endpoint that carries the image layers." +description: "The Amazon ECR API operations Spinifex implements, alongside the OCI distribution endpoint that carries the image layers, and those the platform will not." category: "Coverage" sections: - overview @@ -18,15 +18,15 @@ tags: ## Overview -Spinifex implements **19 of the 47** operations (**40.4%**) in the ECR `2015-09-21` API model. +Spinifex implements **19 operations** in the ECR `2015-09-21` API model. ### Two endpoints, one registry Repository metadata is served over the AWS API on the gateway endpoint. Image data moves over the OCI Distribution `/v2/` endpoint on that same host, authenticated by the bearer token `GetAuthorizationToken` mints for `docker login`. -The split explains the largest group of unimplemented operations below. The layer-transfer operations — `BatchCheckLayerAvailability`, `InitiateLayerUpload`, `UploadLayerPart`, `CompleteLayerUpload` and `GetDownloadUrlForLayer` — are registered stubs because the `/v2/` endpoint carries that traffic instead. A client using `docker` or any OCI-compatible tool never calls them. +The split explains the stubs below. The layer-transfer operations — `BatchCheckLayerAvailability`, `InitiateLayerUpload`, `UploadLayerPart`, `CompleteLayerUpload` and `GetDownloadUrlForLayer` — are registered stubs because the `/v2/` endpoint carries that traffic instead. A client using `docker` or any OCI-compatible tool never calls them. -Registry replication is absent as well: a deployment is a single registry, with no cross-region peer to replicate to. +Registry replication is a stub for the same kind of reason: a deployment is a single registry, with no cross-region peer to replicate to. ### Operations @@ -35,54 +35,46 @@ Registry replication is absent as well: a deployment is a single registry, with | `BatchCheckLayerAvailability` | 🟡 Stub | | `BatchDeleteImage` | ✅ Implemented | | `BatchGetImage` | ✅ Implemented | -| `BatchGetRepositoryScanningConfiguration` | ⛔ Not applicable [1](#notes) | | `CompleteLayerUpload` | 🟡 Stub | -| `CreatePullThroughCacheRule` | ❌ Not implemented | | `CreateRepository` | ✅ Implemented | -| `CreateRepositoryCreationTemplate` | ❌ Not implemented | | `DeleteLifecyclePolicy` | ✅ Implemented | -| `DeletePullThroughCacheRule` | ❌ Not implemented | -| `DeleteRegistryPolicy` | ❌ Not implemented | | `DeleteRepository` | ✅ Implemented | -| `DeleteRepositoryCreationTemplate` | ❌ Not implemented | | `DeleteRepositoryPolicy` | ✅ Implemented | -| `DescribeImageReplicationStatus` | ❌ Not implemented | -| `DescribeImageScanFindings` | ⛔ Not applicable [1](#notes) | | `DescribeImages` | ✅ Implemented | -| `DescribePullThroughCacheRules` | ❌ Not implemented | | `DescribeRegistry` | 🟡 Stub | | `DescribeRepositories` | ✅ Implemented | -| `DescribeRepositoryCreationTemplates` | ❌ Not implemented | | `GetAuthorizationToken` | ✅ Implemented | | `GetDownloadUrlForLayer` | 🟡 Stub | | `GetLifecyclePolicy` | ✅ Implemented | | `GetLifecyclePolicyPreview` | ✅ Implemented | | `GetRegistryPolicy` | 🟡 Stub | -| `GetRegistryScanningConfiguration` | ⛔ Not applicable [1](#notes) | | `GetRepositoryPolicy` | ✅ Implemented | | `InitiateLayerUpload` | 🟡 Stub | | `ListImages` | ✅ Implemented | | `ListTagsForResource` | ✅ Implemented | | `PutImage` | ✅ Implemented | -| `PutImageScanningConfiguration` | ⛔ Not applicable [1](#notes) | | `PutImageTagMutability` | ✅ Implemented | | `PutLifecyclePolicy` | ✅ Implemented | | `PutRegistryPolicy` | 🟡 Stub | -| `PutRegistryScanningConfiguration` | ⛔ Not applicable [1](#notes) | | `PutReplicationConfiguration` | 🟡 Stub | | `SetRepositoryPolicy` | ✅ Implemented | -| `StartImageScan` | ⛔ Not applicable [1](#notes) | | `StartLifecyclePolicyPreview` | ✅ Implemented | | `TagResource` | 🟡 Stub | | `UntagResource` | 🟡 Stub | -| `UpdatePullThroughCacheRule` | ❌ Not implemented | -| `UpdateRepositoryCreationTemplate` | ❌ Not implemented | | `UploadLayerPart` | 🟡 Stub | -| `ValidatePullThroughCacheRule` | ❌ Not implemented | | `GetImageScanningConfiguration` | 🔒 Outside the pinned model | | `ListRepositories` | 🔒 Outside the pinned model | | `ReplicateImage` | 🔒 Outside the pinned model | -### Notes +### Not applicable -1. Image scanning is an AWS-hosted vulnerability service with no equivalent here, so a finding set would always be empty. +These operations describe AWS-hosted features this platform does not offer. + +| Operation | Reason | +|---|---| +| `BatchGetRepositoryScanningConfiguration` | Image scanning is an AWS-hosted vulnerability service with no equivalent here, so a finding set would always be empty. | +| `DescribeImageScanFindings` | Image scanning is an AWS-hosted vulnerability service with no equivalent here, so a finding set would always be empty. | +| `GetRegistryScanningConfiguration` | Image scanning is an AWS-hosted vulnerability service with no equivalent here, so a finding set would always be empty. | +| `PutImageScanningConfiguration` | Image scanning is an AWS-hosted vulnerability service with no equivalent here, so a finding set would always be empty. | +| `PutRegistryScanningConfiguration` | Image scanning is an AWS-hosted vulnerability service with no equivalent here, so a finding set would always be empty. | +| `StartImageScan` | Image scanning is an AWS-hosted vulnerability service with no equivalent here, so a finding set would always be empty. | diff --git a/docs/coverage/ecr/intro.md b/docs/coverage/ecr/intro.md index d8c849e47..420d0453e 100644 --- a/docs/coverage/ecr/intro.md +++ b/docs/coverage/ecr/intro.md @@ -2,6 +2,6 @@ Repository metadata is served over the AWS API on the gateway endpoint. Image data moves over the OCI Distribution `/v2/` endpoint on that same host, authenticated by the bearer token `GetAuthorizationToken` mints for `docker login`. -The split explains the largest group of unimplemented operations below. The layer-transfer operations — `BatchCheckLayerAvailability`, `InitiateLayerUpload`, `UploadLayerPart`, `CompleteLayerUpload` and `GetDownloadUrlForLayer` — are registered stubs because the `/v2/` endpoint carries that traffic instead. A client using `docker` or any OCI-compatible tool never calls them. +The split explains the stubs below. The layer-transfer operations — `BatchCheckLayerAvailability`, `InitiateLayerUpload`, `UploadLayerPart`, `CompleteLayerUpload` and `GetDownloadUrlForLayer` — are registered stubs because the `/v2/` endpoint carries that traffic instead. A client using `docker` or any OCI-compatible tool never calls them. -Registry replication is absent as well: a deployment is a single registry, with no cross-region peer to replicate to. +Registry replication is a stub for the same kind of reason: a deployment is a single registry, with no cross-region peer to replicate to. diff --git a/docs/coverage/ecs/README.md b/docs/coverage/ecs/README.md index 41413acf8..fe7399dc6 100644 --- a/docs/coverage/ecs/README.md +++ b/docs/coverage/ecs/README.md @@ -1,7 +1,7 @@ --- title: "ECS API Coverage" seoTitle: "Elastic Container Service API Coverage — Spinifex Docs" -description: "Every operation in the Amazon ECS API model and whether Spinifex implements it, covering clusters, services, tasks and container instances on each build." +description: "The Amazon ECS API operations Spinifex implements, covering clusters, services, tasks and container instances, with those the platform does not offer." category: "Coverage" sections: - overview @@ -18,7 +18,7 @@ tags: ## Overview -Spinifex implements **31 of the 56** operations (**55.4%**) in the ECS `2014-11-13` API model. +Spinifex implements **31 operations** in the ECS `2014-11-13` API model. ### No Fargate @@ -31,14 +31,9 @@ Clusters, services and tasks run on EC2 container instances. There is no Fargate | `CreateCapacityProvider` | ✅ Implemented | | `CreateCluster` | ✅ Implemented | | `CreateService` | ✅ Implemented | -| `CreateTaskSet` | ❌ Not implemented | -| `DeleteAccountSetting` | ❌ Not implemented | -| `DeleteAttributes` | ❌ Not implemented | | `DeleteCapacityProvider` | ✅ Implemented | | `DeleteCluster` | ✅ Implemented | | `DeleteService` | ✅ Implemented | -| `DeleteTaskDefinitions` | ❌ Not implemented | -| `DeleteTaskSet` | ❌ Not implemented | | `DeregisterContainerInstance` | ✅ Implemented | | `DeregisterTaskDefinition` | ✅ Implemented | | `DescribeCapacityProviders` | ✅ Implemented | @@ -46,13 +41,8 @@ Clusters, services and tasks run on EC2 container instances. There is no Fargate | `DescribeContainerInstances` | ✅ Implemented | | `DescribeServices` | ✅ Implemented | | `DescribeTaskDefinition` | ✅ Implemented | -| `DescribeTaskSets` | ❌ Not implemented | | `DescribeTasks` | ✅ Implemented | -| `DiscoverPollEndpoint` | ❌ Not implemented | -| `ExecuteCommand` | ❌ Not implemented | -| `GetTaskProtection` | ❌ Not implemented | | `ListAccountSettings` | 🟡 Stub | -| `ListAttributes` | ❌ Not implemented | | `ListClusters` | ✅ Implemented | | `ListContainerInstances` | ✅ Implemented | | `ListServices` | ✅ Implemented | @@ -62,25 +52,15 @@ Clusters, services and tasks run on EC2 container instances. There is no Fargate | `ListTaskDefinitions` | ✅ Implemented | | `ListTasks` | ✅ Implemented | | `PutAccountSetting` | 🟡 Stub | -| `PutAccountSettingDefault` | ❌ Not implemented | -| `PutAttributes` | ❌ Not implemented | | `PutClusterCapacityProviders` | ✅ Implemented | | `RegisterContainerInstance` | ✅ Implemented | | `RegisterTaskDefinition` | ✅ Implemented | | `RunTask` | ✅ Implemented | | `StartTask` | ✅ Implemented | | `StopTask` | ✅ Implemented | -| `SubmitAttachmentStateChanges` | ❌ Not implemented | -| `SubmitContainerStateChange` | ❌ Not implemented | | `SubmitTaskStateChange` | ✅ Implemented | | `TagResource` | ✅ Implemented | | `UntagResource` | ✅ Implemented | -| `UpdateCapacityProvider` | ❌ Not implemented | | `UpdateCluster` | 🟡 Stub | -| `UpdateClusterSettings` | ❌ Not implemented | -| `UpdateContainerAgent` | ❌ Not implemented | | `UpdateContainerInstancesState` | ✅ Implemented | | `UpdateService` | ✅ Implemented | -| `UpdateServicePrimaryTaskSet` | ❌ Not implemented | -| `UpdateTaskProtection` | ❌ Not implemented | -| `UpdateTaskSet` | ❌ Not implemented | diff --git a/docs/coverage/eks/README.md b/docs/coverage/eks/README.md index 0a3201ca6..cc1297302 100644 --- a/docs/coverage/eks/README.md +++ b/docs/coverage/eks/README.md @@ -1,7 +1,7 @@ --- title: "EKS API Coverage" seoTitle: "Elastic Kubernetes Service API Coverage — Spinifex Docs" -description: "Every operation in the Amazon EKS API model and whether Spinifex implements it, covering clusters, nodegroups, add-ons and access entries on each build." +description: "The Amazon EKS API operations Spinifex implements, covering clusters, nodegroups, add-ons and access entries, with those the platform does not offer and why." category: "Coverage" sections: - overview @@ -18,65 +18,43 @@ tags: ## Overview -Spinifex implements **34 of the 56** operations (**60.7%**) in the EKS `2017-11-01` API model. +Spinifex implements **34 operations** in the EKS `2017-11-01` API model. ### Operations -| Operation | Status | -|---|---| -| `AssociateAccessPolicy` | ✅ Implemented | -| `AssociateEncryptionConfig` | ❌ Not implemented | -| `AssociateIdentityProviderConfig` | ✅ Implemented | -| `CreateAccessEntry` | ✅ Implemented | -| `CreateAddon` | ✅ Implemented | -| `CreateCluster` | ✅ Implemented | -| `CreateEksAnywhereSubscription` | ❌ Not implemented | -| `CreateFargateProfile` | ❌ Not implemented | -| `CreateNodegroup` | ✅ Implemented | -| `CreatePodIdentityAssociation` | ❌ Not implemented | -| `DeleteAccessEntry` | ✅ Implemented | -| `DeleteAddon` | ✅ Implemented | -| `DeleteCluster` | ✅ Implemented | -| `DeleteEksAnywhereSubscription` | ❌ Not implemented | -| `DeleteFargateProfile` | ❌ Not implemented | -| `DeleteNodegroup` | ✅ Implemented | -| `DeletePodIdentityAssociation` | ❌ Not implemented | -| `DeregisterCluster` | ❌ Not implemented | -| `DescribeAccessEntry` | ✅ Implemented | -| `DescribeAddon` | ✅ Implemented | -| `DescribeAddonConfiguration` | ❌ Not implemented | -| `DescribeAddonVersions` | ✅ Implemented | -| `DescribeCluster` | ✅ Implemented | -| `DescribeEksAnywhereSubscription` | ❌ Not implemented | -| `DescribeFargateProfile` | ❌ Not implemented | -| `DescribeIdentityProviderConfig` | ✅ Implemented | -| `DescribeInsight` | ❌ Not implemented | -| `DescribeNodegroup` | ✅ Implemented | -| `DescribePodIdentityAssociation` | ❌ Not implemented | -| `DescribeUpdate` | ❌ Not implemented | -| `DisassociateAccessPolicy` | ✅ Implemented | -| `DisassociateIdentityProviderConfig` | ✅ Implemented | -| `ListAccessEntries` | ✅ Implemented | -| `ListAccessPolicies` | ✅ Implemented | -| `ListAddons` | ✅ Implemented | -| `ListAssociatedAccessPolicies` | ✅ Implemented | -| `ListClusters` | ✅ Implemented | -| `ListEksAnywhereSubscriptions` | ❌ Not implemented | -| `ListFargateProfiles` | ❌ Not implemented | -| `ListIdentityProviderConfigs` | ✅ Implemented | -| `ListInsights` | ❌ Not implemented | -| `ListNodegroups` | ✅ Implemented | -| `ListPodIdentityAssociations` | ❌ Not implemented | -| `ListTagsForResource` | ✅ Implemented | -| `ListUpdates` | ❌ Not implemented | -| `RegisterCluster` | ❌ Not implemented | -| `TagResource` | ✅ Implemented | -| `UntagResource` | ✅ Implemented | -| `UpdateAccessEntry` | ✅ Implemented | -| `UpdateAddon` | ✅ Implemented | -| `UpdateClusterConfig` | ✅ Implemented | -| `UpdateClusterVersion` | ✅ Implemented | -| `UpdateEksAnywhereSubscription` | ❌ Not implemented | -| `UpdateNodegroupConfig` | ✅ Implemented | -| `UpdateNodegroupVersion` | ✅ Implemented | -| `UpdatePodIdentityAssociation` | ❌ Not implemented | +| Operation | +|---| +| `AssociateAccessPolicy` | +| `AssociateIdentityProviderConfig` | +| `CreateAccessEntry` | +| `CreateAddon` | +| `CreateCluster` | +| `CreateNodegroup` | +| `DeleteAccessEntry` | +| `DeleteAddon` | +| `DeleteCluster` | +| `DeleteNodegroup` | +| `DescribeAccessEntry` | +| `DescribeAddon` | +| `DescribeAddonVersions` | +| `DescribeCluster` | +| `DescribeIdentityProviderConfig` | +| `DescribeNodegroup` | +| `DisassociateAccessPolicy` | +| `DisassociateIdentityProviderConfig` | +| `ListAccessEntries` | +| `ListAccessPolicies` | +| `ListAddons` | +| `ListAssociatedAccessPolicies` | +| `ListClusters` | +| `ListIdentityProviderConfigs` | +| `ListNodegroups` | +| `ListTagsForResource` | +| `TagResource` | +| `UntagResource` | +| `UpdateAccessEntry` | +| `UpdateAddon` | +| `UpdateClusterConfig` | +| `UpdateClusterVersion` | +| `UpdateNodegroupConfig` | +| `UpdateNodegroupVersion` | diff --git a/docs/coverage/elbv2/README.md b/docs/coverage/elbv2/README.md index 762a47ea1..912b120d7 100644 --- a/docs/coverage/elbv2/README.md +++ b/docs/coverage/elbv2/README.md @@ -1,7 +1,7 @@ --- title: "ELBv2 API Coverage" seoTitle: "Elastic Load Balancing v2 API Coverage — Spinifex Docs" -description: "Every operation in the Elastic Load Balancing v2 API model and whether Spinifex implements it, for both the Application and Network Load Balancers it serves." +description: "The Elastic Load Balancing v2 API operations Spinifex implements, for both the Application and Network Load Balancers it serves, with those it does not." category: "Coverage" sections: - overview @@ -18,7 +18,7 @@ tags: ## Overview -Spinifex implements **34 of the 46** operations (**73.9%**) in the ELBv2 `2015-12-01` API model. +Spinifex implements **34 operations** in the ELBv2 `2015-12-01` API model. ### Two data planes @@ -30,18 +30,14 @@ The data plane is a system-managed load balancer VM, launched automatically duri |---|---| | `AddListenerCertificates` | ✅ Implemented | | `AddTags` | ✅ Implemented | -| `AddTrustStoreRevocations` | ❌ Not implemented | | `CreateListener` | ✅ Implemented | | `CreateLoadBalancer` | ✅ Implemented | | `CreateRule` | ✅ Implemented | | `CreateTargetGroup` | ✅ Implemented | -| `CreateTrustStore` | ❌ Not implemented | | `DeleteListener` | ✅ Implemented | | `DeleteLoadBalancer` | ✅ Implemented | | `DeleteRule` | ✅ Implemented | -| `DeleteSharedTrustStoreAssociation` | ❌ Not implemented | | `DeleteTargetGroup` | ✅ Implemented | -| `DeleteTrustStore` | ❌ Not implemented | | `DeregisterTargets` | ✅ Implemented | | `DescribeAccountLimits` | ✅ Implemented | | `DescribeListenerCertificates` | ✅ Implemented | @@ -54,22 +50,14 @@ The data plane is a system-managed load balancer VM, launched automatically duri | `DescribeTargetGroupAttributes` | ✅ Implemented | | `DescribeTargetGroups` | ✅ Implemented | | `DescribeTargetHealth` | ✅ Implemented | -| `DescribeTrustStoreAssociations` | ❌ Not implemented | -| `DescribeTrustStoreRevocations` | ❌ Not implemented | -| `DescribeTrustStores` | ❌ Not implemented | -| `GetResourcePolicy` | ❌ Not implemented | -| `GetTrustStoreCaCertificatesBundle` | ❌ Not implemented | -| `GetTrustStoreRevocationContent` | ❌ Not implemented | | `ModifyListener` | ✅ Implemented | | `ModifyLoadBalancerAttributes` | ✅ Implemented | | `ModifyRule` | ✅ Implemented | | `ModifyTargetGroup` | ✅ Implemented | | `ModifyTargetGroupAttributes` | ✅ Implemented | -| `ModifyTrustStore` | ❌ Not implemented | | `RegisterTargets` | ✅ Implemented | | `RemoveListenerCertificates` | ✅ Implemented | | `RemoveTags` | ✅ Implemented | -| `RemoveTrustStoreRevocations` | ❌ Not implemented | | `SetIpAddressType` | ✅ Implemented | | `SetRulePriorities` | ✅ Implemented | | `SetSecurityGroups` | ✅ Implemented | diff --git a/docs/coverage/iam/README.md b/docs/coverage/iam/README.md index c72e9ad4b..3ced88a9c 100644 --- a/docs/coverage/iam/README.md +++ b/docs/coverage/iam/README.md @@ -1,7 +1,7 @@ --- title: "IAM API Coverage" seoTitle: "AWS IAM API Operation Coverage on Spinifex — Spinifex Docs" -description: "Every operation in the AWS IAM API model and whether Spinifex implements it, covering users, roles, policies, groups and instance profiles on each build." +description: "The AWS IAM API operations Spinifex implements, covering users, roles, policies, groups and instance profiles, with those the platform does not offer." category: "Coverage" sections: - overview @@ -18,7 +18,7 @@ tags: ## Overview -Spinifex implements **75 of the 159** operations (**47.2%**) in the IAM `2010-05-08` API model. +Spinifex implements **75 operations** in the IAM `2010-05-08` API model. ### Scope @@ -26,171 +26,106 @@ All IAM operations are account-scoped. The root user of an account bypasses poli ### Operations -| Operation | Status | +| Operation | +|---| +| `AddRoleToInstanceProfile` | +| `AddUserToGroup` | +| `AttachGroupPolicy` | +| `AttachRolePolicy` | +| `AttachUserPolicy` | +| `CreateAccessKey` | +| `CreateGroup` | +| `CreateInstanceProfile` | +| `CreateOpenIDConnectProvider` | +| `CreatePolicy` | +| `CreateRole` | +| `CreateUser` | +| `DeleteAccessKey` | +| `DeleteGroup` | +| `DeleteGroupPolicy` | +| `DeleteInstanceProfile` | +| `DeleteOpenIDConnectProvider` | +| `DeletePolicy` | +| `DeleteRole` | +| `DeleteRolePolicy` | +| `DeleteUser` | +| `DeleteUserPolicy` | +| `DetachGroupPolicy` | +| `DetachRolePolicy` | +| `DetachUserPolicy` | +| `GetAccountSummary` | +| `GetGroup` | +| `GetGroupPolicy` | +| `GetInstanceProfile` | +| `GetOpenIDConnectProvider` | +| `GetPolicy` | +| `GetPolicyVersion` | +| `GetRole` | +| `GetRolePolicy` | +| `GetUser` | +| `GetUserPolicy` | +| `ListAccessKeys` | +| `ListAttachedGroupPolicies` | +| `ListAttachedRolePolicies` | +| `ListAttachedUserPolicies` | +| `ListGroupPolicies` | +| `ListGroups` | +| `ListGroupsForUser` | +| `ListInstanceProfileTags` | +| `ListInstanceProfiles` | +| `ListInstanceProfilesForRole` | +| `ListOpenIDConnectProviderTags` | +| `ListOpenIDConnectProviders` | +| `ListPolicies` | +| `ListPolicyTags` | +| `ListPolicyVersions` | +| `ListRolePolicies` | +| `ListRoleTags` | +| `ListRoles` | +| `ListUserPolicies` | +| `ListUserTags` | +| `ListUsers` | +| `PutGroupPolicy` | +| `PutRolePolicy` | +| `PutUserPolicy` | +| `RemoveRoleFromInstanceProfile` | +| `RemoveUserFromGroup` | +| `TagInstanceProfile` | +| `TagOpenIDConnectProvider` | +| `TagPolicy` | +| `TagRole` | +| `TagUser` | +| `UntagInstanceProfile` | +| `UntagOpenIDConnectProvider` | +| `UntagPolicy` | +| `UntagRole` | +| `UntagUser` | +| `UpdateAccessKey` | +| `UpdateAssumeRolePolicy` | +| `UpdateRole` | + +### Not applicable + +These operations describe AWS-hosted features this platform does not offer. + +| Operation | Reason | |---|---| -| `AddClientIDToOpenIDConnectProvider` | ❌ Not implemented | -| `AddRoleToInstanceProfile` | ✅ Implemented | -| `AddUserToGroup` | ✅ Implemented | -| `AttachGroupPolicy` | ✅ Implemented | -| `AttachRolePolicy` | ✅ Implemented | -| `AttachUserPolicy` | ✅ Implemented | -| `ChangePassword` | ❌ Not implemented | -| `CreateAccessKey` | ✅ Implemented | -| `CreateAccountAlias` | ❌ Not implemented | -| `CreateGroup` | ✅ Implemented | -| `CreateInstanceProfile` | ✅ Implemented | -| `CreateLoginProfile` | ❌ Not implemented | -| `CreateOpenIDConnectProvider` | ✅ Implemented | -| `CreatePolicy` | ✅ Implemented | -| `CreatePolicyVersion` | ❌ Not implemented | -| `CreateRole` | ✅ Implemented | -| `CreateSAMLProvider` | ❌ Not implemented | -| `CreateServiceLinkedRole` | ⛔ Not applicable [3](#notes) | -| `CreateServiceSpecificCredential` | ⛔ Not applicable [1](#notes) | -| `CreateUser` | ✅ Implemented | -| `CreateVirtualMFADevice` | ❌ Not implemented | -| `DeactivateMFADevice` | ❌ Not implemented | -| `DeleteAccessKey` | ✅ Implemented | -| `DeleteAccountAlias` | ❌ Not implemented | -| `DeleteAccountPasswordPolicy` | ❌ Not implemented | -| `DeleteGroup` | ✅ Implemented | -| `DeleteGroupPolicy` | ✅ Implemented | -| `DeleteInstanceProfile` | ✅ Implemented | -| `DeleteLoginProfile` | ❌ Not implemented | -| `DeleteOpenIDConnectProvider` | ✅ Implemented | -| `DeletePolicy` | ✅ Implemented | -| `DeletePolicyVersion` | ❌ Not implemented | -| `DeleteRole` | ✅ Implemented | -| `DeleteRolePermissionsBoundary` | ❌ Not implemented | -| `DeleteRolePolicy` | ✅ Implemented | -| `DeleteSAMLProvider` | ❌ Not implemented | -| `DeleteSSHPublicKey` | ⛔ Not applicable [1](#notes) | -| `DeleteServerCertificate` | ❌ Not implemented | -| `DeleteServiceLinkedRole` | ⛔ Not applicable [3](#notes) | -| `DeleteServiceSpecificCredential` | ⛔ Not applicable [1](#notes) | -| `DeleteSigningCertificate` | ⛔ Not applicable [4](#notes) | -| `DeleteUser` | ✅ Implemented | -| `DeleteUserPermissionsBoundary` | ❌ Not implemented | -| `DeleteUserPolicy` | ✅ Implemented | -| `DeleteVirtualMFADevice` | ❌ Not implemented | -| `DetachGroupPolicy` | ✅ Implemented | -| `DetachRolePolicy` | ✅ Implemented | -| `DetachUserPolicy` | ✅ Implemented | -| `EnableMFADevice` | ❌ Not implemented | -| `GenerateCredentialReport` | ❌ Not implemented | -| `GenerateOrganizationsAccessReport` | ⛔ Not applicable [2](#notes) | -| `GenerateServiceLastAccessedDetails` | ❌ Not implemented | -| `GetAccessKeyLastUsed` | ❌ Not implemented | -| `GetAccountAuthorizationDetails` | ❌ Not implemented | -| `GetAccountPasswordPolicy` | ❌ Not implemented | -| `GetAccountSummary` | ✅ Implemented | -| `GetContextKeysForCustomPolicy` | ❌ Not implemented | -| `GetContextKeysForPrincipalPolicy` | ❌ Not implemented | -| `GetCredentialReport` | ❌ Not implemented | -| `GetGroup` | ✅ Implemented | -| `GetGroupPolicy` | ✅ Implemented | -| `GetInstanceProfile` | ✅ Implemented | -| `GetLoginProfile` | ❌ Not implemented | -| `GetMFADevice` | ❌ Not implemented | -| `GetOpenIDConnectProvider` | ✅ Implemented | -| `GetOrganizationsAccessReport` | ⛔ Not applicable [2](#notes) | -| `GetPolicy` | ✅ Implemented | -| `GetPolicyVersion` | ✅ Implemented | -| `GetRole` | ✅ Implemented | -| `GetRolePolicy` | ✅ Implemented | -| `GetSAMLProvider` | ❌ Not implemented | -| `GetSSHPublicKey` | ⛔ Not applicable [1](#notes) | -| `GetServerCertificate` | ❌ Not implemented | -| `GetServiceLastAccessedDetails` | ❌ Not implemented | -| `GetServiceLastAccessedDetailsWithEntities` | ❌ Not implemented | -| `GetServiceLinkedRoleDeletionStatus` | ⛔ Not applicable [3](#notes) | -| `GetUser` | ✅ Implemented | -| `GetUserPolicy` | ✅ Implemented | -| `ListAccessKeys` | ✅ Implemented | -| `ListAccountAliases` | ❌ Not implemented | -| `ListAttachedGroupPolicies` | ✅ Implemented | -| `ListAttachedRolePolicies` | ✅ Implemented | -| `ListAttachedUserPolicies` | ✅ Implemented | -| `ListEntitiesForPolicy` | ❌ Not implemented | -| `ListGroupPolicies` | ✅ Implemented | -| `ListGroups` | ✅ Implemented | -| `ListGroupsForUser` | ✅ Implemented | -| `ListInstanceProfileTags` | ✅ Implemented | -| `ListInstanceProfiles` | ✅ Implemented | -| `ListInstanceProfilesForRole` | ✅ Implemented | -| `ListMFADeviceTags` | ❌ Not implemented | -| `ListMFADevices` | ❌ Not implemented | -| `ListOpenIDConnectProviderTags` | ✅ Implemented | -| `ListOpenIDConnectProviders` | ✅ Implemented | -| `ListPolicies` | ✅ Implemented | -| `ListPoliciesGrantingServiceAccess` | ❌ Not implemented | -| `ListPolicyTags` | ✅ Implemented | -| `ListPolicyVersions` | ✅ Implemented | -| `ListRolePolicies` | ✅ Implemented | -| `ListRoleTags` | ✅ Implemented | -| `ListRoles` | ✅ Implemented | -| `ListSAMLProviderTags` | ❌ Not implemented | -| `ListSAMLProviders` | ❌ Not implemented | -| `ListSSHPublicKeys` | ⛔ Not applicable [1](#notes) | -| `ListServerCertificateTags` | ❌ Not implemented | -| `ListServerCertificates` | ❌ Not implemented | -| `ListServiceSpecificCredentials` | ⛔ Not applicable [1](#notes) | -| `ListSigningCertificates` | ⛔ Not applicable [4](#notes) | -| `ListUserPolicies` | ✅ Implemented | -| `ListUserTags` | ✅ Implemented | -| `ListUsers` | ✅ Implemented | -| `ListVirtualMFADevices` | ❌ Not implemented | -| `PutGroupPolicy` | ✅ Implemented | -| `PutRolePermissionsBoundary` | ❌ Not implemented | -| `PutRolePolicy` | ✅ Implemented | -| `PutUserPermissionsBoundary` | ❌ Not implemented | -| `PutUserPolicy` | ✅ Implemented | -| `RemoveClientIDFromOpenIDConnectProvider` | ❌ Not implemented | -| `RemoveRoleFromInstanceProfile` | ✅ Implemented | -| `RemoveUserFromGroup` | ✅ Implemented | -| `ResetServiceSpecificCredential` | ⛔ Not applicable [1](#notes) | -| `ResyncMFADevice` | ❌ Not implemented | -| `SetDefaultPolicyVersion` | ❌ Not implemented | -| `SetSecurityTokenServicePreferences` | ❌ Not implemented | -| `SimulateCustomPolicy` | ❌ Not implemented | -| `SimulatePrincipalPolicy` | ❌ Not implemented | -| `TagInstanceProfile` | ✅ Implemented | -| `TagMFADevice` | ❌ Not implemented | -| `TagOpenIDConnectProvider` | ✅ Implemented | -| `TagPolicy` | ✅ Implemented | -| `TagRole` | ✅ Implemented | -| `TagSAMLProvider` | ❌ Not implemented | -| `TagServerCertificate` | ❌ Not implemented | -| `TagUser` | ✅ Implemented | -| `UntagInstanceProfile` | ✅ Implemented | -| `UntagMFADevice` | ❌ Not implemented | -| `UntagOpenIDConnectProvider` | ✅ Implemented | -| `UntagPolicy` | ✅ Implemented | -| `UntagRole` | ✅ Implemented | -| `UntagSAMLProvider` | ❌ Not implemented | -| `UntagServerCertificate` | ❌ Not implemented | -| `UntagUser` | ✅ Implemented | -| `UpdateAccessKey` | ✅ Implemented | -| `UpdateAccountPasswordPolicy` | ❌ Not implemented | -| `UpdateAssumeRolePolicy` | ✅ Implemented | -| `UpdateGroup` | ❌ Not implemented | -| `UpdateLoginProfile` | ❌ Not implemented | -| `UpdateOpenIDConnectProviderThumbprint` | ❌ Not implemented | -| `UpdateRole` | ✅ Implemented | -| `UpdateRoleDescription` | ❌ Not implemented | -| `UpdateSAMLProvider` | ❌ Not implemented | -| `UpdateSSHPublicKey` | ⛔ Not applicable [1](#notes) | -| `UpdateServerCertificate` | ❌ Not implemented | -| `UpdateServiceSpecificCredential` | ⛔ Not applicable [1](#notes) | -| `UpdateSigningCertificate` | ⛔ Not applicable [4](#notes) | -| `UpdateUser` | ❌ Not implemented | -| `UploadSSHPublicKey` | ⛔ Not applicable [1](#notes) | -| `UploadServerCertificate` | ❌ Not implemented | -| `UploadSigningCertificate` | ⛔ Not applicable [4](#notes) | - -### Notes - -1. CodeCommit credentials and SSH keys; the service does not exist here. -2. AWS Organizations is not offered, so there is no organization to report on. -3. Service-linked roles exist for AWS service principals, which this platform has none of. -4. X.509 signing certificates are an EC2-Classic SOAP credential, retired by AWS. +| `CreateServiceLinkedRole` | Service-linked roles exist for AWS service principals, which this platform has none of. | +| `CreateServiceSpecificCredential` | CodeCommit credentials and SSH keys; the service does not exist here. | +| `DeleteSSHPublicKey` | CodeCommit credentials and SSH keys; the service does not exist here. | +| `DeleteServiceLinkedRole` | Service-linked roles exist for AWS service principals, which this platform has none of. | +| `DeleteServiceSpecificCredential` | CodeCommit credentials and SSH keys; the service does not exist here. | +| `DeleteSigningCertificate` | X.509 signing certificates are an EC2-Classic SOAP credential, retired by AWS. | +| `GenerateOrganizationsAccessReport` | AWS Organizations is not offered, so there is no organization to report on. | +| `GetOrganizationsAccessReport` | AWS Organizations is not offered, so there is no organization to report on. | +| `GetSSHPublicKey` | CodeCommit credentials and SSH keys; the service does not exist here. | +| `GetServiceLinkedRoleDeletionStatus` | Service-linked roles exist for AWS service principals, which this platform has none of. | +| `ListSSHPublicKeys` | CodeCommit credentials and SSH keys; the service does not exist here. | +| `ListServiceSpecificCredentials` | CodeCommit credentials and SSH keys; the service does not exist here. | +| `ListSigningCertificates` | X.509 signing certificates are an EC2-Classic SOAP credential, retired by AWS. | +| `ResetServiceSpecificCredential` | CodeCommit credentials and SSH keys; the service does not exist here. | +| `UpdateSSHPublicKey` | CodeCommit credentials and SSH keys; the service does not exist here. | +| `UpdateServiceSpecificCredential` | CodeCommit credentials and SSH keys; the service does not exist here. | +| `UpdateSigningCertificate` | X.509 signing certificates are an EC2-Classic SOAP credential, retired by AWS. | +| `UploadSSHPublicKey` | CodeCommit credentials and SSH keys; the service does not exist here. | +| `UploadSigningCertificate` | X.509 signing certificates are an EC2-Classic SOAP credential, retired by AWS. | diff --git a/docs/coverage/internal-report.md b/docs/coverage/internal-report.md new file mode 100644 index 000000000..de71bea5f --- /dev/null +++ b/docs/coverage/internal-report.md @@ -0,0 +1,938 @@ +# AWS Model Operation Coverage (internal) + +Generated by `make aws-model-coverage`. This file is not published: it carries the counts and the unimplemented operations that the pages under this directory deliberately leave out. + +Pinned model source: `aws-sdk-go v1.55.8`. + +## acm + +`2015-12-08` — 9 of 15 modelled operations implemented (60.0%), 0 stubbed, 0 unsupported, 0 registered outside the pinned model. + +### Not implemented + +- `ExportCertificate` +- `GetAccountConfiguration` +- `PutAccountConfiguration` +- `RenewCertificate` +- `ResendValidationEmail` +- `UpdateCertificateOptions` + +## ec2 + +`2016-11-15` — 125 of 625 modelled operations implemented (20.0%), 0 stubbed, 0 unsupported, 0 registered outside the pinned model. + +### Not implemented + +- `AcceptAddressTransfer` +- `AcceptReservedInstancesExchangeQuote` +- `AcceptTransitGatewayMulticastDomainAssociations` +- `AcceptTransitGatewayPeeringAttachment` +- `AcceptTransitGatewayVpcAttachment` +- `AcceptVpcEndpointConnections` +- `AcceptVpcPeeringConnection` +- `AdvertiseByoipCidr` +- `AllocateHosts` +- `AllocateIpamPoolCidr` +- `ApplySecurityGroupsToClientVpnTargetNetwork` +- `AssignIpv6Addresses` +- `AssignPrivateIpAddresses` +- `AssignPrivateNatGatewayAddress` +- `AssociateClientVpnTargetNetwork` +- `AssociateDhcpOptions` +- `AssociateEnclaveCertificateIamRole` +- `AssociateInstanceEventWindow` +- `AssociateIpamByoasn` +- `AssociateIpamResourceDiscovery` +- `AssociateNatGatewayAddress` +- `AssociateSubnetCidrBlock` +- `AssociateTransitGatewayMulticastDomain` +- `AssociateTransitGatewayPolicyTable` +- `AssociateTransitGatewayRouteTable` +- `AssociateTrunkInterface` +- `AssociateVpcCidrBlock` +- `AttachClassicLinkVpc` +- `AttachVerifiedAccessTrustProvider` +- `AttachVpnGateway` +- `AuthorizeClientVpnIngress` +- `BundleInstance` +- `CancelBundleTask` +- `CancelCapacityReservationFleets` +- `CancelConversionTask` +- `CancelExportTask` +- `CancelImageLaunchPermission` +- `CancelImportTask` +- `CancelReservedInstancesListing` +- `CancelSpotFleetRequests` +- `ConfirmProductInstance` +- `CopyFpgaImage` +- `CreateCapacityReservationFleet` +- `CreateCarrierGateway` +- `CreateClientVpnEndpoint` +- `CreateClientVpnRoute` +- `CreateCoipCidr` +- `CreateCoipPool` +- `CreateCustomerGateway` +- `CreateDefaultSubnet` +- `CreateDefaultVpc` +- `CreateDhcpOptions` +- `CreateFleet` +- `CreateFlowLogs` +- `CreateFpgaImage` +- `CreateInstanceConnectEndpoint` +- `CreateInstanceEventWindow` +- `CreateInstanceExportTask` +- `CreateIpam` +- `CreateIpamExternalResourceVerificationToken` +- `CreateIpamPool` +- `CreateIpamResourceDiscovery` +- `CreateIpamScope` +- `CreateLocalGatewayRoute` +- `CreateLocalGatewayRouteTable` +- `CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation` +- `CreateLocalGatewayRouteTableVpcAssociation` +- `CreateManagedPrefixList` +- `CreateNetworkAcl` +- `CreateNetworkAclEntry` +- `CreateNetworkInsightsAccessScope` +- `CreateNetworkInsightsPath` +- `CreateNetworkInterfacePermission` +- `CreatePublicIpv4Pool` +- `CreateReplaceRootVolumeTask` +- `CreateReservedInstancesListing` +- `CreateRestoreImageTask` +- `CreateSnapshots` +- `CreateSpotDatafeedSubscription` +- `CreateStoreImageTask` +- `CreateSubnetCidrReservation` +- `CreateTrafficMirrorFilter` +- `CreateTrafficMirrorFilterRule` +- `CreateTrafficMirrorSession` +- `CreateTrafficMirrorTarget` +- `CreateTransitGateway` +- `CreateTransitGatewayConnect` +- `CreateTransitGatewayConnectPeer` +- `CreateTransitGatewayMulticastDomain` +- `CreateTransitGatewayPeeringAttachment` +- `CreateTransitGatewayPolicyTable` +- `CreateTransitGatewayPrefixListReference` +- `CreateTransitGatewayRoute` +- `CreateTransitGatewayRouteTable` +- `CreateTransitGatewayRouteTableAnnouncement` +- `CreateTransitGatewayVpcAttachment` +- `CreateVerifiedAccessEndpoint` +- `CreateVerifiedAccessGroup` +- `CreateVerifiedAccessInstance` +- `CreateVerifiedAccessTrustProvider` +- `CreateVpcEndpoint` +- `CreateVpcEndpointConnectionNotification` +- `CreateVpcEndpointServiceConfiguration` +- `CreateVpcPeeringConnection` +- `CreateVpnConnection` +- `CreateVpnConnectionRoute` +- `CreateVpnGateway` +- `DeleteCarrierGateway` +- `DeleteClientVpnEndpoint` +- `DeleteClientVpnRoute` +- `DeleteCoipCidr` +- `DeleteCoipPool` +- `DeleteCustomerGateway` +- `DeleteDhcpOptions` +- `DeleteFleets` +- `DeleteFlowLogs` +- `DeleteFpgaImage` +- `DeleteInstanceConnectEndpoint` +- `DeleteInstanceEventWindow` +- `DeleteIpam` +- `DeleteIpamExternalResourceVerificationToken` +- `DeleteIpamPool` +- `DeleteIpamResourceDiscovery` +- `DeleteIpamScope` +- `DeleteLocalGatewayRoute` +- `DeleteLocalGatewayRouteTable` +- `DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation` +- `DeleteLocalGatewayRouteTableVpcAssociation` +- `DeleteManagedPrefixList` +- `DeleteNetworkAcl` +- `DeleteNetworkAclEntry` +- `DeleteNetworkInsightsAccessScope` +- `DeleteNetworkInsightsAccessScopeAnalysis` +- `DeleteNetworkInsightsAnalysis` +- `DeleteNetworkInsightsPath` +- `DeleteNetworkInterfacePermission` +- `DeletePublicIpv4Pool` +- `DeleteQueuedReservedInstances` +- `DeleteSpotDatafeedSubscription` +- `DeleteSubnetCidrReservation` +- `DeleteTrafficMirrorFilter` +- `DeleteTrafficMirrorFilterRule` +- `DeleteTrafficMirrorSession` +- `DeleteTrafficMirrorTarget` +- `DeleteTransitGateway` +- `DeleteTransitGatewayConnect` +- `DeleteTransitGatewayConnectPeer` +- `DeleteTransitGatewayMulticastDomain` +- `DeleteTransitGatewayPeeringAttachment` +- `DeleteTransitGatewayPolicyTable` +- `DeleteTransitGatewayPrefixListReference` +- `DeleteTransitGatewayRoute` +- `DeleteTransitGatewayRouteTable` +- `DeleteTransitGatewayRouteTableAnnouncement` +- `DeleteTransitGatewayVpcAttachment` +- `DeleteVerifiedAccessEndpoint` +- `DeleteVerifiedAccessGroup` +- `DeleteVerifiedAccessInstance` +- `DeleteVerifiedAccessTrustProvider` +- `DeleteVpcEndpointConnectionNotifications` +- `DeleteVpcEndpointServiceConfigurations` +- `DeleteVpcEndpoints` +- `DeleteVpcPeeringConnection` +- `DeleteVpnConnection` +- `DeleteVpnConnectionRoute` +- `DeleteVpnGateway` +- `DeprovisionByoipCidr` +- `DeprovisionIpamByoasn` +- `DeprovisionIpamPoolCidr` +- `DeprovisionPublicIpv4PoolCidr` +- `DeregisterInstanceEventNotificationAttributes` +- `DeregisterTransitGatewayMulticastGroupMembers` +- `DeregisterTransitGatewayMulticastGroupSources` +- `DescribeAddressTransfers` +- `DescribeAggregateIdFormat` +- `DescribeAwsNetworkPerformanceMetricSubscriptions` +- `DescribeBundleTasks` +- `DescribeByoipCidrs` +- `DescribeCapacityBlockOfferings` +- `DescribeCapacityReservationFleets` +- `DescribeCarrierGateways` +- `DescribeClassicLinkInstances` +- `DescribeClientVpnAuthorizationRules` +- `DescribeClientVpnConnections` +- `DescribeClientVpnEndpoints` +- `DescribeClientVpnRoutes` +- `DescribeClientVpnTargetNetworks` +- `DescribeCoipPools` +- `DescribeConversionTasks` +- `DescribeCustomerGateways` +- `DescribeDhcpOptions` +- `DescribeElasticGpus` +- `DescribeExportImageTasks` +- `DescribeExportTasks` +- `DescribeFastLaunchImages` +- `DescribeFastSnapshotRestores` +- `DescribeFleetHistory` +- `DescribeFleetInstances` +- `DescribeFleets` +- `DescribeFlowLogs` +- `DescribeFpgaImageAttribute` +- `DescribeFpgaImages` +- `DescribeHostReservationOfferings` +- `DescribeHostReservations` +- `DescribeHosts` +- `DescribeIdFormat` +- `DescribeIdentityIdFormat` +- `DescribeImportImageTasks` +- `DescribeImportSnapshotTasks` +- `DescribeInstanceConnectEndpoints` +- `DescribeInstanceEventNotificationAttributes` +- `DescribeInstanceEventWindows` +- `DescribeInstanceTopology` +- `DescribeIpamByoasn` +- `DescribeIpamExternalResourceVerificationTokens` +- `DescribeIpamPools` +- `DescribeIpamResourceDiscoveries` +- `DescribeIpamResourceDiscoveryAssociations` +- `DescribeIpamScopes` +- `DescribeIpams` +- `DescribeIpv6Pools` +- `DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations` +- `DescribeLocalGatewayRouteTableVpcAssociations` +- `DescribeLocalGatewayRouteTables` +- `DescribeLocalGatewayVirtualInterfaceGroups` +- `DescribeLocalGatewayVirtualInterfaces` +- `DescribeLocalGateways` +- `DescribeLockedSnapshots` +- `DescribeMacHosts` +- `DescribeManagedPrefixLists` +- `DescribeMovingAddresses` +- `DescribeNetworkAcls` +- `DescribeNetworkInsightsAccessScopeAnalyses` +- `DescribeNetworkInsightsAccessScopes` +- `DescribeNetworkInsightsAnalyses` +- `DescribeNetworkInsightsPaths` +- `DescribeNetworkInterfaceAttribute` +- `DescribeNetworkInterfacePermissions` +- `DescribePrefixLists` +- `DescribePrincipalIdFormat` +- `DescribePublicIpv4Pools` +- `DescribeReplaceRootVolumeTasks` +- `DescribeReservedInstances` +- `DescribeReservedInstancesListings` +- `DescribeReservedInstancesModifications` +- `DescribeReservedInstancesOfferings` +- `DescribeScheduledInstanceAvailability` +- `DescribeScheduledInstances` +- `DescribeSecurityGroupReferences` +- `DescribeSnapshotAttribute` +- `DescribeSnapshotTierStatus` +- `DescribeSpotDatafeedSubscription` +- `DescribeSpotFleetInstances` +- `DescribeSpotFleetRequestHistory` +- `DescribeSpotFleetRequests` +- `DescribeSpotPriceHistory` +- `DescribeStaleSecurityGroups` +- `DescribeStoreImageTasks` +- `DescribeTrafficMirrorFilterRules` +- `DescribeTrafficMirrorFilters` +- `DescribeTrafficMirrorSessions` +- `DescribeTrafficMirrorTargets` +- `DescribeTransitGatewayAttachments` +- `DescribeTransitGatewayConnectPeers` +- `DescribeTransitGatewayConnects` +- `DescribeTransitGatewayMulticastDomains` +- `DescribeTransitGatewayPeeringAttachments` +- `DescribeTransitGatewayPolicyTables` +- `DescribeTransitGatewayRouteTableAnnouncements` +- `DescribeTransitGatewayRouteTables` +- `DescribeTransitGatewayVpcAttachments` +- `DescribeTransitGateways` +- `DescribeTrunkInterfaceAssociations` +- `DescribeVerifiedAccessEndpoints` +- `DescribeVerifiedAccessGroups` +- `DescribeVerifiedAccessInstanceLoggingConfigurations` +- `DescribeVerifiedAccessInstances` +- `DescribeVerifiedAccessTrustProviders` +- `DescribeVolumeAttribute` +- `DescribeVpcClassicLink` +- `DescribeVpcClassicLinkDnsSupport` +- `DescribeVpcEndpointConnectionNotifications` +- `DescribeVpcEndpointConnections` +- `DescribeVpcEndpointServiceConfigurations` +- `DescribeVpcEndpointServicePermissions` +- `DescribeVpcEndpointServices` +- `DescribeVpcEndpoints` +- `DescribeVpcPeeringConnections` +- `DescribeVpnConnections` +- `DescribeVpnGateways` +- `DetachClassicLinkVpc` +- `DetachVerifiedAccessTrustProvider` +- `DetachVpnGateway` +- `DisableAddressTransfer` +- `DisableAwsNetworkPerformanceMetricSubscription` +- `DisableFastLaunch` +- `DisableFastSnapshotRestores` +- `DisableImage` +- `DisableImageBlockPublicAccess` +- `DisableImageDeprecation` +- `DisableImageDeregistrationProtection` +- `DisableIpamOrganizationAdminAccount` +- `DisableSnapshotBlockPublicAccess` +- `DisableTransitGatewayRouteTablePropagation` +- `DisableVgwRoutePropagation` +- `DisableVpcClassicLink` +- `DisableVpcClassicLinkDnsSupport` +- `DisassociateClientVpnTargetNetwork` +- `DisassociateEnclaveCertificateIamRole` +- `DisassociateInstanceEventWindow` +- `DisassociateIpamByoasn` +- `DisassociateIpamResourceDiscovery` +- `DisassociateNatGatewayAddress` +- `DisassociateSubnetCidrBlock` +- `DisassociateTransitGatewayMulticastDomain` +- `DisassociateTransitGatewayPolicyTable` +- `DisassociateTransitGatewayRouteTable` +- `DisassociateTrunkInterface` +- `DisassociateVpcCidrBlock` +- `EnableAddressTransfer` +- `EnableAwsNetworkPerformanceMetricSubscription` +- `EnableFastLaunch` +- `EnableFastSnapshotRestores` +- `EnableImage` +- `EnableImageBlockPublicAccess` +- `EnableImageDeprecation` +- `EnableImageDeregistrationProtection` +- `EnableIpamOrganizationAdminAccount` +- `EnableReachabilityAnalyzerOrganizationSharing` +- `EnableSnapshotBlockPublicAccess` +- `EnableTransitGatewayRouteTablePropagation` +- `EnableVgwRoutePropagation` +- `EnableVolumeIO` +- `EnableVpcClassicLink` +- `EnableVpcClassicLinkDnsSupport` +- `ExportClientVpnClientCertificateRevocationList` +- `ExportClientVpnClientConfiguration` +- `ExportImage` +- `ExportTransitGatewayRoutes` +- `GetAssociatedEnclaveCertificateIamRoles` +- `GetAssociatedIpv6PoolCidrs` +- `GetAwsNetworkPerformanceData` +- `GetCapacityReservationUsage` +- `GetCoipPoolUsage` +- `GetConsoleScreenshot` +- `GetDefaultCreditSpecification` +- `GetEbsDefaultKmsKeyId` +- `GetFlowLogsIntegrationTemplate` +- `GetGroupsForCapacityReservation` +- `GetHostReservationPurchasePreview` +- `GetImageBlockPublicAccessState` +- `GetInstanceMetadataDefaults` +- `GetInstanceTpmEkPub` +- `GetInstanceTypesFromInstanceRequirements` +- `GetInstanceUefiData` +- `GetIpamAddressHistory` +- `GetIpamDiscoveredAccounts` +- `GetIpamDiscoveredPublicAddresses` +- `GetIpamDiscoveredResourceCidrs` +- `GetIpamPoolAllocations` +- `GetIpamPoolCidrs` +- `GetIpamResourceCidrs` +- `GetLaunchTemplateData` +- `GetManagedPrefixListAssociations` +- `GetManagedPrefixListEntries` +- `GetNetworkInsightsAccessScopeAnalysisFindings` +- `GetNetworkInsightsAccessScopeContent` +- `GetReservedInstancesExchangeQuote` +- `GetSnapshotBlockPublicAccessState` +- `GetSpotPlacementScores` +- `GetSubnetCidrReservations` +- `GetTransitGatewayAttachmentPropagations` +- `GetTransitGatewayMulticastDomainAssociations` +- `GetTransitGatewayPolicyTableAssociations` +- `GetTransitGatewayPolicyTableEntries` +- `GetTransitGatewayPrefixListReferences` +- `GetTransitGatewayRouteTableAssociations` +- `GetTransitGatewayRouteTablePropagations` +- `GetVerifiedAccessEndpointPolicy` +- `GetVerifiedAccessGroupPolicy` +- `GetVpnConnectionDeviceSampleConfiguration` +- `GetVpnConnectionDeviceTypes` +- `GetVpnTunnelReplacementStatus` +- `ImportClientVpnClientCertificateRevocationList` +- `ImportImage` +- `ImportInstance` +- `ImportSnapshot` +- `ImportVolume` +- `ListImagesInRecycleBin` +- `ListSnapshotsInRecycleBin` +- `LockSnapshot` +- `ModifyAddressAttribute` +- `ModifyAvailabilityZoneGroup` +- `ModifyCapacityReservation` +- `ModifyCapacityReservationFleet` +- `ModifyClientVpnEndpoint` +- `ModifyDefaultCreditSpecification` +- `ModifyEbsDefaultKmsKeyId` +- `ModifyFleet` +- `ModifyFpgaImageAttribute` +- `ModifyHosts` +- `ModifyIdFormat` +- `ModifyIdentityIdFormat` +- `ModifyInstanceCapacityReservationAttributes` +- `ModifyInstanceCreditSpecification` +- `ModifyInstanceEventStartTime` +- `ModifyInstanceEventWindow` +- `ModifyInstanceMaintenanceOptions` +- `ModifyInstanceMetadataDefaults` +- `ModifyInstancePlacement` +- `ModifyIpam` +- `ModifyIpamPool` +- `ModifyIpamResourceCidr` +- `ModifyIpamResourceDiscovery` +- `ModifyIpamScope` +- `ModifyLocalGatewayRoute` +- `ModifyManagedPrefixList` +- `ModifyPrivateDnsNameOptions` +- `ModifyReservedInstances` +- `ModifySecurityGroupRules` +- `ModifySnapshotAttribute` +- `ModifySnapshotTier` +- `ModifySpotFleetRequest` +- `ModifyTrafficMirrorFilterNetworkServices` +- `ModifyTrafficMirrorFilterRule` +- `ModifyTrafficMirrorSession` +- `ModifyTransitGateway` +- `ModifyTransitGatewayPrefixListReference` +- `ModifyTransitGatewayVpcAttachment` +- `ModifyVerifiedAccessEndpoint` +- `ModifyVerifiedAccessEndpointPolicy` +- `ModifyVerifiedAccessGroup` +- `ModifyVerifiedAccessGroupPolicy` +- `ModifyVerifiedAccessInstance` +- `ModifyVerifiedAccessInstanceLoggingConfiguration` +- `ModifyVerifiedAccessTrustProvider` +- `ModifyVolumeAttribute` +- `ModifyVpcEndpoint` +- `ModifyVpcEndpointConnectionNotification` +- `ModifyVpcEndpointServiceConfiguration` +- `ModifyVpcEndpointServicePayerResponsibility` +- `ModifyVpcEndpointServicePermissions` +- `ModifyVpcPeeringConnectionOptions` +- `ModifyVpcTenancy` +- `ModifyVpnConnection` +- `ModifyVpnConnectionOptions` +- `ModifyVpnTunnelCertificate` +- `ModifyVpnTunnelOptions` +- `MoveAddressToVpc` +- `MoveByoipCidrToIpam` +- `ProvisionByoipCidr` +- `ProvisionIpamByoasn` +- `ProvisionIpamPoolCidr` +- `ProvisionPublicIpv4PoolCidr` +- `PurchaseCapacityBlock` +- `PurchaseHostReservation` +- `PurchaseReservedInstancesOffering` +- `PurchaseScheduledInstances` +- `RegisterInstanceEventNotificationAttributes` +- `RegisterTransitGatewayMulticastGroupMembers` +- `RegisterTransitGatewayMulticastGroupSources` +- `RejectTransitGatewayMulticastDomainAssociations` +- `RejectTransitGatewayPeeringAttachment` +- `RejectTransitGatewayVpcAttachment` +- `RejectVpcEndpointConnections` +- `RejectVpcPeeringConnection` +- `ReleaseHosts` +- `ReleaseIpamPoolAllocation` +- `ReplaceNetworkAclAssociation` +- `ReplaceNetworkAclEntry` +- `ReplaceTransitGatewayRoute` +- `ReplaceVpnTunnel` +- `ReportInstanceStatus` +- `RequestSpotFleet` +- `ResetAddressAttribute` +- `ResetEbsDefaultKmsKeyId` +- `ResetFpgaImageAttribute` +- `ResetInstanceAttribute` +- `ResetNetworkInterfaceAttribute` +- `ResetSnapshotAttribute` +- `RestoreAddressToClassic` +- `RestoreImageFromRecycleBin` +- `RestoreManagedPrefixListVersion` +- `RestoreSnapshotFromRecycleBin` +- `RestoreSnapshotTier` +- `RevokeClientVpnIngress` +- `RunScheduledInstances` +- `SearchLocalGatewayRoutes` +- `SearchTransitGatewayMulticastGroups` +- `SearchTransitGatewayRoutes` +- `SendDiagnosticInterrupt` +- `StartNetworkInsightsAccessScopeAnalysis` +- `StartNetworkInsightsAnalysis` +- `StartVpcEndpointServicePrivateDnsVerification` +- `TerminateClientVpnConnections` +- `UnassignIpv6Addresses` +- `UnassignPrivateIpAddresses` +- `UnassignPrivateNatGatewayAddress` +- `UnlockSnapshot` +- `WithdrawByoipCidr` + +## ecr + +`2015-09-21` — 19 of 47 modelled operations implemented (40.4%), 13 stubbed, 7 unsupported, 3 registered outside the pinned model. + +### Not implemented + +- `CreatePullThroughCacheRule` +- `CreateRepositoryCreationTemplate` +- `DeletePullThroughCacheRule` +- `DeleteRegistryPolicy` +- `DeleteRepositoryCreationTemplate` +- `DescribeImageReplicationStatus` +- `DescribePullThroughCacheRules` +- `DescribeRepositoryCreationTemplates` +- `UpdatePullThroughCacheRule` +- `UpdateRepositoryCreationTemplate` +- `ValidatePullThroughCacheRule` + +### Stubbed + +- `BatchCheckLayerAvailability` +- `CompleteLayerUpload` +- `DescribeRegistry` +- `GetDownloadUrlForLayer` +- `GetRegistryPolicy` +- `InitiateLayerUpload` +- `ListRepositories` +- `PutRegistryPolicy` +- `PutReplicationConfiguration` +- `ReplicateImage` +- `TagResource` +- `UntagResource` +- `UploadLayerPart` + +### Registered and refused + +- `BatchGetRepositoryScanningConfiguration` +- `DescribeImageScanFindings` +- `GetImageScanningConfiguration` +- `GetRegistryScanningConfiguration` +- `PutImageScanningConfiguration` +- `PutRegistryScanningConfiguration` +- `StartImageScan` + +### Registered outside the pinned model + +- `GetImageScanningConfiguration` +- `ListRepositories` +- `ReplicateImage` + +## ecs + +`2014-11-13` — 31 of 56 modelled operations implemented (55.4%), 5 stubbed, 0 unsupported, 3 registered outside the pinned model. + +### Not implemented + +- `CreateTaskSet` +- `DeleteAccountSetting` +- `DeleteAttributes` +- `DeleteTaskDefinitions` +- `DeleteTaskSet` +- `DescribeTaskSets` +- `DiscoverPollEndpoint` +- `ExecuteCommand` +- `GetTaskProtection` +- `ListAttributes` +- `PutAccountSettingDefault` +- `PutAttributes` +- `SubmitAttachmentStateChanges` +- `SubmitContainerStateChange` +- `UpdateCapacityProvider` +- `UpdateClusterSettings` +- `UpdateContainerAgent` +- `UpdateServicePrimaryTaskSet` +- `UpdateTaskProtection` +- `UpdateTaskSet` + +### Stubbed + +- `ListAccountSettings` +- `ListServicesByNamespace` +- `ListTaskDefinitionFamilies` +- `PutAccountSetting` +- `UpdateCluster` + +### Registered outside the pinned model + +- `PollAssignments` +- `ProvisionCapacity` +- `ReportTaskGPU` + +## eks + +`2017-11-01` — 34 of 56 modelled operations implemented (60.7%), 0 stubbed, 0 unsupported, 4 registered outside the pinned model. + +### Not implemented + +- `AssociateEncryptionConfig` +- `CreateEksAnywhereSubscription` +- `CreateFargateProfile` +- `CreatePodIdentityAssociation` +- `DeleteEksAnywhereSubscription` +- `DeleteFargateProfile` +- `DeletePodIdentityAssociation` +- `DeregisterCluster` +- `DescribeAddonConfiguration` +- `DescribeEksAnywhereSubscription` +- `DescribeFargateProfile` +- `DescribeInsight` +- `DescribePodIdentityAssociation` +- `DescribeUpdate` +- `ListEksAnywhereSubscriptions` +- `ListFargateProfiles` +- `ListInsights` +- `ListPodIdentityAssociations` +- `ListUpdates` +- `RegisterCluster` +- `UpdateEksAnywhereSubscription` +- `UpdatePodIdentityAssociation` + +### Registered outside the pinned model + +- `GetRecoveryDirective` +- `ListInternalAddons` +- `PublishInternal` +- `WebhookTokenReview` + +## elasticloadbalancingv2 + +`2015-12-01` — 34 of 46 modelled operations implemented (73.9%), 0 stubbed, 0 unsupported, 4 registered outside the pinned model. + +### Not implemented + +- `AddTrustStoreRevocations` +- `CreateTrustStore` +- `DeleteSharedTrustStoreAssociation` +- `DeleteTrustStore` +- `DescribeTrustStoreAssociations` +- `DescribeTrustStoreRevocations` +- `DescribeTrustStores` +- `GetResourcePolicy` +- `GetTrustStoreCaCertificatesBundle` +- `GetTrustStoreRevocationContent` +- `ModifyTrustStore` +- `RemoveTrustStoreRevocations` + +### Registered outside the pinned model + +- `DescribeListenerAttributes` +- `GetLBConfig` +- `LBAgentHeartbeat` +- `ModifyListenerAttributes` + +## iam + +`2010-05-08` — 75 of 159 modelled operations implemented (47.2%), 0 stubbed, 0 unsupported, 0 registered outside the pinned model. + +### Not implemented + +- `AddClientIDToOpenIDConnectProvider` +- `ChangePassword` +- `CreateAccountAlias` +- `CreateLoginProfile` +- `CreatePolicyVersion` +- `CreateSAMLProvider` +- `CreateServiceLinkedRole` +- `CreateServiceSpecificCredential` +- `CreateVirtualMFADevice` +- `DeactivateMFADevice` +- `DeleteAccountAlias` +- `DeleteAccountPasswordPolicy` +- `DeleteLoginProfile` +- `DeletePolicyVersion` +- `DeleteRolePermissionsBoundary` +- `DeleteSAMLProvider` +- `DeleteSSHPublicKey` +- `DeleteServerCertificate` +- `DeleteServiceLinkedRole` +- `DeleteServiceSpecificCredential` +- `DeleteSigningCertificate` +- `DeleteUserPermissionsBoundary` +- `DeleteVirtualMFADevice` +- `EnableMFADevice` +- `GenerateCredentialReport` +- `GenerateOrganizationsAccessReport` +- `GenerateServiceLastAccessedDetails` +- `GetAccessKeyLastUsed` +- `GetAccountAuthorizationDetails` +- `GetAccountPasswordPolicy` +- `GetContextKeysForCustomPolicy` +- `GetContextKeysForPrincipalPolicy` +- `GetCredentialReport` +- `GetLoginProfile` +- `GetMFADevice` +- `GetOrganizationsAccessReport` +- `GetSAMLProvider` +- `GetSSHPublicKey` +- `GetServerCertificate` +- `GetServiceLastAccessedDetails` +- `GetServiceLastAccessedDetailsWithEntities` +- `GetServiceLinkedRoleDeletionStatus` +- `ListAccountAliases` +- `ListEntitiesForPolicy` +- `ListMFADeviceTags` +- `ListMFADevices` +- `ListPoliciesGrantingServiceAccess` +- `ListSAMLProviderTags` +- `ListSAMLProviders` +- `ListSSHPublicKeys` +- `ListServerCertificateTags` +- `ListServerCertificates` +- `ListServiceSpecificCredentials` +- `ListSigningCertificates` +- `ListVirtualMFADevices` +- `PutRolePermissionsBoundary` +- `PutUserPermissionsBoundary` +- `RemoveClientIDFromOpenIDConnectProvider` +- `ResetServiceSpecificCredential` +- `ResyncMFADevice` +- `SetDefaultPolicyVersion` +- `SetSecurityTokenServicePreferences` +- `SimulateCustomPolicy` +- `SimulatePrincipalPolicy` +- `TagMFADevice` +- `TagSAMLProvider` +- `TagServerCertificate` +- `UntagMFADevice` +- `UntagSAMLProvider` +- `UntagServerCertificate` +- `UpdateAccountPasswordPolicy` +- `UpdateGroup` +- `UpdateLoginProfile` +- `UpdateOpenIDConnectProviderThumbprint` +- `UpdateRoleDescription` +- `UpdateSAMLProvider` +- `UpdateSSHPublicKey` +- `UpdateServerCertificate` +- `UpdateServiceSpecificCredential` +- `UpdateSigningCertificate` +- `UpdateUser` +- `UploadSSHPublicKey` +- `UploadServerCertificate` +- `UploadSigningCertificate` + +## rds + +`2014-10-31` — 26 of 162 modelled operations implemented (16.0%), 0 stubbed, 12 unsupported, 5 registered outside the pinned model. + +### Not implemented + +- `AddRoleToDBCluster` +- `AddRoleToDBInstance` +- `AddSourceIdentifierToSubscription` +- `ApplyPendingMaintenanceAction` +- `AuthorizeDBSecurityGroupIngress` +- `BacktrackDBCluster` +- `CancelExportTask` +- `CopyDBClusterParameterGroup` +- `CopyDBClusterSnapshot` +- `CopyDBParameterGroup` +- `CopyDBSnapshot` +- `CopyOptionGroup` +- `CreateBlueGreenDeployment` +- `CreateCustomDBEngineVersion` +- `CreateDBClusterEndpoint` +- `CreateDBClusterParameterGroup` +- `CreateDBClusterSnapshot` +- `CreateDBProxy` +- `CreateDBProxyEndpoint` +- `CreateDBSecurityGroup` +- `CreateDBShardGroup` +- `CreateEventSubscription` +- `CreateGlobalCluster` +- `CreateIntegration` +- `CreateTenantDatabase` +- `DeleteBlueGreenDeployment` +- `DeleteCustomDBEngineVersion` +- `DeleteDBClusterAutomatedBackup` +- `DeleteDBClusterEndpoint` +- `DeleteDBClusterParameterGroup` +- `DeleteDBClusterSnapshot` +- `DeleteDBInstanceAutomatedBackup` +- `DeleteDBProxy` +- `DeleteDBProxyEndpoint` +- `DeleteDBSecurityGroup` +- `DeleteDBShardGroup` +- `DeleteEventSubscription` +- `DeleteGlobalCluster` +- `DeleteIntegration` +- `DeleteTenantDatabase` +- `DeregisterDBProxyTargets` +- `DescribeAccountAttributes` +- `DescribeBlueGreenDeployments` +- `DescribeCertificates` +- `DescribeDBClusterAutomatedBackups` +- `DescribeDBClusterBacktracks` +- `DescribeDBClusterEndpoints` +- `DescribeDBClusterParameterGroups` +- `DescribeDBClusterParameters` +- `DescribeDBClusterSnapshotAttributes` +- `DescribeDBClusterSnapshots` +- `DescribeDBLogFiles` +- `DescribeDBProxies` +- `DescribeDBProxyEndpoints` +- `DescribeDBProxyTargetGroups` +- `DescribeDBProxyTargets` +- `DescribeDBRecommendations` +- `DescribeDBSecurityGroups` +- `DescribeDBShardGroups` +- `DescribeDBSnapshotAttributes` +- `DescribeDBSnapshotTenantDatabases` +- `DescribeEngineDefaultClusterParameters` +- `DescribeEngineDefaultParameters` +- `DescribeEventCategories` +- `DescribeEventSubscriptions` +- `DescribeExportTasks` +- `DescribeGlobalClusters` +- `DescribeIntegrations` +- `DescribeOptionGroupOptions` +- `DescribePendingMaintenanceActions` +- `DescribeReservedDBInstances` +- `DescribeReservedDBInstancesOfferings` +- `DescribeSourceRegions` +- `DescribeTenantDatabases` +- `DescribeValidDBInstanceModifications` +- `DisableHttpEndpoint` +- `DownloadDBLogFilePortion` +- `EnableHttpEndpoint` +- `FailoverGlobalCluster` +- `ModifyActivityStream` +- `ModifyCertificates` +- `ModifyCurrentDBClusterCapacity` +- `ModifyCustomDBEngineVersion` +- `ModifyDBClusterEndpoint` +- `ModifyDBClusterParameterGroup` +- `ModifyDBClusterSnapshotAttribute` +- `ModifyDBProxy` +- `ModifyDBProxyEndpoint` +- `ModifyDBProxyTargetGroup` +- `ModifyDBRecommendation` +- `ModifyDBShardGroup` +- `ModifyDBSnapshot` +- `ModifyDBSnapshotAttribute` +- `ModifyDBSubnetGroup` +- `ModifyEventSubscription` +- `ModifyGlobalCluster` +- `ModifyIntegration` +- `ModifyTenantDatabase` +- `PromoteReadReplicaDBCluster` +- `PurchaseReservedDBInstancesOffering` +- `RebootDBCluster` +- `RebootDBShardGroup` +- `RegisterDBProxyTargets` +- `RemoveFromGlobalCluster` +- `RemoveRoleFromDBCluster` +- `RemoveRoleFromDBInstance` +- `RemoveSourceIdentifierFromSubscription` +- `ResetDBClusterParameterGroup` +- `ResetDBParameterGroup` +- `RestoreDBClusterFromS3` +- `RestoreDBClusterFromSnapshot` +- `RestoreDBClusterToPointInTime` +- `RestoreDBInstanceFromS3` +- `RevokeDBSecurityGroupIngress` +- `StartActivityStream` +- `StartDBCluster` +- `StartDBInstanceAutomatedBackupsReplication` +- `StartExportTask` +- `StopActivityStream` +- `StopDBCluster` +- `StopDBInstanceAutomatedBackupsReplication` +- `SwitchoverBlueGreenDeployment` +- `SwitchoverGlobalCluster` +- `SwitchoverReadReplica` + +### Registered and refused + +- `CreateDBCluster` +- `CreateDBInstanceReadReplica` +- `CreateOptionGroup` +- `DeleteDBCluster` +- `DeleteOptionGroup` +- `DescribeDBClusters` +- `DescribeOptionGroups` +- `FailoverDBCluster` +- `ModifyDBCluster` +- `ModifyOptionGroup` +- `PromoteReadReplica` +- `RestoreDBInstanceToPointInTime` + +### Registered outside the pinned model + +- `AcknowledgeDBBootstrap` +- `GetDBBootstrapConfig` +- `PollDBCommands` +- `RegisterDBInstance` +- `SubmitDBStateChange` + +## s3 + +`2006-03-01` — not enumerable. Spinifex delegates the S3 REST surface to Predastore, which has no operation-name dispatch table to compare mechanically. + +## sts + +`2011-06-15` — 5 of 8 modelled operations implemented (62.5%), 0 stubbed, 0 unsupported, 0 registered outside the pinned model. + +### Not implemented + +- `AssumeRoleWithSAML` +- `DecodeAuthorizationMessage` +- `GetFederationToken` + diff --git a/docs/coverage/pages.json b/docs/coverage/pages.json index f7dae94dd..1d7424a36 100644 --- a/docs/coverage/pages.json +++ b/docs/coverage/pages.json @@ -5,7 +5,7 @@ "name": "All services", "title": "AWS API Coverage", "seoTitle": "Which AWS API Operations Spinifex Implements — Spinifex Docs", - "description": "Operation-level coverage of every AWS API Spinifex serves, generated from its gateway dispatch tables and the pinned AWS SDK service models on each build.", + "description": "The AWS API operations Spinifex serves, generated from its gateway dispatch tables and the pinned AWS SDK service models on each build, service by service.", "tags": [ "aws", "compatibility", @@ -20,7 +20,7 @@ "name": "ACM", "title": "ACM API Coverage", "seoTitle": "AWS Certificate Manager API Coverage — Spinifex Docs", - "description": "Every operation in the AWS Certificate Manager API model and whether Spinifex implements it, generated from the gateway dispatch tables on each build.", + "description": "The AWS Certificate Manager API operations Spinifex implements, generated from the gateway dispatch tables on each build, with those it does not offer and why.", "tags": [ "aws", "compatibility", @@ -35,7 +35,7 @@ "name": "EC2", "title": "EC2 API Coverage", "seoTitle": "Amazon EC2 API Coverage on Spinifex — Spinifex Docs", - "description": "Every operation in the Amazon EC2 API model and whether Spinifex implements it, covering instances, EBS volumes, VPC networking, tags and security groups.", + "description": "The Amazon EC2 API operations Spinifex implements, covering instances, EBS volumes, VPC networking, tags and security groups, with those it does not offer.", "tags": [ "aws", "compatibility", @@ -56,7 +56,7 @@ "name": "ECR", "title": "ECR API Coverage", "seoTitle": "Elastic Container Registry API Coverage — Spinifex Docs", - "description": "Every operation in the Amazon ECR API model and whether Spinifex implements it, alongside the OCI distribution endpoint that carries the image layers.", + "description": "The Amazon ECR API operations Spinifex implements, alongside the OCI distribution endpoint that carries the image layers, and those the platform will not.", "tags": [ "aws", "compatibility", @@ -82,7 +82,7 @@ "name": "ECS", "title": "ECS API Coverage", "seoTitle": "Elastic Container Service API Coverage — Spinifex Docs", - "description": "Every operation in the Amazon ECS API model and whether Spinifex implements it, covering clusters, services, tasks and container instances on each build.", + "description": "The Amazon ECS API operations Spinifex implements, covering clusters, services, tasks and container instances, with those the platform does not offer.", "tags": [ "aws", "compatibility", @@ -102,7 +102,7 @@ "name": "EKS", "title": "EKS API Coverage", "seoTitle": "Elastic Kubernetes Service API Coverage — Spinifex Docs", - "description": "Every operation in the Amazon EKS API model and whether Spinifex implements it, covering clusters, nodegroups, add-ons and access entries on each build.", + "description": "The Amazon EKS API operations Spinifex implements, covering clusters, nodegroups, add-ons and access entries, with those the platform does not offer and why.", "tags": [ "aws", "compatibility", @@ -123,7 +123,7 @@ "name": "ELBv2", "title": "ELBv2 API Coverage", "seoTitle": "Elastic Load Balancing v2 API Coverage — Spinifex Docs", - "description": "Every operation in the Elastic Load Balancing v2 API model and whether Spinifex implements it, for both the Application and Network Load Balancers it serves.", + "description": "The Elastic Load Balancing v2 API operations Spinifex implements, for both the Application and Network Load Balancers it serves, with those it does not.", "tags": [ "aws", "compatibility", @@ -142,7 +142,7 @@ "name": "IAM", "title": "IAM API Coverage", "seoTitle": "AWS IAM API Operation Coverage on Spinifex — Spinifex Docs", - "description": "Every operation in the AWS IAM API model and whether Spinifex implements it, covering users, roles, policies, groups and instance profiles on each build.", + "description": "The AWS IAM API operations Spinifex implements, covering users, roles, policies, groups and instance profiles, with those the platform does not offer.", "tags": [ "aws", "compatibility", @@ -184,7 +184,7 @@ "name": "RDS", "title": "RDS API Coverage", "seoTitle": "Relational Database Service API Coverage — Spinifex Docs", - "description": "Every operation in the Amazon RDS API model and whether Spinifex implements it, for the managed PostgreSQL and MariaDB engines it offers on each build.", + "description": "The Amazon RDS API operations Spinifex implements, for the managed PostgreSQL and MariaDB engines it offers, with those the platform does not offer and why.", "tags": [ "aws", "compatibility", @@ -227,7 +227,7 @@ "name": "STS", "title": "STS API Coverage", "seoTitle": "AWS Security Token Service API Coverage — Spinifex Docs", - "description": "Every operation in the AWS STS API model and whether Spinifex implements it, covering role assumption, session tokens and web identity federation (IRSA).", + "description": "The AWS STS API operations Spinifex implements, covering role assumption, session tokens and web identity federation (IRSA), with those it does not offer.", "tags": [ "aws", "compatibility", diff --git a/docs/coverage/rds/README.md b/docs/coverage/rds/README.md index c74ee09b8..af37519df 100644 --- a/docs/coverage/rds/README.md +++ b/docs/coverage/rds/README.md @@ -1,7 +1,7 @@ --- title: "RDS API Coverage" seoTitle: "Relational Database Service API Coverage — Spinifex Docs" -description: "Every operation in the Amazon RDS API model and whether Spinifex implements it, for the managed PostgreSQL and MariaDB engines it offers on each build." +description: "The Amazon RDS API operations Spinifex implements, for the managed PostgreSQL and MariaDB engines it offers, with those the platform does not offer and why." category: "Coverage" sections: - overview @@ -19,7 +19,7 @@ tags: ## Overview -Spinifex implements **26 of the 162** operations (**16.0%**) in the RDS `2014-10-31` API model. +Spinifex implements **26 operations** in the RDS `2014-10-31` API model. ### Engines @@ -70,174 +70,50 @@ A parameter whose omission would create a false safety, security or availability ### Operations -| Operation | Status | +| Operation | +|---| +| `AddTagsToResource` | +| `CreateDBInstance` | +| `CreateDBParameterGroup` | +| `CreateDBSnapshot` | +| `CreateDBSubnetGroup` | +| `DeleteDBInstance` | +| `DeleteDBParameterGroup` | +| `DeleteDBSnapshot` | +| `DeleteDBSubnetGroup` | +| `DescribeDBEngineVersions` | +| `DescribeDBInstanceAutomatedBackups` | +| `DescribeDBInstances` | +| `DescribeDBParameterGroups` | +| `DescribeDBParameters` | +| `DescribeDBSnapshots` | +| `DescribeDBSubnetGroups` | +| `DescribeEvents` | +| `DescribeOrderableDBInstanceOptions` | +| `ListTagsForResource` | +| `ModifyDBInstance` | +| `ModifyDBParameterGroup` | +| `RebootDBInstance` | +| `RemoveTagsFromResource` | +| `RestoreDBInstanceFromDBSnapshot` | +| `StartDBInstance` | +| `StopDBInstance` | + +### Not applicable + +These operations describe AWS-hosted features this platform does not offer. + +| Operation | Reason | |---|---| -| `AddRoleToDBCluster` | ❌ Not implemented | -| `AddRoleToDBInstance` | ❌ Not implemented | -| `AddSourceIdentifierToSubscription` | ❌ Not implemented | -| `AddTagsToResource` | ✅ Implemented | -| `ApplyPendingMaintenanceAction` | ❌ Not implemented | -| `AuthorizeDBSecurityGroupIngress` | ❌ Not implemented | -| `BacktrackDBCluster` | ❌ Not implemented | -| `CancelExportTask` | ❌ Not implemented | -| `CopyDBClusterParameterGroup` | ❌ Not implemented | -| `CopyDBClusterSnapshot` | ❌ Not implemented | -| `CopyDBParameterGroup` | ❌ Not implemented | -| `CopyDBSnapshot` | ❌ Not implemented | -| `CopyOptionGroup` | ❌ Not implemented | -| `CreateBlueGreenDeployment` | ❌ Not implemented | -| `CreateCustomDBEngineVersion` | ❌ Not implemented | -| `CreateDBCluster` | ⛔ Not applicable [1](#notes) | -| `CreateDBClusterEndpoint` | ❌ Not implemented | -| `CreateDBClusterParameterGroup` | ❌ Not implemented | -| `CreateDBClusterSnapshot` | ❌ Not implemented | -| `CreateDBInstance` | ✅ Implemented | -| `CreateDBInstanceReadReplica` | ⛔ Not applicable [4](#notes) | -| `CreateDBParameterGroup` | ✅ Implemented | -| `CreateDBProxy` | ❌ Not implemented | -| `CreateDBProxyEndpoint` | ❌ Not implemented | -| `CreateDBSecurityGroup` | ❌ Not implemented | -| `CreateDBShardGroup` | ❌ Not implemented | -| `CreateDBSnapshot` | ✅ Implemented | -| `CreateDBSubnetGroup` | ✅ Implemented | -| `CreateEventSubscription` | ❌ Not implemented | -| `CreateGlobalCluster` | ❌ Not implemented | -| `CreateIntegration` | ❌ Not implemented | -| `CreateOptionGroup` | ⛔ Not applicable [2](#notes) | -| `CreateTenantDatabase` | ❌ Not implemented | -| `DeleteBlueGreenDeployment` | ❌ Not implemented | -| `DeleteCustomDBEngineVersion` | ❌ Not implemented | -| `DeleteDBCluster` | ⛔ Not applicable [1](#notes) | -| `DeleteDBClusterAutomatedBackup` | ❌ Not implemented | -| `DeleteDBClusterEndpoint` | ❌ Not implemented | -| `DeleteDBClusterParameterGroup` | ❌ Not implemented | -| `DeleteDBClusterSnapshot` | ❌ Not implemented | -| `DeleteDBInstance` | ✅ Implemented | -| `DeleteDBInstanceAutomatedBackup` | ❌ Not implemented | -| `DeleteDBParameterGroup` | ✅ Implemented | -| `DeleteDBProxy` | ❌ Not implemented | -| `DeleteDBProxyEndpoint` | ❌ Not implemented | -| `DeleteDBSecurityGroup` | ❌ Not implemented | -| `DeleteDBShardGroup` | ❌ Not implemented | -| `DeleteDBSnapshot` | ✅ Implemented | -| `DeleteDBSubnetGroup` | ✅ Implemented | -| `DeleteEventSubscription` | ❌ Not implemented | -| `DeleteGlobalCluster` | ❌ Not implemented | -| `DeleteIntegration` | ❌ Not implemented | -| `DeleteOptionGroup` | ⛔ Not applicable [2](#notes) | -| `DeleteTenantDatabase` | ❌ Not implemented | -| `DeregisterDBProxyTargets` | ❌ Not implemented | -| `DescribeAccountAttributes` | ❌ Not implemented | -| `DescribeBlueGreenDeployments` | ❌ Not implemented | -| `DescribeCertificates` | ❌ Not implemented | -| `DescribeDBClusterAutomatedBackups` | ❌ Not implemented | -| `DescribeDBClusterBacktracks` | ❌ Not implemented | -| `DescribeDBClusterEndpoints` | ❌ Not implemented | -| `DescribeDBClusterParameterGroups` | ❌ Not implemented | -| `DescribeDBClusterParameters` | ❌ Not implemented | -| `DescribeDBClusterSnapshotAttributes` | ❌ Not implemented | -| `DescribeDBClusterSnapshots` | ❌ Not implemented | -| `DescribeDBClusters` | ⛔ Not applicable [1](#notes) | -| `DescribeDBEngineVersions` | ✅ Implemented | -| `DescribeDBInstanceAutomatedBackups` | ✅ Implemented | -| `DescribeDBInstances` | ✅ Implemented | -| `DescribeDBLogFiles` | ❌ Not implemented | -| `DescribeDBParameterGroups` | ✅ Implemented | -| `DescribeDBParameters` | ✅ Implemented | -| `DescribeDBProxies` | ❌ Not implemented | -| `DescribeDBProxyEndpoints` | ❌ Not implemented | -| `DescribeDBProxyTargetGroups` | ❌ Not implemented | -| `DescribeDBProxyTargets` | ❌ Not implemented | -| `DescribeDBRecommendations` | ❌ Not implemented | -| `DescribeDBSecurityGroups` | ❌ Not implemented | -| `DescribeDBShardGroups` | ❌ Not implemented | -| `DescribeDBSnapshotAttributes` | ❌ Not implemented | -| `DescribeDBSnapshotTenantDatabases` | ❌ Not implemented | -| `DescribeDBSnapshots` | ✅ Implemented | -| `DescribeDBSubnetGroups` | ✅ Implemented | -| `DescribeEngineDefaultClusterParameters` | ❌ Not implemented | -| `DescribeEngineDefaultParameters` | ❌ Not implemented | -| `DescribeEventCategories` | ❌ Not implemented | -| `DescribeEventSubscriptions` | ❌ Not implemented | -| `DescribeEvents` | ✅ Implemented | -| `DescribeExportTasks` | ❌ Not implemented | -| `DescribeGlobalClusters` | ❌ Not implemented | -| `DescribeIntegrations` | ❌ Not implemented | -| `DescribeOptionGroupOptions` | ❌ Not implemented | -| `DescribeOptionGroups` | ⛔ Not applicable [2](#notes) | -| `DescribeOrderableDBInstanceOptions` | ✅ Implemented | -| `DescribePendingMaintenanceActions` | ❌ Not implemented | -| `DescribeReservedDBInstances` | ❌ Not implemented | -| `DescribeReservedDBInstancesOfferings` | ❌ Not implemented | -| `DescribeSourceRegions` | ❌ Not implemented | -| `DescribeTenantDatabases` | ❌ Not implemented | -| `DescribeValidDBInstanceModifications` | ❌ Not implemented | -| `DisableHttpEndpoint` | ❌ Not implemented | -| `DownloadDBLogFilePortion` | ❌ Not implemented | -| `EnableHttpEndpoint` | ❌ Not implemented | -| `FailoverDBCluster` | ⛔ Not applicable [1](#notes) | -| `FailoverGlobalCluster` | ❌ Not implemented | -| `ListTagsForResource` | ✅ Implemented | -| `ModifyActivityStream` | ❌ Not implemented | -| `ModifyCertificates` | ❌ Not implemented | -| `ModifyCurrentDBClusterCapacity` | ❌ Not implemented | -| `ModifyCustomDBEngineVersion` | ❌ Not implemented | -| `ModifyDBCluster` | ⛔ Not applicable [1](#notes) | -| `ModifyDBClusterEndpoint` | ❌ Not implemented | -| `ModifyDBClusterParameterGroup` | ❌ Not implemented | -| `ModifyDBClusterSnapshotAttribute` | ❌ Not implemented | -| `ModifyDBInstance` | ✅ Implemented | -| `ModifyDBParameterGroup` | ✅ Implemented | -| `ModifyDBProxy` | ❌ Not implemented | -| `ModifyDBProxyEndpoint` | ❌ Not implemented | -| `ModifyDBProxyTargetGroup` | ❌ Not implemented | -| `ModifyDBRecommendation` | ❌ Not implemented | -| `ModifyDBShardGroup` | ❌ Not implemented | -| `ModifyDBSnapshot` | ❌ Not implemented | -| `ModifyDBSnapshotAttribute` | ❌ Not implemented | -| `ModifyDBSubnetGroup` | ❌ Not implemented | -| `ModifyEventSubscription` | ❌ Not implemented | -| `ModifyGlobalCluster` | ❌ Not implemented | -| `ModifyIntegration` | ❌ Not implemented | -| `ModifyOptionGroup` | ⛔ Not applicable [2](#notes) | -| `ModifyTenantDatabase` | ❌ Not implemented | -| `PromoteReadReplica` | ⛔ Not applicable [4](#notes) | -| `PromoteReadReplicaDBCluster` | ❌ Not implemented | -| `PurchaseReservedDBInstancesOffering` | ❌ Not implemented | -| `RebootDBCluster` | ❌ Not implemented | -| `RebootDBInstance` | ✅ Implemented | -| `RebootDBShardGroup` | ❌ Not implemented | -| `RegisterDBProxyTargets` | ❌ Not implemented | -| `RemoveFromGlobalCluster` | ❌ Not implemented | -| `RemoveRoleFromDBCluster` | ❌ Not implemented | -| `RemoveRoleFromDBInstance` | ❌ Not implemented | -| `RemoveSourceIdentifierFromSubscription` | ❌ Not implemented | -| `RemoveTagsFromResource` | ✅ Implemented | -| `ResetDBClusterParameterGroup` | ❌ Not implemented | -| `ResetDBParameterGroup` | ❌ Not implemented | -| `RestoreDBClusterFromS3` | ❌ Not implemented | -| `RestoreDBClusterFromSnapshot` | ❌ Not implemented | -| `RestoreDBClusterToPointInTime` | ❌ Not implemented | -| `RestoreDBInstanceFromDBSnapshot` | ✅ Implemented | -| `RestoreDBInstanceFromS3` | ❌ Not implemented | -| `RestoreDBInstanceToPointInTime` | ⛔ Not applicable [3](#notes) | -| `RevokeDBSecurityGroupIngress` | ❌ Not implemented | -| `StartActivityStream` | ❌ Not implemented | -| `StartDBCluster` | ❌ Not implemented | -| `StartDBInstance` | ✅ Implemented | -| `StartDBInstanceAutomatedBackupsReplication` | ❌ Not implemented | -| `StartExportTask` | ❌ Not implemented | -| `StopActivityStream` | ❌ Not implemented | -| `StopDBCluster` | ❌ Not implemented | -| `StopDBInstance` | ✅ Implemented | -| `StopDBInstanceAutomatedBackupsReplication` | ❌ Not implemented | -| `SwitchoverBlueGreenDeployment` | ❌ Not implemented | -| `SwitchoverGlobalCluster` | ❌ Not implemented | -| `SwitchoverReadReplica` | ❌ Not implemented | - -### Notes - -1. Aurora and Multi-AZ clusters are not offered; a DB instance here is a single VM running the engine directly. -2. Option groups configure engine add-ons for engines this platform does not offer, such as Oracle and SQL Server. -3. Point-in-time restore needs continuous transaction-log archival, which the backup path does not keep. -4. Replication between instances is not offered, so there is no replica to create or promote. +| `CreateDBCluster` | Aurora and Multi-AZ clusters are not offered; a DB instance here is a single VM running the engine directly. | +| `CreateDBInstanceReadReplica` | Replication between instances is not offered, so there is no replica to create or promote. | +| `CreateOptionGroup` | Option groups configure engine add-ons for engines this platform does not offer, such as Oracle and SQL Server. | +| `DeleteDBCluster` | Aurora and Multi-AZ clusters are not offered; a DB instance here is a single VM running the engine directly. | +| `DeleteOptionGroup` | Option groups configure engine add-ons for engines this platform does not offer, such as Oracle and SQL Server. | +| `DescribeDBClusters` | Aurora and Multi-AZ clusters are not offered; a DB instance here is a single VM running the engine directly. | +| `DescribeOptionGroups` | Option groups configure engine add-ons for engines this platform does not offer, such as Oracle and SQL Server. | +| `FailoverDBCluster` | Aurora and Multi-AZ clusters are not offered; a DB instance here is a single VM running the engine directly. | +| `ModifyDBCluster` | Aurora and Multi-AZ clusters are not offered; a DB instance here is a single VM running the engine directly. | +| `ModifyOptionGroup` | Option groups configure engine add-ons for engines this platform does not offer, such as Oracle and SQL Server. | +| `PromoteReadReplica` | Replication between instances is not offered, so there is no replica to create or promote. | +| `RestoreDBInstanceToPointInTime` | Point-in-time restore needs continuous transaction-log archival, which the backup path does not keep. | diff --git a/docs/coverage/sts/README.md b/docs/coverage/sts/README.md index 364184c4c..a3536d488 100644 --- a/docs/coverage/sts/README.md +++ b/docs/coverage/sts/README.md @@ -1,7 +1,7 @@ --- title: "STS API Coverage" seoTitle: "AWS Security Token Service API Coverage — Spinifex Docs" -description: "Every operation in the AWS STS API model and whether Spinifex implements it, covering role assumption, session tokens and web identity federation (IRSA)." +description: "The AWS STS API operations Spinifex implements, covering role assumption, session tokens and web identity federation (IRSA), with those it does not offer." category: "Coverage" sections: - overview @@ -18,7 +18,7 @@ tags: ## Overview -Spinifex implements **5 of the 8** operations (**62.5%**) in the STS `2011-06-15` API model. +Spinifex implements **5 operations** in the STS `2011-06-15` API model. ### Trust policies @@ -32,13 +32,10 @@ Several inputs the model describes are deliberately rejected rather than accepte ### Operations -| Operation | Status | -|---|---| -| `AssumeRole` | ✅ Implemented | -| `AssumeRoleWithSAML` | ❌ Not implemented | -| `AssumeRoleWithWebIdentity` | ✅ Implemented | -| `DecodeAuthorizationMessage` | ❌ Not implemented | -| `GetAccessKeyInfo` | ✅ Implemented | -| `GetCallerIdentity` | ✅ Implemented | -| `GetFederationToken` | ❌ Not implemented | -| `GetSessionToken` | ✅ Implemented | +| Operation | +|---| +| `AssumeRole` | +| `AssumeRoleWithWebIdentity` | +| `GetAccessKeyInfo` | +| `GetCallerIdentity` | +| `GetSessionToken` | diff --git a/internal/awsmodel/coverage.go b/internal/awsmodel/coverage.go index 23df81b14..5dcc0e701 100644 --- a/internal/awsmodel/coverage.go +++ b/internal/awsmodel/coverage.go @@ -140,6 +140,43 @@ func RenderCoverageSummary(coverages []OperationCoverage) string { return report.String() } +// RenderInternalReport renders the full comparison, including the operations +// the published pages leave out. It is not a site page: the docs build renders +// only the slugs it is configured with, and this file is not one of them. +func RenderInternalReport(coverages []OperationCoverage) string { + var report strings.Builder + report.WriteString("# AWS Model Operation Coverage (internal)\n\n") + report.WriteString("Generated by `make aws-model-coverage`. This file is not published: it carries the counts and the unimplemented operations that the pages under this directory deliberately leave out.\n\n") + fmt.Fprintf(&report, "Pinned model source: `aws-sdk-go %s`.\n\n", SourceSDKVersion) + + for _, coverage := range sortedCoverages(coverages) { + fmt.Fprintf(&report, "## %s\n\n", coverage.Service) + if coverage.Opaque { + fmt.Fprintf(&report, "`%s` — not enumerable. %s\n\n", coverage.APIVersion, coverage.Note) + continue + } + fmt.Fprintf(&report, "`%s` — %d of %d modelled operations implemented (%.1f%%), %d stubbed, %d unsupported, %d registered outside the pinned model.\n\n", + coverage.APIVersion, len(coverage.Implemented), len(coverage.Modelled), coverage.ImplementedPercent(), + len(coverage.Stubbed), len(coverage.Unsupported), len(coverage.Extra)) + writeOperationList(&report, "Not implemented", coverage.Missing) + writeOperationList(&report, "Stubbed", coverage.Stubbed) + writeOperationList(&report, "Registered and refused", coverage.Unsupported) + writeOperationList(&report, "Registered outside the pinned model", coverage.Extra) + } + return report.String() +} + +func writeOperationList(report *strings.Builder, heading string, operations []string) { + if len(operations) == 0 { + return + } + fmt.Fprintf(report, "### %s\n\n", heading) + for _, operation := range operations { + fmt.Fprintf(report, "- `%s`\n", operation) + } + report.WriteString("\n") +} + func sortedCoverages(coverages []OperationCoverage) []OperationCoverage { ordered := append([]OperationCoverage(nil), coverages...) sort.Slice(ordered, func(i, j int) bool { return ordered[i].Service < ordered[j].Service }) diff --git a/internal/awsmodel/page.go b/internal/awsmodel/page.go index 7cf85952b..e8bafea32 100644 --- a/internal/awsmodel/page.go +++ b/internal/awsmodel/page.go @@ -21,6 +21,10 @@ const ( StatusOutsideModel = "🔒 Outside the pinned model" ) +// The reason published for an operation a handler refuses without the page +// declaring why. The refusal is mechanical, so the row cannot be silent. +const refusedByHandler = "The handler refuses this operation; the platform does not offer it." + // Frontmatter length rules enforced by the docs site. See docs/README.md. const ( seoTitleSuffix = " — Spinifex Docs" @@ -230,40 +234,31 @@ func validateFrontmatter(owner string, page PageMetadata) error { return nil } -// noteOrder returns the note keys in the order they are published. Sorted by -// key rather than by first use, so adding an operation cannot renumber a note -// that is already published. -func noteOrder(notes map[string]string) []string { - keys := make([]string, 0, len(notes)) - for key := range notes { - keys = append(keys, key) - } - sort.Strings(keys) - return keys -} - -// numberNotes assigns each note its published footnote number, rejecting a note -// nothing references and a reference to a note that does not exist. -func numberNotes(page PageMetadata) (map[string]int, error) { +// validateNotes checks both directions of the note references, rejecting a note +// nothing points at and a reference to a note that does not exist. +func validateNotes(page PageMetadata) error { referenced := map[string]bool{} for operation, key := range page.NotApplicable { if _, ok := page.Notes[key]; !ok { - return nil, fmt.Errorf("awsmodel: coverage page %s: operation %q references undefined note %q", page.Slug, operation, key) + return fmt.Errorf("awsmodel: coverage page %s: operation %q references undefined note %q", page.Slug, operation, key) } referenced[key] = true } - numbering := make(map[string]int, len(page.Notes)) - for index, key := range noteOrder(page.Notes) { + keys := make([]string, 0, len(page.Notes)) + for key := range page.Notes { + keys = append(keys, key) + } + sort.Strings(keys) + for _, key := range keys { if !referenced[key] { - return nil, fmt.Errorf("awsmodel: coverage page %s: note %q is never referenced", page.Slug, key) + return fmt.Errorf("awsmodel: coverage page %s: note %q is never referenced", page.Slug, key) } if page.Notes[key] == "" { - return nil, fmt.Errorf("awsmodel: coverage page %s: note %q is empty", page.Slug, key) + return fmt.Errorf("awsmodel: coverage page %s: note %q is empty", page.Slug, key) } - numbering[key] = index + 1 } - return numbering, nil + return nil } // RenderServicePage renders one publishable coverage page. intro is optional @@ -283,42 +278,90 @@ func RenderServicePage(coverage OperationCoverage, pages PageSet, intro string) return "", fmt.Errorf("awsmodel: %s coverage is not enumerable, so it has no publishable page", coverage.Service) } - var body strings.Builder - writeFrontmatter(&body, page, pages.Category) - fmt.Fprintf(&body, "# %s\n\n## Overview\n\n", page.Title) - - fmt.Fprintf(&body, "Spinifex implements **%d of the %d** operations (**%.1f%%**) in the %s `%s` API model.\n\n", - len(coverage.Implemented), len(coverage.Modelled), coverage.ImplementedPercent(), page.Name, coverage.APIVersion) - - if intro != "" { - body.WriteString(strings.TrimSpace(intro) + "\n\n") + // A page exists to say what the platform serves. A service with nothing + // behind it has no such statement to make. + if len(coverage.Implemented) == 0 { + return "", fmt.Errorf("awsmodel: %s has no implemented operations, so it has no publishable page", coverage.Service) } statuses, err := coverage.OperationStatuses(page) if err != nil { return "", err } - numbering, err := numberNotes(page) - if err != nil { + if err := validateNotes(page); err != nil { return "", err } - body.WriteString("### Operations\n\n| Operation | Status |\n|---|---|\n") - for _, status := range statuses { - if number, ok := numbering[status.NoteKey]; ok { - fmt.Fprintf(&body, "| `%s` | %s [%d](#notes) |\n", status.Operation, status.Status, number) - continue - } - fmt.Fprintf(&body, "| `%s` | %s |\n", status.Operation, status.Status) + var body strings.Builder + writeFrontmatter(&body, page, pages.Category) + fmt.Fprintf(&body, "# %s\n\n## Overview\n\n", page.Title) + + noun := "operations" + if len(coverage.Implemented) == 1 { + noun = "operation" + } + fmt.Fprintf(&body, "Spinifex implements **%d %s** in the %s `%s` API model.\n\n", + len(coverage.Implemented), noun, page.Name, coverage.APIVersion) + + if intro != "" { + body.WriteString(strings.TrimSpace(intro) + "\n\n") } - if len(numbering) > 0 { - body.WriteString("\n### Notes\n\n") - for index, key := range noteOrder(page.Notes) { - fmt.Fprintf(&body, "%d. %s\n", index+1, page.Notes[key]) + writeOperations(&body, statuses) + writeNotApplicable(&body, page, statuses) + return body.String(), nil +} + +// writeOperations publishes the operations the gateway serves. The status +// column is written only where a row needs it: a table whose every cell reads +// "Implemented" says nothing the heading has not. +func writeOperations(body *strings.Builder, statuses []OperationStatus) { + rows := make([]OperationStatus, 0, len(statuses)) + uniform := true + for _, status := range statuses { + if status.Status == StatusNotApplicable || status.Status == StatusNotImplemented { + continue + } + uniform = uniform && status.Status == StatusImplemented + rows = append(rows, status) + } + + if uniform { + body.WriteString("### Operations\n\n| Operation |\n|---|\n") + for _, row := range rows { + fmt.Fprintf(body, "| `%s` |\n", row.Operation) + } + return + } + body.WriteString("### Operations\n\n| Operation | Status |\n|---|---|\n") + for _, row := range rows { + fmt.Fprintf(body, "| `%s` | %s |\n", row.Operation, row.Status) + } +} + +// writeNotApplicable publishes the operations the platform will never serve, +// each with its reason in the row. A refusal reached mechanically carries the +// generic reason, so no row is published without one. +func writeNotApplicable(body *strings.Builder, page PageMetadata, statuses []OperationStatus) { + rows := make([]OperationStatus, 0, len(page.NotApplicable)) + for _, status := range statuses { + if status.Status == StatusNotApplicable { + rows = append(rows, status) } } - return body.String(), nil + if len(rows) == 0 { + return + } + + body.WriteString("\n### Not applicable\n\nThese operations describe AWS-hosted features this platform does not offer.\n\n") + body.WriteString("| Operation | Reason |\n|---|---|\n") + for _, row := range rows { + reason := page.Notes[row.NoteKey] + if reason == "" { + reason = refusedByHandler + } + fmt.Fprintf(body, "| `%s` | %s |\n", row.Operation, reason) + } } // RenderIndexPage renders the cross-service summary that links to each page. @@ -330,15 +373,15 @@ func RenderIndexPage(coverages []OperationCoverage, pages PageSet, intro string) var body strings.Builder writeFrontmatter(&body, pages.Index, pages.Category) fmt.Fprintf(&body, "# %s\n\n## Overview\n\n", pages.Index.Title) - fmt.Fprintf(&body, "Spinifex serves the AWS APIs below. Every page counts the operations in the pinned `aws-sdk-go %s` `api-2.json` model for its service and reports, operation by operation, whether Spinifex implements it.\n\n", SourceSDKVersion) - body.WriteString("| Service | Implemented | Modelled | Coverage |\n|---|---:|---:|---:|\n") + fmt.Fprintf(&body, "Spinifex serves the AWS APIs below. Every page names the operations Spinifex implements from the pinned `aws-sdk-go %s` `api-2.json` model for its service, alongside those the platform does not offer and why.\n\n", SourceSDKVersion) + body.WriteString("| Service | Operations |\n|---|---:|\n") for _, coverage := range sortedCoverages(coverages) { page, ok := pages.Services[coverage.Service] if !ok { continue } - fmt.Fprintf(&body, "| [%s](%s/%s) | %d | %d | %.1f%% |\n", - page.Name, pages.BasePath, page.Slug, len(coverage.Implemented), len(coverage.Modelled), coverage.ImplementedPercent()) + fmt.Fprintf(&body, "| [%s](%s/%s) | %d |\n", + page.Name, pages.BasePath, page.Slug, len(coverage.Implemented)) } if intro != "" { diff --git a/internal/awsmodel/page_test.go b/internal/awsmodel/page_test.go index 3038575aa..74e1ca09b 100644 --- a/internal/awsmodel/page_test.go +++ b/internal/awsmodel/page_test.go @@ -66,7 +66,7 @@ func TestParsePageSetRejectsUnpublishableMetadata(t *testing.T) { } } -func TestRenderServicePageCarriesEveryStatus(t *testing.T) { +func TestRenderServicePageCarriesEveryPublishedStatus(t *testing.T) { pages := testPageSet(t) coverage, err := CompareOperations(STS, DispatchInventory{ Registered: []string{"AssumeRole", "GetCallerIdentity", "GetSessionToken", "PublishInternal"}, @@ -86,13 +86,12 @@ func TestRenderServicePageCarriesEveryStatus(t *testing.T) { `category: "Coverage"`, "sections:\n - overview\n", "# STS API Coverage\n\n## Overview\n", - "Spinifex implements **1 of the 8** operations (**12.5%**) in the STS `2011-06-15` API model.", + "Spinifex implements **1 operation** in the STS `2011-06-15` API model.", "### Scope\n\nHand-written prose.", "| `AssumeRole` | " + StatusImplemented + " |", "| `GetSessionToken` | " + StatusStub + " |", - "| `GetCallerIdentity` | " + StatusNotApplicable + " |", - "| `AssumeRoleWithSAML` | " + StatusNotImplemented + " |", "| `PublishInternal` | " + StatusOutsideModel + " |", + "### Not applicable\n", } { if !strings.Contains(page, want) { t.Errorf("page does not contain %q:\n%s", want, page) @@ -103,9 +102,10 @@ func TestRenderServicePageCarriesEveryStatus(t *testing.T) { } } -// A modelled operation is never summarised as a count: a visitor asking whether -// Spinifex runs their workload is asking about the absent operations too. -func TestRenderServicePageRowsEveryModelledOperation(t *testing.T) { +// A published page states what the platform serves. An operation Spinifex has +// not implemented is not a row on it, and no count invites reading the page as +// a score against AWS. +func TestRenderServicePagePublishesNeitherGapsNorScores(t *testing.T) { pages := testPageSet(t) coverage, err := CompareOperations(STS, DispatchInventory{Registered: []string{"AssumeRole"}}) if err != nil { @@ -116,11 +116,36 @@ func TestRenderServicePageRowsEveryModelledOperation(t *testing.T) { if err != nil { t.Fatal(err) } - for _, operation := range coverage.Modelled { - if !strings.Contains(page, "| `"+operation+"` |") { - t.Errorf("page has no row for modelled operation %q", operation) + if strings.Contains(page, StatusNotImplemented) { + t.Errorf("page publishes an unimplemented operation:\n%s", page) + } + if strings.Contains(page, "%") || strings.Contains(page, " of the ") { + t.Errorf("page publishes a coverage score:\n%s", page) + } + for _, operation := range coverage.Missing { + if strings.Contains(page, "| `"+operation+"` |") { + t.Errorf("page has a row for unimplemented operation %q", operation) } } + for _, operation := range coverage.Implemented { + if !strings.Contains(page, "| `"+operation+"` |") { + t.Errorf("page has no row for implemented operation %q", operation) + } + } +} + +// A service page says what Spinifex serves, so a service that serves nothing +// has no page rather than an empty one. +func TestRenderServicePageRefusesAServiceWithNoImplementation(t *testing.T) { + pages := testPageSet(t) + coverage, err := CompareOperations(STS, DispatchInventory{}) + if err != nil { + t.Fatal(err) + } + + if _, err := RenderServicePage(coverage, pages, ""); err == nil { + t.Fatal("RenderServicePage published a page for a service with no implemented operations") + } } func TestRenderServicePageWithoutIntro(t *testing.T) { @@ -235,13 +260,13 @@ func TestOperationStatusesRejectsAnInternalRouteThatIsModelled(t *testing.T) { } } -// A footnote reused across operations is written once, and both directions of -// the reference are checked so neither side can rot. -func TestRenderServicePageFootnotesSharedNotes(t *testing.T) { +// Every not-applicable row carries its reason inline, so a visitor reads why an +// operation is absent without following a footnote. +func TestRenderServicePageGivesEveryNotApplicableRowAReason(t *testing.T) { pages := testPageSet(t) iam := pages.Services[IAM] - if len(iam.Notes) == 0 { - t.Skip("no notes are declared for IAM") + if len(iam.NotApplicable) == 0 { + t.Skip("no not-applicable operations are declared for IAM") } coverage, err := CompareOperations(IAM, DispatchInventory{Registered: []string{"CreateUser"}}) if err != nil { @@ -252,19 +277,37 @@ func TestRenderServicePageFootnotesSharedNotes(t *testing.T) { if err != nil { t.Fatal(err) } - if !strings.Contains(page, "\n### Notes\n\n1. ") { - t.Errorf("page has no numbered notes section:\n%s", page) + if !strings.Contains(page, "\n### Not applicable\n") { + t.Fatalf("page has no not-applicable section:\n%s", page) } - if !strings.Contains(page, "| `UploadSSHPublicKey` | "+StatusNotApplicable+" [") { - t.Errorf("a declared operation carries no footnote reference:\n%s", page) - } - for _, text := range iam.Notes { - if strings.Count(page, text) != 1 { - t.Errorf("note %q is not written exactly once", text) + for operation, key := range iam.NotApplicable { + if !strings.Contains(page, "| `"+operation+"` | "+iam.Notes[key]+" |") { + t.Errorf("operation %q carries no reason:\n%s", operation, page) } } } +// A refusal the dispatch tables report, with no declared reason behind it, is +// still published with one. +func TestRenderServicePageGivesAnUndeclaredRefusalAReason(t *testing.T) { + pages := testPageSet(t) + coverage, err := CompareOperations(STS, DispatchInventory{ + Registered: []string{"AssumeRole", "GetFederationToken"}, + Unsupported: []string{"GetFederationToken"}, + }) + if err != nil { + t.Fatal(err) + } + + page, err := RenderServicePage(coverage, pages, "") + if err != nil { + t.Fatal(err) + } + if !strings.Contains(page, "| `GetFederationToken` | The handler refuses this operation") { + t.Errorf("an undeclared refusal is published with no reason:\n%s", page) + } +} + func TestRenderServicePageRejectsBrokenNoteReferences(t *testing.T) { pages := testPageSet(t) coverage, err := CompareOperations(STS, DispatchInventory{Registered: []string{"AssumeRole"}}) @@ -330,6 +373,9 @@ func TestRenderIndexPageLinksEveryPublishedService(t *testing.T) { if err != nil { t.Fatal(err) } + if strings.Contains(index, "%") { + t.Errorf("index publishes a coverage score:\n%s", index) + } for _, service := range Services() { page, published := pages.Services[service] if !published { diff --git a/internal/awsmodel/write.go b/internal/awsmodel/write.go index 7934e6dda..f72fae438 100644 --- a/internal/awsmodel/write.go +++ b/internal/awsmodel/write.go @@ -9,9 +9,10 @@ import ( ) const ( - pagesFile = "pages.json" - introFile = "intro.md" - pageFile = "README.md" + pagesFile = "pages.json" + introFile = "intro.md" + pageFile = "README.md" + internalFile = "internal-report.md" ) // WritePages renders the publishable coverage pages into outputDir, which must @@ -54,7 +55,15 @@ func WritePages(outputDir string, coverages []OperationCoverage) error { if err != nil { return err } - return writePage(outputDir, pages.Index.Slug, body) + if err := writePage(outputDir, pages.Index.Slug, body); err != nil { + return err + } + + report := RenderInternalReport(coverages) + if err := os.WriteFile(filepath.Join(outputDir, internalFile), []byte(report), 0o600); err != nil { + return fmt.Errorf("awsmodel: write internal coverage report: %w", err) + } + return nil } // readIntro returns the hand-written prose for a page, or "" where the page has diff --git a/internal/awsmodel/write_test.go b/internal/awsmodel/write_test.go index ca6b64162..195d4e1d4 100644 --- a/internal/awsmodel/write_test.go +++ b/internal/awsmodel/write_test.go @@ -44,7 +44,7 @@ func TestWritePagesWritesAServicePageAndTheIndex(t *testing.T) { if err != nil { t.Fatal(err) } - if !strings.Contains(string(service), "| `AssumeRole` | "+StatusImplemented+" |") { + if !strings.Contains(string(service), "| `AssumeRole` |") { t.Errorf("service page is missing its operation table:\n%s", service) } index, err := os.ReadFile(filepath.Join(dir, "README.md")) @@ -56,6 +56,30 @@ func TestWritePagesWritesAServicePageAndTheIndex(t *testing.T) { } } +// The gaps the pages leave out are still written down, in a file the docs site +// is not configured to render. +func TestWritePagesWritesTheInternalReport(t *testing.T) { + dir := stagePages(t) + coverage := stsCoverage(t) + + if err := WritePages(dir, []OperationCoverage{coverage}); err != nil { + t.Fatal(err) + } + + report, err := os.ReadFile(filepath.Join(dir, "internal-report.md")) + if err != nil { + t.Fatal(err) + } + for _, operation := range coverage.Missing { + if !strings.Contains(string(report), "- `"+operation+"`") { + t.Errorf("internal report omits unimplemented operation %q:\n%s", operation, report) + } + } + if !strings.Contains(string(report), "% ") && !strings.Contains(string(report), "%)") { + t.Errorf("internal report carries no coverage figure:\n%s", report) + } +} + func TestWritePagesIncludesAnIntroAndOverwritesTheGeneratedPage(t *testing.T) { dir := stagePages(t) pageDir := filepath.Join(dir, "sts")