From 2914c03716dccf5bc5b62d34cc7395f2e54fe5e1 Mon Sep 17 00:00:00 2001 From: aws-sdk-python-automation Date: Fri, 5 Jun 2026 18:04:33 +0000 Subject: [PATCH 01/18] Merge customizations for QuickSight --- .../2018-04-01/paginators-1.sdk-extras.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/awscli/botocore/data/quicksight/2018-04-01/paginators-1.sdk-extras.json b/awscli/botocore/data/quicksight/2018-04-01/paginators-1.sdk-extras.json index a04d263dc65a..286dc83b2171 100644 --- a/awscli/botocore/data/quicksight/2018-04-01/paginators-1.sdk-extras.json +++ b/awscli/botocore/data/quicksight/2018-04-01/paginators-1.sdk-extras.json @@ -239,6 +239,18 @@ "Status", "RequestId" ] + }, + "ListKnowledgeBases": { + "non_aggregate_keys": [ + "Status", + "RequestId" + ] + }, + "SearchKnowledgeBases": { + "non_aggregate_keys": [ + "Status", + "RequestId" + ] } } } From f763d322a9733d667958fb97b5c9899dac7e621b Mon Sep 17 00:00:00 2001 From: aws-sdk-python-automation Date: Fri, 5 Jun 2026 18:04:39 +0000 Subject: [PATCH 02/18] Update to latest models --- .../api-change-emrserverless-14774.json | 5 + .../api-change-mediaconvert-56368.json | 5 + .../api-change-paymentcryptography-32029.json | 5 + .../api-change-quicksight-48259.json | 5 + .../api-change-sagemaker-10477.json | 5 + .../emr-serverless/2021-07-13/service-2.json | 18 +- .../mediaconvert/2017-08-29/service-2.json | 316 ++++- .../2021-09-14/service-2.json | 10 +- .../quicksight/2018-04-01/paginators-1.json | 12 + .../data/quicksight/2018-04-01/service-2.json | 1205 +++++++++++++++++ .../data/sagemaker/2017-07-24/service-2.json | 53 + 11 files changed, 1601 insertions(+), 38 deletions(-) create mode 100644 .changes/next-release/api-change-emrserverless-14774.json create mode 100644 .changes/next-release/api-change-mediaconvert-56368.json create mode 100644 .changes/next-release/api-change-paymentcryptography-32029.json create mode 100644 .changes/next-release/api-change-quicksight-48259.json create mode 100644 .changes/next-release/api-change-sagemaker-10477.json diff --git a/.changes/next-release/api-change-emrserverless-14774.json b/.changes/next-release/api-change-emrserverless-14774.json new file mode 100644 index 000000000000..b71e979def6f --- /dev/null +++ b/.changes/next-release/api-change-emrserverless-14774.json @@ -0,0 +1,5 @@ +{ + "type": "api-change", + "category": "``emr-serverless``", + "description": "Adds support for updating max capacity and custom fields while application is started" +} diff --git a/.changes/next-release/api-change-mediaconvert-56368.json b/.changes/next-release/api-change-mediaconvert-56368.json new file mode 100644 index 000000000000..689e469c81e6 --- /dev/null +++ b/.changes/next-release/api-change-mediaconvert-56368.json @@ -0,0 +1,5 @@ +{ + "type": "api-change", + "category": "``mediaconvert``", + "description": "Adds support for configurable number of Clear Lead segments at the beginning of encrypted output. Adds support for multiple trickplay variants." +} diff --git a/.changes/next-release/api-change-paymentcryptography-32029.json b/.changes/next-release/api-change-paymentcryptography-32029.json new file mode 100644 index 000000000000..da737fe78399 --- /dev/null +++ b/.changes/next-release/api-change-paymentcryptography-32029.json @@ -0,0 +1,5 @@ +{ + "type": "api-change", + "category": "``payment-cryptography``", + "description": "Adds CloudFormation support for resource-based policies on AWS Payment Cryptography keys." +} diff --git a/.changes/next-release/api-change-quicksight-48259.json b/.changes/next-release/api-change-quicksight-48259.json new file mode 100644 index 000000000000..2188cebbe998 --- /dev/null +++ b/.changes/next-release/api-change-quicksight-48259.json @@ -0,0 +1,5 @@ +{ + "type": "api-change", + "category": "``quicksight``", + "description": "Adds support for Knowledge Base APIs and Index Capacity API" +} diff --git a/.changes/next-release/api-change-sagemaker-10477.json b/.changes/next-release/api-change-sagemaker-10477.json new file mode 100644 index 000000000000..c5deb05cca1b --- /dev/null +++ b/.changes/next-release/api-change-sagemaker-10477.json @@ -0,0 +1,5 @@ +{ + "type": "api-change", + "category": "``sagemaker``", + "description": "This release adds support for MLflow experiment tracking in SageMaker inference optimization. CreateAIRecommendationJob and CreateAIBenchmarkJob now accept an optional OutputConfig.MlflowConfig (MLflow App ARN, experiment, run name) to stream benchmark metrics and artifacts to your own MLflow App." +} diff --git a/awscli/botocore/data/emr-serverless/2021-07-13/service-2.json b/awscli/botocore/data/emr-serverless/2021-07-13/service-2.json index ac66590c39dc..67b42f0e96f3 100644 --- a/awscli/botocore/data/emr-serverless/2021-07-13/service-2.json +++ b/awscli/botocore/data/emr-serverless/2021-07-13/service-2.json @@ -996,8 +996,7 @@ }, "EntryPointArgument":{ "type":"string", - "min":1, - "pattern":".*\\S.*", + "min":0, "sensitive":true }, "EntryPointArguments":{ @@ -1196,7 +1195,7 @@ }, "authToken":{ "shape":"SessionAuthToken", - "documentation":"

Authentication token for accessing the session endpoint.

" + "documentation":"

The authentication token for connecting to the session endpoint. Call GetSessionEndpoint again to obtain a new token before it expires.

" }, "authTokenExpiresAt":{ "shape":"Date", @@ -1320,6 +1319,10 @@ "resolvedImageDigest":{ "shape":"ImageDigest", "documentation":"

The SHA256 digest of the image URI. This indicates which specific image the application is configured for. The image digest doesn't exist until an application has started.

" + }, + "applicationLevelDigestResolution":{ + "shape":"Boolean", + "documentation":"

Boolean value indicating if the digest resolution is application level or workload level. If true, a custom image URI is resolved at application start time and all workloads submitted will use that image digest. If false, the custom image URI is resolved at the workload submission time.

" } }, "documentation":"

The applied image configuration.

" @@ -1330,6 +1333,10 @@ "imageUri":{ "shape":"ImageUri", "documentation":"

The URI of an image in the Amazon ECR registry. This field is required when you create a new application. If you leave this field blank in an update, Amazon EMR will remove the image configuration.

" + }, + "applicationLevelDigestResolution":{ + "shape":"Boolean", + "documentation":"

Boolean value indicating if the digest resolution is application level or workload level. If true, a custom image URI is resolved at application start time and all workloads submitted will use that image digest. If false, the custom image URI is resolved at the workload submission time.

" } }, "documentation":"

The image configuration.

" @@ -1559,6 +1566,11 @@ "queuedDurationMilliseconds":{ "shape":"Long", "documentation":"

The total time for a job in the QUEUED state in milliseconds.

" + }, + "imageConfiguration":{"shape":"ImageConfiguration"}, + "workerTypeSpecifications":{ + "shape":"WorkerTypeSpecificationMap", + "documentation":"

The specification applied to each worker type. Includes the JobRun-level ImageConfiguration when the applicationLevelDigestResolution is false for the application.

" } }, "documentation":"

Information about a job run. A job run is a unit of work, such as a Spark JAR, Hive query, or SparkSQL query, that you submit to an Amazon EMR Serverless application.

" diff --git a/awscli/botocore/data/mediaconvert/2017-08-29/service-2.json b/awscli/botocore/data/mediaconvert/2017-08-29/service-2.json index 752f557721fc..bdcd9e7b000a 100644 --- a/awscli/botocore/data/mediaconvert/2017-08-29/service-2.json +++ b/awscli/botocore/data/mediaconvert/2017-08-29/service-2.json @@ -1366,7 +1366,7 @@ "documentation": "The service couldn't complete your request because there is a conflict with the current state of the resource." } ], - "documentation": "Add tags to a MediaConvert queue, preset, or job template. For information about tagging, see the User Guide at https://docs.aws.amazon.com/mediaconvert/latest/ug/tagging-resources.html" + "documentation": "Add tags to a MediaConvert queue, preset, job, or job template. For information about tagging, see the User Guide at https://docs.aws.amazon.com/mediaconvert/latest/ug/tagging-mediaconvert-resources.html." }, "UntagResource": { "name": "UntagResource", @@ -1411,7 +1411,7 @@ "documentation": "The service couldn't complete your request because there is a conflict with the current state of the resource." } ], - "documentation": "Remove tags from a MediaConvert queue, preset, or job template. For information about tagging, see the User Guide at https://docs.aws.amazon.com/mediaconvert/latest/ug/tagging-resources.html" + "documentation": "Remove tags from a MediaConvert queue, preset, job, or job template. For information about tagging, see the User Guide at https://docs.aws.amazon.com/mediaconvert/latest/ug/tagging-mediaconvert-resources.html." }, "UpdateJobTemplate": { "name": "UpdateJobTemplate", @@ -2469,6 +2469,11 @@ "locationName": "languageCode", "documentation": "The language code of the audio track, in three character ISO 639-3 format." }, + "ObjectCount": { + "shape": "__integer", + "locationName": "objectCount", + "documentation": "The number of audio objects in an object-based or immersive audio track. This field is present for codecs that support object-based audio, such as E-AC-3 with Joint Object Coding (JOC) or IAMF. This field is null when the audio track does not contain object-based audio metadata." + }, "SampleRate": { "shape": "__integer", "locationName": "sampleRate", @@ -3611,10 +3616,10 @@ "CmafEncryptionSettings": { "type": "structure", "members": { - "ClearLead": { - "shape": "HlsClearLead", - "locationName": "clearLead", - "documentation": "Enable Clear Lead DRM to reduce video startup latency by leaving the first segment unencrypted while DRM license retrieval occurs in parallel. This optimization allows immediate playback startup while maintaining content protection for the remainder of the stream. When enabled, the first output segment remains fully unencrypted, and encryption begins at the start of the second segment. The HLS manifest will omit #EXT-X-KEY tags during the clear segment and insert the first #EXT-X-KEY immediately before the first encrypted fragment. This feature is supported exclusively for CMAF HLS (fMP4) outputs and is compatible with all existing key provider integrations (SPEKE v1, SPEKE v2, and Static Key encryption). Supported codecs: H.264, H.265, and AV1 video codecs, and AAC audio codec. Choose Enabled to activate Clear Lead DRM optimization. Choose Disabled to use standard encryption where all segments are encrypted from the beginning." + "ClearLeadSegments": { + "shape": "__integerMin1Max9999", + "locationName": "clearLeadSegments", + "documentation": "Reduce video startup latency by leaving initial segments unencrypted while DRM license retrieval occurs in parallel. This optimization allows immediate playback startup while maintaining content protection for the remainder of the stream. Specify the number of initial segments to leave unencrypted. Omit this field to disable Clear Lead. The HLS manifest will omit #EXT-X-KEY tags during clear segments and insert the first #EXT-X-KEY immediately before the first encrypted segment. Because encryption is applied at the fragment level, the actual duration of unencrypted content may be slightly longer than expected if the segment length is not evenly divisible by the fragment length. In such cases, encryption begins at the next fragment boundary after the specified clear lead segments, rather than at the exact segment boundary. This feature is supported exclusively for CMAF HLS (fMP4) outputs and is compatible with all existing key provider integrations (SPEKE v1, SPEKE v2, and Static Key encryption). Supported codecs: H.264, H.265, and AV1 video codecs, and AAC audio codec." }, "ConstantInitializationVector": { "shape": "__stringMin32Max32Pattern09aFAF32", @@ -3713,13 +3718,18 @@ "ImageBasedTrickPlay": { "shape": "CmafImageBasedTrickPlay", "locationName": "imageBasedTrickPlay", - "documentation": "Specify whether MediaConvert generates images for trick play. Keep the default value, None, to not generate any images. Choose Thumbnail to generate tiled thumbnails. Choose Thumbnail and full frame to generate tiled thumbnails and full-resolution images of single frames. When you enable Write HLS manifest, MediaConvert creates a child manifest for each set of images that you generate and adds corresponding entries to the parent manifest. When you enable Write DASH manifest, MediaConvert adds an entry in the .mpd manifest for each set of images that you generate. A common application for these images is Roku trick mode. The thumbnails and full-frame images that MediaConvert creates with this feature are compatible with this Roku specification: https://developer.roku.com/docs/developer-program/media-playback/trick-mode/hls-and-dash.md" + "documentation": "Specify whether MediaConvert generates images for trick play. Keep the default value, None, to not generate any images. Choose Thumbnail to generate tiled thumbnails. Choose Thumbnail and full frame to generate tiled thumbnails and full-resolution images of single frames. Choose Advanced to customize thumbnail and tile settings for a single trick play variant. Choose Variants to specify multiple trick play variants, each with its own thumbnail and tile settings. When you enable Write HLS manifest, MediaConvert creates a child manifest for each set of images that you generate and adds corresponding entries to the parent manifest. When you enable Write DASH manifest, MediaConvert adds an entry in the .mpd manifest for each set of images that you generate. A common application for these images is Roku trick mode. The thumbnails and full-frame images that MediaConvert creates with this feature are compatible with this Roku specification: https://developer.roku.com/docs/developer-program/media-playback/trick-mode/hls-and-dash.md" }, "ImageBasedTrickPlaySettings": { "shape": "CmafImageBasedTrickPlaySettings", "locationName": "imageBasedTrickPlaySettings", "documentation": "Tile and thumbnail settings applicable when imageBasedTrickPlay is ADVANCED" }, + "ImageBasedTrickPlayVariants": { + "shape": "__listOfCmafImageBasedTrickPlayVariant", + "locationName": "imageBasedTrickPlayVariants", + "documentation": "Specify multiple image-based trick play variants. Each entry creates a separate set of JPEG tile images with its own resolution, tile layout, and cadence settings. Set imageBasedTrickPlay to VARIANTS when using this setting." + }, "ManifestCompression": { "shape": "CmafManifestCompression", "locationName": "manifestCompression", @@ -3805,12 +3815,13 @@ }, "CmafImageBasedTrickPlay": { "type": "string", - "documentation": "Specify whether MediaConvert generates images for trick play. Keep the default value, None, to not generate any images. Choose Thumbnail to generate tiled thumbnails. Choose Thumbnail and full frame to generate tiled thumbnails and full-resolution images of single frames. When you enable Write HLS manifest, MediaConvert creates a child manifest for each set of images that you generate and adds corresponding entries to the parent manifest. When you enable Write DASH manifest, MediaConvert adds an entry in the .mpd manifest for each set of images that you generate. A common application for these images is Roku trick mode. The thumbnails and full-frame images that MediaConvert creates with this feature are compatible with this Roku specification: https://developer.roku.com/docs/developer-program/media-playback/trick-mode/hls-and-dash.md", + "documentation": "Specify whether MediaConvert generates images for trick play. Keep the default value, None, to not generate any images. Choose Thumbnail to generate tiled thumbnails. Choose Thumbnail and full frame to generate tiled thumbnails and full-resolution images of single frames. Choose Advanced to customize thumbnail and tile settings for a single trick play variant. Choose Variants to specify multiple trick play variants, each with its own thumbnail and tile settings. When you enable Write HLS manifest, MediaConvert creates a child manifest for each set of images that you generate and adds corresponding entries to the parent manifest. When you enable Write DASH manifest, MediaConvert adds an entry in the .mpd manifest for each set of images that you generate. A common application for these images is Roku trick mode. The thumbnails and full-frame images that MediaConvert creates with this feature are compatible with this Roku specification: https://developer.roku.com/docs/developer-program/media-playback/trick-mode/hls-and-dash.md", "enum": [ "NONE", "THUMBNAIL", "THUMBNAIL_AND_FULLFRAME", - "ADVANCED" + "ADVANCED", + "VARIANTS" ] }, "CmafImageBasedTrickPlaySettings": { @@ -3839,7 +3850,7 @@ "TileHeight": { "shape": "__integerMin1Max2048", "locationName": "tileHeight", - "documentation": "Number of thumbnails in each column of a tile image. Set a value between 2 and 2048. Must be divisible by 2." + "documentation": "Number of thumbnails in each column of a tile image. Set a value between 1 and 2048." }, "TileWidth": { "shape": "__integerMin1Max512", @@ -3849,6 +3860,42 @@ }, "documentation": "Tile and thumbnail settings applicable when imageBasedTrickPlay is ADVANCED" }, + "CmafImageBasedTrickPlayVariant": { + "type": "structure", + "members": { + "IntervalCadence": { + "shape": "CmafIntervalCadence", + "locationName": "intervalCadence", + "documentation": "The cadence MediaConvert follows for generating thumbnails. If set to FOLLOW_IFRAME, MediaConvert generates thumbnails for each IDR frame in the output (matching the GOP cadence). If set to FOLLOW_CUSTOM, MediaConvert generates thumbnails according to the interval you specify in thumbnailInterval. If set to FOLLOW_SEGMENTATION, MediaConvert generates thumbnail playlist entries that align exactly with video segment boundaries. FOLLOW_SEGMENTATION requires 1x1 tiling." + }, + "ThumbnailHeight": { + "shape": "__integerMin2Max4096", + "locationName": "thumbnailHeight", + "documentation": "Height of each thumbnail within each tile image, in pixels. Leave blank to maintain aspect ratio with thumbnail width. If following the aspect ratio would lead to a total tile height greater than 4096, then the job will be rejected. Must be divisible by 2." + }, + "ThumbnailInterval": { + "shape": "__doubleMin0Max2147483647", + "locationName": "thumbnailInterval", + "documentation": "Enter the interval, in seconds, that MediaConvert uses to generate thumbnails. If the interval you enter doesn't align with the output frame rate, MediaConvert automatically rounds the interval to align with the output frame rate. For example, if the output frame rate is 29.97 frames per second and you enter 5, MediaConvert uses a 150 frame interval to generate thumbnails." + }, + "ThumbnailWidth": { + "shape": "__integerMin8Max4096", + "locationName": "thumbnailWidth", + "documentation": "Width of each thumbnail within each tile image, in pixels. Default is 312. Must be divisible by 8." + }, + "TileHeight": { + "shape": "__integerMin1Max2048", + "locationName": "tileHeight", + "documentation": "Number of thumbnails in each column of a tile image. Set a value between 1 and 2048." + }, + "TileWidth": { + "shape": "__integerMin1Max512", + "locationName": "tileWidth", + "documentation": "Number of thumbnails in each row of a tile image. Set a value between 1 and 512." + } + }, + "documentation": "Settings for one image-based trick play variant. Each variant produces its own set of JPEG tile images and corresponding manifest entries." + }, "CmafInitializationVectorInManifest": { "type": "string", "documentation": "When you use DRM with CMAF outputs, choose whether the service writes the 128-bit encryption initialization vector in the HLS and DASH manifests.", @@ -4168,6 +4215,7 @@ "AC3", "EAC3", "FLAC", + "MP2", "MP3", "OPUS", "PCM", @@ -4215,6 +4263,11 @@ "locationName": "colorPrimaries", "documentation": "The color space primaries of the video track, defining the red, green, and blue color coordinates used for the video. This information helps ensure accurate color reproduction during playback and transcoding." }, + "ContentLightLevel": { + "shape": "ContentLightLevel", + "locationName": "contentLightLevel", + "documentation": "Content light level information (CTA-861.3). Describes the light level characteristics of the content." + }, "Height": { "shape": "__integer", "locationName": "height", @@ -4235,6 +4288,11 @@ "locationName": "profile", "documentation": "The codec profile used to encode the video. Profiles define specific feature sets and capabilities within a codec standard. For example, H.264 profiles include Baseline, Main, and High, each supporting different encoding features and complexity levels." }, + "Rotation": { + "shape": "__integer", + "locationName": "rotation", + "documentation": "The clockwise rotation angle of the video, in degrees, as specified in the codec bitstream via a Display Orientation SEI message (payload type 47 for both H.264 and H.265). This field is null when the video essence does not contain a Display Orientation SEI message or when the rotation is 0 degrees." + }, "ScanType": { "shape": "__string", "locationName": "scanType", @@ -4443,7 +4501,7 @@ "Format": { "shape": "Format", "locationName": "format", - "documentation": "The format of your media file. For example: MP4, QuickTime (MOV), Matroska (MKV), WebM, MXF, Wave, AVI, or MPEG-TS. Note that this will be blank if your media file has a format that the MediaConvert Probe operation does not recognize." + "documentation": "The format of your media file. For example: MP4, QuickTime (MOV), Matroska (MKV), WebM, MXF, Wave, AVI, MPEG-TS, or MPEG-PS. Note that this will be blank if your media file has a format that the MediaConvert Probe operation does not recognize." }, "StartTimecode": { "shape": "__string", @@ -4529,6 +4587,22 @@ "Y4M" ] }, + "ContentLightLevel": { + "type": "structure", + "members": { + "MaxContentLightLevel": { + "shape": "__integer", + "locationName": "maxContentLightLevel", + "documentation": "Maximum content light level (MaxCLL), in cd/m²." + }, + "MaxFrameAverageLightLevel": { + "shape": "__integer", + "locationName": "maxFrameAverageLightLevel", + "documentation": "Maximum frame-average light level (MaxFALL), in cd/m²." + } + }, + "documentation": "Content light level information (CTA-861.3). Describes the light level characteristics of the content." + }, "CopyProtectionAction": { "type": "string", "documentation": "The action to take on copy and redistribution control XDS packets. If you select PASSTHROUGH, packets will not be changed. If you select STRIP, any packets will be removed in output captions.", @@ -4917,13 +4991,18 @@ "ImageBasedTrickPlay": { "shape": "DashIsoImageBasedTrickPlay", "locationName": "imageBasedTrickPlay", - "documentation": "Specify whether MediaConvert generates images for trick play. Keep the default value, None, to not generate any images. Choose Thumbnail to generate tiled thumbnails. Choose Thumbnail and full frame to generate tiled thumbnails and full-resolution images of single frames. MediaConvert adds an entry in the .mpd manifest for each set of images that you generate. A common application for these images is Roku trick mode. The thumbnails and full-frame images that MediaConvert creates with this feature are compatible with this Roku specification: https://developer.roku.com/docs/developer-program/media-playback/trick-mode/hls-and-dash.md" + "documentation": "Specify whether MediaConvert generates images for trick play. Keep the default value, None, to not generate any images. Choose Thumbnail to generate tiled thumbnails. Choose Thumbnail and full frame to generate tiled thumbnails and full-resolution images of single frames. Choose Advanced to customize thumbnail and tile settings for a single trick play variant. Choose Variants to specify multiple trick play variants, each with its own thumbnail and tile settings. MediaConvert adds an entry in the .mpd manifest for each set of images that you generate. A common application for these images is Roku trick mode. The thumbnails and full-frame images that MediaConvert creates with this feature are compatible with this Roku specification: https://developer.roku.com/docs/developer-program/media-playback/trick-mode/hls-and-dash.md" }, "ImageBasedTrickPlaySettings": { "shape": "DashIsoImageBasedTrickPlaySettings", "locationName": "imageBasedTrickPlaySettings", "documentation": "Tile and thumbnail settings applicable when imageBasedTrickPlay is ADVANCED" }, + "ImageBasedTrickPlayVariants": { + "shape": "__listOfDashIsoImageBasedTrickPlayVariant", + "locationName": "imageBasedTrickPlayVariants", + "documentation": "Specify multiple image-based trick play variants. Each entry creates a separate set of JPEG tile images with its own resolution, tile layout, and cadence settings. Set imageBasedTrickPlay to VARIANTS when using this setting." + }, "MinBufferTime": { "shape": "__integerMin0Max2147483647", "locationName": "minBufferTime", @@ -4987,12 +5066,13 @@ }, "DashIsoImageBasedTrickPlay": { "type": "string", - "documentation": "Specify whether MediaConvert generates images for trick play. Keep the default value, None, to not generate any images. Choose Thumbnail to generate tiled thumbnails. Choose Thumbnail and full frame to generate tiled thumbnails and full-resolution images of single frames. MediaConvert adds an entry in the .mpd manifest for each set of images that you generate. A common application for these images is Roku trick mode. The thumbnails and full-frame images that MediaConvert creates with this feature are compatible with this Roku specification: https://developer.roku.com/docs/developer-program/media-playback/trick-mode/hls-and-dash.md", + "documentation": "Specify whether MediaConvert generates images for trick play. Keep the default value, None, to not generate any images. Choose Thumbnail to generate tiled thumbnails. Choose Thumbnail and full frame to generate tiled thumbnails and full-resolution images of single frames. Choose Advanced to customize thumbnail and tile settings for a single trick play variant. Choose Variants to specify multiple trick play variants, each with its own thumbnail and tile settings. MediaConvert adds an entry in the .mpd manifest for each set of images that you generate. A common application for these images is Roku trick mode. The thumbnails and full-frame images that MediaConvert creates with this feature are compatible with this Roku specification: https://developer.roku.com/docs/developer-program/media-playback/trick-mode/hls-and-dash.md", "enum": [ "NONE", "THUMBNAIL", "THUMBNAIL_AND_FULLFRAME", - "ADVANCED" + "ADVANCED", + "VARIANTS" ] }, "DashIsoImageBasedTrickPlaySettings": { @@ -5021,7 +5101,7 @@ "TileHeight": { "shape": "__integerMin1Max2048", "locationName": "tileHeight", - "documentation": "Number of thumbnails in each column of a tile image. Set a value between 2 and 2048. Must be divisible by 2." + "documentation": "Number of thumbnails in each column of a tile image. Set a value between 1 and 2048." }, "TileWidth": { "shape": "__integerMin1Max512", @@ -5031,6 +5111,42 @@ }, "documentation": "Tile and thumbnail settings applicable when imageBasedTrickPlay is ADVANCED" }, + "DashIsoImageBasedTrickPlayVariant": { + "type": "structure", + "members": { + "IntervalCadence": { + "shape": "DashIsoIntervalCadence", + "locationName": "intervalCadence", + "documentation": "The cadence MediaConvert follows for generating thumbnails. If set to FOLLOW_IFRAME, MediaConvert generates thumbnails for each IDR frame in the output (matching the GOP cadence). If set to FOLLOW_CUSTOM, MediaConvert generates thumbnails according to the interval you specify in thumbnailInterval. If set to FOLLOW_SEGMENTATION, MediaConvert generates thumbnail playlist entries that align exactly with video segment boundaries. FOLLOW_SEGMENTATION requires 1x1 tiling." + }, + "ThumbnailHeight": { + "shape": "__integerMin2Max4096", + "locationName": "thumbnailHeight", + "documentation": "Height of each thumbnail within each tile image, in pixels. Leave blank to maintain aspect ratio with thumbnail width. If following the aspect ratio would lead to a total tile height greater than 4096, then the job will be rejected. Must be divisible by 2." + }, + "ThumbnailInterval": { + "shape": "__doubleMin0Max2147483647", + "locationName": "thumbnailInterval", + "documentation": "Enter the interval, in seconds, that MediaConvert uses to generate thumbnails. If the interval you enter doesn't align with the output frame rate, MediaConvert automatically rounds the interval to align with the output frame rate. For example, if the output frame rate is 29.97 frames per second and you enter 5, MediaConvert uses a 150 frame interval to generate thumbnails." + }, + "ThumbnailWidth": { + "shape": "__integerMin8Max4096", + "locationName": "thumbnailWidth", + "documentation": "Width of each thumbnail within each tile image, in pixels. Default is 312. Must be divisible by 8." + }, + "TileHeight": { + "shape": "__integerMin1Max2048", + "locationName": "tileHeight", + "documentation": "Number of thumbnails in each column of a tile image. Set a value between 1 and 2048." + }, + "TileWidth": { + "shape": "__integerMin1Max512", + "locationName": "tileWidth", + "documentation": "Number of thumbnails in each row of a tile image. Set a value between 1 and 512." + } + }, + "documentation": "Settings for one image-based trick play variant. Each variant produces its own set of JPEG tile images and corresponding manifest entries." + }, "DashIsoIntervalCadence": { "type": "string", "documentation": "The cadence MediaConvert follows for generating thumbnails. If set to FOLLOW_IFRAME, MediaConvert generates thumbnails for each IDR frame in the output (matching the GOP cadence). If set to FOLLOW_CUSTOM, MediaConvert generates thumbnails according to the interval you specify in thumbnailInterval. If set to FOLLOW_SEGMENTATION, MediaConvert generates thumbnail playlist entries that align exactly with video segment boundaries. FOLLOW_SEGMENTATION requires 1x1 tiling.", @@ -6594,7 +6710,8 @@ "mxf", "wave", "avi", - "mpegts" + "mpegts", + "mpegps" ] }, "FrameCaptureSettings": { @@ -8008,6 +8125,22 @@ }, "documentation": "Setting for HDR10+ metadata insertion" }, + "HdrMetadata": { + "type": "structure", + "members": { + "ContentLightLevel": { + "shape": "ContentLightLevel", + "locationName": "contentLightLevel", + "documentation": "Content light level information (CTA-861.3). Describes the light level characteristics of the content." + }, + "MasteringDisplayColorVolume": { + "shape": "MasteringDisplayColorVolume", + "locationName": "masteringDisplayColorVolume", + "documentation": "Mastering display color volume metadata (SMPTE ST 2086). Describes the color volume of the display used to master the content. Chromaticity coordinates are in units of 0.00002. Luminance values are in units of 0.0001 cd/m²." + } + }, + "documentation": "HDR (High Dynamic Range) metadata extracted from the container, including mastering display color volume and content light level information. This metadata is present in HDR10 and similar HDR content." + }, "HlsAdMarkers": { "type": "string", "documentation": "Ad marker for Apple HLS manifest.", @@ -8101,14 +8234,6 @@ "MATCH_VIDEO" ] }, - "HlsClearLead": { - "type": "string", - "documentation": "Enable Clear Lead DRM to reduce video startup latency by leaving the first segment unencrypted while DRM license retrieval occurs in parallel. This optimization allows immediate playback startup while maintaining content protection for the remainder of the stream. When enabled, the first output segment remains fully unencrypted, and encryption begins at the start of the second segment. The HLS manifest will omit #EXT-X-KEY tags during the clear segment and insert the first #EXT-X-KEY immediately before the first encrypted fragment. This feature is supported exclusively for CMAF HLS (fMP4) outputs and is compatible with all existing key provider integrations (SPEKE v1, SPEKE v2, and Static Key encryption). Supported codecs: H.264, H.265, and AV1 video codecs, and AAC audio codec. Choose Enabled to activate Clear Lead DRM optimization. Choose Disabled to use standard encryption where all segments are encrypted from the beginning.", - "enum": [ - "ENABLED", - "DISABLED" - ] - }, "HlsClientCache": { "type": "string", "documentation": "Disable this setting only when your workflow requires the #EXT-X-ALLOW-CACHE:no tag. Otherwise, keep the default value Enabled and control caching in your video distribution set up. For example, use the Cache-Control http header.", @@ -8261,13 +8386,18 @@ "ImageBasedTrickPlay": { "shape": "HlsImageBasedTrickPlay", "locationName": "imageBasedTrickPlay", - "documentation": "Specify whether MediaConvert generates images for trick play. Keep the default value, None, to not generate any images. Choose Thumbnail to generate tiled thumbnails. Choose Thumbnail and full frame to generate tiled thumbnails and full-resolution images of single frames. MediaConvert creates a child manifest for each set of images that you generate and adds corresponding entries to the parent manifest. A common application for these images is Roku trick mode. The thumbnails and full-frame images that MediaConvert creates with this feature are compatible with this Roku specification: https://developer.roku.com/docs/developer-program/media-playback/trick-mode/hls-and-dash.md" + "documentation": "Specify whether MediaConvert generates images for trick play. Keep the default value, None, to not generate any images. Choose Thumbnail to generate tiled thumbnails. Choose Thumbnail and full frame to generate tiled thumbnails and full-resolution images of single frames. Choose Advanced to customize thumbnail and tile settings for a single trick play variant. Choose Variants to specify multiple trick play variants, each with its own thumbnail and tile settings. MediaConvert creates a child manifest for each set of images that you generate and adds corresponding entries to the parent manifest. A common application for these images is Roku trick mode. The thumbnails and full-frame images that MediaConvert creates with this feature are compatible with this Roku specification: https://developer.roku.com/docs/developer-program/media-playback/trick-mode/hls-and-dash.md" }, "ImageBasedTrickPlaySettings": { "shape": "HlsImageBasedTrickPlaySettings", "locationName": "imageBasedTrickPlaySettings", "documentation": "Tile and thumbnail settings applicable when imageBasedTrickPlay is ADVANCED" }, + "ImageBasedTrickPlayVariants": { + "shape": "__listOfHlsImageBasedTrickPlayVariant", + "locationName": "imageBasedTrickPlayVariants", + "documentation": "Specify multiple image-based trick play variants. Each entry creates a separate set of JPEG tile images with its own resolution, tile layout, and cadence settings. Set imageBasedTrickPlay to VARIANTS when using this setting." + }, "ManifestCompression": { "shape": "HlsManifestCompression", "locationName": "manifestCompression", @@ -8367,12 +8497,13 @@ }, "HlsImageBasedTrickPlay": { "type": "string", - "documentation": "Specify whether MediaConvert generates images for trick play. Keep the default value, None, to not generate any images. Choose Thumbnail to generate tiled thumbnails. Choose Thumbnail and full frame to generate tiled thumbnails and full-resolution images of single frames. MediaConvert creates a child manifest for each set of images that you generate and adds corresponding entries to the parent manifest. A common application for these images is Roku trick mode. The thumbnails and full-frame images that MediaConvert creates with this feature are compatible with this Roku specification: https://developer.roku.com/docs/developer-program/media-playback/trick-mode/hls-and-dash.md", + "documentation": "Specify whether MediaConvert generates images for trick play. Keep the default value, None, to not generate any images. Choose Thumbnail to generate tiled thumbnails. Choose Thumbnail and full frame to generate tiled thumbnails and full-resolution images of single frames. Choose Advanced to customize thumbnail and tile settings for a single trick play variant. Choose Variants to specify multiple trick play variants, each with its own thumbnail and tile settings. MediaConvert creates a child manifest for each set of images that you generate and adds corresponding entries to the parent manifest. A common application for these images is Roku trick mode. The thumbnails and full-frame images that MediaConvert creates with this feature are compatible with this Roku specification: https://developer.roku.com/docs/developer-program/media-playback/trick-mode/hls-and-dash.md", "enum": [ "NONE", "THUMBNAIL", "THUMBNAIL_AND_FULLFRAME", - "ADVANCED" + "ADVANCED", + "VARIANTS" ] }, "HlsImageBasedTrickPlaySettings": { @@ -8401,7 +8532,7 @@ "TileHeight": { "shape": "__integerMin1Max2048", "locationName": "tileHeight", - "documentation": "Number of thumbnails in each column of a tile image. Set a value between 2 and 2048. Must be divisible by 2." + "documentation": "Number of thumbnails in each column of a tile image. Set a value between 1 and 2048." }, "TileWidth": { "shape": "__integerMin1Max512", @@ -8411,6 +8542,42 @@ }, "documentation": "Tile and thumbnail settings applicable when imageBasedTrickPlay is ADVANCED" }, + "HlsImageBasedTrickPlayVariant": { + "type": "structure", + "members": { + "IntervalCadence": { + "shape": "HlsIntervalCadence", + "locationName": "intervalCadence", + "documentation": "The cadence MediaConvert follows for generating thumbnails. If set to FOLLOW_IFRAME, MediaConvert generates thumbnails for each IDR frame in the output (matching the GOP cadence). If set to FOLLOW_CUSTOM, MediaConvert generates thumbnails according to the interval you specify in thumbnailInterval. If set to FOLLOW_SEGMENTATION, MediaConvert generates thumbnail playlist entries that align exactly with video segment boundaries. FOLLOW_SEGMENTATION requires 1x1 tiling." + }, + "ThumbnailHeight": { + "shape": "__integerMin2Max4096", + "locationName": "thumbnailHeight", + "documentation": "Height of each thumbnail within each tile image, in pixels. Leave blank to maintain aspect ratio with thumbnail width. If following the aspect ratio would lead to a total tile height greater than 4096, then the job will be rejected. Must be divisible by 2." + }, + "ThumbnailInterval": { + "shape": "__doubleMin0Max2147483647", + "locationName": "thumbnailInterval", + "documentation": "Enter the interval, in seconds, that MediaConvert uses to generate thumbnails. If the interval you enter doesn't align with the output frame rate, MediaConvert automatically rounds the interval to align with the output frame rate. For example, if the output frame rate is 29.97 frames per second and you enter 5, MediaConvert uses a 150 frame interval to generate thumbnails." + }, + "ThumbnailWidth": { + "shape": "__integerMin8Max4096", + "locationName": "thumbnailWidth", + "documentation": "Width of each thumbnail within each tile image, in pixels. Default is 312. Must be divisible by 8." + }, + "TileHeight": { + "shape": "__integerMin1Max2048", + "locationName": "tileHeight", + "documentation": "Number of thumbnails in each column of a tile image. Set a value between 1 and 2048." + }, + "TileWidth": { + "shape": "__integerMin1Max512", + "locationName": "tileWidth", + "documentation": "Number of thumbnails in each row of a tile image. Set a value between 1 and 512." + } + }, + "documentation": "Settings for one image-based trick play variant. Each variant produces its own set of JPEG tile images and corresponding manifest entries." + }, "HlsInitializationVectorInManifest": { "type": "string", "documentation": "The Initialization Vector is a 128-bit number used in conjunction with the key for encrypting blocks. If set to INCLUDE, Initialization Vector is listed in the manifest. Otherwise Initialization Vector is not in the manifest.", @@ -9449,7 +9616,7 @@ "FollowSource": { "shape": "__integerMin1Max150", "locationName": "followSource", - "documentation": "Specify the input that MediaConvert references for your default output settings. MediaConvert uses this input's Resolution, Frame rate, and Pixel aspect ratio for all outputs that you don't manually specify different output settings for. Enabling this setting will disable \"Follow source\" for all other inputs. If MediaConvert cannot follow your source, for example if you specify an audio-only input, MediaConvert uses the first followable input instead. In your JSON job specification, enter an integer from 1 to 150 corresponding to the order of your inputs." + "documentation": "Specify the input that MediaConvert references for your default output settings. MediaConvert uses this input's Resolution, Frame rate, and Pixel aspect ratio for all outputs that you don't manually specify different output settings for. Enabling this setting will disable \"Follow source\" for all other inputs. If MediaConvert cannot follow your source, for example if you specify an audio-only input, MediaConvert uses the first followable input instead. In your JSON job specification, enter an integer from 1 to 150 corresponding to the order of your inputs." }, "Inputs": { "shape": "__listOfInput", @@ -9620,7 +9787,7 @@ "FollowSource": { "shape": "__integerMin1Max150", "locationName": "followSource", - "documentation": "Specify the input that MediaConvert references for your default output settings. MediaConvert uses this input's Resolution, Frame rate, and Pixel aspect ratio for all outputs that you don't manually specify different output settings for. Enabling this setting will disable \"Follow source\" for all other inputs. If MediaConvert cannot follow your source, for example if you specify an audio-only input, MediaConvert uses the first followable input instead. In your JSON job specification, enter an integer from 1 to 150 corresponding to the order of your inputs." + "documentation": "Specify the input that MediaConvert references for your default output settings. MediaConvert uses this input's Resolution, Frame rate, and Pixel aspect ratio for all outputs that you don't manually specify different output settings for. Enabling this setting will disable \"Follow source\" for all other inputs. If MediaConvert cannot follow your source, for example if you specify an audio-only input, MediaConvert uses the first followable input instead. In your JSON job specification, enter an integer from 1 to 150 corresponding to the order of your inputs." }, "Inputs": { "shape": "__listOfInputTemplate", @@ -10753,6 +10920,62 @@ }, "documentation": "These settings relate to the MPEG-2 transport stream (MPEG2-TS) container for the MPEG2-TS segments in your HLS outputs." }, + "MasteringDisplayColorVolume": { + "type": "structure", + "members": { + "BluePrimaryX": { + "shape": "__integer", + "locationName": "bluePrimaryX", + "documentation": "Blue primary chromaticity x coordinate, in units of 0.00002." + }, + "BluePrimaryY": { + "shape": "__integer", + "locationName": "bluePrimaryY", + "documentation": "Blue primary chromaticity y coordinate, in units of 0.00002." + }, + "GreenPrimaryX": { + "shape": "__integer", + "locationName": "greenPrimaryX", + "documentation": "Green primary chromaticity x coordinate, in units of 0.00002." + }, + "GreenPrimaryY": { + "shape": "__integer", + "locationName": "greenPrimaryY", + "documentation": "Green primary chromaticity y coordinate, in units of 0.00002." + }, + "MaxLuminance": { + "shape": "__long", + "locationName": "maxLuminance", + "documentation": "Maximum display mastering luminance, in units of 0.0001 cd/m²." + }, + "MinLuminance": { + "shape": "__long", + "locationName": "minLuminance", + "documentation": "Minimum display mastering luminance, in units of 0.0001 cd/m²." + }, + "RedPrimaryX": { + "shape": "__integer", + "locationName": "redPrimaryX", + "documentation": "Red primary chromaticity x coordinate, in units of 0.00002." + }, + "RedPrimaryY": { + "shape": "__integer", + "locationName": "redPrimaryY", + "documentation": "Red primary chromaticity y coordinate, in units of 0.00002." + }, + "WhitePointX": { + "shape": "__integer", + "locationName": "whitePointX", + "documentation": "White point chromaticity x coordinate, in units of 0.00002." + }, + "WhitePointY": { + "shape": "__integer", + "locationName": "whitePointY", + "documentation": "White point chromaticity y coordinate, in units of 0.00002." + } + }, + "documentation": "Mastering display color volume metadata (SMPTE ST 2086). Describes the color volume of the display used to master the content. Chromaticity coordinates are in units of 0.00002. Luminance values are in units of 0.0001 cd/m²." + }, "MatrixCoefficients": { "type": "string", "documentation": "The color space matrix coefficients of the video track, defining how RGB color values are converted to and from YUV color space. This affects color accuracy during encoding and decoding processes.", @@ -14676,6 +14899,11 @@ "locationName": "frameRate", "documentation": "The frame rate of the video or audio track, expressed as a fraction with numerator and denominator values." }, + "HdrMetadata": { + "shape": "HdrMetadata", + "locationName": "hdrMetadata", + "documentation": "HDR (High Dynamic Range) metadata extracted from the container, including mastering display color volume and content light level information. This metadata is present in HDR10 and similar HDR content." + }, "Height": { "shape": "__integer", "locationName": "height", @@ -14686,6 +14914,11 @@ "locationName": "matrixCoefficients", "documentation": "The color space matrix coefficients of the video track, defining how RGB color values are converted to and from YUV color space. This affects color accuracy during encoding and decoding processes." }, + "Rotation": { + "shape": "__integer", + "locationName": "rotation", + "documentation": "The clockwise rotation angle of the video track, in degrees, as derived from container-level metadata (e.g. the MP4 tkhd transformation matrix or the Matroska ProjectionPoseRoll element). Common values are 90, 180, and 270. This field is null when no rotation metadata is present or when the rotation is 0 degrees. For MP4, non-standard transformation matrices also yield null." + }, "TransferCharacteristics": { "shape": "TransferCharacteristics", "locationName": "transferCharacteristics", @@ -15936,6 +16169,11 @@ "min": 1, "max": 86400000 }, + "__integerMin1Max9999": { + "type": "integer", + "min": 1, + "max": 9999 + }, "__integerMin2000Max30000": { "type": "integer", "min": 2000, @@ -16193,6 +16431,12 @@ "shape": "CmafAdditionalManifest" } }, + "__listOfCmafImageBasedTrickPlayVariant": { + "type": "list", + "member": { + "shape": "CmafImageBasedTrickPlayVariant" + } + }, "__listOfColorConversion3DLUTSetting": { "type": "list", "member": { @@ -16205,6 +16449,12 @@ "shape": "DashAdditionalManifest" } }, + "__listOfDashIsoImageBasedTrickPlayVariant": { + "type": "list", + "member": { + "shape": "DashIsoImageBasedTrickPlayVariant" + } + }, "__listOfElementalInferenceFeature": { "type": "list", "member": { @@ -16253,6 +16503,12 @@ "shape": "HlsCaptionLanguageMapping" } }, + "__listOfHlsImageBasedTrickPlayVariant": { + "type": "list", + "member": { + "shape": "HlsImageBasedTrickPlayVariant" + } + }, "__listOfHopDestination": { "type": "list", "member": { diff --git a/awscli/botocore/data/payment-cryptography/2021-09-14/service-2.json b/awscli/botocore/data/payment-cryptography/2021-09-14/service-2.json index e908e1935712..e48d156c7ccc 100644 --- a/awscli/botocore/data/payment-cryptography/2021-09-14/service-2.json +++ b/awscli/botocore/data/payment-cryptography/2021-09-14/service-2.json @@ -893,7 +893,7 @@ }, "KeyCheckValueAlgorithm":{ "shape":"KeyCheckValueAlgorithm", - "documentation":"

The algorithm that Amazon Web Services Payment Cryptography uses to calculate the key check value (KCV). It is used to validate the key integrity.

For TDES keys, the KCV is computed by encrypting 8 bytes, each with value of zero, with the key to be checked and retaining the 3 highest order bytes of the encrypted result. For AES keys, the KCV is computed using a CMAC algorithm where the input data is 16 bytes of zero and retaining the 3 highest order bytes of the encrypted result.

" + "documentation":"

The algorithm that Amazon Web Services Payment Cryptography uses to calculate the key check value (KCV). It is used to validate the key integrity.

For TDES keys, the KCV is computed by encrypting 8 bytes, each with value of zero, with the key to be checked and retaining the 3 highest order bytes of the encrypted result. For AES keys, the KCV is computed using a CMAC algorithm where the input data is 16 bytes of zero and retaining the 3 highest order bytes of the encrypted result. For HMAC keys, the KCV is computed using the hash selected at key creation on a zero-length message, taking the leftmost 3 bytes.

" }, "Exportable":{ "shape":"Boolean", @@ -1115,7 +1115,7 @@ }, "KeyCheckValueAlgorithm":{ "shape":"KeyCheckValueAlgorithm", - "documentation":"

The algorithm that Amazon Web Services Payment Cryptography uses to calculate the key check value (KCV). It is used to validate the key integrity. Specify KCV for IPEK export only.

For TDES keys, the KCV is computed by encrypting 8 bytes, each with value of zero, with the key to be checked and retaining the 3 highest order bytes of the encrypted result. For AES keys, the KCV is computed using a CMAC algorithm where the input data is 16 bytes of zero and retaining the 3 highest order bytes of the encrypted result.

" + "documentation":"

The algorithm that Amazon Web Services Payment Cryptography uses to calculate the key check value (KCV). It is used to validate the key integrity. Specify KCV for IPEK export only.

For TDES keys, the KCV is computed by encrypting 8 bytes, each with value of zero, with the key to be checked and retaining the 3 highest order bytes of the encrypted result. For AES keys, the KCV is computed using a CMAC algorithm where the input data is 16 bytes of zero and retaining the 3 highest order bytes of the encrypted result. For HMAC keys, the KCV is computed using the hash selected at key creation on a zero-length message, taking the leftmost 3 bytes.

" } }, "documentation":"

The attributes for IPEK generation during export.

" @@ -1709,7 +1709,7 @@ }, "KeyCheckValueAlgorithm":{ "shape":"KeyCheckValueAlgorithm", - "documentation":"

The algorithm that Amazon Web Services Payment Cryptography uses to calculate the key check value (KCV). It is used to validate the key integrity.

For TDES keys, the KCV is computed by encrypting 8 bytes, each with value of zero, with the key to be checked and retaining the 3 highest order bytes of the encrypted result. For AES keys, the KCV is computed using a CMAC algorithm where the input data is 16 bytes of zero and retaining the 3 highest order bytes of the encrypted result.

" + "documentation":"

The algorithm that Amazon Web Services Payment Cryptography uses to calculate the key check value (KCV). It is used to validate the key integrity.

For TDES keys, the KCV is computed by encrypting 8 bytes, each with value of zero, with the key to be checked and retaining the 3 highest order bytes of the encrypted result. For AES keys, the KCV is computed using a CMAC algorithm where the input data is 16 bytes of zero and retaining the 3 highest order bytes of the encrypted result. For HMAC keys, the KCV is computed using the hash selected at key creation on a zero-length message, taking the leftmost 3 bytes.

" }, "Enabled":{ "shape":"Boolean", @@ -1874,7 +1874,7 @@ }, "KeyCheckValueAlgorithm":{ "shape":"KeyCheckValueAlgorithm", - "documentation":"

The algorithm that Amazon Web Services Payment Cryptography uses to calculate the key check value (KCV). It is used to validate the key integrity.

For TDES keys, the KCV is computed by encrypting 8 bytes, each with value of zero, with the key to be checked and retaining the 3 highest order bytes of the encrypted result. For AES keys, the KCV is computed using a CMAC algorithm where the input data is 16 bytes of zero and retaining the 3 highest order bytes of the encrypted result.

" + "documentation":"

The algorithm that Amazon Web Services Payment Cryptography uses to calculate the key check value (KCV). It is used to validate the key integrity.

For TDES keys, the KCV is computed by encrypting 8 bytes, each with value of zero, with the key to be checked and retaining the 3 highest order bytes of the encrypted result. For AES keys, the KCV is computed using a CMAC algorithm where the input data is 16 bytes of zero and retaining the 3 highest order bytes of the encrypted result. For HMAC keys, the KCV is computed using the hash selected at key creation on a zero-length message, taking the leftmost 3 bytes.

" }, "Enabled":{ "shape":"Boolean", @@ -2894,7 +2894,7 @@ }, "KeyCheckValueAlgorithm":{ "shape":"KeyCheckValueAlgorithm", - "documentation":"

The algorithm that Amazon Web Services Payment Cryptography uses to calculate the key check value (KCV). It is used to validate the key integrity.

For TDES keys, the KCV is computed by encrypting 8 bytes, each with value of zero, with the key to be checked and retaining the 3 highest order bytes of the encrypted result. For AES keys, the KCV is computed using a CMAC algorithm where the input data is 16 bytes of zero and retaining the 3 highest order bytes of the encrypted result.

" + "documentation":"

The algorithm that Amazon Web Services Payment Cryptography uses to calculate the key check value (KCV). It is used to validate the key integrity.

For TDES keys, the KCV is computed by encrypting 8 bytes, each with value of zero, with the key to be checked and retaining the 3 highest order bytes of the encrypted result. For AES keys, the KCV is computed using a CMAC algorithm where the input data is 16 bytes of zero and retaining the 3 highest order bytes of the encrypted result. For HMAC keys, the KCV is computed using the hash selected at key creation on a zero-length message, taking the leftmost 3 bytes.

" } }, "documentation":"

Parameter information for generating a WrappedKeyBlock for key exchange.

" diff --git a/awscli/botocore/data/quicksight/2018-04-01/paginators-1.json b/awscli/botocore/data/quicksight/2018-04-01/paginators-1.json index 138ca2aac9ba..e5dcf24a6bfb 100644 --- a/awscli/botocore/data/quicksight/2018-04-01/paginators-1.json +++ b/awscli/botocore/data/quicksight/2018-04-01/paginators-1.json @@ -239,6 +239,18 @@ "output_token": "NextToken", "limit_key": "MaxResults", "result_key": "OAuthClientApplications" + }, + "ListKnowledgeBases": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "KnowledgeBaseSummaries" + }, + "SearchKnowledgeBases": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "KnowledgeBaseSummaries" } } } diff --git a/awscli/botocore/data/quicksight/2018-04-01/service-2.json b/awscli/botocore/data/quicksight/2018-04-01/service-2.json index 6147fa59a372..ba96b3a5489d 100644 --- a/awscli/botocore/data/quicksight/2018-04-01/service-2.json +++ b/awscli/botocore/data/quicksight/2018-04-01/service-2.json @@ -30,6 +30,26 @@ ], "documentation":"

Creates new reviewed answers for a Q Topic.

" }, + "BatchDeleteKnowledgeBase":{ + "name":"BatchDeleteKnowledgeBase", + "http":{ + "method":"POST", + "requestUri":"/v1/accounts/{AwsAccountId}/knowledge-bases/batch-delete", + "responseCode":202 + }, + "input":{"shape":"BatchDeleteKnowledgeBaseRequest"}, + "output":{"shape":"BatchDeleteKnowledgeBaseResponse"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"InvalidRequestException"}, + {"shape":"InvalidParameterValueException"}, + {"shape":"InternalFailureException"}, + {"shape":"PreconditionNotMetException"}, + {"shape":"LimitExceededException"}, + {"shape":"AccessDeniedException"} + ], + "documentation":"

Deletes one or more knowledge bases.

" + }, "BatchDeleteTopicReviewedAnswer":{ "name":"BatchDeleteTopicReviewedAnswer", "http":{ @@ -1049,6 +1069,28 @@ ], "documentation":"

Deletes all access scopes and authorized targets that are associated with a service from the Quick Sight IAM Identity Center application.

This operation is only supported for Quick Sight accounts that use IAM Identity Center.

" }, + "DeleteKnowledgeBase":{ + "name":"DeleteKnowledgeBase", + "http":{ + "method":"DELETE", + "requestUri":"/v1/accounts/{AwsAccountId}/knowledge-bases/{KnowledgeBaseId}", + "responseCode":202 + }, + "input":{"shape":"DeleteKnowledgeBaseRequest"}, + "output":{"shape":"DeleteKnowledgeBaseResponse"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"InvalidRequestException"}, + {"shape":"InvalidParameterValueException"}, + {"shape":"InternalFailureException"}, + {"shape":"PreconditionNotMetException"}, + {"shape":"ResourceNotFoundException"}, + {"shape":"LimitExceededException"}, + {"shape":"AccessDeniedException"}, + {"shape":"ConflictException"} + ], + "documentation":"

Deletes a knowledge base.

" + }, "DeleteNamespace":{ "name":"DeleteNamespace", "http":{ @@ -2076,6 +2118,50 @@ ], "documentation":"

Describes all customer managed key registrations in a Quick Sight account.

" }, + "DescribeKnowledgeBase":{ + "name":"DescribeKnowledgeBase", + "http":{ + "method":"GET", + "requestUri":"/v1/accounts/{AwsAccountId}/knowledge-bases/{KnowledgeBaseId}", + "responseCode":200 + }, + "input":{"shape":"DescribeKnowledgeBaseRequest"}, + "output":{"shape":"DescribeKnowledgeBaseResponse"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"InvalidRequestException"}, + {"shape":"InvalidParameterValueException"}, + {"shape":"InternalFailureException"}, + {"shape":"PreconditionNotMetException"}, + {"shape":"ResourceNotFoundException"}, + {"shape":"LimitExceededException"}, + {"shape":"AccessDeniedException"} + ], + "documentation":"

Describes a knowledge base.

", + "readonly":true + }, + "DescribeKnowledgeBasePermissions":{ + "name":"DescribeKnowledgeBasePermissions", + "http":{ + "method":"GET", + "requestUri":"/v1/accounts/{AwsAccountId}/knowledge-bases/{KnowledgeBaseId}/permissions", + "responseCode":200 + }, + "input":{"shape":"DescribeKnowledgeBasePermissionsRequest"}, + "output":{"shape":"DescribeKnowledgeBasePermissionsResponse"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"InvalidRequestException"}, + {"shape":"InvalidParameterValueException"}, + {"shape":"InternalFailureException"}, + {"shape":"PreconditionNotMetException"}, + {"shape":"ResourceNotFoundException"}, + {"shape":"LimitExceededException"}, + {"shape":"AccessDeniedException"} + ], + "documentation":"

Describes the resource permissions for a knowledge base.

", + "readonly":true + }, "DescribeNamespace":{ "name":"DescribeNamespace", "http":{ @@ -3024,6 +3110,26 @@ ], "documentation":"

Lists the history of SPICE ingestions for a dataset. Limited to 5 TPS per user and 25 TPS per account.

" }, + "ListKnowledgeBases":{ + "name":"ListKnowledgeBases", + "http":{ + "method":"GET", + "requestUri":"/v1/accounts/{AwsAccountId}/knowledge-bases/", + "responseCode":200 + }, + "input":{"shape":"ListKnowledgeBasesRequest"}, + "output":{"shape":"ListKnowledgeBasesResponse"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"InvalidRequestException"}, + {"shape":"InvalidParameterValueException"}, + {"shape":"InternalFailureException"}, + {"shape":"PreconditionNotMetException"}, + {"shape":"AccessDeniedException"} + ], + "documentation":"

Lists all knowledge bases in an Amazon QuickSight account.

", + "readonly":true + }, "ListNamespaces":{ "name":"ListNamespaces", "http":{ @@ -3380,6 +3486,25 @@ ], "documentation":"

Returns a list of all of the Amazon Quick Sight users belonging to this account.

" }, + "ListUsersIndexCapacity":{ + "name":"ListUsersIndexCapacity", + "http":{ + "method":"POST", + "requestUri":"/accounts/{awsAccountId}/quick-index/user-capacity", + "responseCode":200 + }, + "input":{"shape":"ListUsersIndexCapacityRequest"}, + "output":{"shape":"ListUsersIndexCapacityResponse"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"InvalidRequestException"}, + {"shape":"InternalFailureException"}, + {"shape":"PreconditionNotMetException"}, + {"shape":"ResourceNotFoundException"}, + {"shape":"AccessDeniedException"} + ], + "documentation":"

Lists per-user index capacity consumption for an account.

" + }, "ListVPCConnections":{ "name":"ListVPCConnections", "http":{ @@ -3643,6 +3768,27 @@ ], "documentation":"

Use the SearchGroups operation to search groups in a specified Quick Sight namespace using the supplied filters.

" }, + "SearchKnowledgeBases":{ + "name":"SearchKnowledgeBases", + "http":{ + "method":"POST", + "requestUri":"/v1/accounts/{AwsAccountId}/search/knowledge-bases", + "responseCode":200 + }, + "input":{"shape":"SearchKnowledgeBasesRequest"}, + "output":{"shape":"SearchKnowledgeBasesResponse"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"InvalidParameterValueException"}, + {"shape":"InternalFailureException"}, + {"shape":"PreconditionNotMetException"}, + {"shape":"InvalidNextTokenException"}, + {"shape":"ResourceNotFoundException"}, + {"shape":"AccessDeniedException"} + ], + "documentation":"

Searches for a subset of knowledge bases based on specified filters.

", + "readonly":true + }, "SearchSpaces":{ "name":"SearchSpaces", "http":{ @@ -4442,6 +4588,29 @@ ], "documentation":"

Updates a customer managed key in a Quick Sight account.

" }, + "UpdateKnowledgeBasePermissions":{ + "name":"UpdateKnowledgeBasePermissions", + "http":{ + "method":"POST", + "requestUri":"/v1/accounts/{AwsAccountId}/knowledge-bases/{KnowledgeBaseId}/permissions", + "responseCode":200 + }, + "input":{"shape":"UpdateKnowledgeBasePermissionsRequest"}, + "output":{"shape":"UpdateKnowledgeBasePermissionsResponse"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"InvalidRequestException"}, + {"shape":"InvalidParameterValueException"}, + {"shape":"InternalFailureException"}, + {"shape":"PreconditionNotMetException"}, + {"shape":"ResourceNotFoundException"}, + {"shape":"LimitExceededException"}, + {"shape":"AccessDeniedException"}, + {"shape":"ConflictException"} + ], + "documentation":"

Updates the resource permissions for a knowledge base.

", + "idempotent":true + }, "UpdateOAuthClientApplication":{ "name":"UpdateOAuthClientApplication", "http":{ @@ -7751,6 +7920,24 @@ }, "documentation":"

Aggregation for attributes.

" }, + "AudioExtractionConfiguration":{ + "type":"structure", + "required":["audioExtractionStatus"], + "members":{ + "audioExtractionStatus":{ + "shape":"AudioExtractionStatus", + "documentation":"

The status of audio extraction. Valid values are ENABLED and DISABLED.

" + } + }, + "documentation":"

The configuration for audio extraction from knowledge base documents.

" + }, + "AudioExtractionStatus":{ + "type":"string", + "enum":[ + "ENABLED", + "DISABLED" + ] + }, "AuroraParameters":{ "type":"structure", "required":[ @@ -8523,6 +8710,107 @@ } } }, + "BatchDeleteKnowledgeBaseFailure":{ + "type":"structure", + "required":[ + "KnowledgeBaseId", + "ErrorCode", + "ErrorMessage" + ], + "members":{ + "KnowledgeBaseId":{ + "shape":"KnowledgeBaseId", + "documentation":"

The unique identifier of the knowledge base that failed to be deleted.

" + }, + "ErrorCode":{ + "shape":"String", + "documentation":"

The error code for the deletion failure.

" + }, + "ErrorMessage":{ + "shape":"String", + "documentation":"

The error message for the deletion failure.

" + } + }, + "documentation":"

Information about a knowledge base that failed to be deleted in a batch operation.

" + }, + "BatchDeleteKnowledgeBaseFailureList":{ + "type":"list", + "member":{"shape":"BatchDeleteKnowledgeBaseFailure"} + }, + "BatchDeleteKnowledgeBaseRequest":{ + "type":"structure", + "required":[ + "AwsAccountId", + "KnowledgeBaseIds" + ], + "members":{ + "AwsAccountId":{ + "shape":"KbAwsAccountId", + "documentation":"

The ID of the Amazon Web Services account that contains the knowledge base.

", + "location":"uri", + "locationName":"AwsAccountId" + }, + "KnowledgeBaseIds":{ + "shape":"BatchDeleteKnowledgeBaseRequestKnowledgeBaseIdsList", + "documentation":"

A list of knowledge base identifiers to delete.

" + } + } + }, + "BatchDeleteKnowledgeBaseRequestKnowledgeBaseIdsList":{ + "type":"list", + "member":{"shape":"KnowledgeBaseId"}, + "max":10, + "min":1 + }, + "BatchDeleteKnowledgeBaseResponse":{ + "type":"structure", + "required":[ + "Deleted", + "Errors" + ], + "members":{ + "Deleted":{ + "shape":"BatchDeleteKnowledgeBaseSuccessList", + "documentation":"

A list of knowledge bases that were successfully deleted.

" + }, + "Errors":{ + "shape":"BatchDeleteKnowledgeBaseFailureList", + "documentation":"

A list of knowledge bases that failed to be deleted.

" + }, + "RequestId":{ + "shape":"String", + "documentation":"

The Amazon Web Services request ID for this operation.

" + }, + "Status":{ + "shape":"StatusCode", + "documentation":"

The HTTP status of the request.

", + "box":true, + "location":"statusCode" + } + } + }, + "BatchDeleteKnowledgeBaseSuccess":{ + "type":"structure", + "required":[ + "KnowledgeBaseId", + "KnowledgeBaseArn" + ], + "members":{ + "KnowledgeBaseId":{ + "shape":"KnowledgeBaseId", + "documentation":"

The unique identifier of the successfully deleted knowledge base.

" + }, + "KnowledgeBaseArn":{ + "shape":"KnowledgeBaseArn", + "documentation":"

The ARN of the successfully deleted knowledge base.

" + } + }, + "documentation":"

Information about a knowledge base that was successfully deleted in a batch operation.

" + }, + "BatchDeleteKnowledgeBaseSuccessList":{ + "type":"list", + "member":{"shape":"BatchDeleteKnowledgeBaseSuccess"} + }, "BatchDeleteTopicReviewedAnswerRequest":{ "type":"structure", "required":[ @@ -10228,6 +10516,30 @@ "type":"string", "enum":["DENY"] }, + "CapacityBytesRangeFilter":{ + "type":"structure", + "members":{ + "minBytes":{ + "shape":"CapacityBytesRangeFilterMinBytesLong", + "documentation":"

The minimum capacity in bytes (inclusive). At least one of minBytes or maxBytes is required.

" + }, + "maxBytes":{ + "shape":"CapacityBytesRangeFilterMaxBytesLong", + "documentation":"

The maximum capacity in bytes (inclusive). At least one of minBytes or maxBytes is required.

" + } + }, + "documentation":"

A filter that matches users by total capacity range in bytes.

" + }, + "CapacityBytesRangeFilterMaxBytesLong":{ + "type":"long", + "box":true, + "min":1 + }, + "CapacityBytesRangeFilterMinBytesLong":{ + "type":"long", + "box":true, + "min":1 + }, "CascadingControlConfiguration":{ "type":"structure", "members":{ @@ -15930,6 +16242,16 @@ "max":1, "min":1 }, + "DataSetStatus":{ + "type":"string", + "enum":[ + "CREATING", + "UPDATING", + "ACTIVE", + "FAILED", + "DELETING" + ] + }, "DataSetStringComparisonFilterCondition":{ "type":"structure", "required":["Operator"], @@ -16156,6 +16478,12 @@ }, "documentation":"

The structure of a data source.

" }, + "DataSourceArn":{ + "type":"string", + "max":1284, + "min":0, + "pattern":"arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}" + }, "DataSourceCredentials":{ "type":"structure", "members":{ @@ -18265,6 +18593,54 @@ } } }, + "DeleteKnowledgeBaseRequest":{ + "type":"structure", + "required":[ + "AwsAccountId", + "KnowledgeBaseId" + ], + "members":{ + "AwsAccountId":{ + "shape":"KbAwsAccountId", + "documentation":"

The ID of the Amazon Web Services account that contains the knowledge base.

", + "location":"uri", + "locationName":"AwsAccountId" + }, + "KnowledgeBaseId":{ + "shape":"KnowledgeBaseId", + "documentation":"

The unique identifier for the knowledge base.

", + "location":"uri", + "locationName":"KnowledgeBaseId" + } + } + }, + "DeleteKnowledgeBaseResponse":{ + "type":"structure", + "required":[ + "KnowledgeBaseArn", + "KnowledgeBaseId" + ], + "members":{ + "KnowledgeBaseArn":{ + "shape":"KnowledgeBaseArn", + "documentation":"

The ARN of the deleted knowledge base.

" + }, + "KnowledgeBaseId":{ + "shape":"KnowledgeBaseId", + "documentation":"

The ID of the deleted knowledge base.

" + }, + "RequestId":{ + "shape":"String", + "documentation":"

The Amazon Web Services request ID for this operation.

" + }, + "Status":{ + "shape":"StatusCode", + "documentation":"

The HTTP status of the request.

", + "box":true, + "location":"statusCode" + } + } + }, "DeleteNamespaceRequest":{ "type":"structure", "required":[ @@ -20992,6 +21368,99 @@ } } }, + "DescribeKnowledgeBasePermissionsRequest":{ + "type":"structure", + "required":[ + "AwsAccountId", + "KnowledgeBaseId" + ], + "members":{ + "AwsAccountId":{ + "shape":"KbAwsAccountId", + "documentation":"

The ID of the Amazon Web Services account that contains the knowledge base.

", + "location":"uri", + "locationName":"AwsAccountId" + }, + "KnowledgeBaseId":{ + "shape":"KnowledgeBaseId", + "documentation":"

The unique identifier for the knowledge base.

", + "location":"uri", + "locationName":"KnowledgeBaseId" + } + } + }, + "DescribeKnowledgeBasePermissionsResponse":{ + "type":"structure", + "required":[ + "KnowledgeBaseArn", + "KnowledgeBaseId" + ], + "members":{ + "KnowledgeBaseArn":{ + "shape":"KnowledgeBaseArn", + "documentation":"

The Amazon Resource Name (ARN) of the knowledge base.

" + }, + "KnowledgeBaseId":{ + "shape":"KnowledgeBaseId", + "documentation":"

The unique identifier for the knowledge base.

" + }, + "Permissions":{ + "shape":"ResourcePermissionList", + "documentation":"

The resource permissions for the knowledge base.

" + }, + "RequestId":{ + "shape":"String", + "documentation":"

The Amazon Web Services request ID for this operation.

" + }, + "Status":{ + "shape":"StatusCode", + "documentation":"

The HTTP status of the request.

", + "box":true, + "location":"statusCode" + } + } + }, + "DescribeKnowledgeBaseRequest":{ + "type":"structure", + "required":[ + "AwsAccountId", + "KnowledgeBaseId" + ], + "members":{ + "AwsAccountId":{ + "shape":"KbAwsAccountId", + "documentation":"

The ID of the Amazon Web Services account that contains the knowledge base.

", + "location":"uri", + "locationName":"AwsAccountId" + }, + "KnowledgeBaseId":{ + "shape":"KnowledgeBaseId", + "documentation":"

The unique identifier for the knowledge base.

", + "location":"uri", + "locationName":"KnowledgeBaseId" + } + } + }, + "DescribeKnowledgeBaseResponse":{ + "type":"structure", + "required":["KnowledgeBase"], + "members":{ + "KnowledgeBase":{ + "shape":"KnowledgeBase", + "documentation":"

The knowledge base.

" + }, + "RequestId":{ + "shape":"String", + "documentation":"

The Amazon Web Services request ID for this operation.

" + }, + "Status":{ + "shape":"StatusCode", + "documentation":"

The HTTP status of the request.

", + "box":true, + "location":"statusCode" + } + } + }, "DescribeNamespaceRequest":{ "type":"structure", "required":[ @@ -23547,6 +24016,11 @@ }, "documentation":"

A control to display a text box that is used to enter a single entry.

" }, + "FilterValue":{ + "type":"string", + "max":256, + "min":0 + }, "FilterVisualScope":{ "type":"string", "enum":[ @@ -26922,6 +27396,24 @@ "MENU" ] }, + "ImageExtractionConfiguration":{ + "type":"structure", + "required":["imageExtractionStatus"], + "members":{ + "imageExtractionStatus":{ + "shape":"ImageExtractionStatus", + "documentation":"

The status of image extraction. Valid values are ENABLED and DISABLED.

" + } + }, + "documentation":"

The configuration for image extraction from knowledge base documents.

" + }, + "ImageExtractionStatus":{ + "type":"string", + "enum":[ + "ENABLED", + "DISABLED" + ] + }, "ImageInteractionOptions":{ "type":"structure", "members":{ @@ -27501,6 +27993,10 @@ "member":{"shape":"IntegerParameter"}, "max":100 }, + "IntegerValue":{ + "type":"integer", + "box":true + }, "IntegerValueWhenUnsetConfiguration":{ "type":"structure", "members":{ @@ -28061,6 +28557,46 @@ "VERTICAL" ] }, + "KbAwsAccountId":{ + "type":"string", + "max":12, + "min":12, + "pattern":"[0-9]*" + }, + "KbIngestionId":{ + "type":"string", + "max":1024, + "min":1, + "pattern":"[0-9a-zA-Z-_=.+]+" + }, + "KbIngestionStatus":{ + "type":"string", + "enum":[ + "QUEUED", + "RUNNING", + "FAILED", + "COMPLETED", + "INCOMPLETE", + "CANCELLED", + "CANCELLING", + "TIMEOUT" + ] + }, + "KbTemplate":{ + "type":"structure", + "members":{}, + "document":true + }, + "KbTemplateConfiguration":{ + "type":"structure", + "members":{ + "template":{ + "shape":"KbTemplate", + "documentation":"

The template document that defines the knowledge base behavior.

" + } + }, + "documentation":"

The template configuration for a knowledge base.

" + }, "KeyPairCredentials":{ "type":"structure", "required":[ @@ -28087,6 +28623,307 @@ "type":"list", "member":{"shape":"RegisteredCustomerManagedKey"} }, + "KnowledgeBase":{ + "type":"structure", + "required":[ + "KnowledgeBaseArn", + "KnowledgeBaseId", + "Name", + "Status", + "DataSourceArn", + "KnowledgeBaseConfiguration" + ], + "members":{ + "KnowledgeBaseArn":{ + "shape":"KnowledgeBaseArn", + "documentation":"

The Amazon Resource Name (ARN) of the knowledge base.

" + }, + "KnowledgeBaseId":{ + "shape":"KnowledgeBaseId", + "documentation":"

The unique identifier for the knowledge base.

" + }, + "Name":{ + "shape":"KnowledgeBaseName", + "documentation":"

The name of the knowledge base.

" + }, + "Status":{ + "shape":"DataSetStatus", + "documentation":"

The status of the knowledge base.

" + }, + "DataSourceArn":{ + "shape":"DataSourceArn", + "documentation":"

The ARN of the data source associated with the knowledge base.

" + }, + "KnowledgeBaseConfiguration":{ + "shape":"KnowledgeBaseConfiguration", + "documentation":"

The configuration settings for the knowledge base.

" + }, + "MediaExtractionConfiguration":{ + "shape":"MediaExtractionConfiguration", + "documentation":"

The media extraction configuration for the knowledge base.

" + }, + "Type":{ + "shape":"String", + "documentation":"

The type of the knowledge base.

" + }, + "CreatedAt":{ + "shape":"Timestamp", + "documentation":"

The date and time that the knowledge base was created.

" + }, + "UpdatedAt":{ + "shape":"Timestamp", + "documentation":"

The date and time that the knowledge base was last updated.

" + }, + "Description":{ + "shape":"KnowledgeBaseDescription", + "documentation":"

The description of the knowledge base.

" + }, + "IsEmailNotificationOptedForIngestionFailures":{ + "shape":"Boolean", + "documentation":"

Indicates whether email notifications are enabled for ingestion failures.

", + "box":true + }, + "FirstCompletedIngestionSummary":{ + "shape":"KnowledgeBaseIngestionSummary", + "documentation":"

A summary of the first completed ingestion for the knowledge base.

" + }, + "FirstIncompleteIngestionSummary":{ + "shape":"KnowledgeBaseIngestionSummary", + "documentation":"

A summary of the first incomplete ingestion for the knowledge base.

" + }, + "LatestIngestionSummary":{ + "shape":"KnowledgeBaseIngestionSummary", + "documentation":"

A summary of the most recent ingestion for the knowledge base.

" + }, + "KnowledgeBaseSizeBytes":{ + "shape":"Long", + "documentation":"

The size of the knowledge base in bytes.

", + "box":true + }, + "DocumentCount":{ + "shape":"Long", + "documentation":"

The number of documents in the knowledge base.

", + "box":true + }, + "PrimaryOwnerArn":{ + "shape":"String", + "documentation":"

The ARN of the primary owner of the knowledge base.

" + }, + "PrimaryOwnerUsername":{ + "shape":"SensitiveString", + "documentation":"

The username of the primary owner of the knowledge base.

" + } + }, + "documentation":"

A knowledge base resource that provides data from connected sources for AI-powered experiences in Amazon QuickSight.

" + }, + "KnowledgeBaseArn":{ + "type":"string", + "max":1284, + "min":0, + "pattern":"arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}" + }, + "KnowledgeBaseConfiguration":{ + "type":"structure", + "members":{ + "templateConfiguration":{ + "shape":"KbTemplateConfiguration", + "documentation":"

The template configuration for the knowledge base.

" + }, + "eventEnabled":{ + "shape":"Boolean", + "documentation":"

Indicates whether event notifications are enabled for the knowledge base.

", + "box":true + } + }, + "documentation":"

The configuration settings for a knowledge base.

", + "sensitive":true + }, + "KnowledgeBaseDescription":{ + "type":"string", + "max":1000, + "min":0, + "pattern":"\\P{C}*" + }, + "KnowledgeBaseId":{ + "type":"string", + "max":1024, + "min":1, + "pattern":"[0-9a-zA-Z-_=.+]+" + }, + "KnowledgeBaseIngestionSummary":{ + "type":"structure", + "required":[ + "IngestionId", + "IngestionStatus" + ], + "members":{ + "IngestionId":{ + "shape":"KbIngestionId", + "documentation":"

The unique identifier for the ingestion job.

" + }, + "IngestionStatus":{ + "shape":"KbIngestionStatus", + "documentation":"

The status of the ingestion job.

" + }, + "StartTime":{ + "shape":"Timestamp", + "documentation":"

The start time of the ingestion job.

" + }, + "EndTime":{ + "shape":"Timestamp", + "documentation":"

The end time of the ingestion job.

" + } + }, + "documentation":"

A summary of an ingestion job for a knowledge base.

" + }, + "KnowledgeBaseName":{ + "type":"string", + "max":128, + "min":0, + "pattern":"[\\p{L}\\p{N}][\\p{L}\\p{N} _\\-\\.]*" + }, + "KnowledgeBaseSearchFilter":{ + "type":"structure", + "required":[ + "name", + "operator", + "value" + ], + "members":{ + "name":{ + "shape":"KnowledgeBaseSearchFilterName", + "documentation":"

The name of the field to filter on.

" + }, + "operator":{ + "shape":"KnowledgeBaseSearchOperator", + "documentation":"

The comparison operator to use for the filter.

" + }, + "value":{ + "shape":"String", + "documentation":"

The value to filter on.

" + } + }, + "documentation":"

A filter to apply when searching knowledge bases.

" + }, + "KnowledgeBaseSearchFilterName":{ + "type":"string", + "enum":[ + "KNOWLEDGE_BASE_ID", + "KNOWLEDGE_BASE_NAME", + "DIRECT_QUICKSIGHT_OWNER", + "DIRECT_QUICKSIGHT_VIEWER_OR_OWNER", + "DIRECT_QUICKSIGHT_SOLE_OWNER", + "KNOWLEDGE_BASE_SIZE_BYTES", + "PRIMARY_OWNER" + ] + }, + "KnowledgeBaseSearchFilters":{ + "type":"list", + "member":{"shape":"KnowledgeBaseSearchFilter"}, + "max":5, + "min":1 + }, + "KnowledgeBaseSearchOperator":{ + "type":"string", + "enum":[ + "STRING_EQUALS", + "STRING_LIKE", + "GREATER_THAN_OR_EQUALS", + "LESS_THAN_OR_EQUALS" + ] + }, + "KnowledgeBaseSortBy":{ + "type":"structure", + "required":[ + "sortByField", + "sortOrder" + ], + "members":{ + "sortByField":{ + "shape":"KnowledgeBaseSortByField", + "documentation":"

The field to sort by.

" + }, + "sortOrder":{ + "shape":"SortOrder", + "documentation":"

The sort order (ascending or descending).

" + } + }, + "documentation":"

The sort configuration for searching knowledge bases.

" + }, + "KnowledgeBaseSortByField":{ + "type":"string", + "enum":[ + "KNOWLEDGE_BASE_SIZE_BYTES", + "CREATED_AT" + ] + }, + "KnowledgeBaseSummaries":{ + "type":"list", + "member":{"shape":"KnowledgeBaseSummary"} + }, + "KnowledgeBaseSummary":{ + "type":"structure", + "required":[ + "KnowledgeBaseArn", + "KnowledgeBaseId", + "Name", + "Status", + "DataSourceArn" + ], + "members":{ + "KnowledgeBaseArn":{ + "shape":"KnowledgeBaseArn", + "documentation":"

The Amazon Resource Name (ARN) of the knowledge base.

" + }, + "KnowledgeBaseId":{ + "shape":"KnowledgeBaseId", + "documentation":"

The unique identifier for the knowledge base.

" + }, + "Name":{ + "shape":"KnowledgeBaseName", + "documentation":"

The name of the knowledge base.

" + }, + "Status":{ + "shape":"DataSetStatus", + "documentation":"

The status of the knowledge base.

" + }, + "DataSourceArn":{ + "shape":"DataSourceArn", + "documentation":"

The ARN of the data source associated with the knowledge base.

" + }, + "Type":{ + "shape":"String", + "documentation":"

The type of the knowledge base.

" + }, + "CreatedAt":{ + "shape":"Timestamp", + "documentation":"

The date and time that the knowledge base was created.

" + }, + "UpdatedAt":{ + "shape":"Timestamp", + "documentation":"

The date and time that the knowledge base was last updated.

" + }, + "KnowledgeBaseSizeBytes":{ + "shape":"Long", + "documentation":"

The size of the knowledge base in bytes.

", + "box":true + }, + "DocumentCount":{ + "shape":"Long", + "documentation":"

The number of documents in the knowledge base.

", + "box":true + }, + "PrimaryOwnerArn":{ + "shape":"String", + "documentation":"

The ARN of the primary owner of the knowledge base.

" + }, + "PrimaryOwnerUsername":{ + "shape":"SensitiveString", + "documentation":"

The username of the primary owner of the knowledge base.

" + } + }, + "documentation":"

A summary of a knowledge base, including its identifier, name, status, and metadata.

" + }, "LabelOptions":{ "type":"structure", "members":{ @@ -29759,6 +30596,55 @@ } } }, + "ListKnowledgeBasesRequest":{ + "type":"structure", + "required":["AwsAccountId"], + "members":{ + "AwsAccountId":{ + "shape":"KbAwsAccountId", + "documentation":"

The ID of the Amazon Web Services account that contains the knowledge base.

", + "location":"uri", + "locationName":"AwsAccountId" + }, + "MaxResults":{ + "shape":"MaxResults", + "documentation":"

The maximum number of results to return.

", + "box":true, + "location":"querystring", + "locationName":"max-results" + }, + "NextToken":{ + "shape":"NextToken", + "documentation":"

The token for the next set of results, or null if there are no more results.

", + "location":"querystring", + "locationName":"next-token" + } + } + }, + "ListKnowledgeBasesResponse":{ + "type":"structure", + "required":["KnowledgeBaseSummaries"], + "members":{ + "KnowledgeBaseSummaries":{ + "shape":"KnowledgeBaseSummaries", + "documentation":"

A list of knowledge base summaries.

" + }, + "NextToken":{ + "shape":"NextToken", + "documentation":"

The token for the next set of results, or null if there are no more results.

" + }, + "RequestId":{ + "shape":"String", + "documentation":"

The Amazon Web Services request ID for this operation.

" + }, + "Status":{ + "shape":"StatusCode", + "documentation":"

The HTTP status of the request.

", + "box":true, + "location":"statusCode" + } + } + }, "ListNamespacesRequest":{ "type":"structure", "required":["AwsAccountId"], @@ -30668,6 +31554,65 @@ } } }, + "ListUsersIndexCapacityRequest":{ + "type":"structure", + "required":["awsAccountId"], + "members":{ + "awsAccountId":{ + "shape":"AwsAccountId", + "documentation":"

The ID of the Amazon Web Services account that contains the index capacity data.

", + "location":"uri", + "locationName":"awsAccountId" + }, + "namespace":{ + "shape":"Namespace", + "documentation":"

The namespace to scope the user search to. Required when the userNameOrEmail filter is present.

" + }, + "filters":{ + "shape":"UserIndexCapacityFilters", + "documentation":"

Filters to apply. Only one filter is supported per request. The userNameOrEmail and totalCapacityBytes filters are mutually exclusive.

" + }, + "sortBy":{ + "shape":"UserIndexCapacitySortBy", + "documentation":"

The field to sort results by.

" + }, + "sortOrder":{ + "shape":"UserIndexCapacitySortOrder", + "documentation":"

The sort order for results. Defaults to DESC if not specified.

" + }, + "maxResults":{ + "shape":"ListUsersIndexCapacityRequestMaxResultsInteger", + "documentation":"

The maximum number of results to return per page.

" + }, + "nextToken":{ + "shape":"String", + "documentation":"

The token for the next set of results, received from a previous call.

" + } + } + }, + "ListUsersIndexCapacityRequestMaxResultsInteger":{ + "type":"integer", + "box":true, + "max":100, + "min":1 + }, + "ListUsersIndexCapacityResponse":{ + "type":"structure", + "members":{ + "users":{ + "shape":"UserIndexCapacityList", + "documentation":"

The list of users with their index capacity metrics.

" + }, + "nextToken":{ + "shape":"String", + "documentation":"

The token for the next set of results, or null if there are no more results.

" + }, + "requestId":{ + "shape":"String", + "documentation":"

The Amazon Web Services request ID for this operation.

" + } + } + }, "ListUsersRequest":{ "type":"structure", "required":[ @@ -30942,6 +31887,10 @@ "max":2048, "min":1 }, + "LongValue":{ + "type":"long", + "box":true + }, "Longitude":{ "type":"double", "max":1800, @@ -31152,6 +32101,24 @@ "member":{"shape":"MeasureField"}, "max":200 }, + "MediaExtractionConfiguration":{ + "type":"structure", + "members":{ + "imageExtractionConfiguration":{ + "shape":"ImageExtractionConfiguration", + "documentation":"

The configuration for image extraction.

" + }, + "audioExtractionConfiguration":{ + "shape":"AudioExtractionConfiguration", + "documentation":"

The configuration for audio extraction.

" + }, + "videoExtractionConfiguration":{ + "shape":"VideoExtractionConfiguration", + "documentation":"

The configuration for video extraction.

" + } + }, + "documentation":"

The configuration for media extraction from knowledge base documents.

" + }, "MemberIdArnPair":{ "type":"structure", "members":{ @@ -37026,6 +37993,59 @@ } } }, + "SearchKnowledgeBasesRequest":{ + "type":"structure", + "required":["AwsAccountId"], + "members":{ + "AwsAccountId":{ + "shape":"KbAwsAccountId", + "documentation":"

The ID of the Amazon Web Services account that contains the knowledge base.

", + "location":"uri", + "locationName":"AwsAccountId" + }, + "NextToken":{ + "shape":"NextToken", + "documentation":"

The token for the next set of results, or null if there are no more results.

" + }, + "MaxResults":{ + "shape":"MaxResults", + "documentation":"

The maximum number of results to return.

", + "box":true + }, + "Filters":{ + "shape":"KnowledgeBaseSearchFilters", + "documentation":"

The filters to apply when searching knowledge bases.

" + }, + "SortBy":{ + "shape":"KnowledgeBaseSortBy", + "documentation":"

The sort configuration for the search results.

" + } + } + }, + "SearchKnowledgeBasesResponse":{ + "type":"structure", + "required":["KnowledgeBaseSummaries"], + "members":{ + "KnowledgeBaseSummaries":{ + "shape":"KnowledgeBaseSummaries", + "documentation":"

A list of knowledge base summaries.

" + }, + "NextToken":{ + "shape":"NextToken", + "documentation":"

The token for the next set of results, or null if there are no more results.

" + }, + "RequestId":{ + "shape":"String", + "documentation":"

The Amazon Web Services request ID for this operation.

" + }, + "Status":{ + "shape":"StatusCode", + "documentation":"

The HTTP status of the request.

", + "box":true, + "location":"statusCode" + } + } + }, "SearchSpacesRequest":{ "type":"structure", "required":[ @@ -38754,6 +39774,13 @@ "DESC" ] }, + "SortOrder":{ + "type":"string", + "enum":[ + "ASC", + "DESC" + ] + }, "SourceTable":{ "type":"structure", "members":{ @@ -45465,6 +46492,66 @@ } } }, + "UpdateKnowledgeBasePermissionsRequest":{ + "type":"structure", + "required":[ + "AwsAccountId", + "KnowledgeBaseId" + ], + "members":{ + "AwsAccountId":{ + "shape":"KbAwsAccountId", + "documentation":"

The ID of the Amazon Web Services account that contains the knowledge base.

", + "location":"uri", + "locationName":"AwsAccountId" + }, + "KnowledgeBaseId":{ + "shape":"KnowledgeBaseId", + "documentation":"

The unique identifier for the knowledge base.

", + "location":"uri", + "locationName":"KnowledgeBaseId" + }, + "GrantPermissions":{ + "shape":"ResourcePermissionList", + "documentation":"

The resource permissions that you want to grant on the knowledge base.

" + }, + "RevokePermissions":{ + "shape":"ResourcePermissionList", + "documentation":"

The resource permissions that you want to revoke from the knowledge base.

" + } + } + }, + "UpdateKnowledgeBasePermissionsResponse":{ + "type":"structure", + "required":[ + "KnowledgeBaseArn", + "KnowledgeBaseId" + ], + "members":{ + "KnowledgeBaseArn":{ + "shape":"KnowledgeBaseArn", + "documentation":"

The Amazon Resource Name (ARN) of the knowledge base.

" + }, + "KnowledgeBaseId":{ + "shape":"KnowledgeBaseId", + "documentation":"

The unique identifier for the knowledge base.

" + }, + "Permissions":{ + "shape":"ResourcePermissionList", + "documentation":"

The resource permissions for the knowledge base.

" + }, + "RequestId":{ + "shape":"String", + "documentation":"

The Amazon Web Services request ID for this operation.

" + }, + "Status":{ + "shape":"StatusCode", + "documentation":"

The HTTP status of the request.

", + "box":true, + "location":"statusCode" + } + } + }, "UpdateLinkPermissionList":{ "type":"list", "member":{"shape":"ResourcePermission"}, @@ -46856,6 +47943,84 @@ "documentation":"

A structure that contains information to identify a user.

", "union":true }, + "UserIndexCapacity":{ + "type":"structure", + "members":{ + "userArn":{ + "shape":"String", + "documentation":"

The ARN of the user.

" + }, + "userName":{ + "shape":"String", + "documentation":"

The username of the user.

" + }, + "email":{ + "shape":"String", + "documentation":"

The email address of the user.

" + }, + "role":{ + "shape":"String", + "documentation":"

The role of the user.

" + }, + "totalCapacityBytes":{ + "shape":"LongValue", + "documentation":"

The total index capacity consumed by the user in bytes.

" + }, + "totalKBCapacityBytes":{ + "shape":"LongValue", + "documentation":"

The total index capacity consumed by the user's knowledge bases in bytes.

" + }, + "totalSpaceCapacityBytes":{ + "shape":"LongValue", + "documentation":"

The total index capacity consumed by the user's spaces in bytes.

" + }, + "kbCount":{ + "shape":"IntegerValue", + "documentation":"

The number of knowledge bases owned by the user.

" + }, + "spaceCount":{ + "shape":"IntegerValue", + "documentation":"

The number of spaces owned by the user.

" + } + }, + "documentation":"

A summary of a user's index capacity consumption.

" + }, + "UserIndexCapacityFilter":{ + "type":"structure", + "members":{ + "userNameOrEmail":{ + "shape":"UserNameOrEmailFilter", + "documentation":"

Filter users by username or email prefix.

" + }, + "totalCapacityBytes":{ + "shape":"CapacityBytesRangeFilter", + "documentation":"

Filter users by total capacity range in bytes.

" + } + }, + "documentation":"

A filter for user index capacity queries. Only one filter type can be specified per request.

", + "union":true + }, + "UserIndexCapacityFilters":{ + "type":"list", + "member":{"shape":"UserIndexCapacityFilter"} + }, + "UserIndexCapacityList":{ + "type":"list", + "member":{"shape":"UserIndexCapacity"} + }, + "UserIndexCapacitySortBy":{ + "type":"string", + "documentation":"

The field to sort user index capacity results by.

", + "enum":["TOTAL_CAPACITY_BYTES"] + }, + "UserIndexCapacitySortOrder":{ + "type":"string", + "documentation":"

The sort order for user index capacity results.

", + "enum":[ + "ASC", + "DESC" + ] + }, "UserList":{ "type":"list", "member":{"shape":"User"} @@ -46865,6 +48030,17 @@ "min":1, "pattern":"[\\u0020-\\u00FF]+" }, + "UserNameOrEmailFilter":{ + "type":"structure", + "required":["prefix"], + "members":{ + "prefix":{ + "shape":"FilterValue", + "documentation":"

The prefix to match against username or email (starts-with match).

" + } + }, + "documentation":"

A filter that matches users by username or email prefix.

" + }, "UserRole":{ "type":"string", "enum":[ @@ -47076,6 +48252,35 @@ "AUTO" ] }, + "VideoExtractionConfiguration":{ + "type":"structure", + "required":["videoExtractionStatus"], + "members":{ + "videoExtractionStatus":{ + "shape":"VideoExtractionStatus", + "documentation":"

The status of video extraction. Valid values are ENABLED and DISABLED.

" + }, + "videoExtractionType":{ + "shape":"VideoExtractionType", + "documentation":"

The type of video extraction to perform.

" + } + }, + "documentation":"

The configuration for video extraction from knowledge base documents.

" + }, + "VideoExtractionStatus":{ + "type":"string", + "enum":[ + "ENABLED", + "DISABLED" + ] + }, + "VideoExtractionType":{ + "type":"string", + "enum":[ + "AUDIO_TRANSCRIPTION_ONLY", + "VISUAL_CONTENT_AND_AUDIO_TRANSCRIPTION" + ] + }, "Visibility":{ "type":"string", "enum":[ diff --git a/awscli/botocore/data/sagemaker/2017-07-24/service-2.json b/awscli/botocore/data/sagemaker/2017-07-24/service-2.json index 7d4bb1e3163b..75d6e0cc002d 100644 --- a/awscli/botocore/data/sagemaker/2017-07-24/service-2.json +++ b/awscli/botocore/data/sagemaker/2017-07-24/service-2.json @@ -5110,6 +5110,10 @@ "S3OutputLocation":{ "shape":"S3Uri", "documentation":"

The Amazon S3 URI where benchmark results are stored.

" + }, + "MlflowConfig":{ + "shape":"AIMlflowConfig", + "documentation":"

The MLflow tracking configuration for the job. If you don't specify this parameter, MLflow tracking is disabled.

" } }, "documentation":"

The output configuration for an AI benchmark job.

" @@ -5125,6 +5129,10 @@ "CloudWatchLogs":{ "shape":"AICloudWatchLogsList", "documentation":"

The CloudWatch log information for the benchmark job.

" + }, + "MlflowConfig":{ + "shape":"AIMlflowConfig", + "documentation":"

The MLflow tracking configuration for the job.

" } }, "documentation":"

The output result of an AI benchmark job, including the Amazon S3 location and CloudWatch log information.

" @@ -5215,6 +5223,43 @@ "type":"list", "member":{"shape":"AIMlReservationArn"} }, + "AIMlflowConfig":{ + "type":"structure", + "required":["MlflowResourceArn"], + "members":{ + "MlflowResourceArn":{ + "shape":"AIMlflowResourceArn", + "documentation":"

The Amazon Resource Name (ARN) of the SageMaker managed MLflow resource.

" + }, + "MlflowExperimentName":{ + "shape":"AIMlflowExperimentName", + "documentation":"

The MLflow experiment name used for tracking.

" + }, + "MlflowRunName":{ + "shape":"AIMlflowRunName", + "documentation":"

The MLflow run name used for tracking.

" + } + }, + "documentation":"

The MLflow tracking configuration for logging metrics and parameters to a SageMaker managed MLflow tracking server.

" + }, + "AIMlflowExperimentName":{ + "type":"string", + "max":256, + "min":1, + "pattern":"[a-zA-Z0-9\\-_./]+" + }, + "AIMlflowResourceArn":{ + "type":"string", + "max":2048, + "min":20, + "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:mlflow-(app|tracking-server)/.*" + }, + "AIMlflowRunName":{ + "type":"string", + "max":256, + "min":1, + "pattern":"[a-zA-Z0-9\\-_./]+" + }, "AIModelSource":{ "type":"structure", "members":{ @@ -5568,6 +5613,10 @@ "ModelPackageGroupIdentifier":{ "shape":"AIResourceIdentifier", "documentation":"

The name or Amazon Resource Name (ARN) of the model package group where the optimized model is registered as a new model package version.

" + }, + "MlflowConfig":{ + "shape":"AIMlflowConfig", + "documentation":"

The MLflow tracking configuration for the job. If you don't specify this parameter, MLflow tracking is disabled.

" } }, "documentation":"

The output configuration for an AI recommendation job.

" @@ -5583,6 +5632,10 @@ "ModelPackageGroupIdentifier":{ "shape":"AIResourceIdentifier", "documentation":"

The name or Amazon Resource Name (ARN) of the model package group where deployment-ready model packages are registered.

" + }, + "MlflowConfig":{ + "shape":"AIMlflowConfig", + "documentation":"

The MLflow tracking configuration for the job.

" } }, "documentation":"

The output configuration for an AI recommendation job, including the S3 location for results and the model package group for deployment.

" From 24552e5a3699bf01111d3b58dc6213d0854b6aa2 Mon Sep 17 00:00:00 2001 From: aws-sdk-python-automation Date: Fri, 5 Jun 2026 18:04:39 +0000 Subject: [PATCH 03/18] Update endpoints model --- awscli/botocore/data/endpoints.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/awscli/botocore/data/endpoints.json b/awscli/botocore/data/endpoints.json index cc25b5423242..7c4131e03261 100644 --- a/awscli/botocore/data/endpoints.json +++ b/awscli/botocore/data/endpoints.json @@ -40693,6 +40693,11 @@ "eusc-de-east-1" : { } } }, + "mq" : { + "endpoints" : { + "eusc-de-east-1" : { } + } + }, "network-firewall" : { "endpoints" : { "eusc-de-east-1" : { } From 2593f1b041a9a571cf78698f8b7fec947483cdd1 Mon Sep 17 00:00:00 2001 From: aws-sdk-python-automation Date: Fri, 5 Jun 2026 18:06:44 +0000 Subject: [PATCH 04/18] Bump version to 2.34.63 --- .changes/2.34.63.json | 27 +++++++++++++++++++ .../api-change-emrserverless-14774.json | 5 ---- .../api-change-mediaconvert-56368.json | 5 ---- .../api-change-paymentcryptography-32029.json | 5 ---- .../api-change-quicksight-48259.json | 5 ---- .../api-change-sagemaker-10477.json | 5 ---- CHANGELOG.rst | 10 +++++++ awscli/__init__.py | 2 +- configure | 14 +++++----- configure.ac | 2 +- doc/source/conf.py | 2 +- 11 files changed, 47 insertions(+), 35 deletions(-) create mode 100644 .changes/2.34.63.json delete mode 100644 .changes/next-release/api-change-emrserverless-14774.json delete mode 100644 .changes/next-release/api-change-mediaconvert-56368.json delete mode 100644 .changes/next-release/api-change-paymentcryptography-32029.json delete mode 100644 .changes/next-release/api-change-quicksight-48259.json delete mode 100644 .changes/next-release/api-change-sagemaker-10477.json diff --git a/.changes/2.34.63.json b/.changes/2.34.63.json new file mode 100644 index 000000000000..d5b37c6af136 --- /dev/null +++ b/.changes/2.34.63.json @@ -0,0 +1,27 @@ +[ + { + "category": "``emr-serverless``", + "description": "Adds support for updating max capacity and custom fields while application is started", + "type": "api-change" + }, + { + "category": "``quicksight``", + "description": "Adds support for Knowledge Base APIs and Index Capacity API", + "type": "api-change" + }, + { + "category": "``sagemaker``", + "description": "This release adds support for MLflow experiment tracking in SageMaker inference optimization. CreateAIRecommendationJob and CreateAIBenchmarkJob now accept an optional OutputConfig.MlflowConfig (MLflow App ARN, experiment, run name) to stream benchmark metrics and artifacts to your own MLflow App.", + "type": "api-change" + }, + { + "category": "``mediaconvert``", + "description": "Adds support for configurable number of Clear Lead segments at the beginning of encrypted output. Adds support for multiple trickplay variants.", + "type": "api-change" + }, + { + "category": "``payment-cryptography``", + "description": "Adds CloudFormation support for resource-based policies on AWS Payment Cryptography keys.", + "type": "api-change" + } +] \ No newline at end of file diff --git a/.changes/next-release/api-change-emrserverless-14774.json b/.changes/next-release/api-change-emrserverless-14774.json deleted file mode 100644 index b71e979def6f..000000000000 --- a/.changes/next-release/api-change-emrserverless-14774.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "api-change", - "category": "``emr-serverless``", - "description": "Adds support for updating max capacity and custom fields while application is started" -} diff --git a/.changes/next-release/api-change-mediaconvert-56368.json b/.changes/next-release/api-change-mediaconvert-56368.json deleted file mode 100644 index 689e469c81e6..000000000000 --- a/.changes/next-release/api-change-mediaconvert-56368.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "api-change", - "category": "``mediaconvert``", - "description": "Adds support for configurable number of Clear Lead segments at the beginning of encrypted output. Adds support for multiple trickplay variants." -} diff --git a/.changes/next-release/api-change-paymentcryptography-32029.json b/.changes/next-release/api-change-paymentcryptography-32029.json deleted file mode 100644 index da737fe78399..000000000000 --- a/.changes/next-release/api-change-paymentcryptography-32029.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "api-change", - "category": "``payment-cryptography``", - "description": "Adds CloudFormation support for resource-based policies on AWS Payment Cryptography keys." -} diff --git a/.changes/next-release/api-change-quicksight-48259.json b/.changes/next-release/api-change-quicksight-48259.json deleted file mode 100644 index 2188cebbe998..000000000000 --- a/.changes/next-release/api-change-quicksight-48259.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "api-change", - "category": "``quicksight``", - "description": "Adds support for Knowledge Base APIs and Index Capacity API" -} diff --git a/.changes/next-release/api-change-sagemaker-10477.json b/.changes/next-release/api-change-sagemaker-10477.json deleted file mode 100644 index c5deb05cca1b..000000000000 --- a/.changes/next-release/api-change-sagemaker-10477.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "api-change", - "category": "``sagemaker``", - "description": "This release adds support for MLflow experiment tracking in SageMaker inference optimization. CreateAIRecommendationJob and CreateAIBenchmarkJob now accept an optional OutputConfig.MlflowConfig (MLflow App ARN, experiment, run name) to stream benchmark metrics and artifacts to your own MLflow App." -} diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 67eb3f5b8f11..a395fc877bda 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -2,6 +2,16 @@ CHANGELOG ========= +2.34.63 +======= + +* api-change:``emr-serverless``: Adds support for updating max capacity and custom fields while application is started +* api-change:``quicksight``: Adds support for Knowledge Base APIs and Index Capacity API +* api-change:``sagemaker``: This release adds support for MLflow experiment tracking in SageMaker inference optimization. CreateAIRecommendationJob and CreateAIBenchmarkJob now accept an optional OutputConfig.MlflowConfig (MLflow App ARN, experiment, run name) to stream benchmark metrics and artifacts to your own MLflow App. +* api-change:``mediaconvert``: Adds support for configurable number of Clear Lead segments at the beginning of encrypted output. Adds support for multiple trickplay variants. +* api-change:``payment-cryptography``: Adds CloudFormation support for resource-based policies on AWS Payment Cryptography keys. + + 2.34.62 ======= diff --git a/awscli/__init__.py b/awscli/__init__.py index 5333db9c389f..9bfa6e9293ce 100644 --- a/awscli/__init__.py +++ b/awscli/__init__.py @@ -20,7 +20,7 @@ import os import sys -__version__ = '2.34.62' +__version__ = '2.34.63' # # Get our data path to be added to botocore's search path diff --git a/configure b/configure index 7ba3ca2b3400..6ab05a1f0c7c 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for awscli 2.34.62. +# Generated by GNU Autoconf 2.71 for awscli 2.34.63. # # # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, @@ -607,8 +607,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='awscli' PACKAGE_TARNAME='awscli' -PACKAGE_VERSION='2.34.62' -PACKAGE_STRING='awscli 2.34.62' +PACKAGE_VERSION='2.34.63' +PACKAGE_STRING='awscli 2.34.63' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1255,7 +1255,7 @@ _ACEOF fi if $ac_init_version; then cat <<\_ACEOF -awscli configure 2.34.62 +awscli configure 2.34.63 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -1292,7 +1292,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by awscli $as_me 2.34.62, which was +It was created by awscli $as_me 2.34.63, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -2668,7 +2668,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by awscli $as_me 2.34.62, which was +This file was extended by awscli $as_me 2.34.63, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -2723,7 +2723,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -awscli config.status 2.34.62 +awscli config.status 2.34.63 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index f402447a7e36..ddfa0726c36b 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ AC_CONFIG_MACRO_DIRS([m4]) -AC_INIT([awscli], [2.34.62]) +AC_INIT([awscli], [2.34.63]) AC_CONFIG_SRCDIR([bin/aws]) AM_PATH_PYTHON([3.8]) diff --git a/doc/source/conf.py b/doc/source/conf.py index bbe64bc537b2..dda4281f2679 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -66,7 +66,7 @@ # The short X.Y version. version = '2.0' # The full version, including alpha/beta/rc tags. -release = '2.34.62' +release = '2.34.63' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. From d9d30da359a9d17b735ea4b575df5d7668bad4c3 Mon Sep 17 00:00:00 2001 From: "Adrian D." <101290859+adev-code@users.noreply.github.com> Date: Mon, 8 Jun 2026 08:51:48 -0700 Subject: [PATCH 05/18] Update README zsh completion for bundled installer (#10327) Update README zsh completion to match User Guide Both pip and bundled installs ship aws_completer, so a single set of instructions covers both methods. Replace the legacy aws_zsh_completer.sh block with bashcompinit + complete -C aws_completer as documented in the AWS CLI User Guide: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-completion.html Fixes #8957 --- README.rst | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/README.rst b/README.rst index 4b6369d7c263..5841bce41983 100644 --- a/README.rst +++ b/README.rst @@ -87,13 +87,17 @@ For tcsh:: You should add this to your startup scripts to enable it for future sessions. -For zsh please refer to ``bin/aws_zsh_completer.sh``. Source that file, e.g. -from your ``~/.zshrc``, and make sure you run ``compinit`` before:: +For zsh, run ``bashcompinit`` and ``compinit``, then use the built-in +``complete`` command:: - $ source bin/aws_zsh_completer.sh + $ autoload bashcompinit && bashcompinit + $ autoload -Uz compinit && compinit + $ complete -C '/usr/local/bin/aws_completer' aws + +Replace ``/usr/local/bin/aws_completer`` with the path returned by +``which aws_completer`` if different. Add these commands to your +``~/.zshrc`` to enable completion in future sessions. -For now the bash compatibility auto completion (``bashcompinit``) is used. -For further details please refer to the top of ``bin/aws_zsh_completer.sh``. --------------- Getting Started From 39b655c2bbc7b6aeb0ebbd08ce2e37c941264da2 Mon Sep 17 00:00:00 2001 From: aws-sdk-python-automation Date: Mon, 8 Jun 2026 18:23:26 +0000 Subject: [PATCH 06/18] Update to latest models --- .../api-change-computeoptimizer-72011.json | 5 + .../api-change-costoptimizationhub-88204.json | 5 + .../api-change-deadline-41239.json | 5 + .../api-change-devopsagent-11021.json | 5 + .../api-change-mediapackagev2-18422.json | 5 + .../next-release/api-change-mgn-10221.json | 5 + .../api-change-observabilityadmin-14020.json | 5 + .../next-release/api-change-omics-14529.json | 5 + .../api-change-taxsettings-59244.json | 5 + .../2019-11-01/service-2.json | 78 +- .../2022-07-26/service-2.json | 76 +- .../data/deadline/2023-10-12/service-2.json | 16 + .../devops-agent/2026-01-01/paginators-1.json | 24 + .../devops-agent/2026-01-01/service-2.json | 1681 +++++++++++++++-- .../mediapackagev2/2022-12-25/service-2.json | 19 +- .../data/mgn/2020-02-26/service-2.json | 3 +- .../2018-05-10/service-2.json | 44 + .../data/omics/2022-11-28/service-2.json | 8 + .../taxsettings/2018-05-10/service-2.json | 948 ++++++---- .../taxsettings/2018-05-10/waiters-2.json | 5 + 20 files changed, 2339 insertions(+), 608 deletions(-) create mode 100644 .changes/next-release/api-change-computeoptimizer-72011.json create mode 100644 .changes/next-release/api-change-costoptimizationhub-88204.json create mode 100644 .changes/next-release/api-change-deadline-41239.json create mode 100644 .changes/next-release/api-change-devopsagent-11021.json create mode 100644 .changes/next-release/api-change-mediapackagev2-18422.json create mode 100644 .changes/next-release/api-change-mgn-10221.json create mode 100644 .changes/next-release/api-change-observabilityadmin-14020.json create mode 100644 .changes/next-release/api-change-omics-14529.json create mode 100644 .changes/next-release/api-change-taxsettings-59244.json create mode 100644 awscli/botocore/data/taxsettings/2018-05-10/waiters-2.json diff --git a/.changes/next-release/api-change-computeoptimizer-72011.json b/.changes/next-release/api-change-computeoptimizer-72011.json new file mode 100644 index 000000000000..02e7ad0d7db3 --- /dev/null +++ b/.changes/next-release/api-change-computeoptimizer-72011.json @@ -0,0 +1,5 @@ +{ + "type": "api-change", + "category": "``compute-optimizer``", + "description": "Adds new Idle Recommendation Resource types in the AWS Compute Optimizer API" +} diff --git a/.changes/next-release/api-change-costoptimizationhub-88204.json b/.changes/next-release/api-change-costoptimizationhub-88204.json new file mode 100644 index 000000000000..d502ea6d047d --- /dev/null +++ b/.changes/next-release/api-change-costoptimizationhub-88204.json @@ -0,0 +1,5 @@ +{ + "type": "api-change", + "category": "``cost-optimization-hub``", + "description": "Adds new Idle Recommendation types in the Cost Optimization Hub API" +} diff --git a/.changes/next-release/api-change-deadline-41239.json b/.changes/next-release/api-change-deadline-41239.json new file mode 100644 index 000000000000..742aa001ff6d --- /dev/null +++ b/.changes/next-release/api-change-deadline-41239.json @@ -0,0 +1,5 @@ +{ + "type": "api-change", + "category": "``deadline``", + "description": "Added optional identityCenterRegion parameter to AssociateMember APIs to allow managing memberships for users and groups in other regions." +} diff --git a/.changes/next-release/api-change-devopsagent-11021.json b/.changes/next-release/api-change-devopsagent-11021.json new file mode 100644 index 000000000000..abf2b2baccc7 --- /dev/null +++ b/.changes/next-release/api-change-devopsagent-11021.json @@ -0,0 +1,5 @@ +{ + "type": "api-change", + "category": "``devops-agent``", + "description": "Add Asset APIs for managing versioned assets and asset files in AWS DevOps Agent agent spaces." +} diff --git a/.changes/next-release/api-change-mediapackagev2-18422.json b/.changes/next-release/api-change-mediapackagev2-18422.json new file mode 100644 index 000000000000..7937fbba6c23 --- /dev/null +++ b/.changes/next-release/api-change-mediapackagev2-18422.json @@ -0,0 +1,5 @@ +{ + "type": "api-change", + "category": "``mediapackagev2``", + "description": "Adds support for DASH Audio Timeline Patternization. This enables your DASH manifests to templatize the repeating patterns that emerge in audio segment timelines. This compacts the total timeline length, utilizing the repeat notation, such that manifests don't grow indefinitely long." +} diff --git a/.changes/next-release/api-change-mgn-10221.json b/.changes/next-release/api-change-mgn-10221.json new file mode 100644 index 000000000000..9b57e29322e1 --- /dev/null +++ b/.changes/next-release/api-change-mgn-10221.json @@ -0,0 +1,5 @@ +{ + "type": "api-change", + "category": "``mgn``", + "description": "AWS Transform discovery tool now supported as network migration input source. You can now use the AWS Transform Discovery tool as a source for network migration alongside modelizeIT, enabling hybrid network migrations for environments running both VMware and non-VMware workloads." +} diff --git a/.changes/next-release/api-change-observabilityadmin-14020.json b/.changes/next-release/api-change-observabilityadmin-14020.json new file mode 100644 index 000000000000..036aeea62142 --- /dev/null +++ b/.changes/next-release/api-change-observabilityadmin-14020.json @@ -0,0 +1,5 @@ +{ + "type": "api-change", + "category": "``observabilityadmin``", + "description": "CloudWatch Observability Admin extends CentralizationRuleForOrganization APIs to support metrics, enabling centralization of metrics across accounts and Regions alongside logs." +} diff --git a/.changes/next-release/api-change-omics-14529.json b/.changes/next-release/api-change-omics-14529.json new file mode 100644 index 000000000000..4ffb2a04e7b0 --- /dev/null +++ b/.changes/next-release/api-change-omics-14529.json @@ -0,0 +1,5 @@ +{ + "type": "api-change", + "category": "``omics``", + "description": "StartRunBatch API - Add EngineSettings" +} diff --git a/.changes/next-release/api-change-taxsettings-59244.json b/.changes/next-release/api-change-taxsettings-59244.json new file mode 100644 index 000000000000..0bbde2a78b79 --- /dev/null +++ b/.changes/next-release/api-change-taxsettings-59244.json @@ -0,0 +1,5 @@ +{ + "type": "api-change", + "category": "``taxsettings``", + "description": "Adds support for additional tax information fields for Philippines, Belgium, Chile, France, Poland, and Italy in the Tax Settings API." +} diff --git a/awscli/botocore/data/compute-optimizer/2019-11-01/service-2.json b/awscli/botocore/data/compute-optimizer/2019-11-01/service-2.json index cd4a70bafbce..bf27fe1cbedb 100644 --- a/awscli/botocore/data/compute-optimizer/2019-11-01/service-2.json +++ b/awscli/botocore/data/compute-optimizer/2019-11-01/service-2.json @@ -2063,6 +2063,22 @@ "UtilizationMetricsActiveConnectionCountMaximum", "UtilizationMetricsPacketsInFromSourceMaximum", "UtilizationMetricsPacketsInFromDestinationMaximum", + "UtilizationMetricsConsumedReadCapacityUnitsSum", + "UtilizationMetricsConsumedWriteCapacityUnitsSum", + "UtilizationMetricsNewConnectionsSum", + "UtilizationMetricsEngineCPUUtilizationMaximum", + "UtilizationMetricsCacheHitsSum", + "UtilizationMetricsCacheMissesSum", + "UtilizationMetricsKeyspaceHitsSum", + "UtilizationMetricsKeyspaceMissesSum", + "UtilizationMetricsIsIdleMinimum", + "UtilizationMetricsUserConnectedSum", + "UtilizationMetricsInvocationsSum", + "UtilizationMetricsGetTypeCmdsSum", + "UtilizationMetricsSetTypeCmdsSum", + "UtilizationMetricsElastiCacheProcessingUnitsSum", + "UtilizationMetricsCurrConnectionsSum", + "UtilizationMetricsDatabaseConnectionsSum", "Finding", "FindingDescription", "Tags" @@ -3159,6 +3175,30 @@ "False" ] }, + "IdleDimension":{ + "type":"structure", + "members":{ + "key":{ + "shape":"IdleDimensionKey", + "documentation":"

The name of the dimension key.

" + }, + "values":{ + "shape":"IdleDimensionValues", + "documentation":"

The value of the dimension.

" + } + }, + "documentation":"

Describes the dimension of an idle resource utilization metric.

" + }, + "IdleDimensionKey":{"type":"string"}, + "IdleDimensionValue":{"type":"string"}, + "IdleDimensionValues":{ + "type":"list", + "member":{"shape":"IdleDimensionValue"} + }, + "IdleDimensions":{ + "type":"list", + "member":{"shape":"IdleDimension"} + }, "IdleEstimatedMonthlySavings":{ "type":"structure", "members":{ @@ -3202,7 +3242,23 @@ "VolumeWriteOpsPerSecond", "ActiveConnectionCount", "PacketsInFromSource", - "PacketsInFromDestination" + "PacketsInFromDestination", + "ConsumedReadCapacityUnits", + "ConsumedWriteCapacityUnits", + "ConsumedChangeDataCaptureUnits", + "NewConnections", + "EngineCPUUtilization", + "CacheHits", + "CacheMisses", + "KeyspaceHits", + "KeyspaceMisses", + "IsIdle", + "UserConnected", + "Invocations", + "GetTypeCmds", + "SetTypeCmds", + "ElastiCacheProcessingUnits", + "CurrConnections" ] }, "IdleRecommendation":{ @@ -3318,7 +3374,13 @@ "EBSVolume", "ECSService", "RDSDBInstance", - "NatGateway" + "NatGateway", + "DynamoDBTable", + "ElastiCacheCluster", + "MemoryDBCluster", + "DocumentDBCluster", + "WorkSpaces", + "SageMakerEndpoint" ] }, "IdleRecommendations":{ @@ -3385,6 +3447,10 @@ "value":{ "shape":"MetricValue", "documentation":"

The value of the utilization metric.

" + }, + "dimensions":{ + "shape":"IdleDimensions", + "documentation":"

The dimensions of the utilization metric.

" } }, "documentation":"

Describes the utilization metric of an idle resource.

" @@ -5087,7 +5153,13 @@ "RdsDBInstance", "RdsDBInstanceStorage", "AuroraDBClusterStorage", - "NatGateway" + "NatGateway", + "DynamoDBTable", + "ElastiCacheCluster", + "MemoryDBCluster", + "DocumentDBCluster", + "WorkSpaces", + "SageMakerEndpoint" ] }, "RecommendationSources":{ diff --git a/awscli/botocore/data/cost-optimization-hub/2022-07-26/service-2.json b/awscli/botocore/data/cost-optimization-hub/2022-07-26/service-2.json index 04806c31428a..37edc9405fa4 100644 --- a/awscli/botocore/data/cost-optimization-hub/2022-07-26/service-2.json +++ b/awscli/botocore/data/cost-optimization-hub/2022-07-26/service-2.json @@ -331,6 +331,13 @@ }, "documentation":"

The DB instance configuration used for recommendations.

" }, + "DocumentDbCluster":{ + "type":"structure", + "members":{ + "costCalculation":{"shape":"ResourceCostCalculation"} + }, + "documentation":"

The Amazon DocumentDB cluster recommendation details.

" + }, "Double":{ "type":"double", "box":true @@ -388,6 +395,13 @@ }, "documentation":"

The DynamoDB reserved capacity configuration used for recommendations.

" }, + "DynamoDbTable":{ + "type":"structure", + "members":{ + "costCalculation":{"shape":"ResourceCostCalculation"} + }, + "documentation":"

The DynamoDB table recommendation details.

" + }, "EbsVolume":{ "type":"structure", "members":{ @@ -665,6 +679,13 @@ }, "documentation":"

A list of cost efficiency metrics grouped by the specified dimension.

" }, + "ElastiCacheCluster":{ + "type":"structure", + "members":{ + "costCalculation":{"shape":"ResourceCostCalculation"} + }, + "documentation":"

The ElastiCache cluster recommendation details.

" + }, "ElastiCacheReservedInstances":{ "type":"structure", "members":{ @@ -1048,7 +1069,7 @@ "ListEfficiencyMetricsRequestMaxResultsInteger":{ "type":"integer", "box":true, - "max":100, + "max":1000, "min":0 }, "ListEfficiencyMetricsResponse":{ @@ -1221,6 +1242,13 @@ "None" ] }, + "MemoryDbCluster":{ + "type":"structure", + "members":{ + "costCalculation":{"shape":"ResourceCostCalculation"} + }, + "documentation":"

The MemoryDB cluster recommendation details.

" + }, "MemoryDbReservedInstances":{ "type":"structure", "members":{ @@ -1947,6 +1975,30 @@ "natGateway":{ "shape":"NatGateway", "documentation":"

The NAT Gateway recommendation details.

" + }, + "dynamoDbTable":{ + "shape":"DynamoDbTable", + "documentation":"

The DynamoDB table recommendation details.

" + }, + "elastiCacheCluster":{ + "shape":"ElastiCacheCluster", + "documentation":"

The ElastiCache cluster recommendation details.

" + }, + "memoryDbCluster":{ + "shape":"MemoryDbCluster", + "documentation":"

The MemoryDB cluster recommendation details.

" + }, + "documentDbCluster":{ + "shape":"DocumentDbCluster", + "documentation":"

The Amazon DocumentDB cluster recommendation details.

" + }, + "workSpaces":{ + "shape":"WorkSpaces", + "documentation":"

The WorkSpaces recommendation details.

" + }, + "sageMakerEndpoint":{ + "shape":"SageMakerEndpoint", + "documentation":"

The SageMaker endpoint recommendation details.

" } }, "documentation":"

Contains detailed information about the specified resource.

", @@ -2017,7 +2069,13 @@ "AuroraDbClusterStorage", "DynamoDbReservedCapacity", "MemoryDbReservedInstances", - "NatGateway" + "NatGateway", + "DynamoDBTable", + "ElastiCacheCluster", + "MemoryDBCluster", + "DocumentDBCluster", + "WorkSpaces", + "SageMakerEndpoint" ] }, "ResourceTypeList":{ @@ -2026,6 +2084,13 @@ "max":100, "min":1 }, + "SageMakerEndpoint":{ + "type":"structure", + "members":{ + "costCalculation":{"shape":"ResourceCostCalculation"} + }, + "documentation":"

The SageMaker endpoint recommendation details.

" + }, "SageMakerSavingsPlans":{ "type":"structure", "members":{ @@ -2329,6 +2394,13 @@ "FieldValidationFailed", "Other" ] + }, + "WorkSpaces":{ + "type":"structure", + "members":{ + "costCalculation":{"shape":"ResourceCostCalculation"} + }, + "documentation":"

The WorkSpaces recommendation details.

" } }, "documentation":"

You can use the Cost Optimization Hub API to programmatically identify, filter, aggregate, and quantify savings for your cost optimization recommendations across multiple Amazon Web Services Regions and Amazon Web Services accounts in your organization.

The Cost Optimization Hub API provides the following endpoint:

  • https://cost-optimization-hub.us-east-1.amazonaws.com

" diff --git a/awscli/botocore/data/deadline/2023-10-12/service-2.json b/awscli/botocore/data/deadline/2023-10-12/service-2.json index d1c10937ce0d..7ffa3e85187a 100644 --- a/awscli/botocore/data/deadline/2023-10-12/service-2.json +++ b/awscli/botocore/data/deadline/2023-10-12/service-2.json @@ -2860,6 +2860,10 @@ "documentation":"

The member's principal ID to associate with the farm.

", "location":"uri", "locationName":"principalId" + }, + "identityCenterRegion":{ + "shape":"Region", + "documentation":"

The Region of the IAM Identity Center instance. If not provided, the service defaults to the Region of the farm.

" } }, "documentation":"

Shared member fields for Associate inputs and {Resource}Member response structures. principalId is excluded because it has @httpLabel on inputs but not on responses.

" @@ -2908,6 +2912,10 @@ "documentation":"

The member's principal ID to associate with a fleet.

", "location":"uri", "locationName":"principalId" + }, + "identityCenterRegion":{ + "shape":"Region", + "documentation":"

The Region of the IAM Identity Center instance. If not provided, the service defaults to the Region of the farm.

" } }, "documentation":"

Shared member fields for Associate inputs and {Resource}Member response structures. principalId is excluded because it has @httpLabel on inputs but not on responses.

" @@ -2963,6 +2971,10 @@ "documentation":"

The member's principal ID to associate with the job.

", "location":"uri", "locationName":"principalId" + }, + "identityCenterRegion":{ + "shape":"Region", + "documentation":"

The Region of the IAM Identity Center instance. If not provided, the service defaults to the Region of the farm.

" } }, "documentation":"

Shared member fields for Associate inputs and {Resource}Member response structures. principalId is excluded because it has @httpLabel on inputs but not on responses.

" @@ -3011,6 +3023,10 @@ "documentation":"

The member's principal ID to associate with the queue.

", "location":"uri", "locationName":"principalId" + }, + "identityCenterRegion":{ + "shape":"Region", + "documentation":"

The Region of the IAM Identity Center instance. If not provided, the service defaults to the Region of the farm.

" } }, "documentation":"

Shared member fields for Associate inputs and {Resource}Member response structures. principalId is excluded because it has @httpLabel on inputs but not on responses.

" diff --git a/awscli/botocore/data/devops-agent/2026-01-01/paginators-1.json b/awscli/botocore/data/devops-agent/2026-01-01/paginators-1.json index a7a0e62825e9..c875752db8af 100644 --- a/awscli/botocore/data/devops-agent/2026-01-01/paginators-1.json +++ b/awscli/botocore/data/devops-agent/2026-01-01/paginators-1.json @@ -41,6 +41,30 @@ "output_token": "nextToken", "limit_key": "maxResults", "result_key": "services" + }, + "ListAssetFiles": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListAssetTypes": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListAssetVersions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListAssets": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" } } } diff --git a/awscli/botocore/data/devops-agent/2026-01-01/service-2.json b/awscli/botocore/data/devops-agent/2026-01-01/service-2.json index fa36566f32c0..c691273d4b93 100644 --- a/awscli/botocore/data/devops-agent/2026-01-01/service-2.json +++ b/awscli/botocore/data/devops-agent/2026-01-01/service-2.json @@ -60,6 +60,52 @@ "endpoint":{"hostPrefix":"cp."}, "idempotent":true }, + "CreateAsset":{ + "name":"CreateAsset", + "http":{ + "method":"POST", + "requestUri":"/asset/agent-space/{agentSpaceId}/assets", + "responseCode":201 + }, + "input":{"shape":"CreateAssetRequest"}, + "output":{"shape":"CreateAssetResponse"}, + "errors":[ + {"shape":"ValidationException"}, + {"shape":"ContentSizeExceededException"}, + {"shape":"ServiceQuotaExceededException"}, + {"shape":"ConflictException"}, + {"shape":"InternalServerException"}, + {"shape":"AccessDeniedException"}, + {"shape":"ThrottlingException"}, + {"shape":"InvalidParameterException"}, + {"shape":"ResourceNotFoundException"} + ], + "documentation":"

Creates a new asset in the specified agent space

", + "endpoint":{"hostPrefix":"dp."} + }, + "CreateAssetFile":{ + "name":"CreateAssetFile", + "http":{ + "method":"POST", + "requestUri":"/asset/agent-space/{agentSpaceId}/assets/{assetId}/files/{path+}", + "responseCode":201 + }, + "input":{"shape":"CreateAssetFileRequest"}, + "output":{"shape":"CreateAssetFileResponse"}, + "errors":[ + {"shape":"ValidationException"}, + {"shape":"ContentSizeExceededException"}, + {"shape":"ServiceQuotaExceededException"}, + {"shape":"ConflictException"}, + {"shape":"InternalServerException"}, + {"shape":"AccessDeniedException"}, + {"shape":"ResourceNotFoundException"}, + {"shape":"ThrottlingException"}, + {"shape":"InvalidParameterException"} + ], + "documentation":"

Creates a file in an asset

", + "endpoint":{"hostPrefix":"dp."} + }, "CreateBacklogTask":{ "name":"CreateBacklogTask", "http":{ @@ -155,6 +201,54 @@ "endpoint":{"hostPrefix":"cp."}, "idempotent":true }, + "DeleteAsset":{ + "name":"DeleteAsset", + "http":{ + "method":"DELETE", + "requestUri":"/asset/agent-space/{agentSpaceId}/assets/{assetId}", + "responseCode":200 + }, + "input":{"shape":"DeleteAssetRequest"}, + "output":{"shape":"DeleteAssetResponse"}, + "errors":[ + {"shape":"ValidationException"}, + {"shape":"ContentSizeExceededException"}, + {"shape":"ServiceQuotaExceededException"}, + {"shape":"ConflictException"}, + {"shape":"InternalServerException"}, + {"shape":"AccessDeniedException"}, + {"shape":"ResourceNotFoundException"}, + {"shape":"ThrottlingException"}, + {"shape":"InvalidParameterException"} + ], + "documentation":"

Deletes an asset and all its files from the specified agent space

", + "endpoint":{"hostPrefix":"dp."}, + "idempotent":true + }, + "DeleteAssetFile":{ + "name":"DeleteAssetFile", + "http":{ + "method":"DELETE", + "requestUri":"/asset/agent-space/{agentSpaceId}/assets/{assetId}/files/{path+}", + "responseCode":200 + }, + "input":{"shape":"DeleteAssetFileRequest"}, + "output":{"shape":"DeleteAssetFileResponse"}, + "errors":[ + {"shape":"ValidationException"}, + {"shape":"ContentSizeExceededException"}, + {"shape":"ServiceQuotaExceededException"}, + {"shape":"ConflictException"}, + {"shape":"InternalServerException"}, + {"shape":"AccessDeniedException"}, + {"shape":"ResourceNotFoundException"}, + {"shape":"ThrottlingException"}, + {"shape":"InvalidParameterException"} + ], + "documentation":"

Deletes a file from an asset

", + "endpoint":{"hostPrefix":"dp."}, + "idempotent":true + }, "DeletePrivateConnection":{ "name":"DeletePrivateConnection", "http":{ @@ -347,6 +441,78 @@ "endpoint":{"hostPrefix":"cp."}, "readonly":true }, + "GetAsset":{ + "name":"GetAsset", + "http":{ + "method":"GET", + "requestUri":"/asset/agent-space/{agentSpaceId}/assets/{assetId}", + "responseCode":200 + }, + "input":{"shape":"GetAssetRequest"}, + "output":{"shape":"GetAssetResponse"}, + "errors":[ + {"shape":"ValidationException"}, + {"shape":"ContentSizeExceededException"}, + {"shape":"ServiceQuotaExceededException"}, + {"shape":"ConflictException"}, + {"shape":"InternalServerException"}, + {"shape":"AccessDeniedException"}, + {"shape":"ResourceNotFoundException"}, + {"shape":"ThrottlingException"}, + {"shape":"InvalidParameterException"} + ], + "documentation":"

Gets an asset from the specified agent space

", + "endpoint":{"hostPrefix":"dp."}, + "readonly":true + }, + "GetAssetContent":{ + "name":"GetAssetContent", + "http":{ + "method":"GET", + "requestUri":"/asset/agent-space/{agentSpaceId}/assets/{assetId}/content", + "responseCode":200 + }, + "input":{"shape":"GetAssetContentRequest"}, + "output":{"shape":"GetAssetContentResponse"}, + "errors":[ + {"shape":"ValidationException"}, + {"shape":"ContentSizeExceededException"}, + {"shape":"ServiceQuotaExceededException"}, + {"shape":"ConflictException"}, + {"shape":"InternalServerException"}, + {"shape":"AccessDeniedException"}, + {"shape":"ResourceNotFoundException"}, + {"shape":"ThrottlingException"}, + {"shape":"InvalidParameterException"} + ], + "documentation":"

Gets an asset's content as a zip bundle

", + "endpoint":{"hostPrefix":"dp."}, + "readonly":true + }, + "GetAssetFile":{ + "name":"GetAssetFile", + "http":{ + "method":"GET", + "requestUri":"/asset/agent-space/{agentSpaceId}/assets/{assetId}/files/{path+}", + "responseCode":200 + }, + "input":{"shape":"GetAssetFileRequest"}, + "output":{"shape":"GetAssetFileResponse"}, + "errors":[ + {"shape":"ValidationException"}, + {"shape":"ContentSizeExceededException"}, + {"shape":"ServiceQuotaExceededException"}, + {"shape":"ConflictException"}, + {"shape":"InternalServerException"}, + {"shape":"AccessDeniedException"}, + {"shape":"ResourceNotFoundException"}, + {"shape":"ThrottlingException"}, + {"shape":"InvalidParameterException"} + ], + "documentation":"

Gets a file from an asset

", + "endpoint":{"hostPrefix":"dp."}, + "readonly":true + }, "GetAssociation":{ "name":"GetAssociation", "http":{ @@ -491,6 +657,102 @@ "endpoint":{"hostPrefix":"cp."}, "readonly":true }, + "ListAssetFiles":{ + "name":"ListAssetFiles", + "http":{ + "method":"GET", + "requestUri":"/asset/agent-space/{agentSpaceId}/assets/{assetId}/files", + "responseCode":200 + }, + "input":{"shape":"ListAssetFilesRequest"}, + "output":{"shape":"ListAssetFilesResponse"}, + "errors":[ + {"shape":"ValidationException"}, + {"shape":"ContentSizeExceededException"}, + {"shape":"ServiceQuotaExceededException"}, + {"shape":"ConflictException"}, + {"shape":"InternalServerException"}, + {"shape":"AccessDeniedException"}, + {"shape":"ResourceNotFoundException"}, + {"shape":"ThrottlingException"}, + {"shape":"InvalidParameterException"} + ], + "documentation":"

Lists files in an asset

", + "endpoint":{"hostPrefix":"dp."}, + "readonly":true + }, + "ListAssetTypes":{ + "name":"ListAssetTypes", + "http":{ + "method":"GET", + "requestUri":"/asset/types", + "responseCode":200 + }, + "input":{"shape":"ListAssetTypesRequest"}, + "output":{"shape":"ListAssetTypesResponse"}, + "errors":[ + {"shape":"ValidationException"}, + {"shape":"ContentSizeExceededException"}, + {"shape":"ServiceQuotaExceededException"}, + {"shape":"ConflictException"}, + {"shape":"InternalServerException"}, + {"shape":"AccessDeniedException"}, + {"shape":"ThrottlingException"}, + {"shape":"InvalidParameterException"}, + {"shape":"ResourceNotFoundException"} + ], + "documentation":"

Lists the supported asset types

", + "endpoint":{"hostPrefix":"dp."}, + "readonly":true + }, + "ListAssetVersions":{ + "name":"ListAssetVersions", + "http":{ + "method":"GET", + "requestUri":"/asset/agent-space/{agentSpaceId}/assets/{assetId}/versions", + "responseCode":200 + }, + "input":{"shape":"ListAssetVersionsRequest"}, + "output":{"shape":"ListAssetVersionsResponse"}, + "errors":[ + {"shape":"ValidationException"}, + {"shape":"ContentSizeExceededException"}, + {"shape":"ServiceQuotaExceededException"}, + {"shape":"ConflictException"}, + {"shape":"InternalServerException"}, + {"shape":"AccessDeniedException"}, + {"shape":"ResourceNotFoundException"}, + {"shape":"ThrottlingException"}, + {"shape":"InvalidParameterException"} + ], + "documentation":"

Lists versions of an asset in the specified agent space

", + "endpoint":{"hostPrefix":"dp."}, + "readonly":true + }, + "ListAssets":{ + "name":"ListAssets", + "http":{ + "method":"GET", + "requestUri":"/asset/agent-space/{agentSpaceId}/assets", + "responseCode":200 + }, + "input":{"shape":"ListAssetsRequest"}, + "output":{"shape":"ListAssetsResponse"}, + "errors":[ + {"shape":"ValidationException"}, + {"shape":"ContentSizeExceededException"}, + {"shape":"ServiceQuotaExceededException"}, + {"shape":"ConflictException"}, + {"shape":"InternalServerException"}, + {"shape":"AccessDeniedException"}, + {"shape":"ThrottlingException"}, + {"shape":"InvalidParameterException"}, + {"shape":"ResourceNotFoundException"} + ], + "documentation":"

Lists assets in the specified agent space

", + "endpoint":{"hostPrefix":"dp."}, + "readonly":true + }, "ListAssociations":{ "name":"ListAssociations", "http":{ @@ -889,6 +1151,52 @@ "documentation":"

Updates the information of an existing AgentSpace.

", "endpoint":{"hostPrefix":"cp."} }, + "UpdateAsset":{ + "name":"UpdateAsset", + "http":{ + "method":"PATCH", + "requestUri":"/asset/agent-space/{agentSpaceId}/assets/{assetId}", + "responseCode":200 + }, + "input":{"shape":"UpdateAssetRequest"}, + "output":{"shape":"UpdateAssetResponse"}, + "errors":[ + {"shape":"ValidationException"}, + {"shape":"ContentSizeExceededException"}, + {"shape":"ServiceQuotaExceededException"}, + {"shape":"ConflictException"}, + {"shape":"InternalServerException"}, + {"shape":"AccessDeniedException"}, + {"shape":"ResourceNotFoundException"}, + {"shape":"ThrottlingException"}, + {"shape":"InvalidParameterException"} + ], + "documentation":"

Updates an asset in the specified agent space

", + "endpoint":{"hostPrefix":"dp."} + }, + "UpdateAssetFile":{ + "name":"UpdateAssetFile", + "http":{ + "method":"PATCH", + "requestUri":"/asset/agent-space/{agentSpaceId}/assets/{assetId}/files/{path+}", + "responseCode":200 + }, + "input":{"shape":"UpdateAssetFileRequest"}, + "output":{"shape":"UpdateAssetFileResponse"}, + "errors":[ + {"shape":"ValidationException"}, + {"shape":"ContentSizeExceededException"}, + {"shape":"ServiceQuotaExceededException"}, + {"shape":"ConflictException"}, + {"shape":"InternalServerException"}, + {"shape":"AccessDeniedException"}, + {"shape":"ResourceNotFoundException"}, + {"shape":"ThrottlingException"}, + {"shape":"InvalidParameterException"} + ], + "documentation":"

Updates a file in an asset

", + "endpoint":{"hostPrefix":"dp."} + }, "UpdateAssociation":{ "name":"UpdateAssociation", "http":{ @@ -1230,23 +1538,287 @@ "min":1, "sensitive":true }, - "AssistantMessage":{ - "type":"list", - "member":{"shape":"AssistantMessageBlock"} - }, - "AssistantMessageBlock":{ + "Asset":{ "type":"structure", + "required":[ + "assetId", + "assetType", + "metadata", + "version", + "createdAt", + "updatedAt" + ], "members":{ - "text":{ - "shape":"String", - "documentation":"

Text content from the assistant.

" + "assetId":{ + "shape":"ResourceId", + "documentation":"

The unique identifier for this asset

" }, - "toolUse":{ + "assetType":{ + "shape":"AssetType", + "documentation":"

The type of this asset

" + }, + "metadata":{ "shape":"Document", - "documentation":"

Tool use request from the assistant.

" + "documentation":"

The metadata for this asset

" + }, + "version":{ + "shape":"Integer", + "documentation":"

The version number of this asset

" + }, + "createdAt":{ + "shape":"Timestamp", + "documentation":"

Timestamp when this asset was created

" + }, + "updatedAt":{ + "shape":"Timestamp", + "documentation":"

Timestamp when this asset was last updated

" } }, - "documentation":"

A block of content in an assistant message.

", + "documentation":"

Represents an asset in an agent space, including its identifier, type, metadata, version, and timestamps.

" + }, + "AssetContent":{ + "type":"structure", + "members":{ + "file":{ + "shape":"AssetFileContent", + "documentation":"

A single file with path and content

" + }, + "zip":{ + "shape":"AssetZipContent", + "documentation":"

A zip file containing multiple files

" + } + }, + "documentation":"

Content for an asset, either a single file or a zip bundle

", + "union":true + }, + "AssetFile":{ + "type":"structure", + "required":[ + "path", + "content", + "version", + "createdAt", + "updatedAt" + ], + "members":{ + "path":{ + "shape":"AssetFilePath", + "documentation":"

The path of this file within the asset

" + }, + "content":{ + "shape":"AssetFileBody", + "documentation":"

The content of this file

" + }, + "metadata":{ + "shape":"Document", + "documentation":"

The metadata for this file

" + }, + "version":{ + "shape":"Integer", + "documentation":"

The asset version this file belongs to

" + }, + "createdAt":{ + "shape":"Timestamp", + "documentation":"

Timestamp when this file was created

" + }, + "updatedAt":{ + "shape":"Timestamp", + "documentation":"

Timestamp when this file was last updated

" + } + }, + "documentation":"

Represents a single file within an asset, including its path, content, version, and timestamps.

" + }, + "AssetFileBody":{ + "type":"structure", + "members":{ + "bytes":{"shape":"AssetFileBytes"}, + "text":{"shape":"AssetFileText"} + }, + "documentation":"

Content of an individual asset file

", + "union":true + }, + "AssetFileBytes":{ + "type":"blob", + "documentation":"

Binary file content

", + "max":6291456, + "min":0 + }, + "AssetFileContent":{ + "type":"structure", + "required":[ + "path", + "body" + ], + "members":{ + "path":{ + "shape":"AssetFilePath", + "documentation":"

The path of the file within the asset

" + }, + "body":{ + "shape":"AssetFileBody", + "documentation":"

The file content

" + }, + "metadata":{ + "shape":"Document", + "documentation":"

Optional metadata for this file

" + } + }, + "documentation":"

A single file with path and content

" + }, + "AssetFilePath":{ + "type":"string", + "documentation":"

The path of a file within an asset

", + "max":512, + "min":1, + "pattern":"[a-zA-Z0-9_./-]+" + }, + "AssetFileSummary":{ + "type":"structure", + "required":[ + "path", + "version", + "createdAt", + "updatedAt" + ], + "members":{ + "path":{ + "shape":"AssetFilePath", + "documentation":"

The path of this file within the asset

" + }, + "metadata":{ + "shape":"Document", + "documentation":"

The metadata for this file

" + }, + "version":{ + "shape":"Integer", + "documentation":"

The asset version this file belongs to

" + }, + "createdAt":{ + "shape":"Timestamp", + "documentation":"

Timestamp when this file was created

" + }, + "updatedAt":{ + "shape":"Timestamp", + "documentation":"

Timestamp when this file was last updated

" + } + }, + "documentation":"

Summary of a file within an asset, including its path, version, and timestamps.

" + }, + "AssetFileSummaryList":{ + "type":"list", + "member":{"shape":"AssetFileSummary"} + }, + "AssetFileText":{ + "type":"string", + "documentation":"

Text file content

", + "max":1572864, + "min":0 + }, + "AssetIdList":{ + "type":"list", + "member":{"shape":"String"}, + "documentation":"

List of asset identifiers to attach to a message

", + "max":20, + "min":0 + }, + "AssetList":{ + "type":"list", + "member":{"shape":"Asset"} + }, + "AssetType":{ + "type":"string", + "documentation":"

The type of asset (e.g. skill, artifact)

", + "max":64, + "min":1 + }, + "AssetTypeList":{ + "type":"list", + "member":{"shape":"AssetTypeSummary"} + }, + "AssetTypeSummary":{ + "type":"structure", + "required":[ + "assetType", + "description" + ], + "members":{ + "assetType":{ + "shape":"AssetType", + "documentation":"

The asset type identifier

" + }, + "description":{ + "shape":"AssetTypeSummaryDescriptionString", + "documentation":"

A description of the asset type

" + } + }, + "documentation":"

Summary of an asset type, including its identifier and description.

" + }, + "AssetTypeSummaryDescriptionString":{ + "type":"string", + "max":1024, + "min":0 + }, + "AssetVersionMetadata":{ + "type":"structure", + "required":[ + "version", + "createdAt", + "updatedAt" + ], + "members":{ + "version":{ + "shape":"Integer", + "documentation":"

The version number of this asset

" + }, + "createdAt":{ + "shape":"Timestamp", + "documentation":"

Timestamp when this asset version was created

" + }, + "updatedAt":{ + "shape":"Timestamp", + "documentation":"

Timestamp when this asset version was last updated

" + } + }, + "documentation":"

Metadata for a single version of an asset, including the version number and timestamps.

" + }, + "AssetVersionMetadataList":{ + "type":"list", + "member":{"shape":"AssetVersionMetadata"} + }, + "AssetZipBytes":{ + "type":"blob", + "documentation":"

Zip file content as bytes

", + "max":6291456, + "min":0 + }, + "AssetZipContent":{ + "type":"structure", + "required":["zipFile"], + "members":{ + "zipFile":{ + "shape":"AssetZipBytes", + "documentation":"

The zip file bytes

" + } + }, + "documentation":"

A zip file containing asset files

" + }, + "AssistantMessage":{ + "type":"list", + "member":{"shape":"AssistantMessageBlock"} + }, + "AssistantMessageBlock":{ + "type":"structure", + "members":{ + "text":{ + "shape":"String", + "documentation":"

Text content from the assistant.

" + }, + "toolUse":{ + "shape":"Document", + "documentation":"

Tool use request from the assistant.

" + } + }, + "documentation":"

A block of content in an assistant message.

", "union":true }, "AssociateServiceInput":{ @@ -1436,6 +2008,11 @@ }, "documentation":"

A single chat execution summary

" }, + "ChatExecutionId":{ + "type":"string", + "documentation":"

Chat execution identifier — must be a valid UUID

", + "pattern":"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}" + }, "ChatExecutionList":{ "type":"list", "member":{"shape":"ChatExecution"} @@ -1535,6 +2112,115 @@ }, "documentation":"

Output containing the newly created AgentSpace.

" }, + "CreateAssetFileRequest":{ + "type":"structure", + "required":[ + "agentSpaceId", + "assetId", + "path", + "content" + ], + "members":{ + "agentSpaceId":{ + "shape":"AgentSpaceId", + "documentation":"

The unique identifier for the agent space containing the asset

", + "location":"uri", + "locationName":"agentSpaceId" + }, + "assetId":{ + "shape":"ResourceId", + "documentation":"

The unique identifier of the asset to create the file in

", + "location":"uri", + "locationName":"assetId" + }, + "path":{ + "shape":"AssetFilePath", + "documentation":"

The path of the file within the asset

", + "location":"uri", + "locationName":"path" + }, + "content":{ + "shape":"AssetFileBody", + "documentation":"

The content of the file to create

" + }, + "metadata":{ + "shape":"Document", + "documentation":"

Optional metadata describing this file

" + }, + "clientToken":{ + "shape":"CreateAssetFileRequestClientTokenString", + "documentation":"

A unique, case-sensitive identifier used for idempotent asset file creation

", + "idempotencyToken":true + } + }, + "documentation":"

Request structure for creating an asset file

" + }, + "CreateAssetFileRequestClientTokenString":{ + "type":"string", + "max":128, + "min":1 + }, + "CreateAssetFileResponse":{ + "type":"structure", + "required":["file"], + "members":{ + "file":{ + "shape":"AssetFile", + "documentation":"

The asset file object

" + } + }, + "documentation":"

Response structure for creating an asset file

" + }, + "CreateAssetRequest":{ + "type":"structure", + "required":[ + "agentSpaceId", + "assetType", + "content" + ], + "members":{ + "agentSpaceId":{ + "shape":"AgentSpaceId", + "documentation":"

The unique identifier for the agent space where the asset will be created

", + "location":"uri", + "locationName":"agentSpaceId" + }, + "assetType":{ + "shape":"AssetType", + "documentation":"

The type of asset to create

" + }, + "metadata":{ + "shape":"Document", + "documentation":"

The metadata describing this asset

" + }, + "content":{ + "shape":"AssetContent", + "documentation":"

The content for the asset. Provide a single file or a zip bundle.

" + }, + "clientToken":{ + "shape":"CreateAssetRequestClientTokenString", + "documentation":"

A unique, case-sensitive identifier used for idempotent asset creation

", + "idempotencyToken":true + } + }, + "documentation":"

Request structure for creating a new asset

" + }, + "CreateAssetRequestClientTokenString":{ + "type":"string", + "max":128, + "min":1 + }, + "CreateAssetResponse":{ + "type":"structure", + "required":["asset"], + "members":{ + "asset":{ + "shape":"Asset", + "documentation":"

The asset object

" + } + }, + "documentation":"

Response structure for creating a new asset

" + }, "CreateBacklogTaskRequest":{ "type":"structure", "required":[ @@ -1696,6 +2382,14 @@ "shape":"SyntheticTimestamp_date_time", "documentation":"

The expiry time of the certificate associated with the Private Connection. Only present when a certificate is associated.

" }, + "dnsResolution":{ + "shape":"ResourceConfigDnsResolution", + "documentation":"

DNS resolution mode for the Private Connection's resource gateway.

" + }, + "failureMessage":{ + "shape":"FailureMessage", + "documentation":"

Message describing the reason for a failed Private Connection creation, if applicable.

" + }, "tags":{ "shape":"Tags", "documentation":"

Tags associated with the created Private Connection.

" @@ -1746,11 +2440,11 @@ ], "members":{ "name":{ - "shape":"DatadogServiceDetailsNameString", + "shape":"MCPServerName", "documentation":"

MCP server name.

" }, "endpoint":{ - "shape":"DatadogServiceDetailsEndpointString", + "shape":"MCPServerEndpoint", "documentation":"

MCP server endpoint URL.

" }, "description":{ @@ -1772,14 +2466,6 @@ "pattern":"[\\p{L}\\p{N}\\p{P}\\p{S}\\p{Z}]+", "sensitive":true }, - "DatadogServiceDetailsEndpointString":{ - "type":"string", - "pattern":"https://[a-zA-Z0-9.-]+(?::[0-9]+)?(?:/.*)?" - }, - "DatadogServiceDetailsNameString":{ - "type":"string", - "pattern":"[a-zA-Z0-9_-]+" - }, "DateTime":{ "type":"timestamp", "timestampFormat":"iso8601" @@ -1802,6 +2488,67 @@ "members":{}, "documentation":"

Empty output for successful AgentSpace deletion.

" }, + "DeleteAssetFileRequest":{ + "type":"structure", + "required":[ + "agentSpaceId", + "assetId", + "path" + ], + "members":{ + "agentSpaceId":{ + "shape":"AgentSpaceId", + "documentation":"

The unique identifier for the agent space containing the asset

", + "location":"uri", + "locationName":"agentSpaceId" + }, + "assetId":{ + "shape":"ResourceId", + "documentation":"

The unique identifier of the asset containing the file

", + "location":"uri", + "locationName":"assetId" + }, + "path":{ + "shape":"AssetFilePath", + "documentation":"

The path of the file within the asset to delete

", + "location":"uri", + "locationName":"path" + } + }, + "documentation":"

Request structure for deleting an asset file

" + }, + "DeleteAssetFileResponse":{ + "type":"structure", + "members":{}, + "documentation":"

Response structure for deleting an asset file

" + }, + "DeleteAssetRequest":{ + "type":"structure", + "required":[ + "agentSpaceId", + "assetId" + ], + "members":{ + "agentSpaceId":{ + "shape":"AgentSpaceId", + "documentation":"

The unique identifier for the agent space containing the asset

", + "location":"uri", + "locationName":"agentSpaceId" + }, + "assetId":{ + "shape":"ResourceId", + "documentation":"

The unique identifier of the asset to delete

", + "location":"uri", + "locationName":"assetId" + } + }, + "documentation":"

Request structure for deleting an asset

" + }, + "DeleteAssetResponse":{ + "type":"structure", + "members":{}, + "documentation":"

Response structure for deleting an asset

" + }, "DeletePrivateConnectionInput":{ "type":"structure", "required":["name"], @@ -1904,6 +2651,14 @@ "shape":"SyntheticTimestamp_date_time", "documentation":"

The expiry time of the certificate associated with the Private Connection. Only present when a certificate is associated.

" }, + "dnsResolution":{ + "shape":"ResourceConfigDnsResolution", + "documentation":"

DNS resolution mode for the Private Connection's resource gateway.

" + }, + "failureMessage":{ + "shape":"FailureMessage", + "documentation":"

Message describing the reason for a failed Private Connection, if applicable.

" + }, "tags":{ "shape":"Tags", "documentation":"

Tags associated with the Private Connection.

" @@ -2123,6 +2878,10 @@ "shape":"AgentSpaceId", "documentation":"

The unique identifier of the AgentSpace

" }, + "operatorAppUrl":{ + "shape":"OperatorAppUrl", + "documentation":"

The URL for operators to access the Operator App

" + }, "iam":{"shape":"IamAuthConfiguration"}, "idc":{"shape":"IdcAuthConfiguration"}, "idp":{"shape":"IdpAuthConfiguration"} @@ -2226,6 +2985,12 @@ "TIMED_OUT" ] }, + "FailureMessage":{ + "type":"string", + "documentation":"

Failure message describing why a Private Connection has a FAILED status.

", + "max":1000, + "min":1 + }, "GenericWebhook":{ "type":"structure", "members":{ @@ -2245,74 +3010,220 @@ "shape":"WebhookSecret", "documentation":"

The webhook secret for authentication

" }, - "apiKey":{ - "shape":"ApiKeyValue", - "documentation":"

API Key for API Key webhook authentication

" + "apiKey":{ + "shape":"ApiKeyValue", + "documentation":"

API Key for API Key webhook authentication

" + } + }, + "documentation":"

Generic webhook configuration for services that support webhook notifications.

" + }, + "GetAccountUsageInput":{ + "type":"structure", + "members":{} + }, + "GetAccountUsageOutput":{ + "type":"structure", + "required":[ + "usagePeriodStartTime", + "usagePeriodEndTime" + ], + "members":{ + "monthlyAccountInvestigationHours":{ + "shape":"UsageMetric", + "documentation":"

Monthly investigation hours usage and limit for an account

" + }, + "monthlyAccountEvaluationHours":{ + "shape":"UsageMetric", + "documentation":"

Monthly evaluation hours usage and limit for an account

" + }, + "monthlyAccountSystemLearningHours":{ + "shape":"UsageMetric", + "documentation":"

Monthly system learning hours usage and limit for an account

" + }, + "monthlyAccountOnDemandHours":{ + "shape":"UsageMetric", + "documentation":"

Monthly on-demand hours usage and limit for an account

" + }, + "usagePeriodStartTime":{ + "shape":"DateTime", + "documentation":"

The start time of the usage tracking period

" + }, + "usagePeriodEndTime":{ + "shape":"DateTime", + "documentation":"

The end time of the usage tracking period

" + } + } + }, + "GetAgentSpaceInput":{ + "type":"structure", + "required":["agentSpaceId"], + "members":{ + "agentSpaceId":{ + "shape":"AgentSpaceId", + "documentation":"

The unique identifier of the AgentSpace

", + "location":"uri", + "locationName":"agentSpaceId" + } + }, + "documentation":"

Input for retrieving a specific AgentSpace by ID.

" + }, + "GetAgentSpaceOutput":{ + "type":"structure", + "required":["agentSpace"], + "members":{ + "agentSpace":{"shape":"AgentSpace"}, + "tags":{ + "shape":"Tags", + "documentation":"

Tags associated with the AgentSpace.

" + } + }, + "documentation":"

Output containing the requested AgentSpace details.

" + }, + "GetAssetContentRequest":{ + "type":"structure", + "required":[ + "agentSpaceId", + "assetId" + ], + "members":{ + "agentSpaceId":{ + "shape":"AgentSpaceId", + "documentation":"

The unique identifier for the agent space containing the asset

", + "location":"uri", + "locationName":"agentSpaceId" + }, + "assetId":{ + "shape":"ResourceId", + "documentation":"

The unique identifier of the asset

", + "location":"uri", + "locationName":"assetId" + }, + "assetVersion":{ + "shape":"GetAssetContentRequestAssetVersionInteger", + "documentation":"

The specific asset version to export. If omitted, the latest version is returned.

", + "location":"querystring", + "locationName":"assetVersion" + } + }, + "documentation":"

Request structure for getting an asset's content as a zip bundle

" + }, + "GetAssetContentRequestAssetVersionInteger":{ + "type":"integer", + "box":true, + "min":1 + }, + "GetAssetContentResponse":{ + "type":"structure", + "required":[ + "content", + "version" + ], + "members":{ + "content":{ + "shape":"AssetZipContent", + "documentation":"

The asset content as a zip file

" + }, + "version":{ + "shape":"Integer", + "documentation":"

The asset version this content belongs to

" } }, - "documentation":"

Generic webhook configuration for services that support webhook notifications.

" - }, - "GetAccountUsageInput":{ - "type":"structure", - "members":{} + "documentation":"

Response structure for getting an asset's content as a zip bundle

" }, - "GetAccountUsageOutput":{ + "GetAssetFileRequest":{ "type":"structure", "required":[ - "usagePeriodStartTime", - "usagePeriodEndTime" + "agentSpaceId", + "assetId", + "path" ], "members":{ - "monthlyAccountInvestigationHours":{ - "shape":"UsageMetric", - "documentation":"

Monthly investigation hours usage and limit for an account

" - }, - "monthlyAccountEvaluationHours":{ - "shape":"UsageMetric", - "documentation":"

Monthly evaluation hours usage and limit for an account

" - }, - "monthlyAccountSystemLearningHours":{ - "shape":"UsageMetric", - "documentation":"

Monthly system learning hours usage and limit for an account

" + "agentSpaceId":{ + "shape":"AgentSpaceId", + "documentation":"

The unique identifier for the agent space containing the asset

", + "location":"uri", + "locationName":"agentSpaceId" }, - "monthlyAccountOnDemandHours":{ - "shape":"UsageMetric", - "documentation":"

Monthly on-demand hours usage and limit for an account

" + "assetId":{ + "shape":"ResourceId", + "documentation":"

The unique identifier of the asset containing the file

", + "location":"uri", + "locationName":"assetId" }, - "usagePeriodStartTime":{ - "shape":"DateTime", - "documentation":"

The start time of the usage tracking period

" + "path":{ + "shape":"AssetFilePath", + "documentation":"

The path of the file within the asset to retrieve

", + "location":"uri", + "locationName":"path" }, - "usagePeriodEndTime":{ - "shape":"DateTime", - "documentation":"

The end time of the usage tracking period

" + "assetVersion":{ + "shape":"GetAssetFileRequestAssetVersionInteger", + "documentation":"

The specific asset version to retrieve the file from. If omitted, the latest version is returned.

", + "location":"querystring", + "locationName":"assetVersion" } - } + }, + "documentation":"

Request structure for getting an asset file

" }, - "GetAgentSpaceInput":{ + "GetAssetFileRequestAssetVersionInteger":{ + "type":"integer", + "box":true, + "min":1 + }, + "GetAssetFileResponse":{ "type":"structure", - "required":["agentSpaceId"], + "required":["file"], + "members":{ + "file":{ + "shape":"AssetFile", + "documentation":"

The asset file object

" + } + }, + "documentation":"

Response structure for getting an asset file

" + }, + "GetAssetRequest":{ + "type":"structure", + "required":[ + "agentSpaceId", + "assetId" + ], "members":{ "agentSpaceId":{ "shape":"AgentSpaceId", - "documentation":"

The unique identifier of the AgentSpace

", + "documentation":"

The unique identifier for the agent space containing the asset

", "location":"uri", "locationName":"agentSpaceId" + }, + "assetId":{ + "shape":"ResourceId", + "documentation":"

The unique identifier of the asset to retrieve

", + "location":"uri", + "locationName":"assetId" + }, + "assetVersion":{ + "shape":"GetAssetRequestAssetVersionInteger", + "documentation":"

The specific version of the asset to retrieve. If omitted, the latest version is returned.

", + "location":"querystring", + "locationName":"assetVersion" } }, - "documentation":"

Input for retrieving a specific AgentSpace by ID.

" + "documentation":"

Request structure for getting an asset

" }, - "GetAgentSpaceOutput":{ + "GetAssetRequestAssetVersionInteger":{ + "type":"integer", + "box":true, + "min":1 + }, + "GetAssetResponse":{ "type":"structure", - "required":["agentSpace"], + "required":["asset"], "members":{ - "agentSpace":{"shape":"AgentSpace"}, - "tags":{ - "shape":"Tags", - "documentation":"

Tags associated with the AgentSpace.

" + "asset":{ + "shape":"Asset", + "documentation":"

The asset object

" } }, - "documentation":"

Output containing the requested AgentSpace details.

" + "documentation":"

Response structure for getting an asset

" }, "GetAssociationInput":{ "type":"structure", @@ -2393,6 +3304,10 @@ "GetOperatorAppOutput":{ "type":"structure", "members":{ + "operatorAppUrl":{ + "shape":"OperatorAppUrl", + "documentation":"

The URL for operators to access the Operator App

" + }, "iam":{"shape":"IamAuthConfiguration"}, "idc":{"shape":"IdcAuthConfiguration"}, "idp":{"shape":"IdpAuthConfiguration"} @@ -2711,11 +3626,11 @@ ], "members":{ "name":{ - "shape":"GrafanaServiceDetailsNameString", + "shape":"MCPServerName", "documentation":"

MCP server name.

" }, "endpoint":{ - "shape":"GrafanaServiceDetailsEndpointString", + "shape":"MCPServerEndpoint", "documentation":"

MCP server endpoint URL.

" }, "description":{ @@ -2737,14 +3652,6 @@ "pattern":"[\\p{L}\\p{N}\\p{P}\\p{S}\\p{Z}]+", "sensitive":true }, - "GrafanaServiceDetailsEndpointString":{ - "type":"string", - "pattern":"https://[a-zA-Z0-9.-]+(?::[0-9]+)?(?:/.*)?" - }, - "GrafanaServiceDetailsNameString":{ - "type":"string", - "pattern":"[a-zA-Z0-9_-]+" - }, "Guid":{ "type":"string", "documentation":"

Globally Unique Identifier (GUID) in standard format.

", @@ -2905,119 +3812,343 @@ "httpStatusCode":400, "senderFault":true }, - "exception":true + "exception":true + }, + "IpAddressOrDnsName":{ + "type":"string", + "documentation":"

IP address or DNS name of a target resource.

", + "max":255, + "min":3, + "pattern":"[a-zA-Z0-9.:\\-]+" + }, + "IpAddressType":{ + "type":"string", + "documentation":"

IP address type for a Resource Gateway.

", + "enum":[ + "IPV4", + "IPV6", + "DUAL_STACK" + ] + }, + "JournalRecord":{ + "type":"structure", + "required":[ + "agentSpaceId", + "executionId", + "recordId", + "content", + "createdAt", + "recordType" + ], + "members":{ + "agentSpaceId":{ + "shape":"String", + "documentation":"

The unique identifier for the agent space containing this record

" + }, + "executionId":{ + "shape":"String", + "documentation":"

The execution ID associated with this journal record

" + }, + "recordId":{ + "shape":"String", + "documentation":"

The unique identifier for this journal record

" + }, + "content":{ + "shape":"Document", + "documentation":"

The content of this journal record

" + }, + "createdAt":{ + "shape":"JournalTimestamp", + "documentation":"

Timestamp when this journal record was created

" + }, + "recordType":{ + "shape":"String", + "documentation":"

The type of this journal record

" + }, + "userReference":{ + "shape":"UserReference", + "documentation":"

Reference to the user associated with this journal record

" + } + }, + "documentation":"

Represents a journal record containing execution details and content

" + }, + "JournalRecordList":{ + "type":"list", + "member":{"shape":"JournalRecord"}, + "documentation":"

List of journal records

" + }, + "JournalTimestamp":{ + "type":"timestamp", + "documentation":"

Timestamp format used for journal operations

" + }, + "KmsKeyArn":{ + "type":"string", + "documentation":"

The ARN of the AWS Key Management Service (AWS KMS) customer managed key that's used to encrypt resources.

", + "min":20, + "pattern":"arn:aws[a-zA-Z-]*:kms:[a-z0-9-]+:[0-9]{12}:key/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + }, + "ListAgentSpacesInput":{ + "type":"structure", + "members":{ + "maxResults":{ + "shape":"ListAgentSpacesInputMaxResultsInteger", + "documentation":"

Maximum number of results to return in a single call.

", + "location":"querystring", + "locationName":"maxResults" + }, + "nextToken":{ + "shape":"NextToken", + "documentation":"

Token for the next page of results.

", + "location":"querystring", + "locationName":"nextToken" + } + }, + "documentation":"

Input for listing AgentSpaces with pagination support.

" + }, + "ListAgentSpacesInputMaxResultsInteger":{ + "type":"integer", + "box":true, + "max":100, + "min":1 + }, + "ListAgentSpacesOutput":{ + "type":"structure", + "required":["agentSpaces"], + "members":{ + "nextToken":{ + "shape":"NextToken", + "documentation":"

Token to retrieve the next page of results, if there are more results.

" + }, + "agentSpaces":{ + "shape":"AgentSpaceList", + "documentation":"

The list of AgentSpaces.

" + } + }, + "documentation":"

Output containing a list of AgentSpaces and pagination token.

" + }, + "ListAssetFilesRequest":{ + "type":"structure", + "required":[ + "agentSpaceId", + "assetId" + ], + "members":{ + "agentSpaceId":{ + "shape":"AgentSpaceId", + "documentation":"

The unique identifier for the agent space containing the asset

", + "location":"uri", + "locationName":"agentSpaceId" + }, + "assetId":{ + "shape":"ResourceId", + "documentation":"

The unique identifier of the asset whose files to list

", + "location":"uri", + "locationName":"assetId" + }, + "assetVersion":{ + "shape":"ListAssetFilesRequestAssetVersionInteger", + "documentation":"

The specific asset version to list files from. If omitted, files from the latest version are returned.

", + "location":"querystring", + "locationName":"assetVersion" + }, + "nextToken":{ + "shape":"NextToken", + "documentation":"

Pagination token from a previous response to retrieve the next page of results

", + "location":"querystring", + "locationName":"nextToken" + }, + "maxResults":{ + "shape":"ListAssetFilesRequestMaxResultsInteger", + "documentation":"

The maximum number of results to return in a single response

", + "location":"querystring", + "locationName":"maxResults" + } + }, + "documentation":"

Request structure for listing asset files

" + }, + "ListAssetFilesRequestAssetVersionInteger":{ + "type":"integer", + "box":true, + "min":1 + }, + "ListAssetFilesRequestMaxResultsInteger":{ + "type":"integer", + "box":true, + "max":100, + "min":1 + }, + "ListAssetFilesResponse":{ + "type":"structure", + "required":["items"], + "members":{ + "items":{ + "shape":"AssetFileSummaryList", + "documentation":"

The list of asset file summaries

" + }, + "nextToken":{ + "shape":"NextToken", + "documentation":"

Pagination token to retrieve the next page of results. Absent when there are no more results.

" + } + }, + "documentation":"

Response structure for listing asset files

" + }, + "ListAssetTypesRequest":{ + "type":"structure", + "members":{ + "nextToken":{ + "shape":"NextToken", + "documentation":"

Pagination token from a previous response to retrieve the next page of results

", + "location":"querystring", + "locationName":"nextToken" + }, + "maxResults":{ + "shape":"ListAssetTypesRequestMaxResultsInteger", + "documentation":"

The maximum number of results to return in a single response

", + "location":"querystring", + "locationName":"maxResults" + } + }, + "documentation":"

Request structure for listing asset types

" }, - "IpAddressOrDnsName":{ - "type":"string", - "documentation":"

IP address or DNS name of a target resource.

", - "max":255, - "min":3, - "pattern":"[a-zA-Z0-9.:\\-]+" + "ListAssetTypesRequestMaxResultsInteger":{ + "type":"integer", + "box":true, + "max":100, + "min":1 }, - "IpAddressType":{ - "type":"string", - "documentation":"

IP address type for a Resource Gateway.

", - "enum":[ - "IPV4", - "IPV6", - "DUAL_STACK" - ] + "ListAssetTypesResponse":{ + "type":"structure", + "required":["items"], + "members":{ + "items":{ + "shape":"AssetTypeList", + "documentation":"

The list of supported asset types

" + }, + "nextToken":{ + "shape":"NextToken", + "documentation":"

Pagination token to retrieve the next page of results. Absent when there are no more results.

" + } + }, + "documentation":"

Response structure for listing asset types

" }, - "JournalRecord":{ + "ListAssetVersionsRequest":{ "type":"structure", "required":[ "agentSpaceId", - "executionId", - "recordId", - "content", - "createdAt", - "recordType" + "assetId" ], "members":{ "agentSpaceId":{ - "shape":"String", - "documentation":"

The unique identifier for the agent space containing this record

" - }, - "executionId":{ - "shape":"String", - "documentation":"

The execution ID associated with this journal record

" - }, - "recordId":{ - "shape":"String", - "documentation":"

The unique identifier for this journal record

" - }, - "content":{ - "shape":"Document", - "documentation":"

The content of this journal record

" + "shape":"AgentSpaceId", + "documentation":"

The unique identifier for the agent space containing the asset

", + "location":"uri", + "locationName":"agentSpaceId" }, - "createdAt":{ - "shape":"JournalTimestamp", - "documentation":"

Timestamp when this journal record was created

" + "assetId":{ + "shape":"ResourceId", + "documentation":"

The unique identifier of the asset whose versions to list

", + "location":"uri", + "locationName":"assetId" }, - "recordType":{ - "shape":"String", - "documentation":"

The type of this journal record

" + "maxResults":{ + "shape":"ListAssetVersionsRequestMaxResultsInteger", + "documentation":"

The maximum number of results to return in a single response

", + "location":"querystring", + "locationName":"maxResults" }, - "userReference":{ - "shape":"UserReference", - "documentation":"

Reference to the user associated with this journal record

" + "nextToken":{ + "shape":"NextToken", + "documentation":"

Pagination token from a previous response to retrieve the next page of results

", + "location":"querystring", + "locationName":"nextToken" } }, - "documentation":"

Represents a journal record containing execution details and content

" - }, - "JournalRecordList":{ - "type":"list", - "member":{"shape":"JournalRecord"}, - "documentation":"

List of journal records

" + "documentation":"

Request structure for listing asset versions

" }, - "JournalTimestamp":{ - "type":"timestamp", - "documentation":"

Timestamp format used for journal operations

" + "ListAssetVersionsRequestMaxResultsInteger":{ + "type":"integer", + "box":true, + "max":100, + "min":1 }, - "KmsKeyArn":{ - "type":"string", - "documentation":"

The ARN of the AWS Key Management Service (AWS KMS) customer managed key that's used to encrypt resources.

", - "min":20, - "pattern":"arn:aws[a-zA-Z-]*:kms:[a-z0-9-]+:[0-9]{12}:key/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + "ListAssetVersionsResponse":{ + "type":"structure", + "required":["items"], + "members":{ + "items":{ + "shape":"AssetVersionMetadataList", + "documentation":"

The list of version metadata for the asset

" + }, + "nextToken":{ + "shape":"NextToken", + "documentation":"

Pagination token to retrieve the next page of results. Absent when there are no more results.

" + } + }, + "documentation":"

Response structure for listing asset versions

" }, - "ListAgentSpacesInput":{ + "ListAssetsRequest":{ "type":"structure", + "required":["agentSpaceId"], "members":{ - "maxResults":{ - "shape":"ListAgentSpacesInputMaxResultsInteger", - "documentation":"

Maximum number of results to return in a single call.

", + "agentSpaceId":{ + "shape":"AgentSpaceId", + "documentation":"

The unique identifier for the agent space to list assets from

", + "location":"uri", + "locationName":"agentSpaceId" + }, + "assetType":{ + "shape":"AssetType", + "documentation":"

Filter results to only assets of this type

", "location":"querystring", - "locationName":"maxResults" + "locationName":"assetType" + }, + "updatedAfter":{ + "shape":"Timestamp", + "documentation":"

Filter results to only assets updated after this timestamp

", + "location":"querystring", + "locationName":"updatedAfter" + }, + "updatedBefore":{ + "shape":"Timestamp", + "documentation":"

Filter results to only assets updated before this timestamp

", + "location":"querystring", + "locationName":"updatedBefore" }, "nextToken":{ "shape":"NextToken", - "documentation":"

Token for the next page of results.

", + "documentation":"

Pagination token from a previous response to retrieve the next page of results

", "location":"querystring", "locationName":"nextToken" + }, + "maxResults":{ + "shape":"ListAssetsRequestMaxResultsInteger", + "documentation":"

The maximum number of results to return in a single response

", + "location":"querystring", + "locationName":"maxResults" } }, - "documentation":"

Input for listing AgentSpaces with pagination support.

" + "documentation":"

Request structure for listing assets

" }, - "ListAgentSpacesInputMaxResultsInteger":{ + "ListAssetsRequestMaxResultsInteger":{ "type":"integer", "box":true, "max":100, "min":1 }, - "ListAgentSpacesOutput":{ + "ListAssetsResponse":{ "type":"structure", - "required":["agentSpaces"], + "required":["items"], "members":{ + "items":{ + "shape":"AssetList", + "documentation":"

The list of assets for the agent space

" + }, "nextToken":{ "shape":"NextToken", - "documentation":"

Token to retrieve the next page of results, if there are more results.

" - }, - "agentSpaces":{ - "shape":"AgentSpaceList", - "documentation":"

The list of AgentSpaces.

" + "documentation":"

Pagination token to retrieve the next page of results. Absent when there are no more results.

" } }, - "documentation":"

Output containing a list of AgentSpaces and pagination token.

" + "documentation":"

Response structure for listing assets

" }, "ListAssociationsInput":{ "type":"structure", @@ -3726,11 +4857,11 @@ ], "members":{ "name":{ - "shape":"MCPServerDetailsNameString", + "shape":"MCPServerName", "documentation":"

MCP server name.

" }, "endpoint":{ - "shape":"MCPServerDetailsEndpointString", + "shape":"MCPServerEndpoint", "documentation":"

MCP server endpoint URL.

" }, "description":{ @@ -3752,14 +4883,13 @@ "pattern":"[\\p{L}\\p{N}\\p{P}\\p{S}\\p{Z}]+", "sensitive":true }, - "MCPServerDetailsEndpointString":{ + "MCPServerEndpoint":{ "type":"string", + "documentation":"

HTTPS endpoint URL for an MCP server.

", + "max":2048, + "min":1, "pattern":"https://[a-zA-Z0-9.-]+(?::[0-9]+)?(?:/.*)?" }, - "MCPServerDetailsNameString":{ - "type":"string", - "pattern":"[a-zA-Z0-9_-]+" - }, "MCPServerGrafanaConfiguration":{ "type":"structure", "required":["endpoint"], @@ -3787,6 +4917,13 @@ "type":"string", "pattern":"[0-9]+" }, + "MCPServerName":{ + "type":"string", + "documentation":"

Name identifier for an MCP server.

", + "max":128, + "min":1, + "pattern":"[a-zA-Z0-9_-]+" + }, "MCPServerNewRelicConfiguration":{ "type":"structure", "required":[ @@ -3930,8 +5067,7 @@ "type":"structure", "required":[ "region", - "service", - "roleArn" + "service" ], "members":{ "region":{ @@ -3943,8 +5079,15 @@ "documentation":"

AWS service name for SigV4 signing.

" }, "roleArn":{ + "shape":"MCPServerSigV4AuthorizationConfigRoleArnString", + "documentation":"

Deprecated — use mcpRoleArn instead. IAM role ARN to assume for SigV4 signing.

", + "deprecated":true, + "deprecatedMessage":"Use mcpRoleArn instead.", + "deprecatedSince":"2026-05-27" + }, + "mcpRoleArn":{ "shape":"RoleArn", - "documentation":"

IAM role ARN to assume for SigV4 signing.

" + "documentation":"

IAM role ARN to assume for SigV4 signing. Optional — when omitted, credentials are resolved at runtime via a monitor account association.

" }, "customHeaders":{ "shape":"CustomHeaders", @@ -3953,6 +5096,11 @@ }, "documentation":"

Authorization configuration for SigV4-authenticated MCP server.

" }, + "MCPServerSigV4AuthorizationConfigRoleArnString":{ + "type":"string", + "max":255, + "min":0 + }, "MCPServerSigV4AuthorizationConfigServiceString":{ "type":"string", "max":100, @@ -3978,11 +5126,11 @@ ], "members":{ "name":{ - "shape":"MCPServerSigV4ServiceDetailsNameString", + "shape":"MCPServerName", "documentation":"

MCP server name.

" }, "endpoint":{ - "shape":"MCPServerSigV4ServiceDetailsEndpointString", + "shape":"MCPServerEndpoint", "documentation":"

MCP server endpoint URL.

" }, "description":{ @@ -4004,14 +5152,6 @@ "pattern":"[\\p{L}\\p{N}\\p{P}\\p{S}\\p{Z}]+", "sensitive":true }, - "MCPServerSigV4ServiceDetailsEndpointString":{ - "type":"string", - "pattern":"https://[a-zA-Z0-9.-]+(?::[0-9]+)?(?:/.*)?" - }, - "MCPServerSigV4ServiceDetailsNameString":{ - "type":"string", - "pattern":"[a-zA-Z0-9_-]+" - }, "MCPServerSplunkConfiguration":{ "type":"structure", "members":{}, @@ -4181,6 +5321,20 @@ }, "documentation":"

Details for completing OAuth authorization step.

" }, + "OAuthScope":{ + "type":"string", + "documentation":"

OAuth scope parameter

", + "max":128, + "min":1, + "pattern":"[!#-\\[\\]-~]+" + }, + "OperatorAppUrl":{ + "type":"string", + "documentation":"

The URL for operators to access the Operator App.

", + "max":2048, + "min":1, + "pattern":"https://[a-zA-Z0-9.-]+(/.*)?" + }, "OrderType":{ "type":"string", "documentation":"

Sort order options for journal operations

", @@ -4417,6 +5571,14 @@ "certificateExpiryTime":{ "shape":"SyntheticTimestamp_date_time", "documentation":"

The expiry time of the certificate associated with the Private Connection. Only present when a certificate is associated.

" + }, + "dnsResolution":{ + "shape":"ResourceConfigDnsResolution", + "documentation":"

DNS resolution mode for the Private Connection's resource gateway.

" + }, + "failureMessage":{ + "shape":"FailureMessage", + "documentation":"

Message describing the reason for a failed Private Connection, if applicable.

" } }, "documentation":"

Summary of a Private Connection.

" @@ -4664,6 +5826,14 @@ "shape":"PrivateConnectionName", "documentation":"

The name of the private connection to use for VPC connectivity.

" }, + "targetUrlPrivateConnectionName":{ + "shape":"PrivateConnectionName", + "documentation":"

The name of the private connection to use for API calls (target URL) only. Cannot be specified when privateConnectionName is provided.

" + }, + "exchangeUrlPrivateConnectionName":{ + "shape":"PrivateConnectionName", + "documentation":"

The name of the private connection to use for OAuth token exchange requests only. Cannot be specified when privateConnectionName is provided.

" + }, "name":{ "shape":"ServiceName", "documentation":"

The display name for the service registration.

" @@ -4788,7 +5958,7 @@ ], "members":{ "endpoint":{ - "shape":"RegisteredGrafanaServerDetailsEndpointString", + "shape":"MCPServerEndpoint", "documentation":"

Grafana instance URL (e.g., https://your-instance.grafana.net)

" }, "authorizationMethod":{ @@ -4798,10 +5968,6 @@ }, "documentation":"

Details specific to a registered Grafana server, used by the built-in MCP server.

" }, - "RegisteredGrafanaServerDetailsEndpointString":{ - "type":"string", - "pattern":"https://[a-zA-Z0-9.-]+(?::[0-9]+)?(?:/.*)?" - }, "RegisteredMCPServerDetails":{ "type":"structure", "required":[ @@ -4844,11 +6010,11 @@ ], "members":{ "name":{ - "shape":"RegisteredMCPServerSigV4DetailsNameString", + "shape":"MCPServerName", "documentation":"

MCP server name.

" }, "endpoint":{ - "shape":"RegisteredMCPServerSigV4DetailsEndpointString", + "shape":"MCPServerEndpoint", "documentation":"

MCP server endpoint URL.

" }, "description":{ @@ -4864,9 +6030,13 @@ "documentation":"

AWS service name for SigV4 signing.

" }, "roleArn":{ - "shape":"RoleArn", - "documentation":"

IAM role ARN to assume for SigV4 signing.

" + "shape":"RegisteredMCPServerSigV4DetailsRoleArnString", + "documentation":"

IAM role ARN to assume for SigV4 signing.

", + "deprecated":true, + "deprecatedMessage":"Use mcpRoleArn instead.", + "deprecatedSince":"2026-05-27" }, + "mcpRoleArn":{"shape":"RoleArn"}, "customHeaders":{ "shape":"CustomHeaders", "documentation":"

Custom headers for the SigV4 MCP server.

" @@ -4882,13 +6052,10 @@ "pattern":"[\\p{L}\\p{N}\\p{P}\\p{S}\\p{Z}]+", "sensitive":true }, - "RegisteredMCPServerSigV4DetailsEndpointString":{ - "type":"string", - "pattern":"https://[a-zA-Z0-9.-]+(?::[0-9]+)?(?:/.*)?" - }, - "RegisteredMCPServerSigV4DetailsNameString":{ + "RegisteredMCPServerSigV4DetailsRoleArnString":{ "type":"string", - "pattern":"[a-zA-Z0-9_-]+" + "max":255, + "min":0 }, "RegisteredMCPServerSigV4DetailsServiceString":{ "type":"string", @@ -4999,6 +6166,14 @@ }, "documentation":"

Details specific to a registered Slack workspace.

" }, + "ResourceConfigDnsResolution":{ + "type":"string", + "documentation":"

DNS resolution mode for a Resource Gateway.

", + "enum":[ + "PUBLIC", + "IN_VPC" + ] + }, "ResourceConfigurationArn":{ "type":"string", "documentation":"

The ID or ARN of the Resource Configuration.

", @@ -5053,8 +6228,10 @@ }, "Scopes":{ "type":"list", - "member":{"shape":"String"}, - "documentation":"

List of OAuth scopes.

" + "member":{"shape":"OAuthScope"}, + "documentation":"

List of OAuth scopes.

", + "max":100, + "min":0 }, "SecurityGroupId":{ "type":"string", @@ -5258,7 +6435,7 @@ "locationName":"agentSpaceId" }, "executionId":{ - "shape":"ResourceId", + "shape":"ChatExecutionId", "documentation":"

The execution identifier for the chat session

" }, "content":{ @@ -5275,6 +6452,10 @@ "deprecated":true, "deprecatedMessage":"userId is managed by the service and should not be provided by the caller", "deprecatedSince":"2026-04-15" + }, + "assetIds":{ + "shape":"AssetIdList", + "documentation":"

Optional list of asset identifiers to attach to the message

" } }, "documentation":"

Request structure for sending a chat message

" @@ -5604,6 +6785,10 @@ "certificate":{ "shape":"CertificateString", "documentation":"

Certificate for the Private Connection.

" + }, + "dnsResolution":{ + "shape":"ResourceConfigDnsResolution", + "documentation":"

DNS resolution mode for the resource gateway. Defaults to PUBLIC when not set.

" } }, "documentation":"

Configuration for a service-managed Private Connection.

" @@ -6054,7 +7239,8 @@ "COMPLETED", "FAILED", "TIMED_OUT", - "CANCELED" + "CANCELED", + "SKIPPED" ] }, "TaskType":{ @@ -6145,6 +7331,115 @@ }, "documentation":"

Output containing the updated AgentSpace.

" }, + "UpdateAssetFileRequest":{ + "type":"structure", + "required":[ + "agentSpaceId", + "assetId", + "path" + ], + "members":{ + "agentSpaceId":{ + "shape":"AgentSpaceId", + "documentation":"

The unique identifier for the agent space containing the asset

", + "location":"uri", + "locationName":"agentSpaceId" + }, + "assetId":{ + "shape":"ResourceId", + "documentation":"

The unique identifier of the asset containing the file

", + "location":"uri", + "locationName":"assetId" + }, + "path":{ + "shape":"AssetFilePath", + "documentation":"

The path of the file within the asset to update

", + "location":"uri", + "locationName":"path" + }, + "content":{ + "shape":"AssetFileBody", + "documentation":"

Updated file content. If omitted, the existing content is unchanged.

" + }, + "metadata":{ + "shape":"Document", + "documentation":"

Metadata fields to update. Only the fields present in this document are updated. Omitted fields retain their current values.

" + }, + "clientToken":{ + "shape":"UpdateAssetFileRequestClientTokenString", + "documentation":"

A unique, case-sensitive identifier used for idempotent asset file update

", + "idempotencyToken":true + } + }, + "documentation":"

Request structure for updating an asset file

" + }, + "UpdateAssetFileRequestClientTokenString":{ + "type":"string", + "max":128, + "min":1 + }, + "UpdateAssetFileResponse":{ + "type":"structure", + "required":["file"], + "members":{ + "file":{ + "shape":"AssetFile", + "documentation":"

The asset file object

" + } + }, + "documentation":"

Response structure for updating an asset file

" + }, + "UpdateAssetRequest":{ + "type":"structure", + "required":[ + "agentSpaceId", + "assetId" + ], + "members":{ + "agentSpaceId":{ + "shape":"AgentSpaceId", + "documentation":"

The unique identifier for the agent space containing the asset

", + "location":"uri", + "locationName":"agentSpaceId" + }, + "assetId":{ + "shape":"ResourceId", + "documentation":"

The unique identifier of the asset to update

", + "location":"uri", + "locationName":"assetId" + }, + "metadata":{ + "shape":"Document", + "documentation":"

Metadata fields to update. Only the fields present in this document are updated. Omitted fields retain their current values.

" + }, + "content":{ + "shape":"AssetContent", + "documentation":"

Optional content to set or replace. A single file adds or replaces one file; a zip replaces all files.

" + }, + "clientToken":{ + "shape":"UpdateAssetRequestClientTokenString", + "documentation":"

A unique, case-sensitive identifier used for idempotent asset update

", + "idempotencyToken":true + } + }, + "documentation":"

Request structure for updating an asset

" + }, + "UpdateAssetRequestClientTokenString":{ + "type":"string", + "max":128, + "min":1 + }, + "UpdateAssetResponse":{ + "type":"structure", + "required":["asset"], + "members":{ + "asset":{ + "shape":"Asset", + "documentation":"

The asset object

" + } + }, + "documentation":"

Response structure for updating an asset

" + }, "UpdateAssociationInput":{ "type":"structure", "required":[ @@ -6359,6 +7654,14 @@ "certificateExpiryTime":{ "shape":"SyntheticTimestamp_date_time", "documentation":"

The expiry time of the certificate associated with the Private Connection. Only present when a certificate is associated.

" + }, + "dnsResolution":{ + "shape":"ResourceConfigDnsResolution", + "documentation":"

DNS resolution mode for the Private Connection's resource gateway.

" + }, + "failureMessage":{ + "shape":"FailureMessage", + "documentation":"

Message describing the reason for a failed Private Connection update, if applicable.

" } }, "documentation":"

Output containing the updated Private Connection summary.

" @@ -6418,7 +7721,7 @@ "members":{ "limit":{ "shape":"Integer", - "documentation":"

Configured limit for this metric.

" + "documentation":"

Configured limit for this metric. A value of -1 indicates no limit is enforced.

" }, "usage":{ "shape":"Double", @@ -6602,5 +7905,5 @@ "documentation":"

A list of Association Webhook resources.

" } }, - "documentation":"

AWS DevOps Agent is your always-available operations teammate. It resolves and proactively prevents incidents, optimizes application reliability and performance, and handles on-demand SRE tasks across AWS, multicloud, and on-premises environments. AWS DevOps Agent investigates incidents as an experienced DevOps engineer would. It learns your applications and their relationships. It works with your observability tools, runbooks, code repositories, and CI/CD pipelines. The agent correlates telemetry, code, and deployment data across all of them.

" + "documentation":"

AWS DevOps Agent is your always-available operations teammate. It resolves and proactively prevents incidents, optimizes application reliability and performance, and handles on-demand SRE tasks across AWS, multicloud, and on-premises environments. AWS DevOps Agent investigates incidents as an experienced DevOps engineer would. It learns your applications and their relationships. It works with your observability tools, runbooks, code repositories, and CI/CD pipelines. The agent correlates telemetry, code, and deployment data across all of them.

" } diff --git a/awscli/botocore/data/mediapackagev2/2022-12-25/service-2.json b/awscli/botocore/data/mediapackagev2/2022-12-25/service-2.json index 567a911c2a16..f0bf2cffe10d 100644 --- a/awscli/botocore/data/mediapackagev2/2022-12-25/service-2.json +++ b/awscli/botocore/data/mediapackagev2/2022-12-25/service-2.json @@ -1054,6 +1054,10 @@ "shape":"DashCompactness", "documentation":"

The layout of the DASH manifest that MediaPackage produces. STANDARD indicates a default manifest, which is compacted. NONE indicates a full manifest.

For information about compactness, see DASH manifest compactness in the Elemental MediaPackage v2 User Guide.

" }, + "AudioTimelinePattern":{ + "shape":"DashAudioTimelinePattern", + "documentation":"

How MediaPackage represents the audio timeline in the DASH manifest. This setting applies DASH Segment Duration Patternization, as defined in the MPEG-DASH specification, to audio adaptation sets. When set to PATTERNED, MediaPackage uses a pattern-based segment template for audio, which reduces manifest size by expressing repeating segment durations as a pattern instead of listing each segment individually. When set to NONE, the manifest contains an explicit timeline that lists each audio segment.

Valid values: NONE | PATTERNED

For information about audio timeline patterns, see DASH audio timeline pattern in the Elemental MediaPackage v2 User Guide.

" + }, "SubtitleConfiguration":{ "shape":"DashSubtitleConfiguration", "documentation":"

The configuration for DASH subtitles.

" @@ -1552,6 +1556,13 @@ "max":25, "min":0 }, + "DashAudioTimelinePattern":{ + "type":"string", + "enum":[ + "NONE", + "PATTERNED" + ] + }, "DashAvailabilityStartTimeConfiguration":{ "type":"structure", "members":{ @@ -2408,6 +2419,10 @@ "shape":"DashCompactness", "documentation":"

The layout of the DASH manifest that MediaPackage produces. STANDARD indicates a default manifest, which is compacted. NONE indicates a full manifest.

" }, + "AudioTimelinePattern":{ + "shape":"DashAudioTimelinePattern", + "documentation":"

How MediaPackage represents the audio timeline in the DASH manifest, using DASH Segment Duration Patternization for audio adaptation sets. PATTERNED indicates that MediaPackage uses a pattern-based segment template for audio, reducing manifest size. NONE indicates that the manifest contains an explicit timeline for each audio segment.

" + }, "SubtitleConfiguration":{ "shape":"DashSubtitleConfiguration", "documentation":"

The configuration for DASH subtitles.

" @@ -3799,7 +3814,9 @@ "PROVIDER_PROMO", "DISTRIBUTOR_PROMO", "PROVIDER_AD_BLOCK", - "DISTRIBUTOR_AD_BLOCK" + "DISTRIBUTOR_AD_BLOCK", + "CONTENT_IDENTIFICATION", + "CALL_AD_SERVER" ] }, "ScteFilterList":{ diff --git a/awscli/botocore/data/mgn/2020-02-26/service-2.json b/awscli/botocore/data/mgn/2020-02-26/service-2.json index 54183febddc7..691bb73ea43b 100644 --- a/awscli/botocore/data/mgn/2020-02-26/service-2.json +++ b/awscli/botocore/data/mgn/2020-02-26/service-2.json @@ -7230,7 +7230,8 @@ "PALO_ALTO_FIREWALL", "CISCO_ACI", "LOGICAL_MODEL", - "MODELIZE_IT" + "MODELIZE_IT", + "AWS_DISCOVERY_COLLECTOR" ] }, "SourceProperties":{ diff --git a/awscli/botocore/data/observabilityadmin/2018-05-10/service-2.json b/awscli/botocore/data/observabilityadmin/2018-05-10/service-2.json index 4d78c007751e..f79d261113b2 100644 --- a/awscli/botocore/data/observabilityadmin/2018-05-10/service-2.json +++ b/awscli/botocore/data/observabilityadmin/2018-05-10/service-2.json @@ -889,6 +889,10 @@ "DestinationLogsConfiguration":{ "shape":"DestinationLogsConfiguration", "documentation":"

Log specific configuration for centralization destination log groups.

" + }, + "DestinationMetricsConfiguration":{ + "shape":"DestinationMetricsConfiguration", + "documentation":"

Metric specific configuration for centralization destination metrics.

" } }, "documentation":"

Configuration specifying the primary destination for centralized telemetry data.

" @@ -908,6 +912,10 @@ "SourceLogsConfiguration":{ "shape":"SourceLogsConfiguration", "documentation":"

Log specific configuration for centralization source log groups.

" + }, + "SourceMetricsConfiguration":{ + "shape":"SourceMetricsConfiguration", + "documentation":"

Metric specific configuration for centralization source metrics.

" } }, "documentation":"

Configuration specifying the source of telemetry data to be centralized.

" @@ -1284,6 +1292,16 @@ }, "documentation":"

Configuration for centralization destination log groups, including encryption and backup settings.

" }, + "DestinationMetricsConfiguration":{ + "type":"structure", + "members":{ + "BackupConfiguration":{ + "shape":"MetricsBackupConfiguration", + "documentation":"

Configuration defining the backup region for the metrics backup destination.

" + } + }, + "documentation":"

Configuration for centralization destination metrics, including backup settings.

" + }, "DestinationType":{ "type":"string", "enum":["cloud-watch-logs"] @@ -2159,6 +2177,22 @@ "type":"long", "box":true }, + "MetricsBackupConfiguration":{ + "type":"structure", + "required":["Region"], + "members":{ + "Region":{ + "shape":"Region", + "documentation":"

Metrics specific backup destination region within the primary destination account to which metrics data should be centralized.

" + } + }, + "documentation":"

Configuration for backing up centralized metrics data to a secondary region.

" + }, + "MetricsFilterString":{ + "type":"string", + "max":2000, + "min":1 + }, "MskEnhancedMonitoringLevel":{ "type":"string", "documentation":"

Enumeration of supported enhanced monitoring levels for Amazon MSK clusters: DEFAULT, PER_BROKER, PER_TOPIC_PER_BROKER, and PER_TOPIC_PER_PARTITION.

", @@ -2477,6 +2511,16 @@ }, "documentation":"

Configuration for selecting and handling source log groups for centralization.

" }, + "SourceMetricsConfiguration":{ + "type":"structure", + "members":{ + "MetricsSelectionCriteria":{ + "shape":"MetricsFilterString", + "documentation":"

The filter expression that selects which source metrics to centralize. Currently, only * (all metrics) is supported. Other values return a validation error.

" + } + }, + "documentation":"

Configuration for selecting source metrics for centralization.

" + }, "Sources":{ "type":"list", "member":{"shape":"Source"} diff --git a/awscli/botocore/data/omics/2022-11-28/service-2.json b/awscli/botocore/data/omics/2022-11-28/service-2.json index 70a96e0f2d2c..94c2ee44c527 100644 --- a/awscli/botocore/data/omics/2022-11-28/service-2.json +++ b/awscli/botocore/data/omics/2022-11-28/service-2.json @@ -4247,6 +4247,10 @@ "configurationName":{ "shape":"ConfigurationName", "documentation":"

Optional configuration name to use for the workflow run.

" + }, + "engineSettings":{ + "shape":"EngineSettings", + "documentation":"

Engine-specific settings for the workflow run. Use this field to specify configuration options that are specific to the workflow engine (for example, Nextflow profiles).

" } }, "documentation":"

Shared configuration applied to all runs in a batch. Fields specified in a per-run InlineSetting entry override the corresponding fields in this object for that run. The parameters and runTags fields are merged rather than replaced — run-specific values take precedence when keys overlap.

" @@ -7207,6 +7211,10 @@ "runTags":{ "shape":"TagMap", "documentation":"

Per-run AWS tags. Merged with defaultRunSetting.runTags; values in this object take precedence when keys overlap.

" + }, + "engineSettings":{ + "shape":"EngineSettings", + "documentation":"

Per-run engine-specific settings. Use this field to specify configuration options that are specific to the workflow engine (for example, Nextflow profiles). Overrides defaultRunSetting.engineSettings for this run.

" } }, "documentation":"

A per-run configuration that overrides or merges with fields from DefaultRunSetting for a specific run.

" diff --git a/awscli/botocore/data/taxsettings/2018-05-10/service-2.json b/awscli/botocore/data/taxsettings/2018-05-10/service-2.json index 14a7bf023f95..482bc01e4f23 100644 --- a/awscli/botocore/data/taxsettings/2018-05-10/service-2.json +++ b/awscli/botocore/data/taxsettings/2018-05-10/service-2.json @@ -2,16 +2,15 @@ "version":"2.0", "metadata":{ "apiVersion":"2018-05-10", + "auth":["aws.auth#sigv4"], "endpointPrefix":"tax", - "jsonVersion":"1.1", "protocol":"rest-json", "protocols":["rest-json"], "serviceFullName":"Tax Settings", "serviceId":"TaxSettings", "signatureVersion":"v4", "signingName":"tax", - "uid":"taxsettings-2018-05-10", - "auth":["aws.auth#sigv4"] + "uid":"taxsettings-2018-05-10" }, "operations":{ "BatchDeleteTaxRegistration":{ @@ -44,7 +43,8 @@ {"shape":"ResourceNotFoundException"}, {"shape":"InternalServerException"} ], - "documentation":"

Get the active tax exemptions for a given list of accounts. The IAM action is tax:GetExemptions.

" + "documentation":"

Get the active tax exemptions for a given list of accounts. The IAM action is tax:GetExemptions.

", + "readonly":true }, "BatchPutTaxRegistration":{ "name":"BatchPutTaxRegistration", @@ -56,11 +56,11 @@ "input":{"shape":"BatchPutTaxRegistrationRequest"}, "output":{"shape":"BatchPutTaxRegistrationResponse"}, "errors":[ - {"shape":"ValidationException"}, {"shape":"ConflictException"}, + {"shape":"ValidationException"}, {"shape":"InternalServerException"} ], - "documentation":"

Adds or updates tax registration for multiple accounts in batch. This can be used to add or update tax registrations for up to five accounts in one batch. You can't set a TRN if there's a pending TRN. You'll need to delete the pending TRN first.

To call this API operation for specific countries, see the following country-specific requirements.

Bangladesh

  • You must specify the tax registration certificate document in the taxRegistrationDocuments field of the VerificationDetails object.

Brazil

  • You must complete the tax registration process in the Payment preferences page in the Billing and Cost Management console. After your TRN and billing address are verified, you can call this API operation.

  • For Amazon Web Services accounts created through Organizations, you can call this API operation when you don't have a billing address.

Georgia

  • The valid personType values are Physical Person and Business.

Indonesia

  • PutTaxRegistration: The use of this operation to submit tax information is subject to the Amazon Web Services service terms. By submitting, you’re providing consent for Amazon Web Services to validate NIK, NPWP, and NITKU data, provided by you with the Directorate General of Taxes of Indonesia in accordance with the Minister of Finance Regulation (PMK) Number 112/PMK.03/2022.

  • BatchPutTaxRegistration: The use of this operation to submit tax information is subject to the Amazon Web Services service terms. By submitting, you’re providing consent for Amazon Web Services to validate NIK, NPWP, and NITKU data, provided by you with the Directorate General of Taxes of Indonesia in accordance with the Minister of Finance Regulation (PMK) Number 112/PMK.03/2022, through our third-party partner PT Achilles Advanced Management (OnlinePajak).

  • You must specify the taxRegistrationNumberType in the indonesiaAdditionalInfo field of the additionalTaxInformation object.

  • If you specify decisionNumber, you must specify the ppnExceptionDesignationCode in the indonesiaAdditionalInfo field of the additionalTaxInformation object. If the taxRegistrationNumberType is set to NPWP or NITKU, valid values for ppnExceptionDesignationCode are either 01, 02, 03, 07, or 08.

    For other taxRegistrationNumberType values, ppnExceptionDesignationCode must be either 01, 07, or 08.

  • If ppnExceptionDesignationCode is 07, you must specify the decisionNumber in the indonesiaAdditionalInfo field of the additionalTaxInformation object.

Kenya

  • You must specify the personType in the kenyaAdditionalInfo field of the additionalTaxInformation object.

  • If the personType is Physical Person, you must specify the tax registration certificate document in the taxRegistrationDocuments field of the VerificationDetails object.

Malaysia

  • The sector valid values are Business and Individual.

  • RegistrationType valid values are NRIC for individual, and TIN and sales and service tax (SST) for Business.

  • For individual, you can specify the taxInformationNumber in MalaysiaAdditionalInfo with NRIC type, and a valid MyKad or NRIC number.

  • For business, you must specify a businessRegistrationNumber in MalaysiaAdditionalInfo with a TIN type and tax identification number.

  • For business resellers, you must specify a businessRegistrationNumber and taxInformationNumber in MalaysiaAdditionalInfo with a sales and service tax (SST) type and a valid SST number.

  • For business resellers with service codes, you must specify businessRegistrationNumber, taxInformationNumber, and distinct serviceTaxCodes in MalaysiaAdditionalInfo with a SST type and valid sales and service tax (SST) number. By using this API operation, Amazon Web Services registers your self-declaration that you’re an authorized business reseller registered with the Royal Malaysia Customs Department (RMCD), and have a valid SST number.

  • Amazon Web Services reserves the right to seek additional information and/or take other actions to support your self-declaration as appropriate.

  • Amazon Web Services is currently registered under the following service tax codes. You must include at least one of the service tax codes in the service tax code strings to declare yourself as an authorized registered business reseller.

    Taxable service and service tax codes:

    Consultancy - 9907061674

    Training or coaching service - 9907071685

    IT service - 9907101676

    Digital services and electronic medium - 9907121690

Nepal

  • The sector valid values are Business and Individual.

Saudi Arabia

  • For address, you must specify addressLine3.

South Korea

  • You must specify the certifiedEmailId and legalName in the TaxRegistrationEntry object. Use Korean characters for legalName.

  • You must specify the businessRepresentativeName, itemOfBusiness, and lineOfBusiness in the southKoreaAdditionalInfo field of the additionalTaxInformation object. Use Korean characters for these fields.

  • You must specify the tax registration certificate document in the taxRegistrationDocuments field of the VerificationDetails object.

  • For the address object, use Korean characters for addressLine1, addressLine2 city, postalCode, and stateOrRegion.

Spain

  • You must specify the registrationType in the spainAdditionalInfo field of the additionalTaxInformation object.

  • If the registrationType is Local, you must specify the tax registration certificate document in the taxRegistrationDocuments field of the VerificationDetails object.

Turkey

  • You must specify the sector in the taxRegistrationEntry object.

  • If your sector is Business, Individual, or Government:

    • Specify the taxOffice. If your sector is Individual, don't enter this value.

    • (Optional) Specify the kepEmailId. If your sector is Individual, don't enter this value.

    • Note: In the Tax Settings page of the Billing console, Government appears as Public institutions

  • If your sector is Business and you're subject to KDV tax, you must specify your industry in the industries field.

  • For address, you must specify districtOrCounty.

Ukraine

  • The sector valid values are Business and Individual.

" + "documentation":"

Adds or updates tax registration for multiple accounts in batch. This can be used to add or update tax registrations for up to five accounts in one batch. You can't set a TRN if there's a pending TRN. You'll need to delete the pending TRN first.

To call this API operation for specific countries, see the following country-specific requirements.

Bangladesh

  • You must specify the tax registration certificate document in the taxRegistrationDocuments field of the VerificationDetails object.

Brazil

  • You must complete the tax registration process in the Payment preferences page in the Billing and Cost Management console. After your TRN and billing address are verified, you can call this API operation.

  • For Amazon Web Services accounts created through Organizations, you can call this API operation when you don't have a billing address.

Georgia

  • The valid personType values are Physical Person and Business.

Indonesia

  • PutTaxRegistration: The use of this operation to submit tax information is subject to the Amazon Web Services service terms. By submitting, you’re providing consent for Amazon Web Services to validate NIK, NPWP, and NITKU data, provided by you with the Directorate General of Taxes of Indonesia in accordance with the Minister of Finance Regulation (PMK) Number 112/PMK.03/2022.

  • BatchPutTaxRegistration: The use of this operation to submit tax information is subject to the Amazon Web Services service terms. By submitting, you’re providing consent for Amazon Web Services to validate NIK, NPWP, and NITKU data, provided by you with the Directorate General of Taxes of Indonesia in accordance with the Minister of Finance Regulation (PMK) Number 112/PMK.03/2022, through our third-party partner PT Achilles Advanced Management (OnlinePajak).

  • You must specify the taxRegistrationNumberType in the indonesiaAdditionalInfo field of the additionalTaxInformation object.

  • If you specify decisionNumber, you must specify the ppnExceptionDesignationCode in the indonesiaAdditionalInfo field of the additionalTaxInformation object. If the taxRegistrationNumberType is set to NPWP or NITKU, valid values for ppnExceptionDesignationCode are either 01, 02, 03, 07, or 08.

    For other taxRegistrationNumberType values, ppnExceptionDesignationCode must be either 01, 07, or 08.

  • If ppnExceptionDesignationCode is 07 or 08, you must specify the decisionNumber in the indonesiaAdditionalInfo field of the additionalTaxInformation object.

Kenya

  • You must specify the personType in the kenyaAdditionalInfo field of the additionalTaxInformation object.

  • If the personType is Physical Person, you must specify the tax registration certificate document in the taxRegistrationDocuments field of the VerificationDetails object.

Malaysia

  • The sector valid values are Business and Individual.

  • RegistrationType valid values are NRIC for individual, and TIN and sales and service tax (SST) for Business.

  • For individual, you can specify the taxInformationNumber in MalaysiaAdditionalInfo with NRIC type, and a valid MyKad or NRIC number.

  • For business, you must specify a businessRegistrationNumber in MalaysiaAdditionalInfo with a TIN type and tax identification number.

  • For business resellers, you must specify a businessRegistrationNumber and taxInformationNumber in MalaysiaAdditionalInfo with a sales and service tax (SST) type and a valid SST number.

  • For business resellers with service codes, you must specify businessRegistrationNumber, taxInformationNumber, and distinct serviceTaxCodes in MalaysiaAdditionalInfo with a SST type and valid sales and service tax (SST) number. By using this API operation, Amazon Web Services registers your self-declaration that you’re an authorized business reseller registered with the Royal Malaysia Customs Department (RMCD), and have a valid SST number.

  • Amazon Web Services reserves the right to seek additional information and/or take other actions to support your self-declaration as appropriate.

  • Amazon Web Services is currently registered under the following service tax codes. You must include at least one of the service tax codes in the service tax code strings to declare yourself as an authorized registered business reseller.

    Taxable service and service tax codes:

    Consultancy - 9907061674

    Training or coaching service - 9907071685

    IT service - 9907101676

    Digital services and electronic medium - 9907121690

Mexico

  • You must provide a Constancia de Situación fiscal (CSF) document in the verificationDetails field.

  • You do not need to provide address and legal name. These will be populated based on your tax registration number.

Nepal

  • The sector valid values are Business and Individual.

Saudi Arabia

  • For address, you must specify addressLine3.

South Korea

  • You must specify the certifiedEmailId and legalName in the TaxRegistrationEntry object. Use Korean characters for legalName.

  • You must specify the businessRepresentativeName, itemOfBusiness, and lineOfBusiness in the southKoreaAdditionalInfo field of the additionalTaxInformation object. Use Korean characters for these fields.

  • You must specify the tax registration certificate document in the taxRegistrationDocuments field of the VerificationDetails object.

  • For the address object, use Korean characters for addressLine1, addressLine2 city, postalCode, and stateOrRegion.

Spain

  • You must specify the registrationType in the spainAdditionalInfo field of the additionalTaxInformation object.

  • If the registrationType is Local, you must specify the tax registration certificate document in the taxRegistrationDocuments field of the VerificationDetails object.

Turkey

  • You must specify the sector in the taxRegistrationEntry object.

  • If your sector is Business, Individual, or Government:

    • Specify the taxOffice. If your sector is Individual, don't enter this value.

    • (Optional) Specify the kepEmailId. If your sector is Individual, don't enter this value.

    • Note: In the Tax Settings page of the Billing console, Government appears as Public institutions

  • If your sector is Business and you're subject to KDV tax, you must specify your industry in the industries field.

  • For address, you must specify districtOrCounty.

Ukraine

  • The sector valid values are Business and Individual.

Philippines

  • You can optionally specify the isVatRegistered in the philippinesAdditionalInfo field of the additionalTaxInformation object to indicate your VAT registration status with the Bureau of Internal Revenue (BIR).

Belgium

  • You can optionally specify the peppolId in the belgiumAdditionalInfo field of the additionalTaxInformation object.

Chile

  • You can optionally specify the documentType and businessActivity in the chileAdditionalInfo field of the additionalTaxInformation object.

France

  • You must specify the sirenNumber in the franceAdditionalInfo field of the additionalTaxInformation object.

Poland

  • You can optionally specify the taxRegistrationNumberType in the polandAdditionalInfo field of the additionalTaxInformation object. Valid values are EUTaxRegistrationNumber, LocalTaxRegistrationNumber, or LocalRegistrationNumber.

" }, "DeleteSupplementalTaxRegistration":{ "name":"DeleteSupplementalTaxRegistration", @@ -110,7 +110,8 @@ {"shape":"ResourceNotFoundException"}, {"shape":"InternalServerException"} ], - "documentation":"

Get supported tax exemption types. The IAM action is tax:GetExemptions.

" + "documentation":"

Get supported tax exemption types. The IAM action is tax:GetExemptions.

", + "readonly":true }, "GetTaxInheritance":{ "name":"GetTaxInheritance", @@ -126,7 +127,8 @@ {"shape":"ResourceNotFoundException"}, {"shape":"InternalServerException"} ], - "documentation":"

The get account tax inheritance status.

" + "documentation":"

The get account tax inheritance status.

", + "readonly":true }, "GetTaxRegistration":{ "name":"GetTaxRegistration", @@ -142,7 +144,8 @@ {"shape":"ResourceNotFoundException"}, {"shape":"InternalServerException"} ], - "documentation":"

Retrieves tax registration for a single account.

" + "documentation":"

Retrieves tax registration for a single account.

", + "readonly":true }, "GetTaxRegistrationDocument":{ "name":"GetTaxRegistrationDocument", @@ -157,7 +160,8 @@ {"shape":"ValidationException"}, {"shape":"InternalServerException"} ], - "documentation":"

Downloads your tax documents to the Amazon S3 bucket that you specify in your request.

" + "documentation":"

Downloads your tax documents to the Amazon S3 bucket that you specify in your request.

", + "readonly":true }, "ListSupplementalTaxRegistrations":{ "name":"ListSupplementalTaxRegistrations", @@ -173,7 +177,8 @@ {"shape":"ResourceNotFoundException"}, {"shape":"InternalServerException"} ], - "documentation":"

Retrieves supplemental tax registrations for a single account.

" + "documentation":"

Retrieves supplemental tax registrations for a single account.

", + "readonly":true }, "ListTaxExemptions":{ "name":"ListTaxExemptions", @@ -189,7 +194,8 @@ {"shape":"ResourceNotFoundException"}, {"shape":"InternalServerException"} ], - "documentation":"

Retrieves the tax exemption of accounts listed in a consolidated billing family. The IAM action is tax:GetExemptions.

" + "documentation":"

Retrieves the tax exemption of accounts listed in a consolidated billing family. The IAM action is tax:GetExemptions.

", + "readonly":true }, "ListTaxRegistrations":{ "name":"ListTaxRegistrations", @@ -205,7 +211,8 @@ {"shape":"ResourceNotFoundException"}, {"shape":"InternalServerException"} ], - "documentation":"

Retrieves the tax registration of accounts listed in a consolidated billing family. This can be used to retrieve up to 100 accounts' tax registrations in one call (default 50).

" + "documentation":"

Retrieves the tax registration of accounts listed in a consolidated billing family. This can be used to retrieve up to 100 accounts' tax registrations in one call (default 50).

", + "readonly":true }, "PutSupplementalTaxRegistration":{ "name":"PutSupplementalTaxRegistration", @@ -217,8 +224,8 @@ "input":{"shape":"PutSupplementalTaxRegistrationRequest"}, "output":{"shape":"PutSupplementalTaxRegistrationResponse"}, "errors":[ - {"shape":"ValidationException"}, {"shape":"ConflictException"}, + {"shape":"ValidationException"}, {"shape":"InternalServerException"} ], "documentation":"

Stores supplemental tax registration for a single account.

" @@ -269,11 +276,11 @@ "input":{"shape":"PutTaxRegistrationRequest"}, "output":{"shape":"PutTaxRegistrationResponse"}, "errors":[ - {"shape":"ValidationException"}, {"shape":"ConflictException"}, + {"shape":"ValidationException"}, {"shape":"InternalServerException"} ], - "documentation":"

Adds or updates tax registration for a single account. You can't set a TRN if there's a pending TRN. You'll need to delete the pending TRN first.

To call this API operation for specific countries, see the following country-specific requirements.

Bangladesh

  • You must specify the tax registration certificate document in the taxRegistrationDocuments field of the VerificationDetails object.

Brazil

  • You must complete the tax registration process in the Payment preferences page in the Billing and Cost Management console. After your TRN and billing address are verified, you can call this API operation.

  • For Amazon Web Services accounts created through Organizations, you can call this API operation when you don't have a billing address.

Georgia

  • The valid personType values are Physical Person and Business.

Indonesia

  • PutTaxRegistration: The use of this operation to submit tax information is subject to the Amazon Web Services service terms. By submitting, you’re providing consent for Amazon Web Services to validate NIK, NPWP, and NITKU data, provided by you with the Directorate General of Taxes of Indonesia in accordance with the Minister of Finance Regulation (PMK) Number 112/PMK.03/2022.

  • BatchPutTaxRegistration: The use of this operation to submit tax information is subject to the Amazon Web Services service terms. By submitting, you’re providing consent for Amazon Web Services to validate NIK, NPWP, and NITKU data, provided by you with the Directorate General of Taxes of Indonesia in accordance with the Minister of Finance Regulation (PMK) Number 112/PMK.03/2022, through our third-party partner PT Achilles Advanced Management (OnlinePajak).

  • You must specify the taxRegistrationNumberType in the indonesiaAdditionalInfo field of the additionalTaxInformation object.

  • If you specify decisionNumber, you must specify the ppnExceptionDesignationCode in the indonesiaAdditionalInfo field of the additionalTaxInformation object. If the taxRegistrationNumberType is set to NPWP or NITKU, valid values for ppnExceptionDesignationCode are either 01, 02, 03, 07, or 08.

    For other taxRegistrationNumberType values, ppnExceptionDesignationCode must be either 01, 07, or 08.

  • If ppnExceptionDesignationCode is 07, you must specify the decisionNumber in the indonesiaAdditionalInfo field of the additionalTaxInformation object.

Kenya

  • You must specify the personType in the kenyaAdditionalInfo field of the additionalTaxInformation object.

  • If the personType is Physical Person, you must specify the tax registration certificate document in the taxRegistrationDocuments field of the VerificationDetails object.

Malaysia

  • The sector valid values are Business and Individual.

  • RegistrationType valid values are NRIC for individual, and TIN and sales and service tax (SST) for Business.

  • For individual, you can specify the taxInformationNumber in MalaysiaAdditionalInfo with NRIC type, and a valid MyKad or NRIC number.

  • For business, you must specify a businessRegistrationNumber in MalaysiaAdditionalInfo with a TIN type and tax identification number.

  • For business resellers, you must specify a businessRegistrationNumber and taxInformationNumber in MalaysiaAdditionalInfo with a sales and service tax (SST) type and a valid SST number.

  • For business resellers with service codes, you must specify businessRegistrationNumber, taxInformationNumber, and distinct serviceTaxCodes in MalaysiaAdditionalInfo with a SST type and valid sales and service tax (SST) number. By using this API operation, Amazon Web Services registers your self-declaration that you’re an authorized business reseller registered with the Royal Malaysia Customs Department (RMCD), and have a valid SST number.

  • Amazon Web Services reserves the right to seek additional information and/or take other actions to support your self-declaration as appropriate.

  • Amazon Web Services is currently registered under the following service tax codes. You must include at least one of the service tax codes in the service tax code strings to declare yourself as an authorized registered business reseller.

    Taxable service and service tax codes:

    Consultancy - 9907061674

    Training or coaching service - 9907071685

    IT service - 9907101676

    Digital services and electronic medium - 9907121690

Nepal

  • The sector valid values are Business and Individual.

Saudi Arabia

  • For address, you must specify addressLine3.

South Korea

  • You must specify the certifiedEmailId and legalName in the TaxRegistrationEntry object. Use Korean characters for legalName.

  • You must specify the businessRepresentativeName, itemOfBusiness, and lineOfBusiness in the southKoreaAdditionalInfo field of the additionalTaxInformation object. Use Korean characters for these fields.

  • You must specify the tax registration certificate document in the taxRegistrationDocuments field of the VerificationDetails object.

  • For the address object, use Korean characters for addressLine1, addressLine2 city, postalCode, and stateOrRegion.

Spain

  • You must specify the registrationType in the spainAdditionalInfo field of the additionalTaxInformation object.

  • If the registrationType is Local, you must specify the tax registration certificate document in the taxRegistrationDocuments field of the VerificationDetails object.

Turkey

  • You must specify the sector in the taxRegistrationEntry object.

  • If your sector is Business, Individual, or Government:

    • Specify the taxOffice. If your sector is Individual, don't enter this value.

    • (Optional) Specify the kepEmailId. If your sector is Individual, don't enter this value.

    • Note: In the Tax Settings page of the Billing console, Government appears as Public institutions

  • If your sector is Business and you're subject to KDV tax, you must specify your industry in the industries field.

  • For address, you must specify districtOrCounty.

Ukraine

  • The sector valid values are Business and Individual.

" + "documentation":"

Adds or updates tax registration for a single account. You can't set a TRN if there's a pending TRN. You'll need to delete the pending TRN first.

To call this API operation for specific countries, see the following country-specific requirements.

Bangladesh

  • You must specify the tax registration certificate document in the taxRegistrationDocuments field of the VerificationDetails object.

Brazil

  • You must complete the tax registration process in the Payment preferences page in the Billing and Cost Management console. After your TRN and billing address are verified, you can call this API operation.

  • For Amazon Web Services accounts created through Organizations, you can call this API operation when you don't have a billing address.

Georgia

  • The valid personType values are Physical Person and Business.

Indonesia

  • PutTaxRegistration: The use of this operation to submit tax information is subject to the Amazon Web Services service terms. By submitting, you’re providing consent for Amazon Web Services to validate NIK, NPWP, and NITKU data, provided by you with the Directorate General of Taxes of Indonesia in accordance with the Minister of Finance Regulation (PMK) Number 112/PMK.03/2022.

  • BatchPutTaxRegistration: The use of this operation to submit tax information is subject to the Amazon Web Services service terms. By submitting, you’re providing consent for Amazon Web Services to validate NIK, NPWP, and NITKU data, provided by you with the Directorate General of Taxes of Indonesia in accordance with the Minister of Finance Regulation (PMK) Number 112/PMK.03/2022, through our third-party partner PT Achilles Advanced Management (OnlinePajak).

  • You must specify the taxRegistrationNumberType in the indonesiaAdditionalInfo field of the additionalTaxInformation object.

  • If you specify decisionNumber, you must specify the ppnExceptionDesignationCode in the indonesiaAdditionalInfo field of the additionalTaxInformation object. If the taxRegistrationNumberType is set to NPWP or NITKU, valid values for ppnExceptionDesignationCode are either 01, 02, 03, 07, or 08.

    For other taxRegistrationNumberType values, ppnExceptionDesignationCode must be either 01, 07, or 08.

  • If ppnExceptionDesignationCode is 07 or 08, you must specify the decisionNumber in the indonesiaAdditionalInfo field of the additionalTaxInformation object.

Kenya

  • You must specify the personType in the kenyaAdditionalInfo field of the additionalTaxInformation object.

  • If the personType is Physical Person, you must specify the tax registration certificate document in the taxRegistrationDocuments field of the VerificationDetails object.

Malaysia

  • The sector valid values are Business and Individual.

  • RegistrationType valid values are NRIC for individual, and TIN and sales and service tax (SST) for Business.

  • For individual, you can specify the taxInformationNumber in MalaysiaAdditionalInfo with NRIC type, and a valid MyKad or NRIC number.

  • For business, you must specify a businessRegistrationNumber in MalaysiaAdditionalInfo with a TIN type and tax identification number.

  • For business resellers, you must specify a businessRegistrationNumber and taxInformationNumber in MalaysiaAdditionalInfo with a sales and service tax (SST) type and a valid SST number.

  • For business resellers with service codes, you must specify businessRegistrationNumber, taxInformationNumber, and distinct serviceTaxCodes in MalaysiaAdditionalInfo with a SST type and valid sales and service tax (SST) number. By using this API operation, Amazon Web Services registers your self-declaration that you’re an authorized business reseller registered with the Royal Malaysia Customs Department (RMCD), and have a valid SST number.

  • Amazon Web Services reserves the right to seek additional information and/or take other actions to support your self-declaration as appropriate.

  • Amazon Web Services is currently registered under the following service tax codes. You must include at least one of the service tax codes in the service tax code strings to declare yourself as an authorized registered business reseller.

    Taxable service and service tax codes:

    Consultancy - 9907061674

    Training or coaching service - 9907071685

    IT service - 9907101676

    Digital services and electronic medium - 9907121690

Mexico

  • You must provide a Constancia de Situación fiscal (CSF) document in the verificationDetails field.

  • You do not need to provide address and legal name. These will be populated based on your tax registration number.

Nepal

  • The sector valid values are Business and Individual.

Saudi Arabia

  • For address, you must specify addressLine3.

South Korea

  • You must specify the certifiedEmailId and legalName in the TaxRegistrationEntry object. Use Korean characters for legalName.

  • You must specify the businessRepresentativeName, itemOfBusiness, and lineOfBusiness in the southKoreaAdditionalInfo field of the additionalTaxInformation object. Use Korean characters for these fields.

  • You must specify the tax registration certificate document in the taxRegistrationDocuments field of the VerificationDetails object.

  • For the address object, use Korean characters for addressLine1, addressLine2 city, postalCode, and stateOrRegion.

Spain

  • You must specify the registrationType in the spainAdditionalInfo field of the additionalTaxInformation object.

  • If the registrationType is Local, you must specify the tax registration certificate document in the taxRegistrationDocuments field of the VerificationDetails object.

Turkey

  • You must specify the sector in the taxRegistrationEntry object.

  • If your sector is Business, Individual, or Government:

    • Specify the taxOffice. If your sector is Individual, don't enter this value.

    • (Optional) Specify the kepEmailId. If your sector is Individual, don't enter this value.

    • Note: In the Tax Settings page of the Billing console, Government appears as Public institutions

  • If your sector is Business and you're subject to KDV tax, you must specify your industry in the industries field.

  • For address, you must specify districtOrCounty.

Ukraine

  • The sector valid values are Business and Individual.

Philippines

  • You can optionally specify the isVatRegistered in the philippinesAdditionalInfo field of the additionalTaxInformation object to indicate your VAT registration status with the Bureau of Internal Revenue (BIR).

Belgium

  • You can optionally specify the peppolId in the belgiumAdditionalInfo field of the additionalTaxInformation object.

Chile

  • You can optionally specify the documentType and businessActivity in the chileAdditionalInfo field of the additionalTaxInformation object.

France

  • You must specify the sirenNumber in the franceAdditionalInfo field of the additionalTaxInformation object.

Poland

  • You can optionally specify the taxRegistrationNumberType in the polandAdditionalInfo field of the additionalTaxInformation object. Valid values are EUTaxRegistrationNumber, LocalTaxRegistrationNumber, or LocalRegistrationNumber.

" } }, "shapes":{ @@ -283,7 +290,7 @@ "members":{ "message":{"shape":"ErrorMessage"} }, - "documentation":"

The access is denied for the Amazon Web ServicesSupport API.

", + "documentation":"

The access is denied for the Amazon Web Services Support API.

", "error":{ "httpStatusCode":401, "senderFault":true @@ -297,17 +304,17 @@ "shape":"AccountId", "documentation":"

List of unique account identifiers.

" }, - "accountMetaData":{ - "shape":"AccountMetaData", - "documentation":"

The meta data information associated with the account.

" + "taxRegistration":{ + "shape":"TaxRegistrationWithJurisdiction", + "documentation":"

Your TRN information. Instead of having full legal address, here TRN information will have jurisdiction details (for example, country code and state/region/province if applicable).

" }, "taxInheritanceDetails":{ "shape":"TaxInheritanceDetails", "documentation":"

Tax inheritance information associated with the account.

" }, - "taxRegistration":{ - "shape":"TaxRegistrationWithJurisdiction", - "documentation":"

Your TRN information. Instead of having full legal address, here TRN information will have jurisdiction details (for example, country code and state/region/province if applicable).

" + "accountMetaData":{ + "shape":"AccountMetaData", + "documentation":"

The meta data information associated with the account.

" } }, "documentation":"

An object with your accountId and TRN information.

", @@ -321,7 +328,7 @@ "type":"string", "max":12, "min":12, - "pattern":"^\\d+$" + "pattern":"\\d+" }, "AccountIds":{ "type":"list", @@ -334,18 +341,18 @@ "shape":"AccountName", "documentation":"

The Amazon Web Services accounts name.

" }, - "address":{"shape":"Address"}, - "addressRoleMap":{ - "shape":"AddressRoleMap", - "documentation":"

Address roles associated with the account containing country code information.

" + "seller":{ + "shape":"Seller", + "documentation":"

Seller information associated with the account.

" }, + "address":{"shape":"Address"}, "addressType":{ "shape":"AddressRoleType", "documentation":"

The type of address associated with the legal profile.

" }, - "seller":{ - "shape":"Seller", - "documentation":"

Seller information associated with the account.

" + "addressRoleMap":{ + "shape":"AddressRoleMap", + "documentation":"

Address roles associated with the account containing country code information.

" } }, "documentation":"

The meta data information associated with the account.

", @@ -353,86 +360,102 @@ }, "AccountName":{ "type":"string", - "pattern":"^[\\s\\S]*$" + "pattern":"[\\s\\S]*" }, "AdditionalInfoRequest":{ "type":"structure", "members":{ - "canadaAdditionalInfo":{ - "shape":"CanadaAdditionalInfo", - "documentation":"

Additional tax information associated with your TRN in Canada.

" + "malaysiaAdditionalInfo":{ + "shape":"MalaysiaAdditionalInfo", + "documentation":"

Additional tax information to specify for a TRN in Malaysia.

" }, - "egyptAdditionalInfo":{ - "shape":"EgyptAdditionalInfo", - "documentation":"

Additional tax information to specify for a TRN in Egypt.

" + "israelAdditionalInfo":{ + "shape":"IsraelAdditionalInfo", + "documentation":"

Additional tax information to specify for a TRN in Israel.

" }, "estoniaAdditionalInfo":{ "shape":"EstoniaAdditionalInfo", "documentation":"

Additional tax information to specify for a TRN in Estonia.

" }, - "georgiaAdditionalInfo":{ - "shape":"GeorgiaAdditionalInfo", - "documentation":"

Additional tax information to specify for a TRN in Georgia.

" + "canadaAdditionalInfo":{ + "shape":"CanadaAdditionalInfo", + "documentation":"

Additional tax information associated with your TRN in Canada.

" }, - "greeceAdditionalInfo":{ - "shape":"GreeceAdditionalInfo", - "documentation":"

Additional tax information to specify for a TRN in Greece.

" + "spainAdditionalInfo":{ + "shape":"SpainAdditionalInfo", + "documentation":"

Additional tax information to specify for a TRN in Spain.

" }, - "indonesiaAdditionalInfo":{ - "shape":"IndonesiaAdditionalInfo", - "documentation":"

" + "kenyaAdditionalInfo":{ + "shape":"KenyaAdditionalInfo", + "documentation":"

Additional tax information to specify for a TRN in Kenya.

" }, - "israelAdditionalInfo":{ - "shape":"IsraelAdditionalInfo", - "documentation":"

Additional tax information to specify for a TRN in Israel.

" + "southKoreaAdditionalInfo":{ + "shape":"SouthKoreaAdditionalInfo", + "documentation":"

Additional tax information to specify for a TRN in South Korea.

" + }, + "turkeyAdditionalInfo":{ + "shape":"TurkeyAdditionalInfo", + "documentation":"

Additional tax information to specify for a TRN in Turkey.

" + }, + "georgiaAdditionalInfo":{ + "shape":"GeorgiaAdditionalInfo", + "documentation":"

Additional tax information to specify for a TRN in Georgia.

" }, "italyAdditionalInfo":{ "shape":"ItalyAdditionalInfo", "documentation":"

Additional tax information to specify for a TRN in Italy.

" }, - "kenyaAdditionalInfo":{ - "shape":"KenyaAdditionalInfo", - "documentation":"

Additional tax information to specify for a TRN in Kenya.

" + "romaniaAdditionalInfo":{ + "shape":"RomaniaAdditionalInfo", + "documentation":"

Additional tax information to specify for a TRN in Romania.

" }, - "malaysiaAdditionalInfo":{ - "shape":"MalaysiaAdditionalInfo", - "documentation":"

Additional tax information to specify for a TRN in Malaysia.

" + "ukraineAdditionalInfo":{ + "shape":"UkraineAdditionalInfo", + "documentation":"

Additional tax information associated with your TRN in Ukraine.

" }, "polandAdditionalInfo":{ "shape":"PolandAdditionalInfo", "documentation":"

Additional tax information associated with your TRN in Poland.

" }, - "romaniaAdditionalInfo":{ - "shape":"RomaniaAdditionalInfo", - "documentation":"

Additional tax information to specify for a TRN in Romania.

" - }, "saudiArabiaAdditionalInfo":{ "shape":"SaudiArabiaAdditionalInfo", "documentation":"

Additional tax information associated with your TRN in Saudi Arabia.

" }, - "southKoreaAdditionalInfo":{ - "shape":"SouthKoreaAdditionalInfo", - "documentation":"

Additional tax information to specify for a TRN in South Korea.

" + "indonesiaAdditionalInfo":{ + "shape":"IndonesiaAdditionalInfo", + "documentation":"

" }, - "spainAdditionalInfo":{ - "shape":"SpainAdditionalInfo", - "documentation":"

Additional tax information to specify for a TRN in Spain.

" + "vietnamAdditionalInfo":{ + "shape":"VietnamAdditionalInfo", + "documentation":"

Additional tax information to specify for a TRN in Vietnam.

" }, - "turkeyAdditionalInfo":{ - "shape":"TurkeyAdditionalInfo", - "documentation":"

Additional tax information to specify for a TRN in Turkey.

" + "egyptAdditionalInfo":{ + "shape":"EgyptAdditionalInfo", + "documentation":"

Additional tax information to specify for a TRN in Egypt.

" }, - "ukraineAdditionalInfo":{ - "shape":"UkraineAdditionalInfo", - "documentation":"

Additional tax information associated with your TRN in Ukraine.

" + "greeceAdditionalInfo":{ + "shape":"GreeceAdditionalInfo", + "documentation":"

Additional tax information to specify for a TRN in Greece.

" }, "uzbekistanAdditionalInfo":{ "shape":"UzbekistanAdditionalInfo", "documentation":"

Additional tax information to specify for a TRN in Uzbekistan.

" }, - "vietnamAdditionalInfo":{ - "shape":"VietnamAdditionalInfo", - "documentation":"

Additional tax information to specify for a TRN in Vietnam.

" + "philippinesAdditionalInfo":{ + "shape":"PhilippinesAdditionalInfo", + "documentation":"

Additional tax information to specify for a TRN in the Philippines.

" + }, + "belgiumAdditionalInfo":{ + "shape":"BelgiumAdditionalInfo", + "documentation":"

Additional tax information to specify for a TRN in Belgium.

" + }, + "chileAdditionalInfo":{ + "shape":"ChileAdditionalInfo", + "documentation":"

Additional tax information to specify for a TRN in Chile.

" + }, + "franceAdditionalInfo":{ + "shape":"FranceAdditionalInfo", + "documentation":"

Additional tax information to specify for a TRN in France.

" } }, "documentation":"

Additional tax information associated with your tax registration number (TRN). Depending on the TRN for a specific country, you might need to specify this information when you set your TRN.

You can only specify one of the following parameters and the value can't be empty.

The parameter that you specify must match the country for the TRN, if available. For example, if you set a TRN in Canada for specific provinces, you must also specify the canadaAdditionalInfo parameter.

" @@ -440,89 +463,105 @@ "AdditionalInfoResponse":{ "type":"structure", "members":{ - "brazilAdditionalInfo":{ - "shape":"BrazilAdditionalInfo", - "documentation":"

Additional tax information associated with your TRN in Brazil. The Tax Settings API returns this information in your response when any additional information is present with your TRN in Brazil.

" - }, - "canadaAdditionalInfo":{ - "shape":"CanadaAdditionalInfo", - "documentation":"

Additional tax information associated with your TRN in Canada.

" + "malaysiaAdditionalInfo":{ + "shape":"MalaysiaAdditionalInfo", + "documentation":"

Additional tax information associated with your TRN in Malaysia.

" }, - "egyptAdditionalInfo":{ - "shape":"EgyptAdditionalInfo", - "documentation":"

Additional tax information to specify for a TRN in Egypt.

" + "israelAdditionalInfo":{ + "shape":"IsraelAdditionalInfo", + "documentation":"

Additional tax information associated with your TRN in Israel.

" }, "estoniaAdditionalInfo":{ "shape":"EstoniaAdditionalInfo", "documentation":"

Additional tax information associated with your TRN in Estonia.

" }, - "georgiaAdditionalInfo":{ - "shape":"GeorgiaAdditionalInfo", - "documentation":"

Additional tax information associated with your TRN in Georgia.

" + "canadaAdditionalInfo":{ + "shape":"CanadaAdditionalInfo", + "documentation":"

Additional tax information associated with your TRN in Canada.

" }, - "greeceAdditionalInfo":{ - "shape":"GreeceAdditionalInfo", - "documentation":"

Additional tax information to specify for a TRN in Greece.

" + "brazilAdditionalInfo":{ + "shape":"BrazilAdditionalInfo", + "documentation":"

Additional tax information associated with your TRN in Brazil. The Tax Settings API returns this information in your response when any additional information is present with your TRN in Brazil.

" }, - "indiaAdditionalInfo":{ - "shape":"IndiaAdditionalInfo", - "documentation":"

Additional tax information in India.

" + "spainAdditionalInfo":{ + "shape":"SpainAdditionalInfo", + "documentation":"

Additional tax information associated with your TRN in Spain.

" }, - "indonesiaAdditionalInfo":{ - "shape":"IndonesiaAdditionalInfo", - "documentation":"

Additional tax information associated with your TRN in Indonesia.

" + "kenyaAdditionalInfo":{ + "shape":"KenyaAdditionalInfo", + "documentation":"

Additional tax information associated with your TRN in Kenya.

" }, - "israelAdditionalInfo":{ - "shape":"IsraelAdditionalInfo", - "documentation":"

Additional tax information associated with your TRN in Israel.

" + "southKoreaAdditionalInfo":{ + "shape":"SouthKoreaAdditionalInfo", + "documentation":"

Additional tax information associated with your TRN in South Korea.

" + }, + "turkeyAdditionalInfo":{ + "shape":"TurkeyAdditionalInfo", + "documentation":"

Additional tax information associated with your TRN in Turkey.

" + }, + "georgiaAdditionalInfo":{ + "shape":"GeorgiaAdditionalInfo", + "documentation":"

Additional tax information associated with your TRN in Georgia.

" }, "italyAdditionalInfo":{ "shape":"ItalyAdditionalInfo", "documentation":"

Additional tax information associated with your TRN in Italy.

" }, - "kenyaAdditionalInfo":{ - "shape":"KenyaAdditionalInfo", - "documentation":"

Additional tax information associated with your TRN in Kenya.

" + "romaniaAdditionalInfo":{ + "shape":"RomaniaAdditionalInfo", + "documentation":"

Additional tax information to specify for a TRN in Romania.

" }, - "malaysiaAdditionalInfo":{ - "shape":"MalaysiaAdditionalInfo", - "documentation":"

Additional tax information associated with your TRN in Malaysia.

" + "ukraineAdditionalInfo":{ + "shape":"UkraineAdditionalInfo", + "documentation":"

Additional tax information associated with your TRN in Ukraine.

" }, "polandAdditionalInfo":{ "shape":"PolandAdditionalInfo", "documentation":"

Additional tax information associated with your TRN in Poland.

" }, - "romaniaAdditionalInfo":{ - "shape":"RomaniaAdditionalInfo", - "documentation":"

Additional tax information to specify for a TRN in Romania.

" - }, "saudiArabiaAdditionalInfo":{ "shape":"SaudiArabiaAdditionalInfo", "documentation":"

Additional tax information associated with your TRN in Saudi Arabia.

" }, - "southKoreaAdditionalInfo":{ - "shape":"SouthKoreaAdditionalInfo", - "documentation":"

Additional tax information associated with your TRN in South Korea.

" + "indiaAdditionalInfo":{ + "shape":"IndiaAdditionalInfo", + "documentation":"

Additional tax information in India.

" }, - "spainAdditionalInfo":{ - "shape":"SpainAdditionalInfo", - "documentation":"

Additional tax information associated with your TRN in Spain.

" + "indonesiaAdditionalInfo":{ + "shape":"IndonesiaAdditionalInfo", + "documentation":"

Additional tax information associated with your TRN in Indonesia.

" }, - "turkeyAdditionalInfo":{ - "shape":"TurkeyAdditionalInfo", - "documentation":"

Additional tax information associated with your TRN in Turkey.

" + "vietnamAdditionalInfo":{ + "shape":"VietnamAdditionalInfo", + "documentation":"

Additional tax information to specify for a TRN in Vietnam.

" }, - "ukraineAdditionalInfo":{ - "shape":"UkraineAdditionalInfo", - "documentation":"

Additional tax information associated with your TRN in Ukraine.

" + "egyptAdditionalInfo":{ + "shape":"EgyptAdditionalInfo", + "documentation":"

Additional tax information to specify for a TRN in Egypt.

" + }, + "greeceAdditionalInfo":{ + "shape":"GreeceAdditionalInfo", + "documentation":"

Additional tax information to specify for a TRN in Greece.

" }, "uzbekistanAdditionalInfo":{ "shape":"UzbekistanAdditionalInfo", "documentation":"

Additional tax information associated with your TRN in Uzbekistan.

" }, - "vietnamAdditionalInfo":{ - "shape":"VietnamAdditionalInfo", - "documentation":"

Additional tax information to specify for a TRN in Vietnam.

" + "philippinesAdditionalInfo":{ + "shape":"PhilippinesAdditionalInfo", + "documentation":"

Additional tax information associated with your TRN in the Philippines.

" + }, + "belgiumAdditionalInfo":{ + "shape":"BelgiumAdditionalInfo", + "documentation":"

Additional tax information associated with your TRN in Belgium.

" + }, + "chileAdditionalInfo":{ + "shape":"ChileAdditionalInfo", + "documentation":"

Additional tax information associated with your TRN in Chile.

" + }, + "franceAdditionalInfo":{ + "shape":"FranceAdditionalInfo", + "documentation":"

Additional tax information associated with your TRN in France.

" } }, "documentation":"

Additional tax information associated with your TRN. The Tax Settings API returns country-specific information in the response when any additional information is present with your TRN for the following countries.

" @@ -530,10 +569,8 @@ "Address":{ "type":"structure", "required":[ - "addressLine1", - "city", - "countryCode", - "postalCode" + "postalCode", + "countryCode" ], "members":{ "addressLine1":{ @@ -548,25 +585,25 @@ "shape":"AddressLine3", "documentation":"

The third line of the address, if applicable. Currently, the Tax Settings API accepts the addressLine3 parameter only for Saudi Arabia. When you specify a TRN in Saudi Arabia, you must enter the addressLine3 and specify the building number for the address. For example, you might enter 1234.

" }, + "districtOrCounty":{ + "shape":"District", + "documentation":"

The district or county the address is located.

For addresses in Brazil, this parameter uses the name of the neighborhood. When you set a TRN in Brazil, use districtOrCounty for the neighborhood name.

" + }, "city":{ "shape":"City", "documentation":"

The city that the address is in.

" }, - "countryCode":{ - "shape":"CountryCode", - "documentation":"

The country code for the country that the address is in.

" - }, - "districtOrCounty":{ - "shape":"District", - "documentation":"

The district or county the address is located.

For addresses in Brazil, this parameter uses the name of the neighborhood. When you set a TRN in Brazil, use districtOrCounty for the neighborhood name.

" + "stateOrRegion":{ + "shape":"State", + "documentation":"

The state, region, or province that the address is located. This field is only required for Canada, India, United Arab Emirates, Romania, and Brazil (CPF). It is optional for all other countries.

If this is required for tax settings, use the same name as shown on the Tax Settings page.

" }, "postalCode":{ "shape":"PostalCode", "documentation":"

The postal code associated with the address.

" }, - "stateOrRegion":{ - "shape":"State", - "documentation":"

The state, region, or province that the address is located. This field is only required for Canada, India, United Arab Emirates, Romania, and Brazil (CPF). It is optional for all other countries.

If this is required for tax settings, use the same name as shown on the Tax Settings page.

" + "countryCode":{ + "shape":"CountryCode", + "documentation":"

The country code for the country that the address is in.

" } }, "documentation":"

The details of the address associated with the TRN information.

" @@ -575,19 +612,19 @@ "type":"string", "max":180, "min":1, - "pattern":"^(?!\\s*$)[\\s\\S]+$" + "pattern":"(?!\\s*$)[\\s\\S]+" }, "AddressLine2":{ "type":"string", "max":60, "min":1, - "pattern":"^(?!\\s*$)[\\s\\S]+$" + "pattern":"(?!\\s*$)[\\s\\S]+" }, "AddressLine3":{ "type":"string", "max":60, "min":1, - "pattern":"^(?!\\s*$)[\\s\\S]+$" + "pattern":"(?!\\s*$)[\\s\\S]+" }, "AddressRoleMap":{ "type":"map", @@ -608,7 +645,7 @@ "members":{ "message":{"shape":"ErrorMessage"} }, - "documentation":"

Failed to upload the tax exemption document to Amazon Web ServicesSupport case.

", + "documentation":"

Failed to upload the tax exemption document to Amazon Web Services Support case.

", "error":{ "httpStatusCode":400, "senderFault":true @@ -645,13 +682,13 @@ "shape":"AccountId", "documentation":"

The unique account identifier for the account whose tax registration couldn't be deleted during the BatchDeleteTaxRegistration operation.

" }, - "code":{ - "shape":"ErrorCode", - "documentation":"

The error code for an individual failure in BatchDeleteTaxRegistration operation.

" - }, "message":{ "shape":"ErrorMessage", "documentation":"

The error message for an individual failure in the BatchDeleteTaxRegistration operation.

" + }, + "code":{ + "shape":"ErrorCode", + "documentation":"

The error code for an individual failure in BatchDeleteTaxRegistration operation.

" } }, "documentation":"

The error object for representing failures in the BatchDeleteTaxRegistration operation.

" @@ -705,13 +742,13 @@ "BatchGetTaxExemptionsResponse":{ "type":"structure", "members":{ - "failedAccounts":{ - "shape":"AccountIds", - "documentation":"

The list of accounts that failed to get tax exemptions.

" - }, "taxExemptionDetailsMap":{ "shape":"TaxExemptionDetailsMap", "documentation":"

The tax exemption details map of accountId and tax exemption details.

" + }, + "failedAccounts":{ + "shape":"AccountIds", + "documentation":"

The list of accounts that failed to get tax exemptions.

" } } }, @@ -726,13 +763,13 @@ "shape":"AccountId", "documentation":"

The unique account identifier for the account that the tax registration couldn't be added, or updated during the BatchPutTaxRegistration operation.

" }, - "code":{ - "shape":"ErrorCode", - "documentation":"

The error code for an individual failure in the BatchPutTaxRegistration operation.

" - }, "message":{ "shape":"ErrorMessage", "documentation":"

The error message for an individual failure in the BatchPutTaxRegistration operation.

" + }, + "code":{ + "shape":"ErrorCode", + "documentation":"

The error code for an individual failure in the BatchPutTaxRegistration operation.

" } }, "documentation":"

The error object for representing failures in the BatchPutTaxRegistration operation.

" @@ -768,16 +805,30 @@ "type":"structure", "required":["errors"], "members":{ - "errors":{ - "shape":"BatchPutTaxRegistrationErrors", - "documentation":"

List of errors for the accounts the TRN information could not be added or updated to.

" - }, "status":{ "shape":"TaxRegistrationStatus", "documentation":"

The status of your TRN stored in the system after processing. Based on the validation occurring on the TRN, the status can be Verified, Pending or Rejected.

" + }, + "errors":{ + "shape":"BatchPutTaxRegistrationErrors", + "documentation":"

List of errors for the accounts the TRN information could not be added or updated to.

" } } }, + "BelgiumAdditionalInfo":{ + "type":"structure", + "members":{ + "peppolId":{ + "shape":"PeppolId", + "documentation":"

The Peppol ID for electronic invoicing in Belgium.

" + }, + "isMercuriusBoxEnabled":{ + "shape":"Boolean", + "documentation":"

Indicates whether the Mercurius e-invoicing box is enabled for business-to-government (B2G) invoicing in Belgium.

" + } + }, + "documentation":"

Additional tax information associated with your TRN in Belgium.

" + }, "Boolean":{ "type":"boolean", "box":true @@ -798,17 +849,21 @@ }, "BusinessRegistrationNumber":{ "type":"string", - "pattern":"^[0-9]{12}$" + "pattern":"([0-9]{12}|LL[0-9]{5})" }, "BusinessRepresentativeName":{ "type":"string", "max":200, "min":1, - "pattern":"^[0-9\\u3130-\\u318F\\uAC00-\\uD7AF,.( )-\\\\s]*$" + "pattern":"[0-9\\u3130-\\u318F\\uAC00-\\uD7AF,.( )-\\\\s]*" }, "CanadaAdditionalInfo":{ "type":"structure", "members":{ + "provincialSalesTaxId":{ + "shape":"CanadaProvincialSalesTaxIdString", + "documentation":"

The provincial sales tax ID for your TRN in Canada. This parameter can represent the following:

  • Provincial sales tax ID number for British Columbia and Saskatchewan provinces

  • Manitoba retail sales tax ID number for Manitoba province

  • Quebec sales tax ID number for Quebec province

The Tax Setting API only accepts this parameter if the TRN is specified for the previous provinces. For other provinces, the Tax Settings API doesn't accept this parameter.

" + }, "canadaQuebecSalesTaxNumber":{ "shape":"CanadaQuebecSalesTaxNumberString", "documentation":"

The Quebec Sales Tax ID number. Leave blank if you do not have a Quebec Sales Tax ID number.

" @@ -820,10 +875,6 @@ "isResellerAccount":{ "shape":"Boolean", "documentation":"

The value for this parameter must be true if the provincialSalesTaxId value is provided for a TRN in British Columbia, Saskatchewan, or Manitoba provinces.

To claim a provincial sales tax (PST) and retail sales tax (RST) reseller exemption, you must confirm that purchases from this account were made for resale. Otherwise, remove the PST or RST number from the provincialSalesTaxId parameter from your request.

" - }, - "provincialSalesTaxId":{ - "shape":"CanadaProvincialSalesTaxIdString", - "documentation":"

The provincial sales tax ID for your TRN in Canada. This parameter can represent the following:

  • Provincial sales tax ID number for British Columbia and Saskatchewan provinces

  • Manitoba retail sales tax ID number for Manitoba province

  • Quebec sales tax ID number for Quebec province

The Tax Setting API only accepts this parameter if the TRN is specified for the previous provinces. For other provinces, the Tax Settings API doesn't accept this parameter.

" } }, "documentation":"

Additional tax information associated with your TRN in Canada .

" @@ -832,15 +883,15 @@ "type":"string", "max":16, "min":7, - "pattern":"^([0-9A-Z/-]+)$" + "pattern":"([0-9A-Z/-]+)" }, "CanadaQuebecSalesTaxNumberString":{ "type":"string", - "pattern":"^([0-9]{10})(TQ[0-9]{4})?$" + "pattern":"([0-9]{10})(TQ[0-9]{4})?" }, "CanadaRetailSalesTaxNumberString":{ "type":"string", - "pattern":"^([0-9]{6}-[0-9]{1})$" + "pattern":"([0-9]{6}-[0-9]{1})" }, "CaseCreationLimitExceededException":{ "type":"structure", @@ -848,7 +899,7 @@ "members":{ "message":{"shape":"ErrorMessage"} }, - "documentation":"

You've exceeded the Amazon Web ServicesSupport case creation limit for your account.

", + "documentation":"

You've exceeded the Amazon Web Services Support case creation limit for your account.

", "error":{ "httpStatusCode":413, "senderFault":true @@ -859,34 +910,56 @@ "type":"string", "max":1024, "min":0, - "pattern":"^\\d+$" + "pattern":"\\d+" }, "CertifiedEmailId":{ "type":"string", - "pattern":"^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}$" + "pattern":"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}" + }, + "ChileAdditionalInfo":{ + "type":"structure", + "members":{ + "documentType":{ + "shape":"ChileDocumentType", + "documentation":"

The type of tax document. For Chile, this can be Invoice or Receipt.

" + }, + "businessActivity":{ + "shape":"GenericString", + "documentation":"

The business activity of the taxpayer in Chile.

" + } + }, + "documentation":"

Additional tax information associated with your TRN in Chile.

" + }, + "ChileDocumentType":{ + "type":"string", + "documentation":"

The type of tax document for Chile.

", + "enum":[ + "Invoice", + "Receipt" + ] }, "CigNumber":{ "type":"string", - "pattern":"^([0-9A-Z]{1,15})$" + "pattern":"([0-9A-Z]{1,15})" }, "City":{ "type":"string", "max":50, "min":1, - "pattern":"^(?!\\s*$)[\\s\\S]+$" + "pattern":"(?!\\s*$)[\\s\\S]+" }, "ConflictException":{ "type":"structure", "required":[ - "errorCode", - "message" + "message", + "errorCode" ], "members":{ + "message":{"shape":"ErrorMessage"}, "errorCode":{ "shape":"ErrorCode", "documentation":"

409

" - }, - "message":{"shape":"ErrorMessage"} + } }, "documentation":"

The exception when the input is creating conflict with the given state.

", "error":{ @@ -897,31 +970,38 @@ }, "ContractingAuthorityCode":{ "type":"string", - "pattern":"^\\d{4}\\.[A-Z]\\d{5}\\.\\d{4}$" + "pattern":"\\d{4}\\.[A-Z]\\d{5}\\.\\d{4}" }, "CountryCode":{ "type":"string", "max":2, "min":2, - "pattern":"^[a-zA-Z]+$" + "pattern":"[a-zA-Z]+" }, "CupNumber":{ "type":"string", - "pattern":"^([0-9A-Z]{1,15})$" + "pattern":"([0-9A-Z]{1,15})" + }, + "CustomerType":{ + "type":"string", + "enum":[ + "Business", + "Individual" + ] }, "DateOfBirth":{ "type":"string", "max":10, "min":10, - "pattern":"^(\\d{4}-(0[0-9]|1[0-2])-([0-2][0-9]|3[0-1]))$" + "pattern":"(\\d{4}-(0[0-9]|1[0-2])-([0-2][0-9]|3[0-1]))" }, "DateString":{ "type":"string", - "pattern":"^(\\d{4}-(0[0-9]|1[0-2])-([0-2][0-9]|3[0-1]))$" + "pattern":"(\\d{4}-(0[0-9]|1[0-2])-([0-2][0-9]|3[0-1]))" }, "DecisionNumber":{ "type":"string", - "pattern":"^([a-zA-Z0-9/.\\-]{0,200})$" + "pattern":"([a-zA-Z0-9/.\\-]{0,200})" }, "DeleteSupplementalTaxRegistrationRequest":{ "type":"structure", @@ -935,8 +1015,7 @@ }, "DeleteSupplementalTaxRegistrationResponse":{ "type":"structure", - "members":{ - } + "members":{} }, "DeleteTaxRegistrationRequest":{ "type":"structure", @@ -949,12 +1028,11 @@ }, "DeleteTaxRegistrationResponse":{ "type":"structure", - "members":{ - } + "members":{} }, "DestinationFilePath":{ "type":"string", - "pattern":"^[\\s\\S]*$" + "pattern":"[\\s\\S]*" }, "DestinationS3Location":{ "type":"structure", @@ -975,13 +1053,13 @@ "type":"string", "max":50, "min":0, - "pattern":"^[\\s\\S]*$" + "pattern":"[\\s\\S]*" }, "District":{ "type":"string", "max":50, "min":1, - "pattern":"^(?!\\s*$)[\\s\\S]+$" + "pattern":"(?!\\s*$)[\\s\\S]+" }, "EgyptAdditionalInfo":{ "type":"structure", @@ -999,11 +1077,11 @@ }, "ElectronicTransactionCodeNumber":{ "type":"string", - "pattern":"^\\d{17}$" + "pattern":"\\d{17}" }, "EnterpriseIdentificationNumber":{ "type":"string", - "pattern":"^(\\d{10}|(\\d{10}-\\d{3}))$" + "pattern":"(\\d{10}|(\\d{10}-\\d{3}))" }, "EntityExemptionAccountStatus":{ "type":"string", @@ -1018,13 +1096,13 @@ "type":"string", "max":50, "min":0, - "pattern":"^[\\s\\S]*$" + "pattern":"[\\s\\S]*" }, "ErrorMessage":{ "type":"string", "max":1024, "min":0, - "pattern":"^[\\s\\S]*$", + "pattern":"[\\s\\S]*", "sensitive":true }, "EstoniaAdditionalInfo":{ @@ -1041,17 +1119,17 @@ "ExemptionCertificate":{ "type":"structure", "required":[ - "documentFile", - "documentName" + "documentName", + "documentFile" ], "members":{ - "documentFile":{ - "shape":"ExemptionFileBlob", - "documentation":"

The exemption certificate file content.

" - }, "documentName":{ "shape":"ExemptionDocumentName", "documentation":"

The exemption certificate file name.

" + }, + "documentFile":{ + "shape":"ExemptionFileBlob", + "documentation":"

The exemption certificate file content.

" } }, "documentation":"

The exemption certificate.

" @@ -1060,7 +1138,7 @@ "type":"string", "max":128, "min":0, - "pattern":"^([A-Za-z0-9-_.]+).(pdf|jpg|png)$" + "pattern":"([A-Za-z0-9_.-]+)\\.([pP][dD][fF]|[jJ][pP][gG]|[pP][nN][gG])" }, "ExemptionFileBlob":{ "type":"blob", @@ -1069,18 +1147,29 @@ }, "FieldName":{ "type":"string", - "pattern":"^(?!\\s*$)[\\s\\S]+$" + "pattern":"(?!\\s*$)[\\s\\S]+" }, "FileBlob":{ "type":"blob", "max":5242880, "min":1 }, + "FranceAdditionalInfo":{ + "type":"structure", + "required":["sirenNumber"], + "members":{ + "sirenNumber":{ + "shape":"SirenNumber", + "documentation":"

The SIREN number for the company in France. Must be a 9-digit number.

" + } + }, + "documentation":"

Additional tax information associated with your TRN in France.

" + }, "GenericString":{ "type":"string", "max":200, "min":1, - "pattern":"^[\\s\\S]*$" + "pattern":"[\\s\\S]*" }, "GeorgiaAdditionalInfo":{ "type":"structure", @@ -1095,8 +1184,7 @@ }, "GetTaxExemptionTypesRequest":{ "type":"structure", - "members":{ - } + "members":{} }, "GetTaxExemptionTypesResponse":{ "type":"structure", @@ -1109,8 +1197,7 @@ }, "GetTaxInheritanceRequest":{ "type":"structure", - "members":{ - } + "members":{} }, "GetTaxInheritanceResponse":{ "type":"structure", @@ -1195,22 +1282,22 @@ }, "IndividualRegistrationNumber":{ "type":"string", - "pattern":"^([0-9]{10})$" + "pattern":"([0-9]{10})" }, "IndonesiaAdditionalInfo":{ "type":"structure", "members":{ - "decisionNumber":{ - "shape":"DecisionNumber", - "documentation":"

VAT-exempt customers have a Directorate General of Taxation (DGT) exemption letter or certificate (Surat Keterangan Bebas) decision number. Non-collected VAT have a DGT letter or certificate (Surat Keterangan Tidak Dipungut).

" + "taxRegistrationNumberType":{ + "shape":"IndonesiaTaxRegistrationNumberType", + "documentation":"

The tax registration number type.

" }, "ppnExceptionDesignationCode":{ "shape":"PpnExceptionDesignationCode", "documentation":"

Exception code if you are designated by Directorate General of Taxation (DGT) as a VAT collector, non-collected VAT, or VAT-exempt customer.

" }, - "taxRegistrationNumberType":{ - "shape":"IndonesiaTaxRegistrationNumberType", - "documentation":"

The tax registration number type.

" + "decisionNumber":{ + "shape":"DecisionNumber", + "documentation":"

VAT-exempt customers have a Directorate General of Taxation (DGT) exemption letter or certificate (Surat Keterangan Bebas) decision number. Non-collected VAT have a DGT letter or certificate (Surat Keterangan Tidak Dipungut).

" } }, "documentation":"

Additional tax information associated with your TRN in Indonesia.

" @@ -1237,20 +1324,20 @@ }, "InheritanceObtainedReason":{ "type":"string", - "pattern":"^[\\s\\S]*$" + "pattern":"[\\s\\S]*" }, "InternalServerException":{ "type":"structure", "required":[ - "errorCode", - "message" + "message", + "errorCode" ], "members":{ + "message":{"shape":"ErrorMessage"}, "errorCode":{ "shape":"ErrorCode", "documentation":"

500

" - }, - "message":{"shape":"ErrorMessage"} + } }, "documentation":"

The exception thrown when an unexpected error occurs when processing a request.

", "error":{"httpStatusCode":500}, @@ -1260,17 +1347,17 @@ "IsraelAdditionalInfo":{ "type":"structure", "required":[ - "customerType", - "dealerType" + "dealerType", + "customerType" ], "members":{ - "customerType":{ - "shape":"IsraelCustomerType", - "documentation":"

Customer type for your TRN in Israel. The value can be Business or Individual. Use Businessfor entities such as not-for-profit and financial institutions.

" - }, "dealerType":{ "shape":"IsraelDealerType", "documentation":"

Dealer type for your TRN in Israel. If you're not a local authorized dealer with an Israeli VAT ID, specify your tax identification number so that Amazon Web Services can send you a compliant tax invoice.

" + }, + "customerType":{ + "shape":"IsraelCustomerType", + "documentation":"

Customer type for your TRN in Israel. The value can be Business or Individual. Use Businessfor entities such as not-for-profit and financial institutions.

" } }, "documentation":"

Additional tax information associated with your TRN in Israel.

" @@ -1292,6 +1379,10 @@ "ItalyAdditionalInfo":{ "type":"structure", "members":{ + "sdiAccountId":{ + "shape":"SdiAccountId", + "documentation":"

Additional tax information to specify for a TRN in Italy. Use CodiceDestinatario to receive your invoices via web service (API) or FTP.

" + }, "cigNumber":{ "shape":"CigNumber", "documentation":"

The tender procedure identification code.

" @@ -1300,13 +1391,13 @@ "shape":"CupNumber", "documentation":"

Additional tax information to specify for a TRN in Italy. This is managed by the Interministerial Committee for Economic Planning (CIPE) which characterizes every public investment project (Individual Project Code).

" }, - "sdiAccountId":{ - "shape":"SdiAccountId", - "documentation":"

Additional tax information to specify for a TRN in Italy. Use CodiceDestinatario to receive your invoices via web service (API) or FTP.

" - }, "taxCode":{ "shape":"TaxCode", "documentation":"

List of service tax codes for your TRN in Italy. You can use your customer tax code as part of a VAT Group.

" + }, + "customerType":{ + "shape":"CustomerType", + "documentation":"

The customer type for tax registration in Italy. Valid values are Business or Individual.

" } }, "documentation":"

Additional tax information associated with your TRN in Italy.

" @@ -1315,19 +1406,19 @@ "type":"string", "max":100, "min":1, - "pattern":"^[0-9\\u3130-\\u318F\\uAC00-\\uD7AF,.( )-\\\\s]*$" + "pattern":"[0-9\\u3130-\\u318F\\uAC00-\\uD7AF,.( )-\\\\s]*" }, "Jurisdiction":{ "type":"structure", "required":["countryCode"], "members":{ - "countryCode":{ - "shape":"CountryCode", - "documentation":"

The country code of the jurisdiction.

" - }, "stateOrRegion":{ "shape":"State", "documentation":"

The state, region, or province associated with the country of the jurisdiction, if applicable.

" + }, + "countryCode":{ + "shape":"CountryCode", + "documentation":"

The country code of the jurisdiction.

" } }, "documentation":"

The jurisdiction details of the TRN information of the customers. This doesn't contain full legal address, and contains only country code and state/region/province.

" @@ -1345,25 +1436,25 @@ }, "KepEmailId":{ "type":"string", - "pattern":"^[\\s\\S]*$" + "pattern":"[\\s\\S]*" }, "LegalName":{ "type":"string", "max":200, "min":1, - "pattern":"^(?!\\s*$)[\\s\\S]+$" + "pattern":"(?!\\s*$)[\\s\\S]+" }, "LegalNatureCode":{ "type":"string", "max":1024, "min":0, - "pattern":"^\\d+$" + "pattern":"\\d+" }, "LineOfBusiness":{ "type":"string", "max":100, "min":1, - "pattern":"^[0-9\\u3130-\\u318F\\uAC00-\\uD7AF,.( )-\\\\s]*$" + "pattern":"[0-9\\u3130-\\u318F\\uAC00-\\uD7AF,.( )-\\\\s]*" }, "ListSupplementalTaxRegistrationsRequest":{ "type":"structure", @@ -1382,13 +1473,13 @@ "type":"structure", "required":["taxRegistrations"], "members":{ - "nextToken":{ - "shape":"PaginationTokenString", - "documentation":"

The token to retrieve the next set of results.

" - }, "taxRegistrations":{ "shape":"SupplementalTaxRegistrationList", "documentation":"

The list of supplemental tax registrations.

" + }, + "nextToken":{ + "shape":"PaginationTokenString", + "documentation":"

The token to retrieve the next set of results.

" } } }, @@ -1448,10 +1539,6 @@ "MalaysiaAdditionalInfo":{ "type":"structure", "members":{ - "businessRegistrationNumber":{ - "shape":"BusinessRegistrationNumber", - "documentation":"

The tax registration number (TRN) in Malaysia.

For individual, you can specify the taxInformationNumber in MalaysiaAdditionalInfo with NRIC type, and a valid MyKad or NRIC number. For business, you must specify a businessRegistrationNumber in MalaysiaAdditionalInfo with a TIN type and tax identification number. For business resellers, you must specify a businessRegistrationNumber and taxInformationNumber in MalaysiaAdditionalInfo with a sales and service tax (SST) type and a valid SST number.

For business resellers with service codes, you must specify businessRegistrationNumber, taxInformationNumber, and distinct serviceTaxCodes in MalaysiaAdditionalInfo with a SST type and valid sales and service tax (SST) number. By using this API operation, Amazon Web Services registers your self-declaration that you’re an authorized business reseller registered with the Royal Malaysia Customs Department (RMCD), and have a valid SST number.

" - }, "serviceTaxCodes":{ "shape":"MalaysiaServiceTaxCodesList", "documentation":"

List of service tax codes for your TRN in Malaysia.

" @@ -1459,6 +1546,10 @@ "taxInformationNumber":{ "shape":"TaxInformationNumber", "documentation":"

The tax information number in Malaysia.

For individual, you can specify the taxInformationNumber in MalaysiaAdditionalInfo with NRIC type, and a valid MyKad or NRIC number. For business resellers, you must specify a businessRegistrationNumber and taxInformationNumber in MalaysiaAdditionalInfo with a sales and service tax (SST) type and a valid SST number.

For business resellers with service codes, you must specify businessRegistrationNumber, taxInformationNumber, and distinct serviceTaxCodes in MalaysiaAdditionalInfo with a SST type and valid sales and service tax (SST) number. By using this API operation, Amazon Web Services registers your self-declaration that you’re an authorized business reseller registered with the Royal Malaysia Customs Department (RMCD), and have a valid SST number.

" + }, + "businessRegistrationNumber":{ + "shape":"BusinessRegistrationNumber", + "documentation":"

The tax registration number (TRN) in Malaysia.

For individual, you can specify the taxInformationNumber in MalaysiaAdditionalInfo with NRIC type, and a valid MyKad or NRIC number. For business, you must specify a businessRegistrationNumber in MalaysiaAdditionalInfo with a TIN type and tax identification number. For business resellers, you must specify a businessRegistrationNumber and taxInformationNumber in MalaysiaAdditionalInfo with a sales and service tax (SST) type and a valid SST number.

For business resellers with service codes, you must specify businessRegistrationNumber, taxInformationNumber, and distinct serviceTaxCodes in MalaysiaAdditionalInfo with a SST type and valid sales and service tax (SST) number. By using this API operation, Amazon Web Services registers your self-declaration that you’re an authorized business reseller registered with the Royal Malaysia Customs Department (RMCD), and have a valid SST number.

" } }, "documentation":"

Additional tax information associated with your TRN in Malaysia.

" @@ -1488,15 +1579,19 @@ "type":"string", "max":2000, "min":1, - "pattern":"^[-A-Za-z0-9_+\\=\\/]+$" + "pattern":"[-A-Za-z0-9_+\\=\\/]+" }, "Pan":{ "type":"string", - "pattern":"^[A-Z]{5}[0-9]{4}[A-Z]{1}$" + "pattern":"[A-Z]{5}[0-9]{4}[A-Z]{1}" }, "PaymentVoucherNumber":{ "type":"string", - "pattern":"^(\\d{17}|[A-Za-z]{3}\\d{13})$" + "pattern":"(\\d{17}|[A-Za-z]{3}\\d{13}|(?=[^A-Za-z]*[A-Za-z][^A-Za-z]*$)[0-9A-Za-z]{17})" + }, + "PeppolId":{ + "type":"string", + "pattern":"[0-9]{10}" }, "PersonType":{ "type":"string", @@ -1506,6 +1601,16 @@ "Business" ] }, + "PhilippinesAdditionalInfo":{ + "type":"structure", + "members":{ + "isVatRegistered":{ + "shape":"Boolean", + "documentation":"

Indicates whether the account is VAT-registered with the Philippines Bureau of Internal Revenue (BIR).

" + } + }, + "documentation":"

Additional tax information associated with your TRN in the Philippines.

" + }, "PolandAdditionalInfo":{ "type":"structure", "members":{ @@ -1516,19 +1621,31 @@ "isGroupVatEnabled":{ "shape":"Boolean", "documentation":"

True if your business is a member of a VAT group with a NIP active for VAT purposes. Otherwise, this is false.

" + }, + "taxRegistrationNumberType":{ + "shape":"PolandTaxRegistrationNumberType", + "documentation":"

The tax registration number type. Valid values are EUTaxRegistrationNumber, LocalTaxRegistrationNumber, or LocalRegistrationNumber.

" } }, "documentation":"

Additional tax information associated with your TRN in Poland.

" }, + "PolandTaxRegistrationNumberType":{ + "type":"string", + "enum":[ + "EUTaxRegistrationNumber", + "LocalTaxRegistrationNumber", + "LocalRegistrationNumber" + ] + }, "PostalCode":{ "type":"string", "max":20, "min":1, - "pattern":"^(?!\\s*$)[\\s\\S]+$" + "pattern":"(?!\\s*$)[\\s\\S]+" }, "PpnExceptionDesignationCode":{ "type":"string", - "pattern":"^(01|02|03|07|08)$" + "pattern":"(01|02|03|07|08)" }, "PutSupplementalTaxRegistrationRequest":{ "type":"structure", @@ -1562,8 +1679,8 @@ "required":[ "accountIds", "authority", - "exemptionCertificate", - "exemptionType" + "exemptionType", + "exemptionCertificate" ], "members":{ "accountIds":{ @@ -1571,11 +1688,11 @@ "documentation":"

The list of unique account identifiers.

" }, "authority":{"shape":"Authority"}, - "exemptionCertificate":{"shape":"ExemptionCertificate"}, "exemptionType":{ "shape":"GenericString", "documentation":"

The exemption type. Use the supported tax exemption type description.

" - } + }, + "exemptionCertificate":{"shape":"ExemptionCertificate"} } }, "PutTaxExemptionRequestAccountIdsList":{ @@ -1604,8 +1721,7 @@ }, "PutTaxInheritanceResponse":{ "type":"structure", - "members":{ - } + "members":{} }, "PutTaxRegistrationRequest":{ "type":"structure", @@ -1634,7 +1750,7 @@ "type":"string", "max":200, "min":1, - "pattern":"^(?!\\s*$)[\\s\\S]+$" + "pattern":"(?!\\s*$)[\\s\\S]+" }, "RegistrationType":{ "type":"string", @@ -1647,20 +1763,20 @@ "type":"string", "max":8, "min":8, - "pattern":"^\\d+$" + "pattern":"\\d+" }, "ResourceNotFoundException":{ "type":"structure", "required":[ - "errorCode", - "message" + "message", + "errorCode" ], "members":{ + "message":{"shape":"ErrorMessage"}, "errorCode":{ "shape":"ErrorCode", "documentation":"

404

" - }, - "message":{"shape":"ErrorMessage"} + } }, "documentation":"

The exception thrown when the input doesn't have a resource associated to it.

", "error":{ @@ -1684,19 +1800,19 @@ "type":"string", "max":63, "min":3, - "pattern":"^(?=^.{3,63}$)(?!^(\\d+\\.)+\\d+$)(^(([a-z0-9]|[a-z0-9][a-z0-9\\-]*[a-z0-9])\\.)*([a-z0-9]|[a-z0-9][a-z0-9\\-]*[a-z0-9])$)$" + "pattern":"(?=^.{3,63}$)(?!^(\\d+\\.)+\\d+$)(^(([a-z0-9]|[a-z0-9][a-z0-9\\-]*[a-z0-9])\\.)*([a-z0-9]|[a-z0-9][a-z0-9\\-]*[a-z0-9])$)" }, "S3Key":{ "type":"string", "max":1024, "min":1, - "pattern":"^.*\\S.*$" + "pattern":".*\\S.*" }, "S3Prefix":{ "type":"string", "max":512, "min":0, - "pattern":"^.*\\S.*$" + "pattern":".*\\S.*" }, "SaudiArabiaAdditionalInfo":{ "type":"structure", @@ -1718,11 +1834,11 @@ }, "SdiAccountId":{ "type":"string", - "pattern":"^[0-9A-Z]{6,7}$" + "pattern":"[0-9A-Z]{6,7}" }, "SecondaryTaxId":{ "type":"string", - "pattern":"^([0-9]{10})$" + "pattern":"([0-9]{10})" }, "Sector":{ "type":"string", @@ -1734,7 +1850,11 @@ }, "Seller":{ "type":"string", - "pattern":"^[\\s\\S]*$" + "pattern":"[\\s\\S]*" + }, + "SirenNumber":{ + "type":"string", + "pattern":"[0-9]{9}" }, "SourceS3Location":{ "type":"structure", @@ -1758,21 +1878,21 @@ "type":"structure", "required":[ "businessRepresentativeName", - "itemOfBusiness", - "lineOfBusiness" + "lineOfBusiness", + "itemOfBusiness" ], "members":{ "businessRepresentativeName":{ "shape":"BusinessRepresentativeName", "documentation":"

The business legal name based on the most recently uploaded tax registration certificate.

" }, - "itemOfBusiness":{ - "shape":"ItemOfBusiness", - "documentation":"

Item of business based on the most recently uploaded tax registration certificate.

" - }, "lineOfBusiness":{ "shape":"LineOfBusiness", "documentation":"

Line of business based on the most recently uploaded tax registration certificate.

" + }, + "itemOfBusiness":{ + "shape":"ItemOfBusiness", + "documentation":"

Item of business based on the most recently uploaded tax registration certificate.

" } }, "documentation":"

Additional tax information associated with your TRN in South Korea.

" @@ -1792,28 +1912,19 @@ "type":"string", "max":50, "min":1, - "pattern":"^(?!\\s*$)[\\s\\S]+$" + "pattern":"(?!\\s*$)[\\s\\S]+" }, "SupplementalTaxRegistration":{ "type":"structure", "required":[ - "address", - "authorityId", - "legalName", "registrationId", "registrationType", + "legalName", + "address", + "authorityId", "status" ], "members":{ - "address":{"shape":"Address"}, - "authorityId":{ - "shape":"GenericString", - "documentation":"

Unique authority ID for the supplemental TRN.

" - }, - "legalName":{ - "shape":"LegalName", - "documentation":"

The legal name associated with your TRN registration.

" - }, "registrationId":{ "shape":"RegistrationId", "documentation":"

The supplemental TRN unique identifier.

" @@ -1822,6 +1933,15 @@ "shape":"SupplementalTaxRegistrationType", "documentation":"

Type of supplemental TRN. Currently, this can only be VAT.

" }, + "legalName":{ + "shape":"LegalName", + "documentation":"

The legal name associated with your TRN registration.

" + }, + "address":{"shape":"Address"}, + "authorityId":{ + "shape":"GenericString", + "documentation":"

Unique authority ID for the supplemental TRN.

" + }, "status":{ "shape":"TaxRegistrationStatus", "documentation":"

The status of your TRN.

" @@ -1833,17 +1953,12 @@ "SupplementalTaxRegistrationEntry":{ "type":"structure", "required":[ - "address", - "legalName", "registrationId", - "registrationType" + "registrationType", + "legalName", + "address" ], "members":{ - "address":{"shape":"Address"}, - "legalName":{ - "shape":"LegalName", - "documentation":"

The legal name associated with your TRN registration.

" - }, "registrationId":{ "shape":"RegistrationId", "documentation":"

The supplemental TRN unique identifier.

" @@ -1851,7 +1966,12 @@ "registrationType":{ "shape":"SupplementalTaxRegistrationType", "documentation":"

Type of supplemental TRN. Currently, this can only be VAT.

" - } + }, + "legalName":{ + "shape":"LegalName", + "documentation":"

The legal name associated with your TRN registration.

" + }, + "address":{"shape":"Address"} }, "documentation":"

The supplemental TRN information to provide when adding or updating a supplemental TRN.

", "sensitive":true @@ -1866,11 +1986,11 @@ }, "TaxCode":{ "type":"string", - "pattern":"^([0-9]{11}|[A-Z]{6}[0-9]{2}[A-Z][0-9]{2}[A-Z][0-9]{3}[A-Z])$" + "pattern":"([0-9]{11}|[A-Z]{6}[0-9]{2}[A-Z][0-9]{2}[A-Z][0-9]{3}[A-Z])" }, "TaxDocumentAccessToken":{ "type":"string", - "pattern":"^[\\s\\S]*$" + "pattern":"[\\s\\S]*" }, "TaxDocumentMetadata":{ "type":"structure", @@ -1898,7 +2018,7 @@ }, "TaxDocumentName":{ "type":"string", - "pattern":"^[\\s\\S]*$" + "pattern":"[\\s\\S]*" }, "TaxExemption":{ "type":"structure", @@ -1911,6 +2031,10 @@ "shape":"Authority", "documentation":"

The address domain associate with tax exemption.

" }, + "taxExemptionType":{ + "shape":"TaxExemptionType", + "documentation":"

The tax exemption type.

" + }, "effectiveDate":{ "shape":"Timestamp", "documentation":"

The tax exemption effective date.

" @@ -1919,17 +2043,13 @@ "shape":"Timestamp", "documentation":"

The tax exemption expiration date.

" }, - "status":{ - "shape":"EntityExemptionAccountStatus", - "documentation":"

The tax exemption status.

" - }, "systemEffectiveDate":{ "shape":"Timestamp", "documentation":"

The tax exemption recording time in the TaxSettings system.

" }, - "taxExemptionType":{ - "shape":"TaxExemptionType", - "documentation":"

The tax exemption type.

" + "status":{ + "shape":"EntityExemptionAccountStatus", + "documentation":"

The tax exemption status.

" } }, "documentation":"

The tax exemption.

" @@ -1937,6 +2057,10 @@ "TaxExemptionDetails":{ "type":"structure", "members":{ + "taxExemptions":{ + "shape":"TaxExemptions", + "documentation":"

Tax exemptions.

" + }, "heritageObtainedDetails":{ "shape":"Boolean", "documentation":"

The indicator if the tax exemption is inherited from the consolidated billing family management account.

" @@ -1948,10 +2072,6 @@ "heritageObtainedReason":{ "shape":"GenericString", "documentation":"

The reason of the heritage inheritance.

" - }, - "taxExemptions":{ - "shape":"TaxExemptions", - "documentation":"

Tax exemptions.

" } }, "documentation":"

The tax exemption details.

" @@ -1964,17 +2084,17 @@ "TaxExemptionType":{ "type":"structure", "members":{ - "applicableJurisdictions":{ - "shape":"Authorities", - "documentation":"

The tax exemption's applicable jurisdictions.

" + "displayName":{ + "shape":"DisplayName", + "documentation":"

The tax exemption's type display name.

" }, "description":{ "shape":"GenericString", "documentation":"

The tax exemption's type description.

" }, - "displayName":{ - "shape":"DisplayName", - "documentation":"

The tax exemption's type display name.

" + "applicableJurisdictions":{ + "shape":"Authorities", + "documentation":"

The tax exemption's applicable jurisdictions.

" } }, "documentation":"

The tax exemption type.

" @@ -1989,52 +2109,36 @@ }, "TaxInformationNumber":{ "type":"string", - "pattern":"^[A-Z]{1,2}[0-9]{1,11}$" + "pattern":"(IG|C|CS|P|D|F|FA|PT|TA|TC|TN|TR|TP|J|LE)[0-9]{10,13}" }, "TaxInheritanceDetails":{ "type":"structure", "members":{ - "inheritanceObtainedReason":{ - "shape":"InheritanceObtainedReason", - "documentation":"

Tax inheritance reason information associated with the account.

" - }, "parentEntityId":{ "shape":"AccountId", "documentation":"

Tax inheritance parent account information associated with the account.

" + }, + "inheritanceObtainedReason":{ + "shape":"InheritanceObtainedReason", + "documentation":"

Tax inheritance reason information associated with the account.

" } }, "documentation":"

Tax inheritance information associated with the account.

" }, "TaxOffice":{ "type":"string", - "pattern":"^[\\s\\S]*$" + "pattern":"[\\s\\S]*" }, "TaxRegistration":{ "type":"structure", "required":[ - "legalAddress", - "legalName", "registrationId", "registrationType", - "status" + "legalName", + "status", + "legalAddress" ], "members":{ - "additionalTaxInformation":{ - "shape":"AdditionalInfoResponse", - "documentation":"

Additional tax information associated with your TRN.

" - }, - "certifiedEmailId":{ - "shape":"CertifiedEmailId", - "documentation":"

The email address to receive VAT invoices.

" - }, - "legalAddress":{ - "shape":"Address", - "documentation":"

The legal address associated with your TRN registration.

" - }, - "legalName":{ - "shape":"LegalName", - "documentation":"

The legal name associated with your TRN registration.

" - }, "registrationId":{ "shape":"RegistrationId", "documentation":"

Your tax registration unique identifier.

" @@ -2043,17 +2147,33 @@ "shape":"TaxRegistrationType", "documentation":"

Type of your tax registration.

" }, - "sector":{ - "shape":"Sector", - "documentation":"

The industry that describes your business. For business-to-business (B2B) customers, specify Business. For business-to-consumer (B2C) customers, specify Individual. For business-to-government (B2G), specify Government. Note that certain values may not applicable for the request country. Please refer to country specific information in API document.

" + "legalName":{ + "shape":"LegalName", + "documentation":"

The legal name associated with your TRN registration.

" }, "status":{ "shape":"TaxRegistrationStatus", "documentation":"

The status of your TRN. This can be either Verified, Pending, Deleted, or Rejected.

" }, + "sector":{ + "shape":"Sector", + "documentation":"

The industry that describes your business. For business-to-business (B2B) customers, specify Business. For business-to-consumer (B2C) customers, specify Individual. For business-to-government (B2G), specify Government. Note that certain values may not applicable for the request country. Please refer to country specific information in API document.

" + }, "taxDocumentMetadatas":{ "shape":"TaxDocumentMetadatas", "documentation":"

The metadata for your tax document.

" + }, + "certifiedEmailId":{ + "shape":"CertifiedEmailId", + "documentation":"

The email address to receive VAT invoices.

" + }, + "additionalTaxInformation":{ + "shape":"AdditionalInfoResponse", + "documentation":"

Additional tax information associated with your TRN.

" + }, + "legalAddress":{ + "shape":"Address", + "documentation":"

The legal address associated with your TRN registration.

" } }, "documentation":"

Your TRN information.

", @@ -2062,17 +2182,17 @@ "TaxRegistrationDocFile":{ "type":"structure", "required":[ - "fileContent", - "fileName" + "fileName", + "fileContent" ], "members":{ - "fileContent":{ - "shape":"FileBlob", - "documentation":"

The tax registration document content.

" - }, "fileName":{ "shape":"TaxDocumentName", "documentation":"

The tax registration document name.

" + }, + "fileContent":{ + "shape":"FileBlob", + "documentation":"

The tax registration document content.

" } }, "documentation":"

The tax registration document.

" @@ -2080,13 +2200,13 @@ "TaxRegistrationDocument":{ "type":"structure", "members":{ - "file":{ - "shape":"TaxRegistrationDocFile", - "documentation":"

The tax registration document.

" - }, "s3Location":{ "shape":"SourceS3Location", "documentation":"

The Amazon S3 location where your tax registration document is stored.

" + }, + "file":{ + "shape":"TaxRegistrationDocFile", + "documentation":"

The tax registration document.

" } }, "documentation":"

Tax registration document information.

" @@ -2104,22 +2224,6 @@ "registrationType" ], "members":{ - "additionalTaxInformation":{ - "shape":"AdditionalInfoRequest", - "documentation":"

Additional tax information associated with your TRN. You only need to specify this parameter if Amazon Web Services collects any additional information for your country within AdditionalInfoRequest.

" - }, - "certifiedEmailId":{ - "shape":"CertifiedEmailId", - "documentation":"

The email address to receive VAT invoices.

" - }, - "legalAddress":{ - "shape":"Address", - "documentation":"

The legal address associated with your TRN.

If you're setting a TRN in Brazil for the CNPJ tax type, you don't need to specify the legal address.

For TRNs in other countries and for CPF tax types Brazil, you must specify the legal address.

" - }, - "legalName":{ - "shape":"LegalName", - "documentation":"

The legal name associated with your TRN.

If you're setting a TRN in Brazil, you don't need to specify the legal name. For TRNs in other countries, you must specify the legal name.

" - }, "registrationId":{ "shape":"RegistrationId", "documentation":"

Your tax registration unique identifier.

" @@ -2128,13 +2232,29 @@ "shape":"TaxRegistrationType", "documentation":"

Your tax registration type. This can be either VAT or GST.

" }, + "legalName":{ + "shape":"LegalName", + "documentation":"

The legal name associated with your TRN.

If you're setting a TRN in Brazil, you don't need to specify the legal name. For TRNs in other countries, you must specify the legal name.

" + }, + "legalAddress":{ + "shape":"Address", + "documentation":"

The legal address associated with your TRN.

If you're setting a TRN in Brazil for the CNPJ tax type, you don't need to specify the legal address.

For TRNs in other countries and for CPF tax types Brazil, you must specify the legal address.

" + }, "sector":{ "shape":"Sector", "documentation":"

The industry that describes your business. For business-to-business (B2B) customers, specify Business. For business-to-consumer (B2C) customers, specify Individual. For business-to-government (B2G), specify Government.Note that certain values may not applicable for the request country. Please refer to country specific information in API document.

" }, + "additionalTaxInformation":{ + "shape":"AdditionalInfoRequest", + "documentation":"

Additional tax information associated with your TRN. You only need to specify this parameter if Amazon Web Services collects any additional information for your country within AdditionalInfoRequest.

" + }, "verificationDetails":{ "shape":"VerificationDetails", "documentation":"

Additional details needed to verify your TRN information in Brazil. You only need to specify this parameter when you set a TRN in Brazil that is the CPF tax type.

Don't specify this parameter to set a TRN in Brazil of the CNPJ tax type or to set a TRN for another country.

" + }, + "certifiedEmailId":{ + "shape":"CertifiedEmailId", + "documentation":"

The email address to receive VAT invoices.

" } }, "documentation":"

The TRN information you provide when you add a new TRN, or update.

", @@ -2165,35 +2285,21 @@ "CNPJ", "SST", "TIN", - "NRIC" + "NRIC", + "PAN", + "NIP" ] }, "TaxRegistrationWithJurisdiction":{ "type":"structure", "required":[ - "jurisdiction", - "legalName", "registrationId", "registrationType", - "status" + "legalName", + "status", + "jurisdiction" ], "members":{ - "additionalTaxInformation":{ - "shape":"AdditionalInfoResponse", - "documentation":"

Additional tax information associated with your TRN.

" - }, - "certifiedEmailId":{ - "shape":"CertifiedEmailId", - "documentation":"

The email address to receive VAT invoices.

" - }, - "jurisdiction":{ - "shape":"Jurisdiction", - "documentation":"

The jurisdiction associated with your TRN information.

" - }, - "legalName":{ - "shape":"LegalName", - "documentation":"

The legal name associated with your TRN information.

" - }, "registrationId":{ "shape":"RegistrationId", "documentation":"

Your tax registration unique identifier.

" @@ -2202,17 +2308,33 @@ "shape":"TaxRegistrationType", "documentation":"

The type of your tax registration. This can be either VAT or GST.

" }, - "sector":{ - "shape":"Sector", - "documentation":"

The industry that describes your business. For business-to-business (B2B) customers, specify Business. For business-to-consumer (B2C) customers, specify Individual. For business-to-government (B2G), specify Government.Note that certain values may not applicable for the request country. Please refer to country specific information in API document.

" + "legalName":{ + "shape":"LegalName", + "documentation":"

The legal name associated with your TRN information.

" }, "status":{ "shape":"TaxRegistrationStatus", "documentation":"

The status of your TRN. This can be either Verified, Pending, Deleted, or Rejected.

" }, + "sector":{ + "shape":"Sector", + "documentation":"

The industry that describes your business. For business-to-business (B2B) customers, specify Business. For business-to-consumer (B2C) customers, specify Individual. For business-to-government (B2G), specify Government.Note that certain values may not applicable for the request country. Please refer to country specific information in API document.

" + }, "taxDocumentMetadatas":{ "shape":"TaxDocumentMetadatas", "documentation":"

The metadata for your tax document.

" + }, + "certifiedEmailId":{ + "shape":"CertifiedEmailId", + "documentation":"

The email address to receive VAT invoices.

" + }, + "additionalTaxInformation":{ + "shape":"AdditionalInfoResponse", + "documentation":"

Additional tax information associated with your TRN.

" + }, + "jurisdiction":{ + "shape":"Jurisdiction", + "documentation":"

The jurisdiction associated with your TRN information.

" } }, "documentation":"

Your TRN information with jurisdiction details. This doesn't contain the full legal address associated with the TRN information.

", @@ -2222,9 +2344,9 @@ "TurkeyAdditionalInfo":{ "type":"structure", "members":{ - "industries":{ - "shape":"Industries", - "documentation":"

The industry information that tells the Tax Settings API if you're subject to additional withholding taxes. This information required for business-to-business (B2B) customers. This information is conditionally mandatory for B2B customers who are subject to KDV tax.

" + "taxOffice":{ + "shape":"TaxOffice", + "documentation":"

The tax office where you're registered. You can enter this information as a string. The Tax Settings API will add this information to your invoice. This parameter is required for business-to-business (B2B) and business-to-government customers. It's not required for business-to-consumer (B2C) customers.

" }, "kepEmailId":{ "shape":"KepEmailId", @@ -2234,9 +2356,9 @@ "shape":"SecondaryTaxId", "documentation":"

Secondary tax ID (“harcama birimi VKN”si”). If one isn't provided, we will use your VKN as the secondary ID.

" }, - "taxOffice":{ - "shape":"TaxOffice", - "documentation":"

The tax office where you're registered. You can enter this information as a string. The Tax Settings API will add this information to your invoice. This parameter is required for business-to-business (B2B) and business-to-government customers. It's not required for business-to-consumer (B2C) customers.

" + "industries":{ + "shape":"Industries", + "documentation":"

The industry information that tells the Tax Settings API if you're subject to additional withholding taxes. This information required for business-to-business (B2B) customers. This information is conditionally mandatory for B2B customers who are subject to KDV tax.

" } }, "documentation":"

Additional tax information associated with your TRN in Turkey.

" @@ -2261,13 +2383,13 @@ }, "UniqueIdentificationNumber":{ "type":"string", - "pattern":"^[a-zA-Z0-9]{39}$" + "pattern":"[a-zA-Z0-9]{39}" }, "Url":{ "type":"string", "max":200, "min":1, - "pattern":"^https.*\\S.*$" + "pattern":"https.*\\S.*" }, "UzbekistanAdditionalInfo":{ "type":"structure", @@ -2293,10 +2415,11 @@ "ValidationException":{ "type":"structure", "required":[ - "errorCode", - "message" + "message", + "errorCode" ], "members":{ + "message":{"shape":"ErrorMessage"}, "errorCode":{ "shape":"ValidationExceptionErrorCode", "documentation":"

400

" @@ -2304,8 +2427,7 @@ "fieldList":{ "shape":"ValidationExceptionFieldList", "documentation":"

400

" - }, - "message":{"shape":"ErrorMessage"} + } }, "documentation":"

The exception when the input doesn't pass validation for at least one of the input parameters.

", "error":{ @@ -2321,7 +2443,9 @@ "ExpiredToken", "InvalidToken", "FieldValidationFailed", - "MissingInput" + "MissingInput", + "NonIndiaCustomerCanNotSetPAN", + "GSTExistenceBlockSetPAN" ] }, "ValidationExceptionField":{ @@ -2341,7 +2465,7 @@ }, "VatRegistrationNumber":{ "type":"string", - "pattern":"^[0-9]{12}$" + "pattern":"[0-9]{12}" }, "VerificationDetails":{ "type":"structure", @@ -2360,14 +2484,14 @@ "VietnamAdditionalInfo":{ "type":"structure", "members":{ - "electronicTransactionCodeNumber":{ - "shape":"ElectronicTransactionCodeNumber", - "documentation":"

The electronic transaction code number on the tax return document. This field must be provided for successful API operation.

" - }, "enterpriseIdentificationNumber":{ "shape":"EnterpriseIdentificationNumber", "documentation":"

The enterprise identification number for tax registration. This field must be provided for successful API operation.

" }, + "electronicTransactionCodeNumber":{ + "shape":"ElectronicTransactionCodeNumber", + "documentation":"

The electronic transaction code number on the tax return document. This field must be provided for successful API operation.

" + }, "paymentVoucherNumber":{ "shape":"PaymentVoucherNumber", "documentation":"

The payment voucher number on the tax return payment document. This field must be provided for successful API operation.

" diff --git a/awscli/botocore/data/taxsettings/2018-05-10/waiters-2.json b/awscli/botocore/data/taxsettings/2018-05-10/waiters-2.json new file mode 100644 index 000000000000..13f60ee66be6 --- /dev/null +++ b/awscli/botocore/data/taxsettings/2018-05-10/waiters-2.json @@ -0,0 +1,5 @@ +{ + "version": 2, + "waiters": { + } +} From 1e79059fe0c01540ba2d066b762bf38df6239c2a Mon Sep 17 00:00:00 2001 From: aws-sdk-python-automation Date: Mon, 8 Jun 2026 18:25:06 +0000 Subject: [PATCH 07/18] Bump version to 2.34.64 --- .changes/2.34.64.json | 47 +++++++++++++++++++ .../api-change-computeoptimizer-72011.json | 5 -- .../api-change-costoptimizationhub-88204.json | 5 -- .../api-change-deadline-41239.json | 5 -- .../api-change-devopsagent-11021.json | 5 -- .../api-change-mediapackagev2-18422.json | 5 -- .../next-release/api-change-mgn-10221.json | 5 -- .../api-change-observabilityadmin-14020.json | 5 -- .../next-release/api-change-omics-14529.json | 5 -- .../api-change-taxsettings-59244.json | 5 -- CHANGELOG.rst | 14 ++++++ awscli/__init__.py | 2 +- configure | 14 +++--- configure.ac | 2 +- doc/source/conf.py | 2 +- 15 files changed, 71 insertions(+), 55 deletions(-) create mode 100644 .changes/2.34.64.json delete mode 100644 .changes/next-release/api-change-computeoptimizer-72011.json delete mode 100644 .changes/next-release/api-change-costoptimizationhub-88204.json delete mode 100644 .changes/next-release/api-change-deadline-41239.json delete mode 100644 .changes/next-release/api-change-devopsagent-11021.json delete mode 100644 .changes/next-release/api-change-mediapackagev2-18422.json delete mode 100644 .changes/next-release/api-change-mgn-10221.json delete mode 100644 .changes/next-release/api-change-observabilityadmin-14020.json delete mode 100644 .changes/next-release/api-change-omics-14529.json delete mode 100644 .changes/next-release/api-change-taxsettings-59244.json diff --git a/.changes/2.34.64.json b/.changes/2.34.64.json new file mode 100644 index 000000000000..bb28c8c156ea --- /dev/null +++ b/.changes/2.34.64.json @@ -0,0 +1,47 @@ +[ + { + "category": "``cost-optimization-hub``", + "description": "Adds new Idle Recommendation types in the Cost Optimization Hub API", + "type": "api-change" + }, + { + "category": "``observabilityadmin``", + "description": "CloudWatch Observability Admin extends CentralizationRuleForOrganization APIs to support metrics, enabling centralization of metrics across accounts and Regions alongside logs.", + "type": "api-change" + }, + { + "category": "``omics``", + "description": "StartRunBatch API - Add EngineSettings", + "type": "api-change" + }, + { + "category": "``taxsettings``", + "description": "Adds support for additional tax information fields for Philippines, Belgium, Chile, France, Poland, and Italy in the Tax Settings API.", + "type": "api-change" + }, + { + "category": "``mediapackagev2``", + "description": "Adds support for DASH Audio Timeline Patternization. This enables your DASH manifests to templatize the repeating patterns that emerge in audio segment timelines. This compacts the total timeline length, utilizing the repeat notation, such that manifests don't grow indefinitely long.", + "type": "api-change" + }, + { + "category": "``deadline``", + "description": "Added optional identityCenterRegion parameter to AssociateMember APIs to allow managing memberships for users and groups in other regions.", + "type": "api-change" + }, + { + "category": "``compute-optimizer``", + "description": "Adds new Idle Recommendation Resource types in the AWS Compute Optimizer API", + "type": "api-change" + }, + { + "category": "``mgn``", + "description": "AWS Transform discovery tool now supported as network migration input source. You can now use the AWS Transform Discovery tool as a source for network migration alongside modelizeIT, enabling hybrid network migrations for environments running both VMware and non-VMware workloads.", + "type": "api-change" + }, + { + "category": "``devops-agent``", + "description": "Add Asset APIs for managing versioned assets and asset files in AWS DevOps Agent agent spaces.", + "type": "api-change" + } +] \ No newline at end of file diff --git a/.changes/next-release/api-change-computeoptimizer-72011.json b/.changes/next-release/api-change-computeoptimizer-72011.json deleted file mode 100644 index 02e7ad0d7db3..000000000000 --- a/.changes/next-release/api-change-computeoptimizer-72011.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "api-change", - "category": "``compute-optimizer``", - "description": "Adds new Idle Recommendation Resource types in the AWS Compute Optimizer API" -} diff --git a/.changes/next-release/api-change-costoptimizationhub-88204.json b/.changes/next-release/api-change-costoptimizationhub-88204.json deleted file mode 100644 index d502ea6d047d..000000000000 --- a/.changes/next-release/api-change-costoptimizationhub-88204.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "api-change", - "category": "``cost-optimization-hub``", - "description": "Adds new Idle Recommendation types in the Cost Optimization Hub API" -} diff --git a/.changes/next-release/api-change-deadline-41239.json b/.changes/next-release/api-change-deadline-41239.json deleted file mode 100644 index 742aa001ff6d..000000000000 --- a/.changes/next-release/api-change-deadline-41239.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "api-change", - "category": "``deadline``", - "description": "Added optional identityCenterRegion parameter to AssociateMember APIs to allow managing memberships for users and groups in other regions." -} diff --git a/.changes/next-release/api-change-devopsagent-11021.json b/.changes/next-release/api-change-devopsagent-11021.json deleted file mode 100644 index abf2b2baccc7..000000000000 --- a/.changes/next-release/api-change-devopsagent-11021.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "api-change", - "category": "``devops-agent``", - "description": "Add Asset APIs for managing versioned assets and asset files in AWS DevOps Agent agent spaces." -} diff --git a/.changes/next-release/api-change-mediapackagev2-18422.json b/.changes/next-release/api-change-mediapackagev2-18422.json deleted file mode 100644 index 7937fbba6c23..000000000000 --- a/.changes/next-release/api-change-mediapackagev2-18422.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "api-change", - "category": "``mediapackagev2``", - "description": "Adds support for DASH Audio Timeline Patternization. This enables your DASH manifests to templatize the repeating patterns that emerge in audio segment timelines. This compacts the total timeline length, utilizing the repeat notation, such that manifests don't grow indefinitely long." -} diff --git a/.changes/next-release/api-change-mgn-10221.json b/.changes/next-release/api-change-mgn-10221.json deleted file mode 100644 index 9b57e29322e1..000000000000 --- a/.changes/next-release/api-change-mgn-10221.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "api-change", - "category": "``mgn``", - "description": "AWS Transform discovery tool now supported as network migration input source. You can now use the AWS Transform Discovery tool as a source for network migration alongside modelizeIT, enabling hybrid network migrations for environments running both VMware and non-VMware workloads." -} diff --git a/.changes/next-release/api-change-observabilityadmin-14020.json b/.changes/next-release/api-change-observabilityadmin-14020.json deleted file mode 100644 index 036aeea62142..000000000000 --- a/.changes/next-release/api-change-observabilityadmin-14020.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "api-change", - "category": "``observabilityadmin``", - "description": "CloudWatch Observability Admin extends CentralizationRuleForOrganization APIs to support metrics, enabling centralization of metrics across accounts and Regions alongside logs." -} diff --git a/.changes/next-release/api-change-omics-14529.json b/.changes/next-release/api-change-omics-14529.json deleted file mode 100644 index 4ffb2a04e7b0..000000000000 --- a/.changes/next-release/api-change-omics-14529.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "api-change", - "category": "``omics``", - "description": "StartRunBatch API - Add EngineSettings" -} diff --git a/.changes/next-release/api-change-taxsettings-59244.json b/.changes/next-release/api-change-taxsettings-59244.json deleted file mode 100644 index 0bbde2a78b79..000000000000 --- a/.changes/next-release/api-change-taxsettings-59244.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "api-change", - "category": "``taxsettings``", - "description": "Adds support for additional tax information fields for Philippines, Belgium, Chile, France, Poland, and Italy in the Tax Settings API." -} diff --git a/CHANGELOG.rst b/CHANGELOG.rst index a395fc877bda..9e73070431b1 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -2,6 +2,20 @@ CHANGELOG ========= +2.34.64 +======= + +* api-change:``cost-optimization-hub``: Adds new Idle Recommendation types in the Cost Optimization Hub API +* api-change:``observabilityadmin``: CloudWatch Observability Admin extends CentralizationRuleForOrganization APIs to support metrics, enabling centralization of metrics across accounts and Regions alongside logs. +* api-change:``omics``: StartRunBatch API - Add EngineSettings +* api-change:``taxsettings``: Adds support for additional tax information fields for Philippines, Belgium, Chile, France, Poland, and Italy in the Tax Settings API. +* api-change:``mediapackagev2``: Adds support for DASH Audio Timeline Patternization. This enables your DASH manifests to templatize the repeating patterns that emerge in audio segment timelines. This compacts the total timeline length, utilizing the repeat notation, such that manifests don't grow indefinitely long. +* api-change:``deadline``: Added optional identityCenterRegion parameter to AssociateMember APIs to allow managing memberships for users and groups in other regions. +* api-change:``compute-optimizer``: Adds new Idle Recommendation Resource types in the AWS Compute Optimizer API +* api-change:``mgn``: AWS Transform discovery tool now supported as network migration input source. You can now use the AWS Transform Discovery tool as a source for network migration alongside modelizeIT, enabling hybrid network migrations for environments running both VMware and non-VMware workloads. +* api-change:``devops-agent``: Add Asset APIs for managing versioned assets and asset files in AWS DevOps Agent agent spaces. + + 2.34.63 ======= diff --git a/awscli/__init__.py b/awscli/__init__.py index 9bfa6e9293ce..47a27c23d71e 100644 --- a/awscli/__init__.py +++ b/awscli/__init__.py @@ -20,7 +20,7 @@ import os import sys -__version__ = '2.34.63' +__version__ = '2.34.64' # # Get our data path to be added to botocore's search path diff --git a/configure b/configure index 6ab05a1f0c7c..37bcbfd73773 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for awscli 2.34.63. +# Generated by GNU Autoconf 2.71 for awscli 2.34.64. # # # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, @@ -607,8 +607,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='awscli' PACKAGE_TARNAME='awscli' -PACKAGE_VERSION='2.34.63' -PACKAGE_STRING='awscli 2.34.63' +PACKAGE_VERSION='2.34.64' +PACKAGE_STRING='awscli 2.34.64' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1255,7 +1255,7 @@ _ACEOF fi if $ac_init_version; then cat <<\_ACEOF -awscli configure 2.34.63 +awscli configure 2.34.64 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -1292,7 +1292,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by awscli $as_me 2.34.63, which was +It was created by awscli $as_me 2.34.64, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -2668,7 +2668,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by awscli $as_me 2.34.63, which was +This file was extended by awscli $as_me 2.34.64, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -2723,7 +2723,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -awscli config.status 2.34.63 +awscli config.status 2.34.64 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index ddfa0726c36b..8cc6a62ed77a 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ AC_CONFIG_MACRO_DIRS([m4]) -AC_INIT([awscli], [2.34.63]) +AC_INIT([awscli], [2.34.64]) AC_CONFIG_SRCDIR([bin/aws]) AM_PATH_PYTHON([3.8]) diff --git a/doc/source/conf.py b/doc/source/conf.py index dda4281f2679..48ef22763ab3 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -66,7 +66,7 @@ # The short X.Y version. version = '2.0' # The full version, including alpha/beta/rc tags. -release = '2.34.63' +release = '2.34.64' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. From 9e298abd76670e367c0c26d58d731c80ef559997 Mon Sep 17 00:00:00 2001 From: Andrew Asseily <77591070+AndrewAsseily@users.noreply.github.com> Date: Tue, 9 Jun 2026 11:45:22 -0400 Subject: [PATCH 08/18] Add agent-toolkit feature for installing AWS skills and configuring AI coding agents (#10383) * Add agent-toolkit feature for installing AWS skills and configuring AI coding agents --- .../next-release/feature-configure-32033.json | 5 + awscli/autocomplete/local/indexer.py | 9 +- .../2026-04-22/endpoint-rule-set-1.json | 60 ++ .../agenttoolkit/2026-04-22/paginators-1.json | 16 + .../agenttoolkit/2026-04-22/service-2.json | 540 ++++++++++++++++++ .../customizations/agenttoolkit/__init__.py | 86 +++ .../customizations/agenttoolkit/add_skill.py | 70 +++ awscli/customizations/agenttoolkit/agents.py | 424 ++++++++++++++ .../customizations/agenttoolkit/configure.py | 219 +++++++ .../agenttoolkit/get_skill_file.py | 67 +++ .../agenttoolkit/list_installed_skills.py | 73 +++ .../agenttoolkit/remove_skill.py | 79 +++ .../agenttoolkit/update_skill.py | 105 ++++ awscli/customizations/agenttoolkit/utils.py | 227 ++++++++ awscli/customizations/argrename.py | 6 +- awscli/customizations/configure/configure.py | 9 +- awscli/customizations/login/login.py | 19 +- awscli/customizations/prompts.py | 168 ++++++ awscli/examples/agenttoolkit/add-skill.rst | 40 ++ .../examples/agenttoolkit/get-skill-file.rst | 37 ++ .../agenttoolkit/get-skill-metadata.rst | 49 ++ .../agenttoolkit/list-available-skills.rst | 68 +++ .../agenttoolkit/list-installed-skills.rst | 45 ++ awscli/examples/agenttoolkit/remove-skill.rst | 26 + .../examples/agenttoolkit/search-skills.rst | 23 + awscli/examples/agenttoolkit/update-skill.rst | 39 ++ awscli/examples/configure/agent-toolkit.rst | 37 ++ awscli/handlers.py | 4 + .../agenttoolkit/endpoint-tests-1.json | 37 ++ .../customizations/agenttoolkit/__init__.py | 0 .../agenttoolkit/test_add_skill.py | 345 +++++++++++ .../agenttoolkit/test_agents.py | 322 +++++++++++ .../agenttoolkit/test_configure.py | 231 ++++++++ .../test_list_installed_skills.py | 175 ++++++ .../agenttoolkit/test_remove_skill.py | 188 ++++++ .../agenttoolkit/test_update_skill.py | 194 +++++++ .../unit/customizations/agenttoolkit/utils.py | 72 +++ tests/unit/customizations/test_multiselect.py | 99 ++++ 38 files changed, 4196 insertions(+), 17 deletions(-) create mode 100644 .changes/next-release/feature-configure-32033.json create mode 100644 awscli/botocore/data/agenttoolkit/2026-04-22/endpoint-rule-set-1.json create mode 100644 awscli/botocore/data/agenttoolkit/2026-04-22/paginators-1.json create mode 100644 awscli/botocore/data/agenttoolkit/2026-04-22/service-2.json create mode 100644 awscli/customizations/agenttoolkit/__init__.py create mode 100644 awscli/customizations/agenttoolkit/add_skill.py create mode 100644 awscli/customizations/agenttoolkit/agents.py create mode 100644 awscli/customizations/agenttoolkit/configure.py create mode 100644 awscli/customizations/agenttoolkit/get_skill_file.py create mode 100644 awscli/customizations/agenttoolkit/list_installed_skills.py create mode 100644 awscli/customizations/agenttoolkit/remove_skill.py create mode 100644 awscli/customizations/agenttoolkit/update_skill.py create mode 100644 awscli/customizations/agenttoolkit/utils.py create mode 100644 awscli/customizations/prompts.py create mode 100644 awscli/examples/agenttoolkit/add-skill.rst create mode 100644 awscli/examples/agenttoolkit/get-skill-file.rst create mode 100644 awscli/examples/agenttoolkit/get-skill-metadata.rst create mode 100644 awscli/examples/agenttoolkit/list-available-skills.rst create mode 100644 awscli/examples/agenttoolkit/list-installed-skills.rst create mode 100644 awscli/examples/agenttoolkit/remove-skill.rst create mode 100644 awscli/examples/agenttoolkit/search-skills.rst create mode 100644 awscli/examples/agenttoolkit/update-skill.rst create mode 100644 awscli/examples/configure/agent-toolkit.rst create mode 100644 tests/functional/botocore/endpoint-rules/agenttoolkit/endpoint-tests-1.json create mode 100644 tests/unit/customizations/agenttoolkit/__init__.py create mode 100644 tests/unit/customizations/agenttoolkit/test_add_skill.py create mode 100644 tests/unit/customizations/agenttoolkit/test_agents.py create mode 100644 tests/unit/customizations/agenttoolkit/test_configure.py create mode 100644 tests/unit/customizations/agenttoolkit/test_list_installed_skills.py create mode 100644 tests/unit/customizations/agenttoolkit/test_remove_skill.py create mode 100644 tests/unit/customizations/agenttoolkit/test_update_skill.py create mode 100644 tests/unit/customizations/agenttoolkit/utils.py create mode 100644 tests/unit/customizations/test_multiselect.py diff --git a/.changes/next-release/feature-configure-32033.json b/.changes/next-release/feature-configure-32033.json new file mode 100644 index 000000000000..39cc7f040243 --- /dev/null +++ b/.changes/next-release/feature-configure-32033.json @@ -0,0 +1,5 @@ +{ + "type": "feature", + "category": "``configure``", + "description": "Adds the ``agent-toolkit`` and ``aws configure agent-toolkit`` commands, which can be used for configuring your agentic tools with AWS skills and MCP server." +} diff --git a/awscli/autocomplete/local/indexer.py b/awscli/autocomplete/local/indexer.py index 0649189f75d0..21183ea43a40 100644 --- a/awscli/autocomplete/local/indexer.py +++ b/awscli/autocomplete/local/indexer.py @@ -25,7 +25,14 @@ class ModelIndexer: 'ddb': 'High level DynamoDB commands', } - _NON_SERVICE_COMMANDS = ['configure', 'history', 'cli-dev', 'login', 'logout'] + _NON_SERVICE_COMMANDS = [ + 'configure', + 'history', + 'cli-dev', + 'login', + 'logout', + 'agent-toolkit', + ] _CREATE_CMD_TABLE = """\ CREATE TABLE IF NOT EXISTS command_table ( diff --git a/awscli/botocore/data/agenttoolkit/2026-04-22/endpoint-rule-set-1.json b/awscli/botocore/data/agenttoolkit/2026-04-22/endpoint-rule-set-1.json new file mode 100644 index 000000000000..bdda3514ea2a --- /dev/null +++ b/awscli/botocore/data/agenttoolkit/2026-04-22/endpoint-rule-set-1.json @@ -0,0 +1,60 @@ +{ + "version": "1.0", + "parameters": { + "Endpoint": { + "type": "String", + "builtIn": "SDK::Endpoint", + "required": false, + "documentation": "Override the endpoint URL" + }, + "Region": { + "required": true, + "type": "String", + "builtIn": "AWS::Region", + "documentation": "AWS region" + } + }, + "rules": [ + { + "documentation": "Use custom endpoint if provided", + "type": "endpoint", + "conditions": [ + { + "fn": "isSet", + "argv": [ + { + "ref": "Endpoint" + } + ] + } + ], + "endpoint": { + "url": "{Endpoint}" + } + }, + { + "documentation": "Default endpoint for us-east-1", + "type": "endpoint", + "conditions": [ + { + "fn": "stringEquals", + "argv": [ + { + "ref": "Region" + }, + "us-east-1" + ] + } + ], + "endpoint": { + "url": "https://agent-toolkit.us-east-1.api.aws" + } + }, + { + "documentation": "Error for unsupported regions", + "type": "error", + "conditions": [], + "error": "AgentToolkit is only available in us-east-1" + } + ] +} \ No newline at end of file diff --git a/awscli/botocore/data/agenttoolkit/2026-04-22/paginators-1.json b/awscli/botocore/data/agenttoolkit/2026-04-22/paginators-1.json new file mode 100644 index 000000000000..5cdc7e8cb728 --- /dev/null +++ b/awscli/botocore/data/agenttoolkit/2026-04-22/paginators-1.json @@ -0,0 +1,16 @@ +{ + "pagination": { + "ListSkills": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "skills" + }, + "SearchSkills": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "skills" + } + } +} diff --git a/awscli/botocore/data/agenttoolkit/2026-04-22/service-2.json b/awscli/botocore/data/agenttoolkit/2026-04-22/service-2.json new file mode 100644 index 000000000000..dbd209b9521b --- /dev/null +++ b/awscli/botocore/data/agenttoolkit/2026-04-22/service-2.json @@ -0,0 +1,540 @@ +{ + "version":"2.0", + "metadata":{ + "apiVersion":"2026-04-22", + "auth":["aws.auth#sigv4"], + "endpointPrefix":"agenttoolkit", + "protocol":"rest-json", + "protocols":["rest-json"], + "serviceFullName":"AgentToolkit", + "serviceId":"AgentToolkit", + "signatureVersion":"v4", + "signingName":"execute-api", + "uid":"agenttoolkit-2026-04-22" + }, + "operations":{ + "GetLatestSkillVersion":{ + "name":"GetLatestSkillVersion", + "http":{ + "method":"GET", + "requestUri":"/skills/{name}/latest", + "responseCode":200 + }, + "input":{"shape":"GetLatestSkillVersionInput"}, + "output":{"shape":"GetLatestSkillVersionOutput"}, + "documentation":"

Returns the latest version identifier for a skill as a plain-text file. Response Content-Type: text/plain. The body contains the version string (e.g. "v1"), optionally followed by a trailing newline.

", + "auth":["smithy.api#noAuth"], + "readonly":true, + "authtype":"none" + }, + "GetSkill":{ + "name":"GetSkill", + "http":{ + "method":"GET", + "requestUri":"/api/skills/{name}", + "responseCode":200 + }, + "input":{"shape":"GetSkillInput"}, + "output":{"shape":"GetSkillOutput"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"NotFoundException"}, + {"shape":"InternalServerException"}, + {"shape":"ValidationException"} + ], + "documentation":"

Retrieves metadata for a skill, including its version, description, categories, and file list. Use --skill-version to get the metadata for a specific version of the skill.

", + "auth":["smithy.api#noAuth"], + "readonly":true, + "authtype":"none" + }, + "GetSkillFile":{ + "name":"GetSkillFile", + "http":{ + "method":"GET", + "requestUri":"/skills/{name}/versions/{skillVersion}/files/{filePath+}", + "responseCode":200 + }, + "input":{"shape":"GetSkillFileInput"}, + "output":{"shape":"GetSkillFileOutput"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"NotFoundException"}, + {"shape":"InternalServerException"}, + {"shape":"ValidationException"} + ], + "documentation":"

Returns a specific file from a skill version. Content-Type varies by file extension. The {skillVersion} label accepts either "latest" or a versioned tag like "v1".

", + "auth":["smithy.api#noAuth"], + "readonly":true, + "authtype":"none" + }, + "GetSkillFileChecksum":{ + "name":"GetSkillFileChecksum", + "http":{ + "method":"GET", + "requestUri":"/skills/{name}/versions/{skillVersion}/files/{filePath+}/checksum", + "responseCode":200 + }, + "input":{"shape":"GetSkillFileChecksumInput"}, + "output":{"shape":"GetSkillFileChecksumOutput"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"NotFoundException"}, + {"shape":"InternalServerException"}, + {"shape":"ValidationException"} + ], + "documentation":"

Returns the SHA-256 hex checksum of a specific file from a skill version. Response Content-Type: text/plain. The {skillVersion} label accepts either "latest" or a versioned tag like "v1".

", + "auth":["smithy.api#noAuth"], + "readonly":true, + "authtype":"none" + }, + "ListSkills":{ + "name":"ListSkills", + "http":{ + "method":"GET", + "requestUri":"/api/skills", + "responseCode":200 + }, + "input":{"shape":"ListSkillsInput"}, + "output":{"shape":"ListSkillsOutput"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"InternalServerException"}, + {"shape":"ValidationException"} + ], + "documentation":"

Lists skills available in the remote catalog. Use --category-filter to filter by a single category.

", + "auth":["smithy.api#noAuth"], + "readonly":true, + "authtype":"none" + }, + "SearchSkills":{ + "name":"SearchSkills", + "http":{ + "method":"GET", + "requestUri":"/api/search/skills", + "responseCode":200 + }, + "input":{"shape":"SearchSkillsInput"}, + "output":{"shape":"SearchSkillsOutput"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"InternalServerException"}, + {"shape":"ValidationException"} + ], + "documentation":"

Searches the remote catalog for skills matching a query.

", + "auth":["smithy.api#noAuth"], + "readonly":true, + "authtype":"none" + } + }, + "shapes":{ + "CategoryList":{ + "type":"list", + "member":{"shape":"String"} + }, + "File":{ + "type":"structure", + "members":{ + "path":{"shape":"String"} + } + }, + "FileList":{ + "type":"list", + "member":{"shape":"File"} + }, + "GetLatestSkillVersionInput":{ + "type":"structure", + "required":["name"], + "members":{ + "name":{ + "shape":"GetLatestSkillVersionInputNameString", + "location":"uri", + "locationName":"name" + } + } + }, + "GetLatestSkillVersionInputNameString":{ + "type":"string", + "max":64, + "min":1, + "pattern":"[a-zA-Z0-9\\-]+" + }, + "GetLatestSkillVersionOutput":{ + "type":"structure", + "required":["body"], + "members":{ + "contentType":{ + "shape":"String", + "location":"header", + "locationName":"Content-Type" + }, + "eTag":{ + "shape":"String", + "location":"header", + "locationName":"ETag" + }, + "cacheControl":{ + "shape":"String", + "location":"header", + "locationName":"Cache-Control" + }, + "lastModified":{ + "shape":"Timestamp", + "location":"header", + "locationName":"Last-Modified" + }, + "body":{ + "shape":"String", + "documentation":"

The latest version identifier as plain text (e.g. "v1", "v2"), optionally with a trailing newline.

" + } + }, + "documentation":"

Common HTTP response headers for static-asset responses

", + "payload":"body" + }, + "GetSkillFileChecksumInput":{ + "type":"structure", + "required":[ + "name", + "skillVersion", + "filePath" + ], + "members":{ + "name":{ + "shape":"GetSkillFileChecksumInputNameString", + "location":"uri", + "locationName":"name" + }, + "skillVersion":{ + "shape":"SkillVersion", + "location":"uri", + "locationName":"skillVersion" + }, + "filePath":{ + "shape":"GetSkillFileChecksumInputFilePathString", + "location":"uri", + "locationName":"filePath" + } + } + }, + "GetSkillFileChecksumInputFilePathString":{ + "type":"string", + "max":1024, + "min":1, + "pattern":"[A-Za-z0-9._/\\-]+" + }, + "GetSkillFileChecksumInputNameString":{ + "type":"string", + "max":64, + "min":1, + "pattern":"[a-zA-Z0-9\\-]+" + }, + "GetSkillFileChecksumOutput":{ + "type":"structure", + "required":["body"], + "members":{ + "contentType":{ + "shape":"String", + "location":"header", + "locationName":"Content-Type" + }, + "eTag":{ + "shape":"String", + "location":"header", + "locationName":"ETag" + }, + "cacheControl":{ + "shape":"String", + "location":"header", + "locationName":"Cache-Control" + }, + "lastModified":{ + "shape":"Timestamp", + "location":"header", + "locationName":"Last-Modified" + }, + "body":{"shape":"String"} + }, + "documentation":"

Common HTTP response headers for static-asset responses

", + "payload":"body" + }, + "GetSkillFileInput":{ + "type":"structure", + "required":[ + "name", + "skillVersion", + "filePath" + ], + "members":{ + "name":{ + "shape":"GetSkillFileInputNameString", + "location":"uri", + "locationName":"name" + }, + "skillVersion":{ + "shape":"SkillVersion", + "location":"uri", + "locationName":"skillVersion" + }, + "filePath":{ + "shape":"GetSkillFileInputFilePathString", + "location":"uri", + "locationName":"filePath" + } + } + }, + "GetSkillFileInputFilePathString":{ + "type":"string", + "max":1024, + "min":1, + "pattern":"[A-Za-z0-9._/\\-]+" + }, + "GetSkillFileInputNameString":{ + "type":"string", + "max":64, + "min":1, + "pattern":"[a-zA-Z0-9\\-]+" + }, + "GetSkillFileOutput":{ + "type":"structure", + "required":["body"], + "members":{ + "contentType":{ + "shape":"String", + "location":"header", + "locationName":"Content-Type" + }, + "eTag":{ + "shape":"String", + "location":"header", + "locationName":"ETag" + }, + "cacheControl":{ + "shape":"String", + "location":"header", + "locationName":"Cache-Control" + }, + "lastModified":{ + "shape":"Timestamp", + "location":"header", + "locationName":"Last-Modified" + }, + "body":{"shape":"SkillFileBlob"} + }, + "documentation":"

Common HTTP response headers for static-asset responses

", + "payload":"body" + }, + "GetSkillInput":{ + "type":"structure", + "required":["name"], + "members":{ + "name":{ + "shape":"GetSkillInputNameString", + "location":"uri", + "locationName":"name" + }, + "skillVersion":{ + "shape":"GetSkillInputSkillVersionString", + "location":"querystring", + "locationName":"skill_version" + } + } + }, + "GetSkillInputNameString":{ + "type":"string", + "max":64, + "min":1, + "pattern":"[a-zA-Z0-9\\-]+" + }, + "GetSkillInputSkillVersionString":{ + "type":"string", + "pattern":"v[0-9]+" + }, + "GetSkillOutput":{ + "type":"structure", + "required":[ + "name", + "skillVersion", + "description", + "categories", + "files" + ], + "members":{ + "name":{"shape":"String"}, + "skillVersion":{"shape":"String"}, + "description":{"shape":"String"}, + "categories":{"shape":"CategoryList"}, + "files":{"shape":"FileList"} + } + }, + "InternalServerException":{ + "type":"structure", + "required":["message"], + "members":{ + "message":{"shape":"String"} + }, + "error":{"httpStatusCode":500}, + "exception":true, + "fault":true + }, + "ListSkillsInput":{ + "type":"structure", + "members":{ + "categoryFilter":{ + "shape":"ListSkillsInputCategoryFilterString", + "location":"querystring", + "locationName":"category_filter" + }, + "maxResults":{ + "shape":"ListSkillsInputMaxResultsInteger", + "location":"querystring", + "locationName":"max_results" + }, + "nextToken":{ + "shape":"String", + "location":"querystring", + "locationName":"next_token" + } + } + }, + "ListSkillsInputCategoryFilterString":{ + "type":"string", + "max":100, + "min":1, + "pattern":"[a-zA-Z0-9-_]+" + }, + "ListSkillsInputMaxResultsInteger":{ + "type":"integer", + "box":true, + "max":100, + "min":1 + }, + "ListSkillsOutput":{ + "type":"structure", + "required":["skills"], + "members":{ + "nextToken":{"shape":"String"}, + "skills":{"shape":"SkillSummaryList"} + } + }, + "NotFoundException":{ + "type":"structure", + "required":["message"], + "members":{ + "message":{"shape":"String"} + }, + "error":{ + "httpStatusCode":404, + "senderFault":true + }, + "exception":true + }, + "SearchSkillsInput":{ + "type":"structure", + "required":["query"], + "members":{ + "query":{ + "shape":"SearchSkillsInputQueryString", + "location":"querystring", + "locationName":"query" + }, + "maxResults":{ + "shape":"SearchSkillsInputMaxResultsInteger", + "location":"querystring", + "locationName":"max_results" + }, + "nextToken":{ + "shape":"String", + "location":"querystring", + "locationName":"next_token" + } + } + }, + "SearchSkillsInputMaxResultsInteger":{ + "type":"integer", + "box":true, + "max":10, + "min":1 + }, + "SearchSkillsInputQueryString":{ + "type":"string", + "max":1000, + "min":1, + "pattern":"[a-zA-Z0-9\\-_ .,;:?!'\"()/&@#+]+" + }, + "SearchSkillsOutput":{ + "type":"structure", + "required":["skills"], + "members":{ + "nextToken":{"shape":"String"}, + "skills":{"shape":"SkillSummaryList"} + } + }, + "SkillFileBlob":{ + "type":"blob", + "documentation":"

Streaming binary content for skill file or zip downloads. Content-Type is set per-response via the @httpHeader("Content-Type") member on the operation output.

", + "streaming":true + }, + "SkillSummary":{ + "type":"structure", + "required":[ + "name", + "description", + "skillVersion", + "categories" + ], + "members":{ + "name":{"shape":"SkillSummaryNameString"}, + "description":{"shape":"SkillSummaryDescriptionString"}, + "skillVersion":{"shape":"String"}, + "categories":{"shape":"CategoryList"} + } + }, + "SkillSummaryDescriptionString":{ + "type":"string", + "max":1024, + "min":1 + }, + "SkillSummaryList":{ + "type":"list", + "member":{"shape":"SkillSummary"}, + "min":0 + }, + "SkillSummaryNameString":{ + "type":"string", + "max":64, + "min":1 + }, + "SkillVersion":{ + "type":"string", + "documentation":"

A skill version identifier: either the literal "latest" or a versioned tag like "v1", "v2".

", + "pattern":"(latest|v[0-9]+)" + }, + "String":{"type":"string"}, + "ThrottlingException":{ + "type":"structure", + "required":["message"], + "members":{ + "message":{"shape":"String"} + }, + "error":{ + "httpStatusCode":429, + "senderFault":true + }, + "exception":true, + "retryable":{"throttling":true} + }, + "Timestamp":{"type":"timestamp"}, + "ValidationException":{ + "type":"structure", + "required":["message"], + "members":{ + "message":{"shape":"String"} + }, + "error":{ + "httpStatusCode":400, + "senderFault":true + }, + "exception":true + } + }, + "documentation":"

The Agent Toolkit for AWS gives AI coding agents the tools, knowledge, and guardrails they need to build, deploy, and manage applications on AWS. It works with the coding agents that developers already use — including Claude Code, Cursor, and Codex — without requiring you to switch tools or learn a new workflow. In the AWS CLI, the Agent Toolkit for AWS provides commands to set up AI coding agents with the AWS MCP and to manage installed AWS skills from the command line. It works with any AI coding agent that the Agent Toolkit detects on your system — including Kiro, Cursor, and Claude Code — and is the recommended setup path when you want to install AWS skills and configure the AWS MCP Server in a single step.

" +} diff --git a/awscli/customizations/agenttoolkit/__init__.py b/awscli/customizations/agenttoolkit/__init__.py new file mode 100644 index 000000000000..edf96cebb9dd --- /dev/null +++ b/awscli/customizations/agenttoolkit/__init__.py @@ -0,0 +1,86 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import os + +from awscli.customizations.agenttoolkit.add_skill import AddSkillCommand +from awscli.customizations.agenttoolkit.get_skill_file import ( + GetSkillFileCommand, +) +from awscli.customizations.agenttoolkit.list_installed_skills import ( + ListInstalledSkillsCommand, +) +from awscli.customizations.agenttoolkit.remove_skill import RemoveCommand +from awscli.customizations.agenttoolkit.update_skill import UpdateSkillCommand +from awscli.customizations.agenttoolkit.utils import ( + NONPROD_ACCESS_TOKEN_ENV_VAR, + NONPROD_ACCESS_TOKEN_HEADER, +) + +MODELED_COMMAND_ALLOWLIST = { + 'get-skill', + 'list-skills', + 'search-skills', +} + +MODELED_COMMAND_RENAMES = { + 'get-skill': 'get-skill-metadata', + 'list-skills': 'list-available-skills', +} + + +def register_agent_toolkit_commands(event_handlers): + event_handlers.register('building-command-table.main', _rename_service) + event_handlers.register( + 'building-command-table.agent-toolkit', _inject_commands + ) + event_handlers.register( + 'before-sign.agenttoolkit.*', _inject_nonprod_header + ) + + +def _inject_nonprod_header(request, **kwargs): + # Only attach the token when testing internally against the gamma endpoint + if '.gamma.agent-toolkit' not in request.url: + return + token = os.environ.get(NONPROD_ACCESS_TOKEN_ENV_VAR) + if token: + request.headers[NONPROD_ACCESS_TOKEN_HEADER] = token + + +def _rename_service(command_table, session, **kwargs): + service_cmd = command_table.pop('agenttoolkit', None) + if service_cmd is not None: + service_cmd._name = 'agent-toolkit' + command_table['agent-toolkit'] = service_cmd + + +def _inject_commands(command_table, session, **kwargs): + # Remove any modeled commands not in our allowlist, then rename the rest + for name in list(command_table): + if name not in MODELED_COMMAND_ALLOWLIST: + del command_table[name] + + for old_name, new_name in MODELED_COMMAND_RENAMES.items(): + cmd = command_table.pop(old_name, None) + if cmd is not None: + cmd._name = new_name + command_table[new_name] = cmd + + # Add custom commands + command_table['get-skill-file'] = GetSkillFileCommand(session) + command_table['add-skill'] = AddSkillCommand(session) + command_table['list-installed-skills'] = ListInstalledSkillsCommand( + session + ) + command_table['remove-skill'] = RemoveCommand(session) + command_table['update-skill'] = UpdateSkillCommand(session) diff --git a/awscli/customizations/agenttoolkit/add_skill.py b/awscli/customizations/agenttoolkit/add_skill.py new file mode 100644 index 000000000000..80047f579f3b --- /dev/null +++ b/awscli/customizations/agenttoolkit/add_skill.py @@ -0,0 +1,70 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import sys + +from awscli.customizations.agenttoolkit.agents import AGENT_CONFIGS +from awscli.customizations.agenttoolkit.utils import ( + AGENT_ARG, + SKILL_NAME_ARG, + SKILL_VERSION_ARG, + create_client, + get_skill_download, + install_skill, + resolve_agents, +) +from awscli.customizations.commands import BasicCommand +from awscli.customizations.exceptions import ParamValidationError + + +class AddSkillCommand(BasicCommand): + NAME = 'add-skill' + DESCRIPTION = ( + 'Download and install an AWS skill to detected AI coding agents. ' + 'By default the latest version is installed globally to all detected ' + 'agents. Use ``--agent`` to target a specific tool, or ' + '``--skill-version`` to pin a specific version.' + ) + ARG_TABLE = [ + SKILL_NAME_ARG, + SKILL_VERSION_ARG, + AGENT_ARG, + ] + + def __init__(self, session, stream=None, client=None, agent_configs=None): + super().__init__(session) + if stream is None: + stream = sys.stdout + self._stream = stream + self._client = client + if agent_configs is None: + agent_configs = AGENT_CONFIGS + self._agent_configs = agent_configs + + def _run_main(self, parsed_args, parsed_globals): + skill_name = parsed_args.skill_name + version = getattr(parsed_args, 'skill_version', None) + agent_filter = getattr(parsed_args, 'agent', None) + + agents = resolve_agents(agent_filter, self._agent_configs) + if not agents: + raise ParamValidationError('No supported AI coding agents found.') + + client = self._client or create_client(self._session, parsed_globals) + zip_bytes, checksum, version = get_skill_download( + client, skill_name, version=version + ) + + install_skill( + skill_name, version, zip_bytes, checksum, agents, self._stream + ) + return 0 diff --git a/awscli/customizations/agenttoolkit/agents.py b/awscli/customizations/agenttoolkit/agents.py new file mode 100644 index 000000000000..4c38488f531b --- /dev/null +++ b/awscli/customizations/agenttoolkit/agents.py @@ -0,0 +1,424 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import dataclasses +import enum +import glob +import json +import os +import shutil +import subprocess +from typing import Optional + +SKILL_FILENAME = 'SKILL.md' +SKILL_METADATA_FILENAME = '.aws-skill-metadata' +AWS_MCP_SERVER_KEY = 'aws-mcp' +UNIVERSAL_ROW_ID = 'universal' + + +def collapse_home(path): + home = os.path.expanduser('~').rstrip(os.sep) + if path == home: + return '~' + if path.startswith(home + os.sep): + return '~' + path[len(home) :] + return path + + +class McpConfigureAction(enum.Enum): + CONFIGURED = 'configured' + ALREADY_CONFIGURED = 'already_configured' + SKIPPED = 'skipped' + + +_AWS_MCP_PROXY_ARGS = [ + 'mcp-proxy-for-aws@latest', + 'https://aws-mcp.us-east-1.api.aws/mcp', + '--metadata', + 'INSTALL_SOURCE=aws-cli', +] + + +DEFAULT_MCP_SERVER_CONFIG = { + 'command': 'uvx', + 'args': _AWS_MCP_PROXY_ARGS, +} + + +@dataclasses.dataclass +class AgentConfig: + """Definition of a supported AI coding agent. + + To add a new agent, append an instance to ``AGENT_CONFIGS`` in this + module. Most agents only need ``id``, ``display_name``, and + ``detection_path``; the remaining fields cover variations across + different agents' filesystem layouts and MCP config formats. + """ + + id: str + """Stable identifier. Used as the value for ``--agent`` filters.""" + + display_name: str + """Human-readable name shown in wizard output and command results.""" + + detection_path: str + """Filesystem path probed to decide whether the agent is installed. + Tilde expansion is supported. The agent is considered detected when + this path resolves to an existing directory.""" + + detection_path_env_override: Optional[str] = None + """Environment variable name that overrides ``detection_path`` when + set (e.g. ``CLAUDE_CONFIG_DIR``).""" + + skills_dir: str = 'skills' + """Subdirectory of the resolved base directory where skills live. + Ignored when ``skills_path_override`` is set.""" + + skills_path_override: Optional[str] = None + """Absolute path to the skills directory when it is not under the + detection directory (e.g. Codex stores skills at ``~/.agents/skills/``). + Tilde expansion is supported.""" + + mcp_config_path: Optional[str] = None + """Path to the MCP config file. Relative paths are resolved against + the detection directory; tilde-prefixed paths are absolute. Leave + ``None`` for agents that don't have JSON-based MCP config.""" + + mcp_servers_key: str = 'mcpServers' + """Top-level JSON key under which MCP servers are stored. Most + agents use ``mcpServers``; OpenCode uses ``mcp``.""" + + mcp_extra_config: Optional[dict] = None + """Extra fields merged into the default MCP server entry (e.g. + Kiro requires ``timeout`` and ``transport``). Used only when + ``mcp_server_entry`` is not set.""" + + mcp_server_entry: Optional[dict] = None + """Complete MCP server entry, replacing the default schema. Use + when an agent expects a different shape than ``{command, args}`` + (e.g. OpenCode expects ``{type, command: [...]}``).""" + + mcp_shell_command: Optional[list] = None + """Argv for a CLI invocation that registers the AWS MCP server + (e.g. ``codex mcp add ...``). Used for agents whose MCP config is + not JSON. The wizard skips MCP setup if the executable is not on + PATH.""" + + def __post_init__(self): + if self.mcp_extra_config is None: + self.mcp_extra_config = {} + + @property + def _display_skills_path(self): + if self.skills_path_override: + return self.skills_path_override.rstrip('/') + base = self.detection_path.rstrip('/') + if self.skills_dir: + return f'{base}/{self.skills_dir}' + return base + + @property + def display_label(self): + return f'{self.display_name} — {self._display_skills_path}' + + def resolved_override_dir(self): + if not self.detection_path_env_override: + return None + env_value = os.environ.get(self.detection_path_env_override) + if not env_value: + return None + expanded = os.path.expanduser(env_value).rstrip(os.sep) + if not os.path.isdir(expanded): + return None + return expanded + + def resolve_base_dir(self): + override = self.resolved_override_dir() + if override is not None: + return override + expanded = os.path.expanduser(self.detection_path).rstrip(os.sep) + if os.path.isdir(expanded): + return expanded + return None + + def detect(self): + base_dir = self.resolve_base_dir() + if base_dir is None: + return None + return DetectedAgent(self, base_dir) + + +class DetectedAgent: + """An agent that was found installed on this machine.""" + + def __init__(self, config, base_dir): + self.config = config + self.base_dir = base_dir + + @property + def display_name(self): + return self.config.display_name + + @property + def display_label(self): + return f'{self.display_name} — {collapse_home(self.skills_path)}' + + @property + def skills_path(self): + if self.config.skills_path_override: + return os.path.expanduser(self.config.skills_path_override) + return os.path.join(self.base_dir, self.config.skills_dir) + + @property + def mcp_config_file(self): + if self.config.mcp_config_path is None: + return None + if self.config.mcp_config_path.startswith('~'): + override = self.config.resolved_override_dir() + if override is not None: + relative = self.config.mcp_config_path.removeprefix('~/') + return os.path.join(override, relative) + return os.path.expanduser(self.config.mcp_config_path) + return os.path.join(self.base_dir, self.config.mcp_config_path) + + def get_installed_skills(self): + pattern = os.path.join( + self.skills_path, + '*', + SKILL_FILENAME, + ) + results = [] + for skill_path in sorted(glob.glob(pattern)): + skill_dir_path = os.path.dirname(skill_path) + if not os.path.exists( + os.path.join(skill_dir_path, SKILL_METADATA_FILENAME) + ): + continue + skill_dir = os.path.basename(skill_dir_path) + results.append(InstalledSkill(self, skill_dir, skill_path)) + return results + + def configure_mcp_server(self): + """Configure the AWS MCP server entry for this agent. + + Returns a tuple of (action, detail) where action is a member of + McpConfigureAction. detail is the config file path for JSON-based + agents, the executable name for shell-based agents, or None when + no MCP setup is wired up. + """ + if self.config.mcp_shell_command is not None: + return self._configure_via_shell() + + config_path = self.mcp_config_file + if config_path is None: + return McpConfigureAction.SKIPPED, None + + existing_config = self._read_mcp_config(config_path) + servers = existing_config.setdefault(self.config.mcp_servers_key, {}) + + if AWS_MCP_SERVER_KEY in servers: + return McpConfigureAction.ALREADY_CONFIGURED, config_path + + if self.config.mcp_server_entry is not None: + server_entry = self.config.mcp_server_entry + else: + server_entry = { + **DEFAULT_MCP_SERVER_CONFIG, + **self.config.mcp_extra_config, + } + servers[AWS_MCP_SERVER_KEY] = server_entry + self._write_mcp_config(config_path, existing_config) + return McpConfigureAction.CONFIGURED, config_path + + def _configure_via_shell(self): + argv = list(self.config.mcp_shell_command) + executable = argv[0] + if shutil.which(executable) is None: + return McpConfigureAction.SKIPPED, executable + subprocess.run(argv, check=True) + return McpConfigureAction.CONFIGURED, executable + + @staticmethod + def _read_mcp_config(path): + if not os.path.exists(path): + return {} + with open(path) as f: + return json.load(f) + + @staticmethod + def _write_mcp_config(path, config): + os.makedirs(os.path.dirname(path), exist_ok=True) + is_new = not os.path.exists(path) + with open(path, 'w') as f: + json.dump(config, f, indent=2) + f.write('\n') + # If we created the MCP config file, set permissions to 600, otherwise + # the open call above preserves permissions for existing files + if is_new: + os.chmod(path, 0o600) + + +class InstalledSkill: + """A skill found in an agent's skills directory.""" + + def __init__(self, agent, name, path): + self.agent = agent + self.name = name + self.path = path + + +# TODO: Verify detection, skills, and MCP config paths against actual +# installations before release. Currently only tested with Kiro and +# simulated agent directories. +AGENT_CONFIGS = [ + # https://docs.anthropic.com/en/docs/claude-code/mcp + AgentConfig( + id='claude-code', + display_name='Claude Code', + detection_path='~/.claude/', + mcp_config_path='~/.claude.json', + mcp_servers_key='mcpServers', + detection_path_env_override='CLAUDE_CONFIG_DIR', + ), + # https://docs.cline.bot/mcp/mcp-overview + # https://docs.cline.bot/customization/skills + AgentConfig( + id='cline', + display_name='Cline', + detection_path='~/.cline/', + mcp_config_path='mcp.json', + mcp_servers_key='mcpServers', + ), + # https://developers.openai.com/codex/skills + # https://github.com/openai/codex/blob/main/codex-rs/cli/src/mcp_cmd.rs + # Codex stores MCP config in TOML, not JSON. We shell out to its CLI + # rather than add a TOML dependency. + AgentConfig( + id='codex', + display_name='Codex', + detection_path='~/.codex/', + skills_path_override='~/.agents/skills/', + detection_path_env_override='CODEX_HOME', + mcp_shell_command=[ + 'codex', + 'mcp', + 'add', + AWS_MCP_SERVER_KEY, + '--', + 'uvx', + *_AWS_MCP_PROXY_ARGS, + ], + ), + # https://docs.cursor.com/context/model-context-protocol + # https://cursor.com/docs/skills + AgentConfig( + id='cursor', + display_name='Cursor', + detection_path='~/.cursor/', + mcp_config_path='mcp.json', + mcp_servers_key='mcpServers', + ), + # https://geminicli.com/docs/cli/tutorials/mcp-setup/ + # https://geminicli.com/docs/cli/skills/ + AgentConfig( + id='gemini-cli', + display_name='Gemini CLI', + detection_path='~/.gemini/', + skills_path_override='~/.agents/skills/', + mcp_config_path='settings.json', + mcp_servers_key='mcpServers', + ), + # https://kiro.dev/docs/mcp/configuration/ + AgentConfig( + id='kiro', + display_name='Kiro', + detection_path='~/.kiro/', + mcp_config_path='settings/mcp.json', + mcp_servers_key='mcpServers', + mcp_extra_config={'timeout': 100000, 'transport': 'stdio'}, + ), + # https://openclaw-openclaw.mintlify.app/configuration + # OpenClaw does not document MCP support — install skills only. + AgentConfig( + id='openclaw', + display_name='OpenClaw', + detection_path='~/.openclaw/', + ), + # https://docs.opencode.ai/docs/mcp-servers + # https://docs.opencode.ai/docs/skills + AgentConfig( + id='opencode', + display_name='OpenCode', + detection_path='~/.config/opencode/', + skills_path_override='~/.agents/skills/', + mcp_config_path='opencode.json', + mcp_servers_key='mcp', + mcp_server_entry={ + 'type': 'local', + 'command': ['uvx', *_AWS_MCP_PROXY_ARGS], + }, + ), + # https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/docs/settings.md + # Pi does not document MCP support — install skills only. + AgentConfig( + id='pi', + display_name='Pi', + detection_path='~/.pi/agent/', + ), + # https://docs.windsurf.com/plugins/cascade/mcp + # https://docs.windsurf.com/windsurf/cascade/skills + AgentConfig( + id='windsurf', + display_name='Windsurf', + detection_path='~/.codeium/windsurf/', + skills_path_override='~/.agents/skills/', + mcp_config_path='~/.codeium/mcp_config.json', + mcp_servers_key='mcpServers', + ), +] + + +def _build_universal_row(configs): + universal_path = os.path.expanduser('~/.agents/skills/').rstrip(os.sep) + consumers = [ + c.display_name + for c in configs + if c.skills_path_override + and os.path.expanduser(c.skills_path_override).rstrip(os.sep) + == universal_path + ] + return AgentConfig( + id=UNIVERSAL_ROW_ID, + display_name=f'Universal ({", ".join(consumers)})', + detection_path='~/.agents', + ) + + +AGENT_CONFIGS.append(_build_universal_row(AGENT_CONFIGS)) + + +def universal_first(items, get_id=lambda a: a.config.id): + return sorted( + items, + key=lambda i: 0 if get_id(i) == UNIVERSAL_ROW_ID else 1, + ) + + +def get_detected_agents(agent_configs=None): + if agent_configs is None: + agent_configs = AGENT_CONFIGS + detected = [] + for config in agent_configs: + agent = config.detect() + if agent is not None: + detected.append(agent) + return detected diff --git a/awscli/customizations/agenttoolkit/configure.py b/awscli/customizations/agenttoolkit/configure.py new file mode 100644 index 000000000000..3b53f5b17b86 --- /dev/null +++ b/awscli/customizations/agenttoolkit/configure.py @@ -0,0 +1,219 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import io +import sys + +from awscli.customizations.agenttoolkit.agents import ( + AGENT_CONFIGS, + UNIVERSAL_ROW_ID, + McpConfigureAction, + collapse_home, + universal_first, +) +from awscli.customizations.agenttoolkit.utils import ( + AgentToolkitServiceError, + create_client, + get_skill_download, + install_skill, +) +from awscli.customizations.commands import BasicCommand +from awscli.customizations.exceptions import ConfigurationError +from awscli.customizations.prompts import multiselect_choice, yes_no_choice +from awscli.customizations.utils import uni_print + + +class ConfigureAgentToolkitCommand(BasicCommand): + NAME = 'agent-toolkit' + DESCRIPTION = ( + 'Set up AI coding agents with AWS skills and the AWS MCP Server.\n\n' + 'Supported agents are determined by the presence of configuration ' + 'directories, such as ``~/.kiro``. Skills are installed globally in ' + 'those configuration directories, not per project.' + ) + SYNOPSIS = 'aws configure agent-toolkit' + + def __init__(self, session, stream=None, agent_configs=None, client=None): + super().__init__(session) + self._stream = stream or sys.stdout + self._agent_configs = ( + agent_configs if agent_configs is not None else AGENT_CONFIGS + ) + self._client = client + + def _run_main(self, parsed_args, parsed_globals): + uni_print('\nDetecting installed AI coding agents...\n', self._stream) + wizard_configs = [ + c for c in self._agent_configs if c.id != UNIVERSAL_ROW_ID + ] + universal_agent = next( + ( + c.detect() + for c in self._agent_configs + if c.id == UNIVERSAL_ROW_ID + ), + None, + ) + + detected = [] + for config in wizard_configs: + agent = config.detect() + if agent: + # Use the DetectedAgent's label so any env-overridden + # paths (e.g. CLAUDE_CONFIG_DIR) display the resolved + # location instead of the config-time literal. + uni_print(f' \u2713 {agent.display_label}\n', self._stream) + detected.append(agent) + else: + uni_print( + f' \u2717 {config.display_label} (not found)\n', + self._stream, + ) + + if not detected: + raise ConfigurationError( + 'No supported AI coding agents found. ' + 'Supported agents: ' + f'{", ".join(c.display_name for c in wizard_configs)}. ' + 'Install one and re-run \'aws configure agent-toolkit\'.' + ) + + selected_agents = multiselect_choice( + '\nSelect agents to configure', + detected, + display_format=lambda a: a.display_label, + ) + + if not selected_agents: + uni_print('No agents selected.\n', self._stream) + return 0 + + install_targets = list(selected_agents) + if universal_agent and any( + a.skills_path == universal_agent.skills_path + for a in selected_agents + ): + install_targets.append(universal_agent) + + client = self._client or create_client(self._session, parsed_globals) + self._install_default_skills(install_targets, client) + self._configure_mcp(selected_agents) + + uni_print( + '\nYou can discover additional skills with ' + '\'aws agent-toolkit search-skills --search-query \'\n', + self._stream, + ) + return 0 + + def _install_default_skills(self, selected_agents, client): + uni_print('\nFetching default AWS skills...\n', self._stream) + paginator = client.get_paginator('list_skills') + default_skills = [] + for page in paginator.paginate(categoryFilter='aws-core'): + default_skills.extend(page.get('skills', [])) + + if not default_skills: + return + + names = ', '.join(s['name'] for s in default_skills) + uni_print(f' Found: {names}\n', self._stream) + + if not yes_no_choice( + f'\nInstall {len(default_skills)} default AWS skills? [Y/n]: ' + ): + return + + uni_print( + f'\nInstalling {len(default_skills)} default AWS skills...\n', + self._stream, + ) + + installed_count = 0 + for i, skill in enumerate(default_skills, 1): + name = skill['name'] + try: + zip_bytes, checksum, version = get_skill_download(client, name) + install_skill( + name, + version, + zip_bytes, + checksum, + selected_agents, + ) + installed_count += 1 + uni_print( + f' [{i}/{len(default_skills)}] {name}\n', + self._stream, + ) + except AgentToolkitServiceError as e: + uni_print( + f' [{i}/{len(default_skills)}] {name}: {e}\n', + self._stream, + ) + + if installed_count: + uni_print('\nSkills installed to:\n', self._stream) + seen_paths = set() + for agent in universal_first(selected_agents): + if agent.skills_path in seen_paths: + continue + seen_paths.add(agent.skills_path) + uni_print( + f' {agent.display_label}\n', + self._stream, + ) + else: + uni_print( + '\nNo skills were installed successfully.\n', self._stream + ) + + def _configure_mcp(self, agents): + if not yes_no_choice('\nConfigure AWS MCP server connection? [Y/n]: '): + return + + uni_print('\nAWS MCP server configured for:\n', self._stream) + skipped = [] + for agent in agents: + action, detail = agent.configure_mcp_server() + if action is McpConfigureAction.SKIPPED: + skipped.append((agent, detail)) + elif action is McpConfigureAction.ALREADY_CONFIGURED: + uni_print( + f' \u2713 {agent.display_name} \u2014 ' + f'{collapse_home(detail)}: already configured\n', + self._stream, + ) + else: + uni_print( + f' \u2713 {agent.display_name} \u2014 ' + f'{collapse_home(detail)}: updated\n', + self._stream, + ) + + if skipped: + uni_print( + '\nMCP setup not available for the following agents. ' + 'See https://docs.aws.amazon.com/agent-toolkit/latest/userguide/getting-started-aws-mcp-server.html ' + 'for manual setup instructions.\n', + self._stream, + ) + for agent, detail in skipped: + reason = ( + f'requires {detail!r} on PATH' + if detail + else 'no automated setup' + ) + uni_print( + f' \u2717 {agent.display_name} ({reason})\n', + self._stream, + ) diff --git a/awscli/customizations/agenttoolkit/get_skill_file.py b/awscli/customizations/agenttoolkit/get_skill_file.py new file mode 100644 index 000000000000..bd647c573a70 --- /dev/null +++ b/awscli/customizations/agenttoolkit/get_skill_file.py @@ -0,0 +1,67 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +from awscli.customizations.agenttoolkit.utils import ( + SKILL_NAME_ARG, + SKILL_VERSION_ARG, + create_client, +) +from awscli.customizations.commands import BasicCommand +from awscli.utils import OutputStreamFactory + + +class GetSkillFileCommand(BasicCommand): + NAME = 'get-skill-file' + DESCRIPTION = ( + 'Retrieve the contents of a single file from a skill. ' + 'Use ``aws agent-toolkit get-skill-metadata`` to discover available ' + 'file names for each skill. By default the latest version is ' + 'retrieved, use ``--skill-version`` for a specific skill version.' + ) + ARG_TABLE = [ + SKILL_NAME_ARG, + { + 'name': 'file-path', + 'help_text': ( + 'The file to fetch ' + '(such as SKILL.md, references/architecture.md).' + ), + 'action': 'store', + 'cli_type_name': 'string', + 'required': True, + }, + SKILL_VERSION_ARG, + ] + + def __init__(self, session, client=None, output_stream_factory=None): + super().__init__(session) + self._client = client + if output_stream_factory is None: + output_stream_factory = OutputStreamFactory(session) + self._output_stream_factory = output_stream_factory + + def _run_main(self, parsed_args, parsed_globals): + client = self._client or create_client(self._session, parsed_globals) + + skill_name = parsed_args.skill_name + file_path = parsed_args.file_path + skill_version = getattr(parsed_args, 'skill_version', None) or 'latest' + + response = client.get_skill_file( + name=skill_name, + skillVersion=skill_version, + filePath=file_path, + ) + body = response['body'].read() + with self._output_stream_factory.get_output_stream() as stream: + stream.write(body.decode('utf-8')) + return 0 diff --git a/awscli/customizations/agenttoolkit/list_installed_skills.py b/awscli/customizations/agenttoolkit/list_installed_skills.py new file mode 100644 index 000000000000..2d741856123e --- /dev/null +++ b/awscli/customizations/agenttoolkit/list_installed_skills.py @@ -0,0 +1,73 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +from awscli.customizations.agenttoolkit.agents import universal_first +from awscli.customizations.agenttoolkit.utils import ( + AGENT_ARG, + resolve_agents, +) +from awscli.customizations.commands import BasicCommand +from awscli.formatter import get_formatter +from awscli.utils import OutputStreamFactory + + +class ListInstalledSkillsCommand(BasicCommand): + NAME = 'list-installed-skills' + DESCRIPTION = ( + 'List AWS skills that were previously installed by the ' + '``aws agent-toolkit`` commands. Shows the skill name, agent, and file ' + 'path for each installation. By default it lists skills from all ' + 'detected agents, use ``--agent`` to filter results to a specific tool.' + ) + ARG_TABLE = [AGENT_ARG] + + def __init__( + self, session, agent_configs=None, output_stream_factory=None + ): + super().__init__(session) + self._agent_configs = agent_configs + if output_stream_factory is None: + output_stream_factory = OutputStreamFactory(session) + self._output_stream_factory = output_stream_factory + + def _run_main(self, parsed_args, parsed_globals): + agent_filter = getattr(parsed_args, 'agent', None) + agents = resolve_agents(agent_filter, self._agent_configs) + + seen_paths = set() + all_skills = [] + for agent in universal_first(agents): + for skill in agent.get_installed_skills(): + if skill.path in seen_paths: + continue + seen_paths.add(skill.path) + all_skills.append(skill) + + result = { + 'skills': [ + { + 'agent': skill.agent.display_name, + 'name': skill.name, + 'path': skill.path, + } + for skill in all_skills + ] + } + + output = parsed_globals.output + if output is None: + output = self._session.get_config_variable('output') + formatter = get_formatter(output, parsed_globals) + with self._output_stream_factory.get_output_stream() as stream: + formatter(self.NAME, result, stream=stream) + stream.write('\n') + return 0 diff --git a/awscli/customizations/agenttoolkit/remove_skill.py b/awscli/customizations/agenttoolkit/remove_skill.py new file mode 100644 index 000000000000..442daddfe367 --- /dev/null +++ b/awscli/customizations/agenttoolkit/remove_skill.py @@ -0,0 +1,79 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import os +import shutil +import sys + +from awscli.customizations.agenttoolkit.agents import ( + AGENT_CONFIGS, + universal_first, +) +from awscli.customizations.agenttoolkit.utils import ( + AGENT_ARG, + SKILL_NAME_ARG, + resolve_agents, +) +from awscli.customizations.commands import BasicCommand +from awscli.customizations.exceptions import ParamValidationError + + +class RemoveCommand(BasicCommand): + NAME = 'remove-skill' + DESCRIPTION = ( + 'Remove a previously installed AWS skill from detected agents. ' + 'By default the skill is removed from all detected agents, use ' + '``--agent`` to remove from a specific tool only.' + ) + ARG_TABLE = [ + SKILL_NAME_ARG, + AGENT_ARG, + ] + + def __init__(self, session, stream=None, agent_configs=None): + super().__init__(session) + if stream is None: + stream = sys.stdout + self._stream = stream + if agent_configs is None: + agent_configs = AGENT_CONFIGS + self._agent_configs = agent_configs + + def _run_main(self, parsed_args, parsed_globals): + skill_name = parsed_args.skill_name + agent_filter = getattr(parsed_args, 'agent', None) + + agents = resolve_agents(agent_filter, self._agent_configs) + + matches = [] + for agent in agents: + for skill in agent.get_installed_skills(): + if skill.name == skill_name: + matches.append(skill) + + if not matches: + raise ParamValidationError( + f'Skill "{skill_name}" is not installed.' + ) + + removed_paths = set() + ordered = universal_first(matches, get_id=lambda s: s.agent.config.id) + for skill in ordered: + skill_dir = os.path.dirname(skill.path) + if skill_dir in removed_paths: + continue + shutil.rmtree(skill_dir) + removed_paths.add(skill_dir) + self._stream.write( + f'Removed {skill.name} from {skill.agent.display_label}.\n' + ) + return 0 diff --git a/awscli/customizations/agenttoolkit/update_skill.py b/awscli/customizations/agenttoolkit/update_skill.py new file mode 100644 index 000000000000..bfb3bf8a7791 --- /dev/null +++ b/awscli/customizations/agenttoolkit/update_skill.py @@ -0,0 +1,105 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import os +import sys + +from awscli.customizations.agenttoolkit.agents import AGENT_CONFIGS +from awscli.customizations.agenttoolkit.utils import ( + AGENT_ARG, + SKILL_NAME_ARG, + create_client, + get_skill_download, + install_skill, + read_installed_version, + resolve_agents, + resolve_latest_version, +) +from awscli.customizations.commands import BasicCommand +from awscli.customizations.exceptions import ParamValidationError + + +class UpdateSkillCommand(BasicCommand): + NAME = 'update-skill' + DESCRIPTION = ( + 'Update an installed AWS skill to the latest version. ' + 'Compares the locally installed version against the available skills ' + 'and downloads the newer version if available. By default the skill is ' + 'updated for all detected agents, use ``--agent`` to update the skill ' + 'for only a specific tool.' + ) + ARG_TABLE = [ + SKILL_NAME_ARG, + AGENT_ARG, + ] + + def __init__(self, session, stream=None, client=None, agent_configs=None): + super().__init__(session) + if stream is None: + stream = sys.stdout + self._stream = stream + self._client = client + if agent_configs is None: + agent_configs = AGENT_CONFIGS + self._agent_configs = agent_configs + + def _run_main(self, parsed_args, parsed_globals): + skill_name = parsed_args.skill_name + agent_filter = getattr(parsed_args, 'agent', None) + + agents = resolve_agents(agent_filter, self._agent_configs) + if not agents: + raise ParamValidationError('No supported AI coding agents found.') + + installed_agents = [ + agent + for agent in agents + if any( + skill.name == skill_name + for skill in agent.get_installed_skills() + ) + ] + if not installed_agents: + raise ParamValidationError( + f'Skill "{skill_name}" is not installed.' + ) + + client = self._client or create_client(self._session, parsed_globals) + remote_version = resolve_latest_version(client, skill_name) + + outdated = [] + for agent in installed_agents: + skill_dir = os.path.join(agent.skills_path, skill_name) + local_version = read_installed_version(skill_dir) + if local_version != remote_version: + outdated.append(agent) + + if not outdated: + self._stream.write( + f'{skill_name} is already up to date ({remote_version}).\n' + ) + return 0 + + zip_bytes, checksum, version = get_skill_download( + client, skill_name, version=remote_version + ) + install_skill( + skill_name, + version, + zip_bytes, + checksum, + outdated, + self._stream, + action='Updated', + overwrite_existing=True, + ) + return 0 diff --git a/awscli/customizations/agenttoolkit/utils.py b/awscli/customizations/agenttoolkit/utils.py new file mode 100644 index 000000000000..22b8fc68ad98 --- /dev/null +++ b/awscli/customizations/agenttoolkit/utils.py @@ -0,0 +1,227 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import hashlib +import io +import json +import logging +import os +import shutil +import zipfile + +from awscli.customizations.agenttoolkit.agents import ( + AGENT_CONFIGS, + SKILL_METADATA_FILENAME, + get_detected_agents, + universal_first, +) +from awscli.customizations.exceptions import ParamValidationError +from awscli.customizations.utils import create_client_from_parsed_globals + +LOG = logging.getLogger(__name__) +MAX_UNCOMPRESSED_SIZE = 10 * 1024 * 1024 # 10 MB + +NONPROD_ACCESS_TOKEN_HEADER = 'x-nonprod-access-token' +NONPROD_ACCESS_TOKEN_ENV_VAR = 'NONPROD_ACCESS_TOKEN_HEADER' + +SKILL_NAME_ARG = { + 'name': 'skill-name', + 'help_text': 'The name of the skill.', + 'action': 'store', + 'cli_type_name': 'string', + 'required': True, +} + +SKILL_VERSION_ARG = { + 'name': 'skill-version', + 'help_text': ( + 'Skill version to retrieve (such as ``v1``). Defaults to latest.' + ), + 'action': 'store', + 'cli_type_name': 'string', + 'required': False, +} + +AGENT_ARG = { + 'name': 'agent', + 'help_text': ( + 'The agentic tool to target. If not set, the operation applies ' + 'to all detected tools. Valid values: ' + f'{", ".join(c.id for c in AGENT_CONFIGS)}.' + ), + 'action': 'store', + 'cli_type_name': 'string', + 'required': False, +} + + +def create_client(session, parsed_globals): + return create_client_from_parsed_globals( + session, + 'agenttoolkit', + parsed_globals, + ) + + +def resolve_latest_version(client, skill_name): + response = client.get_latest_skill_version(name=skill_name) + return response['body'].strip() + + +def get_skill_download(client, skill_name, version=None): + """ + Download a skill zip and its checksum via the modeled API. + + Returns (zip_bytes, checksum_hex, resolved_version). + """ + + # Actually look up the latest version instead of just passing 'latest', + # this lets us write out the new version to the metadata file without + # inspecting the zip contents + if version is None: + version = resolve_latest_version(client, skill_name) + + response = client.get_skill_file( + name=skill_name, skillVersion=version, filePath='download' + ) + zip_bytes = response['body'].read() + + response = client.get_skill_file_checksum( + name=skill_name, skillVersion=version, filePath='download' + ) + checksum = response['body'].strip().lower().split()[0] + return zip_bytes, checksum, version + + +def read_installed_version(skill_dir): + metadata = read_skill_metadata(skill_dir) + if metadata is None: + return None + return metadata.get('version') + + +def read_skill_metadata(skill_dir): + path = os.path.join(skill_dir, SKILL_METADATA_FILENAME) + try: + with open(path) as f: + return json.load(f) + except FileNotFoundError: + return None + except json.JSONDecodeError as e: + LOG.debug( + 'Could not parse skill metadata at %s: %s. ' + 'The file may be corrupted; remove or re-install the skill ' + 'to recover.', + path, + e, + ) + return None + + +def write_skill_metadata(skill_dir, version): + path = os.path.join(skill_dir, SKILL_METADATA_FILENAME) + with open(path, 'w') as f: + json.dump({'version': version}, f) + f.write('\n') + + +def install_skill( + skill_name, + version, + zip_bytes, + checksum, + agents, + stream=None, + action='Installed', + overwrite_existing=False, +): + expected = checksum.strip().lower().split()[0] + actual = hashlib.sha256(zip_bytes).hexdigest() + if len(expected) != 64 or actual != expected: + raise AgentToolkitServiceError( + f'Checksum verification failed for {skill_name} ' + f'(expected {expected!r}, got {actual!r}).' + ) + + with zipfile.ZipFile(io.BytesIO(zip_bytes)) as zf: + total_size = sum(i.file_size for i in zf.infolist()) + if total_size > MAX_UNCOMPRESSED_SIZE: + raise AgentToolkitServiceError( + f'Refusing to extract: uncompressed size ' + f'({total_size} bytes) exceeds limit.' + ) + for member in zf.namelist(): + normalized = os.path.normpath(member) + if normalized.startswith('..') or os.path.isabs(normalized): + raise AgentToolkitServiceError( + f'Refusing to extract {member!r}' + ' (path escapes skill directory).' + ) + + extracted_paths = set() + for agent in universal_first(agents): + skill_dir = os.path.join(agent.skills_path, skill_name) + real_dir = os.path.realpath(skill_dir) + if real_dir in extracted_paths: + continue + extracted_paths.add(real_dir) + if os.path.isdir(real_dir): + marker = os.path.join(real_dir, SKILL_METADATA_FILENAME) + if not os.path.exists(marker): + if stream: + stream.write( + f' Skipped {skill_name} at {real_dir}: ' + f'directory was not installed by the AWS CLI.\n' + ) + continue + if not overwrite_existing: + if stream: + installed = read_installed_version(real_dir) + version_note = f' ({installed})' if installed else '' + stream.write( + f' {skill_name} is already installed' + f'{version_note} at {real_dir}. Run ' + f'"aws agent-toolkit update-skill ' + f'--skill-name {skill_name}" to update, ' + f'or remove it first to reinstall.\n' + ) + continue + shutil.rmtree(real_dir) + os.makedirs(real_dir, exist_ok=True) + zf.extractall(real_dir) + write_skill_metadata(real_dir, version) + if stream: + stream.write( + f' {action} {skill_name} ({version})' + f' to {agent.display_label}.\n' + ) + + +class AgentToolkitServiceError(Exception): + pass + + +def resolve_agents(agent_filter, agent_configs=None): + """Resolve agents, optionally filtered by agent id.""" + if agent_configs is None: + agent_configs = AGENT_CONFIGS + if agent_filter: + by_id = {c.id.lower(): c for c in agent_configs} + config = by_id.get(agent_filter.lower()) + if config is None: + raise ParamValidationError( + f'Invalid agent "{agent_filter}". Valid values: ' + f'{", ".join(sorted(c.id for c in agent_configs))}.' + ) + agent = config.detect() + return [agent] if agent is not None else [] + return get_detected_agents(agent_configs=agent_configs) diff --git a/awscli/customizations/argrename.py b/awscli/customizations/argrename.py index aec333db1a29..b6d0a0e84bd5 100644 --- a/awscli/customizations/argrename.py +++ b/awscli/customizations/argrename.py @@ -106,6 +106,8 @@ 'glue.get-unfiltered-partition-metadata.region': 'resource-region', 'glue.get-unfiltered-partitions-metadata.region': 'resource-region', 'glue.get-unfiltered-table-metadata.region': 'resource-region', + 'agent-toolkit.*.name': 'skill-name', + 'agent-toolkit.search-skills.query': 'search-query', } # Same format as ARGUMENT_RENAMES, but instead of renaming the arguments, @@ -124,13 +126,13 @@ def register_arg_renames(cli): for original, new_name in ARGUMENT_RENAMES.items(): event_portion, original_arg_name = original.rsplit('.', 1) cli.register( - 'building-argument-table.%s' % event_portion, + f'building-argument-table.{event_portion}', rename_arg(original_arg_name, new_name), ) for original, new_name in HIDDEN_ALIASES.items(): event_portion, original_arg_name = original.rsplit('.', 1) cli.register( - 'building-argument-table.%s' % event_portion, + f'building-argument-table.{event_portion}', hidden_alias(original_arg_name, new_name), ) diff --git a/awscli/customizations/configure/configure.py b/awscli/customizations/configure/configure.py index f36bcc173709..d378730eb85d 100644 --- a/awscli/customizations/configure/configure.py +++ b/awscli/customizations/configure/configure.py @@ -1,4 +1,4 @@ -# Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"). You # may not use this file except in compliance with the License. A copy of @@ -17,6 +17,9 @@ from botocore.exceptions import ProfileNotFound from awscli.compat import compat_input +from awscli.customizations.agenttoolkit.configure import ( + ConfigureAgentToolkitCommand, +) from awscli.customizations.commands import BasicCommand from awscli.customizations.configure.addmodel import AddModelCommand from awscli.customizations.configure.exportcreds import ( @@ -97,6 +100,10 @@ class ConfigureCommand(BasicCommand): 'name': 'export-credentials', 'command_class': ConfigureExportCredentialsCommand, }, + { + 'name': 'agent-toolkit', + 'command_class': ConfigureAgentToolkitCommand, + }, ] # If you want to add new values to prompt, update this list here. diff --git a/awscli/customizations/login/login.py b/awscli/customizations/login/login.py index 171b76c69871..7acf9ecec5d1 100644 --- a/awscli/customizations/login/login.py +++ b/awscli/customizations/login/login.py @@ -22,6 +22,7 @@ LoginType, SameDeviceLoginTokenFetcher, ) +from awscli.customizations.prompts import yes_no_choice from awscli.customizations.sso.utils import ( AuthCodeFetcher, OpenBrowserHandler, @@ -165,19 +166,11 @@ def accept_change_to_existing_profile_if_needed( if existing_session_id == new_session_id: return True - while True: - response = compat_input( - f'\nProfile {profile_name} is already configured to use session ' - f'{existing_session_id}. Do you want to overwrite it to use ' - f'{new_session_id} instead? (y/n): ' - ) - - if response.lower() in ('y', 'yes'): - return True - elif response.lower() in ('n', 'no'): - return False - else: - uni_print('Invalid response. Please enter "y" or "n"') + return yes_no_choice( + f'\nProfile {profile_name} is already configured to use session ' + f'{existing_session_id}. Do you want to overwrite it to use ' + f'{new_session_id} instead? (y/n): ' + ) def ensure_profile_does_not_have_existing_credentials(self, profile_name): """ diff --git a/awscli/customizations/prompts.py b/awscli/customizations/prompts.py new file mode 100644 index 000000000000..339da49df273 --- /dev/null +++ b/awscli/customizations/prompts.py @@ -0,0 +1,168 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +from awscli.compat import compat_input +from awscli.customizations.exceptions import ConfigurationError +from awscli.customizations.utils import uni_print +from awscli.utils import is_stdin_a_tty + + +def yes_no_choice(prompt): + """ + Prompts the user to answer a yes/no question. + Continually re-prompts for invalid selections. + + :param prompt: Prompt text. + :returns: True for yes, False for no. + """ + while True: + response = compat_input(prompt) + + if response.lower() in ('y', 'yes'): + return True + elif response.lower() in ('n', 'no'): + return False + else: + uni_print('Invalid response. Please enter "y" or "n"\n') + + +def multiselect_choice( + message, + items, + display_format=None, + preselected=None, + pt_input=None, + pt_output=None, +): + """ + Present a list of items with checkboxes for multi-selection. + + Arrow keys to navigate, space to toggle, enter to confirm. + + :param message: Prompt message displayed above the choices. + :param items: List of items to select from. + :param display_format: Optional callable to format items for display. + :param preselected: Optional set of indices to pre-check. + :param pt_input: Optional prompt_toolkit input (for testing). + :param pt_output: Optional prompt_toolkit output (for testing). + :returns: List of selected items. + """ + if pt_input is None and not is_stdin_a_tty(): + raise ConfigurationError( + "This command requires an interactive terminal (TTY)." + ) + # Imported lazily so that loading this module does not pull in + # prompt_toolkit for commands that only use yes_no_choice. + from prompt_toolkit import Application + from prompt_toolkit.key_binding.key_bindings import KeyBindings + from prompt_toolkit.layout import HSplit, Layout, Window + from prompt_toolkit.layout.controls import UIContent, UIControl + from prompt_toolkit.layout.dimension import Dimension + from prompt_toolkit.layout.screen import Point + from prompt_toolkit.widgets import Label + + class MultiSelectControl(UIControl): + def __init__(self, items, display_format=None, preselected=None): + self._items = items + self._cursor = 0 + self._selected = set( + preselected if preselected is not None else range(len(items)) + ) + self._display_format = display_format + + def is_focusable(self): + return True + + def preferred_width(self, max_width): + return max_width + + def preferred_height( + self, width, max_height, wrap_lines, get_line_prefix + ): + return len(self._items) + + def create_content(self, width, height): + def get_line(i): + check = 'x' if i in self._selected else ' ' + item = self._items[i] + if self._display_format: + item = self._display_format(item) + style = 'bold' if i == self._cursor else '' + return [(style, f' [{check}] {item}')] + + return UIContent( + get_line=get_line, + cursor_position=Point(x=0, y=self._cursor), + line_count=len(self._items), + ) + + def get_key_bindings(self): + kb = KeyBindings() + + @kb.add('up') + def move_up(event): + self._cursor = (self._cursor - 1) % len(self._items) + + @kb.add('down') + def move_down(event): + self._cursor = (self._cursor + 1) % len(self._items) + + @kb.add(' ') + def toggle(event): + if self._cursor in self._selected: + self._selected.discard(self._cursor) + else: + self._selected.add(self._cursor) + + @kb.add('enter') + def confirm(event): + result = [self._items[i] for i in sorted(self._selected)] + event.app.exit(result=result) + + return kb + + control = MultiSelectControl( + items, display_format=display_format, preselected=preselected + ) + body = Window( + control, + always_hide_cursor=False, + height=Dimension(min=len(items), max=len(items)), + ) + + layout = Layout( + HSplit( + [ + Label( + f'{message} (space to toggle, up/down arrows to navigate, enter to confirm):' + ), + body, + ] + ), + focused_element=body, + ) + + app_bindings = KeyBindings() + + @app_bindings.add('c-c') + def exit_app(event): + event.app.exit(exception=KeyboardInterrupt, style='class:aborting') + + app = Application( + layout=layout, + key_bindings=app_bindings, + full_screen=False, + erase_when_done=True, + input=pt_input, + output=pt_output, + ) + return app.run() diff --git a/awscli/examples/agenttoolkit/add-skill.rst b/awscli/examples/agenttoolkit/add-skill.rst new file mode 100644 index 000000000000..f5a277271c61 --- /dev/null +++ b/awscli/examples/agenttoolkit/add-skill.rst @@ -0,0 +1,40 @@ +**Example 1: To install a skill** + +The following ``add-skill`` example downloads and installs the aws-serverless skill to all detected AI coding agents. :: + + aws agent-toolkit add-skill \ + --skill-name aws-serverless + +Output:: + + Installed aws-serverless (v1) to Kiro. + +For more information, see `Getting started with the AWS Agent Toolkit `__ in the *AWS Agent Toolkit User Guide*. + +**Example 2: To install a skill to a specific agent** + +The following ``add-skill`` example installs the aws-cdk skill only to Kiro. :: + + aws agent-toolkit add-skill \ + --skill-name aws-cdk \ + --agent kiro + +Output:: + + Installed aws-cdk (v1) to Kiro. + +For more information, see `Getting started with the AWS Agent Toolkit `__ in the *AWS Agent Toolkit User Guide*. + +**Example 3: To install a specific version of a skill** + +The following ``add-skill`` example installs version v1 of the aws-serverless skill. :: + + aws agent-toolkit add-skill \ + --skill-name aws-serverless \ + --skill-version v1 + +Output:: + + Installed aws-serverless (v1) to Kiro. + +For more information, see `Getting started with the AWS Agent Toolkit `__ in the *AWS Agent Toolkit User Guide*. diff --git a/awscli/examples/agenttoolkit/get-skill-file.rst b/awscli/examples/agenttoolkit/get-skill-file.rst new file mode 100644 index 000000000000..ebf5da19c922 --- /dev/null +++ b/awscli/examples/agenttoolkit/get-skill-file.rst @@ -0,0 +1,37 @@ +**Example 1: To fetch a file from a skill** + +The following ``get-skill-file`` example retrieves the SKILL.md file from the aws-serverless skill. :: + + aws agent-toolkit get-skill-file \ + --skill-name aws-serverless \ + --file-path SKILL.md + +Output:: + + # AWS Serverless + + Build, deploy, and manage serverless applications on AWS using Lambda, + API Gateway, Step Functions, EventBridge, and SAM/CDK. + + ## When to use this skill + ... + +For more information, see `Getting started with the AWS Agent Toolkit `__ in the *AWS Agent Toolkit User Guide*. + +**Example 2: To fetch a specific version of a skill file** + +The following ``get-skill-file`` example retrieves a reference file from a specific version of the aws-serverless skill. :: + + aws agent-toolkit get-skill-file \ + --skill-name aws-serverless \ + --file-path references/architecture.md \ + --skill-version v1 + +Output:: + + # Architecture Reference + + ## Lambda Function Patterns + ... + +For more information, see `Getting started with the AWS Agent Toolkit `__ in the *AWS Agent Toolkit User Guide*. diff --git a/awscli/examples/agenttoolkit/get-skill-metadata.rst b/awscli/examples/agenttoolkit/get-skill-metadata.rst new file mode 100644 index 000000000000..8373d6ee7f18 --- /dev/null +++ b/awscli/examples/agenttoolkit/get-skill-metadata.rst @@ -0,0 +1,49 @@ +**Example 1: To get metadata for a skill** + +The following ``get-skill-metadata`` example retrieves metadata for the aws-serverless skill, including its version and file list. :: + + aws agent-toolkit get-skill-metadata \ + --skill-name aws-serverless + +Output:: + + { + "name": "aws-serverless", + "version": "v1", + "description": "Build, deploy, and manage serverless applications on AWS using Lambda, API Gateway, Step Functions, and SAM/CDK.", + "categories": [ + "aws-core" + ], + "files": [ + "SKILL.md", + "references/architecture.md", + "references/best-practices.md" + ] + } + +For more information, see `Getting started with the AWS Agent Toolkit `__ in the *AWS Agent Toolkit User Guide*. + +**Example 2: To get metadata for a specific skill version** + +The following ``get-skill-metadata`` example retrieves metadata for version v1 of the aws-serverless skill. :: + + aws agent-toolkit get-skill-metadata \ + --skill-name aws-serverless \ + --skill-version v1 + +Output:: + + { + "name": "aws-serverless", + "version": "v1", + "description": "Build, deploy, and manage serverless applications on AWS using Lambda, API Gateway, Step Functions, and SAM/CDK.", + "categories": [ + "aws-core" + ], + "files": [ + "SKILL.md", + "references/architecture.md" + ] + } + +For more information, see `Getting started with the AWS Agent Toolkit `__ in the *AWS Agent Toolkit User Guide*. diff --git a/awscli/examples/agenttoolkit/list-available-skills.rst b/awscli/examples/agenttoolkit/list-available-skills.rst new file mode 100644 index 000000000000..053f1accaccd --- /dev/null +++ b/awscli/examples/agenttoolkit/list-available-skills.rst @@ -0,0 +1,68 @@ +**Example 1: To list all available skills** + +The following ``list-available-skills`` example lists all skills available in the remote catalog. :: + + aws agent-toolkit list-available-skills + +Output:: + + { + "skills": [ + { + "name": "aws-serverless", + "description": "Build, deploy, and manage serverless applications on AWS.", + "version": "v1", + "categories": [ + "aws-core" + ] + }, + { + "name": "aws-cdk", + "description": "Author, deploy, and troubleshoot AWS infrastructure using CDK.", + "version": "v1", + "categories": [ + "aws-core" + ] + }, + { + "name": "aws-cleanrooms", + "description": "Troubleshoot AWS Clean Rooms collaboration issues.", + "version": "v1", + "categories": [] + } + ] + } + +For more information, see `Getting started with the AWS Agent Toolkit `__ in the *AWS Agent Toolkit User Guide*. + +**Example 2: To list available skills filtered by category** + +The following ``list-available-skills`` example lists only skills in the aws-core category. :: + + aws agent-toolkit list-available-skills \ + --category-filter aws-core + +Output:: + + { + "skills": [ + { + "name": "aws-serverless", + "description": "Build, deploy, and manage serverless applications on AWS.", + "version": "v1", + "categories": [ + "aws-core" + ] + }, + { + "name": "aws-cdk", + "description": "Author, deploy, and troubleshoot AWS infrastructure using CDK.", + "version": "v1", + "categories": [ + "aws-core" + ] + } + ] + } + +For more information, see `Getting started with the AWS Agent Toolkit `__ in the *AWS Agent Toolkit User Guide*. diff --git a/awscli/examples/agenttoolkit/list-installed-skills.rst b/awscli/examples/agenttoolkit/list-installed-skills.rst new file mode 100644 index 000000000000..e64258285102 --- /dev/null +++ b/awscli/examples/agenttoolkit/list-installed-skills.rst @@ -0,0 +1,45 @@ +**Example 1: To list installed skills** + +The following ``list-installed-skills`` example lists all AWS skills installed on detected agents. :: + + aws agent-toolkit list-installed-skills + +Output:: + + { + "skills": [ + { + "agent": "Kiro", + "name": "aws-serverless", + "path": "/Users/username/.kiro/skills/aws-serverless/SKILL.md" + }, + { + "agent": "Cursor", + "name": "aws-serverless", + "path": "/Users/username/.cursor/skills/aws-serverless/SKILL.md" + } + ] + } + +For more information, see `Getting started with the AWS Agent Toolkit `__ in the *AWS Agent Toolkit User Guide*. + +**Example 2: To list installed skills for a specific agent** + +The following ``list-installed-skills`` example lists skills installed only in Kiro. :: + + aws agent-toolkit list-installed-skills \ + --agent kiro + +Output:: + + { + "skills": [ + { + "agent": "Kiro", + "name": "aws-serverless", + "path": "/Users/username/.kiro/skills/aws-serverless/SKILL.md" + } + ] + } + +For more information, see `Getting started with the AWS Agent Toolkit `__ in the *AWS Agent Toolkit User Guide*. diff --git a/awscli/examples/agenttoolkit/remove-skill.rst b/awscli/examples/agenttoolkit/remove-skill.rst new file mode 100644 index 000000000000..ce24387ebded --- /dev/null +++ b/awscli/examples/agenttoolkit/remove-skill.rst @@ -0,0 +1,26 @@ +**Example 1: To remove an installed skill** + +The following ``remove-skill`` example removes the aws-serverless skill from all detected agents. :: + + aws agent-toolkit remove-skill \ + --skill-name aws-serverless + +Output:: + + Removed aws-serverless from Kiro. + +For more information, see `Getting started with the AWS Agent Toolkit `__ in the *AWS Agent Toolkit User Guide*. + +**Example 2: To remove a skill from a specific agent** + +The following ``remove-skill`` example removes the aws-cdk skill only from Kiro. :: + + aws agent-toolkit remove-skill \ + --skill-name aws-cdk \ + --agent kiro + +Output:: + + Removed aws-cdk from Kiro. + +For more information, see `Getting started with the AWS Agent Toolkit `__ in the *AWS Agent Toolkit User Guide*. diff --git a/awscli/examples/agenttoolkit/search-skills.rst b/awscli/examples/agenttoolkit/search-skills.rst new file mode 100644 index 000000000000..d1430f62e356 --- /dev/null +++ b/awscli/examples/agenttoolkit/search-skills.rst @@ -0,0 +1,23 @@ +**To search for available skills** + +The following ``search-skills`` example searches for skills related to serverless development. :: + + aws agent-toolkit search-skills \ + --search-query serverless + +Output:: + + { + "skills": [ + { + "name": "aws-serverless", + "description": "Build, deploy, and manage serverless applications on AWS using Lambda, API Gateway, Step Functions, and SAM/CDK.", + "version": "v1", + "categories": [ + "aws-core" + ] + } + ] + } + +For more information, see `Getting started with the AWS Agent Toolkit `__ in the *AWS Agent Toolkit User Guide*. diff --git a/awscli/examples/agenttoolkit/update-skill.rst b/awscli/examples/agenttoolkit/update-skill.rst new file mode 100644 index 000000000000..ec34c18cbb72 --- /dev/null +++ b/awscli/examples/agenttoolkit/update-skill.rst @@ -0,0 +1,39 @@ +**Example 1: To update an installed skill** + +The following ``update-skill`` example updates the aws-serverless skill to the latest version across all agents where it is installed. :: + + aws agent-toolkit update-skill \ + --skill-name aws-serverless + +Output:: + + Updated aws-serverless (v1) to Kiro. + +For more information, see `Getting started with the AWS Agent Toolkit `__ in the *AWS Agent Toolkit User Guide*. + +**Example 2: To update a skill for a specific agent** + +The following ``update-skill`` example updates the aws-serverless skill only for Kiro. :: + + aws agent-toolkit update-skill \ + --skill-name aws-serverless \ + --agent kiro + +Output:: + + Updated aws-serverless (v2) to Kiro. + +For more information, see `Getting started with the AWS Agent Toolkit `__ in the *AWS Agent Toolkit User Guide*. + +**Example 3: When a skill is already up to date** + +The following ``update-skill`` example shows the output when the installed skill is already at the latest version. :: + + aws agent-toolkit update-skill \ + --skill-name aws-serverless + +Output:: + + aws-serverless is already up to date (v2). + +For more information, see `Getting started with the AWS Agent Toolkit `__ in the *AWS Agent Toolkit User Guide*. diff --git a/awscli/examples/configure/agent-toolkit.rst b/awscli/examples/configure/agent-toolkit.rst new file mode 100644 index 000000000000..9edce33a0114 --- /dev/null +++ b/awscli/examples/configure/agent-toolkit.rst @@ -0,0 +1,37 @@ +**To set up AI coding agents with AWS skills and the AWS MCP Server** + +The following ``agent-toolkit`` example runs the interactive setup wizard. It detects installed AI coding agents, installs default AWS skills, and configures the AWS MCP Server connection. :: + + aws configure agent-toolkit + +Output:: + + Detecting installed AI coding agents... + [x] Kiro + [ ] Claude Code (not found) + [ ] Cursor (not found) + + Select agents to configure + > [x] Kiro + + Fetching default AWS skills... + Found: aws-serverless, aws-cdk, aws-iam + + Install 3 default AWS skills? [Y/n]: Y + + Installing 3 default AWS skills... + [1/3] aws-serverless + [2/3] aws-cdk + [3/3] aws-iam + + Skills installed to: + Kiro: /Users/username/.kiro/skills + + Configure AWS MCP server connection? [Y/n]: Y + + AWS MCP server configured for: + [x] Kiro: updated /Users/username/.kiro/settings/mcp.json + + You can discover additional skills with 'aws agent-toolkit search-skills --search-query ' + +For more information, see `Getting started with the AWS Agent Toolkit `__ in the *AWS Agent Toolkit User Guide*. diff --git a/awscli/handlers.py b/awscli/handlers.py index 3f0aa0180078..51df636f11d0 100644 --- a/awscli/handlers.py +++ b/awscli/handlers.py @@ -22,6 +22,9 @@ from awscli.clidriver import no_pager_handler from awscli.customizations import datapipeline from awscli.customizations.addexamples import add_examples +from awscli.customizations.agenttoolkit import ( + register_agent_toolkit_commands, +) from awscli.customizations.argrename import register_arg_renames from awscli.customizations.assumerole import register_assume_role_provider from awscli.customizations.awslambda import register_lambda_create_function @@ -241,3 +244,4 @@ def awscli_initialize(event_handlers): register_quicksight_asset_bundle_customizations(event_handlers) register_ec2_instance_connect_commands(event_handlers) register_login_cmds(event_handlers) + register_agent_toolkit_commands(event_handlers) diff --git a/tests/functional/botocore/endpoint-rules/agenttoolkit/endpoint-tests-1.json b/tests/functional/botocore/endpoint-rules/agenttoolkit/endpoint-tests-1.json new file mode 100644 index 000000000000..7de3c57309ec --- /dev/null +++ b/tests/functional/botocore/endpoint-rules/agenttoolkit/endpoint-tests-1.json @@ -0,0 +1,37 @@ +{ + "version": "1", + "testCases": [ + { + "documentation": "Returns endpoint for us-east-1", + "expect": { + "endpoint": { + "url": "https://agent-toolkit.us-east-1.api.aws" + } + }, + "params": { + "Region": "us-east-1" + } + }, + { + "documentation": "Returns error for us-west-2", + "expect": { + "error": "AgentToolkit is only available in us-east-1" + }, + "params": { + "Region": "us-west-2" + } + }, + { + "documentation": "Overrides endpoint regardless of region", + "expect": { + "endpoint": { + "url": "https://override.agent-toolkit.api.aws" + } + }, + "params": { + "Region": "us-west-2", + "Endpoint": "https://override.agent-toolkit.api.aws" + } + } + ] +} \ No newline at end of file diff --git a/tests/unit/customizations/agenttoolkit/__init__.py b/tests/unit/customizations/agenttoolkit/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/tests/unit/customizations/agenttoolkit/test_add_skill.py b/tests/unit/customizations/agenttoolkit/test_add_skill.py new file mode 100644 index 000000000000..f6b35d52c849 --- /dev/null +++ b/tests/unit/customizations/agenttoolkit/test_add_skill.py @@ -0,0 +1,345 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import hashlib +from io import StringIO +from unittest.mock import Mock, patch + +import pytest + +from awscli.customizations.agenttoolkit.add_skill import AddSkillCommand +from awscli.customizations.agenttoolkit.agents import SKILL_METADATA_FILENAME +from awscli.customizations.agenttoolkit.utils import AgentToolkitServiceError +from awscli.customizations.exceptions import ParamValidationError +from tests.unit.customizations.agenttoolkit.utils import ( + make_config, + make_skill_zip, +) + + +def _run_add(agent_configs, args, zip_bytes=None, version='v1', checksum=None): + default_bytes, default_checksum = make_skill_zip({'SKILL.md': 'test'}) + if zip_bytes is None: + zip_bytes = default_bytes + if checksum is None: + checksum = hashlib.sha256(zip_bytes).hexdigest() + + def mock_download(client, skill_name, version=None): + v = version if version is not None else fallback_version + return zip_bytes, checksum, v + + fallback_version = version + + stream = StringIO() + session = Mock() + session.user_agent_extra = '' + session.emit_first_non_none_response.return_value = None + + with ( + patch( + 'awscli.customizations.agenttoolkit.add_skill.get_skill_download', + side_effect=mock_download, + ), + patch('awscli.customizations.agenttoolkit.add_skill.create_client'), + ): + cmd = AddSkillCommand( + session, stream=stream, agent_configs=agent_configs + ) + rc = cmd(args=args, parsed_globals=Mock()) + return rc, stream.getvalue() + + +def test_add_skill_success(tmp_path): + (tmp_path / '.test-agent' / 'skills').mkdir(parents=True) + configs = [make_config(tmp_path)] + rc, output = _run_add(configs, ['--skill-name', 'aws-s3']) + assert rc == 0 + assert 'Installed aws-s3 (v1) to Test Agent' in output + assert ( + tmp_path / '.test-agent' / 'skills' / 'aws-s3' / 'SKILL.md' + ).exists() + + +def test_add_skill_with_version(tmp_path): + (tmp_path / '.test-agent' / 'skills').mkdir(parents=True) + configs = [make_config(tmp_path)] + rc, output = _run_add( + configs, + ['--skill-name', 'aws-s3', '--skill-version', 'v2'], + version='v999', + ) + assert rc == 0 + assert 'v2' in output + assert 'v999' not in output + + +def test_add_skill_checksum_failure(tmp_path): + (tmp_path / '.test-agent' / 'skills').mkdir(parents=True) + configs = [make_config(tmp_path)] + with pytest.raises( + AgentToolkitServiceError, match='Checksum verification failed' + ): + _run_add(configs, ['--skill-name', 'aws-s3'], checksum='bad_checksum') + + +def test_add_skill_multiple_agents(tmp_path): + (tmp_path / '.agent-a' / 'skills').mkdir(parents=True) + (tmp_path / '.agent-b' / 'skills').mkdir(parents=True) + configs = [ + make_config( + tmp_path, + id='a', + display_name='Agent A', + detection_path=str(tmp_path / '.agent-a'), + ), + make_config( + tmp_path, + id='b', + display_name='Agent B', + detection_path=str(tmp_path / '.agent-b'), + ), + ] + rc, output = _run_add(configs, ['--skill-name', 'aws-s3']) + assert rc == 0 + assert 'Agent A' in output + assert 'Agent B' in output + assert (tmp_path / '.agent-a' / 'skills' / 'aws-s3' / 'SKILL.md').exists() + assert (tmp_path / '.agent-b' / 'skills' / 'aws-s3' / 'SKILL.md').exists() + + +def test_add_skill_dedupes_shared_skills_path(tmp_path): + (tmp_path / '.agent-a').mkdir() + (tmp_path / '.agent-b').mkdir() + shared = str(tmp_path / 'shared' / 'skills') + configs = [ + make_config( + tmp_path, + id='a', + display_name='Agent A', + detection_path=str(tmp_path / '.agent-a'), + skills_path_override=shared, + ), + make_config( + tmp_path, + id='b', + display_name='Agent B', + detection_path=str(tmp_path / '.agent-b'), + skills_path_override=shared, + ), + ] + rc, output = _run_add(configs, ['--skill-name', 'aws-s3']) + assert rc == 0 + assert output.count('Installed aws-s3') == 1 + assert (tmp_path / 'shared' / 'skills' / 'aws-s3' / 'SKILL.md').exists() + + +def test_add_skill_with_client_filter(tmp_path): + (tmp_path / '.agent-a' / 'skills').mkdir(parents=True) + (tmp_path / '.agent-b' / 'skills').mkdir(parents=True) + configs = [ + make_config( + tmp_path, + id='agent-a', + display_name='Agent A', + detection_path=str(tmp_path / '.agent-a'), + ), + make_config( + tmp_path, + id='agent-b', + display_name='Agent B', + detection_path=str(tmp_path / '.agent-b'), + ), + ] + rc, output = _run_add( + configs, ['--skill-name', 'aws-s3', '--agent', 'agent-a'] + ) + assert rc == 0 + assert 'Agent A' in output + assert 'Agent B' not in output + assert (tmp_path / '.agent-a' / 'skills' / 'aws-s3' / 'SKILL.md').exists() + assert not (tmp_path / '.agent-b' / 'skills' / 'aws-s3').exists() + + +def test_add_skill_agent_filter_is_case_insensitive(tmp_path): + (tmp_path / '.agent-a' / 'skills').mkdir(parents=True) + configs = [ + make_config( + tmp_path, + id='agent-a', + display_name='Agent A', + detection_path=str(tmp_path / '.agent-a'), + ), + ] + rc, output = _run_add( + configs, ['--skill-name', 'aws-s3', '--agent', 'AGENT-A'] + ) + assert rc == 0 + assert 'Agent A' in output + assert (tmp_path / '.agent-a' / 'skills' / 'aws-s3' / 'SKILL.md').exists() + + +def test_add_skill_invalid_client(tmp_path): + configs = [make_config(tmp_path)] + with pytest.raises(ParamValidationError, match='Invalid agent'): + _run_add(configs, ['--skill-name', 'aws-s3', '--agent', 'nonexistent']) + + +def test_add_skill_no_agents(tmp_path): + configs = [make_config(tmp_path)] # dir doesn't exist + with pytest.raises( + ParamValidationError, match='No supported AI coding agents' + ): + _run_add(configs, ['--skill-name', 'aws-s3']) + + +def test_add_skill_universal_row_coexists_with_override_agent(tmp_path): + (tmp_path / '.codex').mkdir() + universal_base = tmp_path / '.agents' + shared = universal_base / 'skills' + shared.mkdir(parents=True) + configs = [ + make_config( + tmp_path, + id='codex', + display_name='Codex', + detection_path=str(tmp_path / '.codex'), + skills_path_override=str(shared), + ), + make_config( + tmp_path, + id='universal', + display_name='Universal (Codex)', + detection_path=str(universal_base), + ), + ] + rc, output = _run_add(configs, ['--skill-name', 'aws-cdk']) + assert rc == 0 + assert 'Universal (Codex)' in output + # Codex shares the skills path; the universal row owns the print line. + assert output.count('Installed aws-cdk') == 1 + assert (shared / 'aws-cdk' / 'SKILL.md').exists() + + +def test_add_skill_already_installed_message_not_duplicated(tmp_path): + (tmp_path / '.codex').mkdir() + universal_base = tmp_path / '.agents' + shared = universal_base / 'skills' + skill_dir = shared / 'aws-cdk' + skill_dir.mkdir(parents=True) + (skill_dir / 'SKILL.md').write_text('old') + (skill_dir / SKILL_METADATA_FILENAME).write_text('{"version": "v1"}') + configs = [ + make_config( + tmp_path, + id='codex', + display_name='Codex', + detection_path=str(tmp_path / '.codex'), + skills_path_override=str(shared), + ), + make_config( + tmp_path, + id='universal', + display_name='Universal (Codex)', + detection_path=str(universal_base), + ), + ] + rc, output = _run_add(configs, ['--skill-name', 'aws-cdk']) + assert rc == 0 + assert output.count('already installed') == 1 + + +def test_add_skill_into_symlinked_skills_dir(tmp_path): + # User symlinks an agent's skills dir into a shared location so every + # agent reads one source of truth. We follow the link and write into + # its target, preserving the link (shutil.rmtree would otherwise refuse + # to operate on the symlink). + shared = tmp_path / 'shared-skills' + shared.mkdir() + agent_dir = tmp_path / '.test-agent' + agent_dir.mkdir() + skills_link = agent_dir / 'skills' + skills_link.symlink_to(shared, target_is_directory=True) + + configs = [make_config(tmp_path)] + rc, output = _run_add(configs, ['--skill-name', 'aws-s3']) + assert rc == 0 + assert 'Installed aws-s3 (v1) to Test Agent' in output + # The symlink is preserved and the skill landed in its target. + assert skills_link.is_symlink() + assert (shared / 'aws-s3' / 'SKILL.md').exists() + + +def test_add_skill_already_installed_recommends_update(tmp_path): + # add-skill leaves an existing AWS-CLI install alone and points the + # user at the version-aware update-skill command rather than silently + # overwriting it. + skill_dir = tmp_path / '.test-agent' / 'skills' / 'aws-s3' + skill_dir.mkdir(parents=True) + (skill_dir / 'SKILL.md').write_text('old') + (skill_dir / SKILL_METADATA_FILENAME).write_text('{"version": "v1"}') + + configs = [make_config(tmp_path)] + rc, output = _run_add(configs, ['--skill-name', 'aws-s3']) + assert rc == 0 + assert 'aws-s3 is already installed (v1)' in output + assert 'update-skill --skill-name aws-s3' in output + assert 'Installed aws-s3' not in output + # Existing content is untouched. + assert (skill_dir / 'SKILL.md').read_text() == 'old' + + +def test_add_skill_skips_symlinked_existing_install(tmp_path): + # The per-skill dir is a symlink to a previously-installed location. + # We resolve it, see our marker, and skip (recommend update) without + # touching the link or its target. + (tmp_path / '.test-agent' / 'skills').mkdir(parents=True) + target = tmp_path / 'real-aws-s3' + target.mkdir() + (target / 'SKILL.md').write_text('old') + (target / SKILL_METADATA_FILENAME).write_text('{"version": "v1"}') + link = tmp_path / '.test-agent' / 'skills' / 'aws-s3' + link.symlink_to(target, target_is_directory=True) + + configs = [make_config(tmp_path)] + rc, output = _run_add(configs, ['--skill-name', 'aws-s3']) + assert rc == 0 + assert 'aws-s3 is already installed (v1)' in output + assert 'update-skill --skill-name aws-s3' in output + assert link.is_symlink() + assert (target / 'SKILL.md').read_text() == 'old' + + +def test_add_skill_skips_unmarked_existing_dir(tmp_path): + # User has a hand-written skill (no AWS CLI metadata marker). Install + # must skip it rather than destroy the user's content. + skill_dir = tmp_path / '.test-agent' / 'skills' / 'aws-s3' + skill_dir.mkdir(parents=True) + (skill_dir / 'SKILL.md').write_text('hand-written content') + + configs = [make_config(tmp_path)] + rc, output = _run_add(configs, ['--skill-name', 'aws-s3']) + assert rc == 0 + assert 'was not installed by the AWS CLI' in output + assert 'Installed aws-s3' not in output + assert (skill_dir / 'SKILL.md').read_text() == 'hand-written content' + # No marker written, so we did not adopt the directory. + assert not (skill_dir / SKILL_METADATA_FILENAME).exists() + + +def test_add_skill_zip_slip_rejected(tmp_path): + (tmp_path / '.test-agent' / 'skills').mkdir(parents=True) + configs = [make_config(tmp_path)] + zip_bytes = make_skill_zip({'../../../evil.txt': 'pwned'})[0] + with pytest.raises( + AgentToolkitServiceError, match='path escapes skill directory' + ): + _run_add(configs, ['--skill-name', 'aws-s3'], zip_bytes=zip_bytes) diff --git a/tests/unit/customizations/agenttoolkit/test_agents.py b/tests/unit/customizations/agenttoolkit/test_agents.py new file mode 100644 index 000000000000..9d651db36331 --- /dev/null +++ b/tests/unit/customizations/agenttoolkit/test_agents.py @@ -0,0 +1,322 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import json +import os +from unittest.mock import patch + +from awscli.customizations.agenttoolkit.agents import ( + AGENT_CONFIGS, + AgentConfig, + DetectedAgent, + McpConfigureAction, + get_detected_agents, +) +from awscli.testutils import skip_if_windows +from tests.unit.customizations.agenttoolkit.utils import ( + make_config, + make_skill, +) + + +def test_detect_when_installed(tmp_path): + (tmp_path / '.test-agent').mkdir() + config = make_config(tmp_path) + agent = config.detect() + assert isinstance(agent, DetectedAgent) + assert agent.display_name == 'Test Agent' + assert agent.base_dir == str(tmp_path / '.test-agent') + + +def test_detect_when_not_installed(tmp_path): + config = make_config(tmp_path) + assert config.detect() is None + + +def test_detect_env_override(tmp_path, monkeypatch): + (tmp_path / '.test-agent').mkdir() + override_dir = tmp_path / '.custom-location' + override_dir.mkdir() + config = make_config( + tmp_path, + detection_path_env_override='TEST_CONFIG_DIR', + ) + monkeypatch.setenv('TEST_CONFIG_DIR', str(override_dir)) + agent = config.detect() + assert agent.base_dir == str(override_dir) + + +def test_detect_env_override_falls_back(tmp_path, monkeypatch): + (tmp_path / '.test-agent').mkdir() + config = make_config( + tmp_path, + detection_path_env_override='TEST_CONFIG_DIR', + ) + monkeypatch.setenv('TEST_CONFIG_DIR', str(tmp_path / 'nonexistent')) + agent = config.detect() + assert agent.base_dir == str(tmp_path / '.test-agent') + + +def test_get_installed_skills_finds_aws_skills(tmp_path): + make_skill(tmp_path, '.test-agent', 'aws-serverless') + make_skill(tmp_path, '.test-agent', 'aws-databases') + config = make_config(tmp_path) + agent = config.detect() + skills = agent.get_installed_skills() + assert len(skills) == 2 + assert skills[0].name == 'aws-databases' + assert skills[0].agent.display_name == 'Test Agent' + assert skills[1].name == 'aws-serverless' + assert skills[1].path.endswith(os.path.join('aws-serverless', 'SKILL.md')) + + +def test_skills_path_override(tmp_path): + (tmp_path / '.test-agent').mkdir() + override_dir = tmp_path / 'shared' / 'skills' + config = make_config( + tmp_path, + skills_path_override=str(override_dir), + ) + agent = config.detect() + assert agent.skills_path == str(override_dir) + + +def test_universal_row_display_name_lists_consumers(): + from awscli.customizations.agenttoolkit.agents import AGENT_CONFIGS + + universal = next(c for c in AGENT_CONFIGS if c.id == 'universal') + assert universal.detection_path == '~/.agents' + for config in AGENT_CONFIGS: + if config.skills_path_override and config.skills_path_override.rstrip( + '/' + ).endswith('.agents/skills'): + assert config.display_name in universal.display_name + + +def test_get_installed_skills_excludes_unmarked(tmp_path): + make_skill(tmp_path, '.test-agent', 'aws-installed', with_marker=True) + make_skill(tmp_path, '.test-agent', 'hand-rolled', with_marker=False) + config = make_config(tmp_path) + skills = config.detect().get_installed_skills() + names = [s.name for s in skills] + assert names == ['aws-installed'] + + +def test_get_installed_skills_empty(tmp_path): + (tmp_path / '.test-agent' / 'skills').mkdir(parents=True) + config = make_config(tmp_path) + assert config.detect().get_installed_skills() == [] + + +def test_get_detected_agents(tmp_path): + (tmp_path / '.kiro').mkdir() + test_configs = [ + AgentConfig( + id='kiro', + display_name='Kiro', + detection_path=str(tmp_path / '.kiro'), + ), + AgentConfig( + id='cursor', + display_name='Cursor', + detection_path=str(tmp_path / '.cursor'), + ), + ] + detected = get_detected_agents(agent_configs=test_configs) + assert len(detected) == 1 + assert detected[0].display_name == 'Kiro' + + +def test_mcp_config_path_honors_detection_env_override(tmp_path, monkeypatch): + (tmp_path / '.test-agent').mkdir() + override_dir = tmp_path / '.custom-location' + override_dir.mkdir() + config = make_config( + tmp_path, + detection_path_env_override='TEST_CONFIG_DIR', + mcp_config_path='~/.test-agent.json', + ) + monkeypatch.setenv('TEST_CONFIG_DIR', str(override_dir)) + agent = config.detect() + assert agent.mcp_config_file == str(override_dir / '.test-agent.json') + + +def test_mcp_config_path_falls_back_when_env_override_dir_missing( + tmp_path, monkeypatch +): + (tmp_path / '.test-agent').mkdir() + config = make_config( + tmp_path, + detection_path_env_override='TEST_CONFIG_DIR', + mcp_config_path='~/.test-agent.json', + ) + monkeypatch.setenv('TEST_CONFIG_DIR', str(tmp_path / 'nonexistent')) + agent = config.detect() + assert agent.mcp_config_file == os.path.expanduser('~/.test-agent.json') + + +def test_mcp_config_path_falls_back_to_home_without_env_override(tmp_path): + (tmp_path / '.test-agent').mkdir() + config = make_config(tmp_path, mcp_config_path='~/.test-agent.json') + agent = config.detect() + assert agent.mcp_config_file == os.path.expanduser('~/.test-agent.json') + + +def test_configure_mcp_new_file(tmp_path): + (tmp_path / '.test-agent').mkdir() + agent = make_config(tmp_path, mcp_config_path='mcp.json').detect() + action, path = agent.configure_mcp_server() + assert action is McpConfigureAction.CONFIGURED + data = json.loads(open(path).read()) + assert data['mcpServers']['aws-mcp']['command'] == 'uvx' + assert 'mcp-proxy-for-aws@latest' in data['mcpServers']['aws-mcp']['args'] + + +def test_configure_mcp_already_configured(tmp_path): + (tmp_path / '.test-agent').mkdir() + agent = make_config(tmp_path, mcp_config_path='mcp.json').detect() + mcp_path = tmp_path / '.test-agent' / 'mcp.json' + mcp_path.write_text( + json.dumps({'mcpServers': {'aws-mcp': {'command': 'custom'}}}) + ) + action, _ = agent.configure_mcp_server() + assert action is McpConfigureAction.ALREADY_CONFIGURED + data = json.loads(mcp_path.read_text()) + assert data['mcpServers']['aws-mcp']['command'] == 'custom' + + +def test_configure_mcp_preserves_other_servers(tmp_path): + (tmp_path / '.test-agent').mkdir() + agent = make_config(tmp_path, mcp_config_path='mcp.json').detect() + mcp_path = tmp_path / '.test-agent' / 'mcp.json' + mcp_path.write_text( + json.dumps({'mcpServers': {'other': {'command': 'foo'}}}) + ) + agent.configure_mcp_server() + data = json.loads(mcp_path.read_text()) + assert data['mcpServers']['other']['command'] == 'foo' + assert 'aws-mcp' in data['mcpServers'] + + +def test_configure_mcp_extra_config_merged(tmp_path): + (tmp_path / '.test-agent').mkdir() + agent = make_config( + tmp_path, + mcp_config_path='mcp.json', + mcp_extra_config={'timeout': 100000}, + ).detect() + agent.configure_mcp_server() + mcp_path = tmp_path / '.test-agent' / 'mcp.json' + data = json.loads(mcp_path.read_text()) + entry = data['mcpServers']['aws-mcp'] + assert entry['timeout'] == 100000 + assert entry['command'] == 'uvx' + + +def test_configure_mcp_server_entry_overrides_default(tmp_path): + (tmp_path / '.test-agent').mkdir() + custom_entry = { + 'type': 'local', + 'command': ['uvx', 'something@latest'], + } + agent = make_config( + tmp_path, + mcp_config_path='mcp.json', + mcp_servers_key='mcp', + mcp_server_entry=custom_entry, + ).detect() + agent.configure_mcp_server() + mcp_path = tmp_path / '.test-agent' / 'mcp.json' + data = json.loads(mcp_path.read_text()) + entry = data['mcp']['aws-mcp'] + assert entry == custom_entry + assert 'args' not in entry + + +def test_configure_mcp_shell_command_runs_when_executable_present(tmp_path): + (tmp_path / '.test-agent').mkdir() + config = make_config( + tmp_path, + mcp_shell_command=['some-cli', 'mcp', 'add', 'aws-mcp'], + ) + agent = config.detect() + with ( + patch( + 'awscli.customizations.agenttoolkit.agents.shutil.which', + return_value='/usr/local/bin/some-cli', + ), + patch( + 'awscli.customizations.agenttoolkit.agents.subprocess.run' + ) as run_mock, + ): + action, detail = agent.configure_mcp_server() + assert action is McpConfigureAction.CONFIGURED + assert detail == 'some-cli' + run_mock.assert_called_once_with( + ['some-cli', 'mcp', 'add', 'aws-mcp'], check=True + ) + + +def test_configure_mcp_shell_command_skipped_when_executable_missing(tmp_path): + (tmp_path / '.test-agent').mkdir() + config = make_config( + tmp_path, + mcp_shell_command=['missing-cli', 'mcp', 'add', 'aws-mcp'], + ) + agent = config.detect() + with ( + patch( + 'awscli.customizations.agenttoolkit.agents.shutil.which', + return_value=None, + ), + patch( + 'awscli.customizations.agenttoolkit.agents.subprocess.run' + ) as run_mock, + ): + action, detail = agent.configure_mcp_server() + assert action is McpConfigureAction.SKIPPED + assert detail == 'missing-cli' + run_mock.assert_not_called() + + +def test_configure_mcp_creates_parent_directories(tmp_path): + (tmp_path / '.test-agent').mkdir() + agent = make_config( + tmp_path, mcp_config_path='nested/dir/mcp.json' + ).detect() + agent.configure_mcp_server() + assert (tmp_path / '.test-agent' / 'nested' / 'dir' / 'mcp.json').exists() + + +@skip_if_windows("POSIX file permissions are not enforced on Windows.") +def test_configure_mcp_new_file_gets_0600_permissions(tmp_path): + (tmp_path / '.test-agent').mkdir() + agent = make_config(tmp_path, mcp_config_path='mcp.json').detect() + agent.configure_mcp_server() + mcp_path = tmp_path / '.test-agent' / 'mcp.json' + assert oct(mcp_path.stat().st_mode & 0o777) == oct(0o600) + + +@skip_if_windows("POSIX file permissions are not enforced on Windows.") +def test_configure_mcp_preserves_existing_permissions(tmp_path): + (tmp_path / '.test-agent').mkdir() + mcp_path = tmp_path / '.test-agent' / 'mcp.json' + mcp_path.write_text(json.dumps({'mcpServers': {}})) + os.chmod(mcp_path, 0o644) + agent = make_config(tmp_path, mcp_config_path='mcp.json').detect() + agent.configure_mcp_server() + assert oct(mcp_path.stat().st_mode & 0o777) == oct(0o644) + + +def test_agent_configs_sorted_alphabetically(): + ids = [c.id for c in AGENT_CONFIGS if c.id != 'universal'] + assert ids == sorted(ids) diff --git a/tests/unit/customizations/agenttoolkit/test_configure.py b/tests/unit/customizations/agenttoolkit/test_configure.py new file mode 100644 index 000000000000..9af50c532c33 --- /dev/null +++ b/tests/unit/customizations/agenttoolkit/test_configure.py @@ -0,0 +1,231 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import json +from io import StringIO +from unittest.mock import MagicMock, patch + +import pytest + +from awscli.customizations.agenttoolkit.agents import AgentConfig +from awscli.customizations.agenttoolkit.configure import ( + ConfigureAgentToolkitCommand, +) +from awscli.customizations.exceptions import ConfigurationError +from tests.unit.customizations.agenttoolkit.utils import ( + make_config, + make_session, + make_skill_zip, +) + + +def _make_agent_configs(tmp_path, count=2): + configs = [] + for i in range(count): + agent_dir = tmp_path / f'.agent-{i}' + agent_dir.mkdir() + configs.append( + make_config( + tmp_path, + id=f'agent-{i}', + display_name=f'Agent {i}', + detection_path=str(agent_dir), + mcp_config_path='mcp.json', + ) + ) + return configs + + +def _make_client(skills=None): + """Create a mock client that returns the given default skills.""" + if skills is None: + skills = [] + client = MagicMock() + paginator = MagicMock() + paginator.paginate.return_value = [{'skills': skills}] + client.get_paginator.return_value = paginator + return client + + +def _run(agent_configs, yes_no_return=True, client=None): + stream = StringIO() + session = make_session() + if client is None: + client = _make_client() + cmd = ConfigureAgentToolkitCommand( + session, stream=stream, agent_configs=agent_configs, client=client + ) + with ( + patch( + 'awscli.customizations.agenttoolkit.configure.multiselect_choice', + side_effect=lambda msg, items, **kw: items, + ), + patch( + 'awscli.customizations.agenttoolkit.configure.yes_no_choice', + return_value=yes_no_return, + ), + ): + rc = cmd._run_main(None, None) + return rc, stream + + +def test_no_agents_detected_raises_error(tmp_path): + configs = [ + AgentConfig( + id='missing', + display_name='Missing', + detection_path=str(tmp_path / 'nonexistent'), + ) + ] + with pytest.raises(ConfigurationError): + _run(configs) + + +def test_detection_output(tmp_path): + configs = _make_agent_configs(tmp_path, count=1) + configs.append( + AgentConfig( + id='missing', + display_name='Missing Agent', + detection_path=str(tmp_path / 'nope'), + ) + ) + _, stream = _run(configs) + output = stream.getvalue() + assert '\u2713 Agent 0' in output + assert '\u2717 Missing Agent' in output + assert '(not found)' in output + + +def test_mcp_configured_on_yes(tmp_path): + configs = _make_agent_configs(tmp_path, count=1) + _run(configs, yes_no_return=True) + mcp_path = tmp_path / '.agent-0' / 'mcp.json' + assert mcp_path.exists() + data = json.loads(mcp_path.read_text()) + assert 'aws-mcp' in data['mcpServers'] + assert data['mcpServers']['aws-mcp']['command'] == 'uvx' + + +def test_mcp_skipped_on_no(tmp_path): + configs = _make_agent_configs(tmp_path, count=1) + _run(configs, yes_no_return=False) + mcp_path = tmp_path / '.agent-0' / 'mcp.json' + assert not mcp_path.exists() + + +def test_mcp_already_configured_not_overwritten(tmp_path): + configs = _make_agent_configs(tmp_path, count=1) + mcp_path = tmp_path / '.agent-0' / 'mcp.json' + mcp_path.write_text( + json.dumps( + {'mcpServers': {'aws-mcp': {'command': 'custom', 'args': []}}} + ) + ) + _, stream = _run(configs, yes_no_return=True) + data = json.loads(mcp_path.read_text()) + assert data['mcpServers']['aws-mcp']['command'] == 'custom' + assert 'already configured' in stream.getvalue() + + +def test_default_skills_installed(tmp_path): + configs = _make_agent_configs(tmp_path, count=1) + zip_bytes, checksum = make_skill_zip() + client = _make_client(skills=[{'name': 'aws-serverless'}]) + with patch( + 'awscli.customizations.agenttoolkit.configure.get_skill_download', + return_value=(zip_bytes, checksum, 'v1'), + ): + _, stream = _run(configs, yes_no_return=True, client=client) + skill_path = ( + tmp_path / '.agent-0' / 'skills' / 'aws-serverless' / 'SKILL.md' + ) + assert skill_path.exists() + assert '[1/1] aws-serverless' in stream.getvalue() + + +def test_default_skills_skipped_on_no(tmp_path): + configs = _make_agent_configs(tmp_path, count=1) + client = _make_client(skills=[{'name': 'aws-serverless'}]) + _run(configs, yes_no_return=False, client=client) + skill_path = tmp_path / '.agent-0' / 'skills' / 'aws-serverless' + assert not skill_path.exists() + + +def test_wizard_hides_universal_row_from_detection(tmp_path): + universal_dir = tmp_path / '.agents' / 'skills' + universal_dir.mkdir(parents=True) + real_dir = tmp_path / '.codex' + real_dir.mkdir() + configs = [ + AgentConfig( + id='codex', + display_name='Codex', + detection_path=str(real_dir), + skills_path_override=str(universal_dir), + mcp_config_path='mcp.json', + ), + AgentConfig( + id='universal', + display_name='Universal (Codex)', + detection_path=str(tmp_path / '.agents'), + ), + ] + _, stream = _run(configs) + output = stream.getvalue() + assert '✓ Codex' in output + assert 'Universal' not in output + + +def test_wizard_credits_universal_row_for_shared_path_install(tmp_path): + universal_dir = tmp_path / '.agents' / 'skills' + universal_dir.mkdir(parents=True) + real_dir = tmp_path / '.codex' + real_dir.mkdir() + configs = [ + AgentConfig( + id='codex', + display_name='Codex', + detection_path=str(real_dir), + skills_path_override=str(universal_dir), + mcp_config_path='mcp.json', + ), + AgentConfig( + id='universal', + display_name='Universal (Codex)', + detection_path=str(tmp_path / '.agents'), + ), + ] + zip_bytes, checksum = make_skill_zip() + client = _make_client(skills=[{'name': 'aws-cdk'}]) + with patch( + 'awscli.customizations.agenttoolkit.configure.get_skill_download', + return_value=(zip_bytes, checksum, 'v1'), + ): + _, stream = _run(configs, yes_no_return=True, client=client) + output = stream.getvalue() + assert 'Universal (Codex)' in output + assert (universal_dir / 'aws-cdk' / 'SKILL.md').exists() + + +def test_skill_checksum_failure_reported(tmp_path): + configs = _make_agent_configs(tmp_path, count=1) + zip_bytes, _ = make_skill_zip() + client = _make_client(skills=[{'name': 'aws-bad'}]) + with patch( + 'awscli.customizations.agenttoolkit.configure.get_skill_download', + return_value=(zip_bytes, 'bad' * 21 + 'x', 'v1'), + ): + _, stream = _run(configs, yes_no_return=True, client=client) + assert '[1/1] aws-bad' in stream.getvalue() + skill_path = tmp_path / '.agent-0' / 'skills' / 'aws-bad' + assert not skill_path.exists() diff --git a/tests/unit/customizations/agenttoolkit/test_list_installed_skills.py b/tests/unit/customizations/agenttoolkit/test_list_installed_skills.py new file mode 100644 index 000000000000..7b82a93f89db --- /dev/null +++ b/tests/unit/customizations/agenttoolkit/test_list_installed_skills.py @@ -0,0 +1,175 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import json +from io import StringIO + +import pytest + +from awscli.customizations.agenttoolkit.list_installed_skills import ( + ListInstalledSkillsCommand, +) +from awscli.customizations.exceptions import ParamValidationError +from tests.unit.customizations.agenttoolkit.utils import ( + make_config, + make_parsed_globals, + make_session, + make_skill, +) + + +def _run_installed(monkeypatch, agent_configs, args=None): + stream = StringIO() + monkeypatch.setattr('sys.stdout', stream) + cmd = ListInstalledSkillsCommand( + make_session(), agent_configs=agent_configs + ) + cmd(args=args or [], parsed_globals=make_parsed_globals()) + return json.loads(stream.getvalue()) + + +def test_list_installed_no_agents(monkeypatch): + result = _run_installed(monkeypatch, []) + assert result['skills'] == [] + + +def test_list_installed_no_skills(tmp_path, monkeypatch): + (tmp_path / '.test-agent' / 'skills').mkdir(parents=True) + configs = [make_config(tmp_path)] + result = _run_installed(monkeypatch, configs) + assert result['skills'] == [] + + +def test_list_installed_shows_skills(tmp_path, monkeypatch): + make_skill(tmp_path, '.test-agent', 'aws-serverless') + make_skill(tmp_path, '.test-agent', 'aws-databases') + configs = [make_config(tmp_path)] + result = _run_installed(monkeypatch, configs) + skills = result['skills'] + assert len(skills) == 2 + assert skills[0]['agent'] == 'Test Agent' + assert skills[0]['name'] == 'aws-databases' + assert skills[1]['name'] == 'aws-serverless' + + +def test_list_installed_multiple_agents(tmp_path, monkeypatch): + make_skill(tmp_path, '.agent-a', 'aws-serverless') + make_skill(tmp_path, '.agent-b', 'aws-serverless') + configs = [ + make_config( + tmp_path, + id='a', + display_name='Agent A', + detection_path=str(tmp_path / '.agent-a'), + ), + make_config( + tmp_path, + id='b', + display_name='Agent B', + detection_path=str(tmp_path / '.agent-b'), + ), + ] + result = _run_installed(monkeypatch, configs) + clients = [s['agent'] for s in result['skills']] + assert 'Agent A' in clients + assert 'Agent B' in clients + + +def test_list_installed_with_client_filter(tmp_path, monkeypatch): + make_skill(tmp_path, '.agent-a', 'aws-serverless') + make_skill(tmp_path, '.agent-b', 'aws-serverless') + configs = [ + make_config( + tmp_path, + id='agent-a', + display_name='Agent A', + detection_path=str(tmp_path / '.agent-a'), + ), + make_config( + tmp_path, + id='agent-b', + display_name='Agent B', + detection_path=str(tmp_path / '.agent-b'), + ), + ] + result = _run_installed(monkeypatch, configs, args=['--agent', 'agent-a']) + clients = [s['agent'] for s in result['skills']] + assert clients == ['Agent A'] + + +def test_list_installed_invalid_agent(tmp_path, monkeypatch): + configs = [make_config(tmp_path)] + with pytest.raises(ParamValidationError, match='Invalid agent'): + _run_installed(monkeypatch, configs, args=['--agent', 'nonexistent']) + + +def test_list_installed_universal_row_only_detected(tmp_path, monkeypatch): + universal_base = tmp_path / '.agents' + shared = universal_base / 'skills' + skill_dir = shared / 'aws-cdk' + skill_dir.mkdir(parents=True) + (skill_dir / 'SKILL.md').write_text('test') + (skill_dir / '.aws-skill-metadata').write_text( + json.dumps({'version': 'v1'}) + ) + configs = [ + make_config( + tmp_path, + id='codex', + display_name='Codex', + detection_path=str(tmp_path / '.codex'), + skills_path_override=str(shared), + ), + make_config( + tmp_path, + id='universal', + display_name='Universal (Codex)', + detection_path=str(universal_base), + ), + ] + result = _run_installed(monkeypatch, configs) + skills = result['skills'] + assert len(skills) == 1 + assert skills[0]['agent'] == 'Universal (Codex)' + + +def test_list_installed_universal_row_lists_alongside_override_agent( + tmp_path, monkeypatch +): + (tmp_path / '.codex').mkdir() + universal_base = tmp_path / '.agents' + shared = universal_base / 'skills' + skill_dir = shared / 'aws-cdk' + skill_dir.mkdir(parents=True) + (skill_dir / 'SKILL.md').write_text('test') + (skill_dir / '.aws-skill-metadata').write_text( + json.dumps({'version': 'v1'}) + ) + configs = [ + make_config( + tmp_path, + id='codex', + display_name='Codex', + detection_path=str(tmp_path / '.codex'), + skills_path_override=str(shared), + ), + make_config( + tmp_path, + id='universal', + display_name='Universal (Codex)', + detection_path=str(universal_base), + ), + ] + result = _run_installed(monkeypatch, configs) + skills = result['skills'] + assert len(skills) == 1 + assert skills[0]['agent'] == 'Universal (Codex)' diff --git a/tests/unit/customizations/agenttoolkit/test_remove_skill.py b/tests/unit/customizations/agenttoolkit/test_remove_skill.py new file mode 100644 index 000000000000..bacfd2e4f5e9 --- /dev/null +++ b/tests/unit/customizations/agenttoolkit/test_remove_skill.py @@ -0,0 +1,188 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import json +from io import StringIO +from unittest.mock import Mock + +import pytest + +from awscli.customizations.agenttoolkit.agents import SKILL_METADATA_FILENAME +from awscli.customizations.agenttoolkit.remove_skill import RemoveCommand +from awscli.customizations.exceptions import ParamValidationError +from tests.unit.customizations.agenttoolkit.utils import ( + make_config, + make_skill, +) + + +def _run_remove(agent_configs, args): + stream = StringIO() + session = Mock() + session.user_agent_extra = '' + session.emit_first_non_none_response.return_value = None + cmd = RemoveCommand(session, stream=stream, agent_configs=agent_configs) + rc = cmd(args=args, parsed_globals=Mock()) + return rc, stream.getvalue() + + +def test_remove_skill_not_installed(tmp_path): + (tmp_path / '.test-agent' / 'skills').mkdir(parents=True) + configs = [make_config(tmp_path)] + with pytest.raises(ParamValidationError, match='not installed'): + _run_remove(configs, ['--skill-name', 'aws-foo']) + + +def test_remove_skill_success(tmp_path): + make_skill(tmp_path, '.test-agent', 'aws-serverless') + configs = [make_config(tmp_path)] + rc, output = _run_remove(configs, ['--skill-name', 'aws-serverless']) + assert rc == 0 + assert 'Removed aws-serverless from Test Agent' in output + assert not ( + tmp_path / '.test-agent' / 'skills' / 'aws-serverless' + ).exists() + + +def test_remove_from_multiple_agents(tmp_path): + make_skill(tmp_path, '.agent-a', 'aws-serverless') + make_skill(tmp_path, '.agent-b', 'aws-serverless') + configs = [ + make_config( + tmp_path, + id='agent-a', + display_name='Agent A', + detection_path=str(tmp_path / '.agent-a'), + ), + make_config( + tmp_path, + id='agent-b', + display_name='Agent B', + detection_path=str(tmp_path / '.agent-b'), + ), + ] + rc, output = _run_remove(configs, ['--skill-name', 'aws-serverless']) + assert rc == 0 + assert 'Agent A' in output + assert 'Agent B' in output + assert not (tmp_path / '.agent-a' / 'skills' / 'aws-serverless').exists() + assert not (tmp_path / '.agent-b' / 'skills' / 'aws-serverless').exists() + + +def test_remove_with_client_filter(tmp_path): + make_skill(tmp_path, '.agent-a', 'aws-serverless') + make_skill(tmp_path, '.agent-b', 'aws-serverless') + configs = [ + make_config( + tmp_path, + id='agent-a', + display_name='Agent A', + detection_path=str(tmp_path / '.agent-a'), + ), + make_config( + tmp_path, + id='agent-b', + display_name='Agent B', + detection_path=str(tmp_path / '.agent-b'), + ), + ] + rc, output = _run_remove( + configs, + ['--skill-name', 'aws-serverless', '--agent', 'agent-a'], + ) + assert rc == 0 + assert 'Agent A' in output + assert 'Agent B' not in output + assert not (tmp_path / '.agent-a' / 'skills' / 'aws-serverless').exists() + assert (tmp_path / '.agent-b' / 'skills' / 'aws-serverless').exists() + + +def test_remove_skill_dedupes_shared_skills_path(tmp_path): + (tmp_path / '.agent-a').mkdir() + (tmp_path / '.agent-b').mkdir() + shared = tmp_path / 'shared' / 'skills' + skill_dir = shared / 'aws-s3' + skill_dir.mkdir(parents=True) + (skill_dir / 'SKILL.md').write_text('test') + (skill_dir / SKILL_METADATA_FILENAME).write_text( + json.dumps({'version': 'v1'}) + ) + configs = [ + make_config( + tmp_path, + id='a', + display_name='Agent A', + detection_path=str(tmp_path / '.agent-a'), + skills_path_override=str(shared), + ), + make_config( + tmp_path, + id='b', + display_name='Agent B', + detection_path=str(tmp_path / '.agent-b'), + skills_path_override=str(shared), + ), + ] + rc, output = _run_remove(configs, ['--skill-name', 'aws-s3']) + assert rc == 0 + assert output.count('Removed aws-s3') == 1 + assert not (shared / 'aws-s3').exists() + + +def test_remove_skill_universal_row_coexists_with_override_agent(tmp_path): + (tmp_path / '.codex').mkdir() + universal_base = tmp_path / '.agents' + shared = universal_base / 'skills' + skill_dir = shared / 'aws-cdk' + skill_dir.mkdir(parents=True) + (skill_dir / 'SKILL.md').write_text('test') + (skill_dir / SKILL_METADATA_FILENAME).write_text( + json.dumps({'version': 'v1'}) + ) + configs = [ + make_config( + tmp_path, + id='codex', + display_name='Codex', + detection_path=str(tmp_path / '.codex'), + skills_path_override=str(shared), + ), + make_config( + tmp_path, + id='universal', + display_name='Universal (Codex)', + detection_path=str(universal_base), + ), + ] + rc, output = _run_remove(configs, ['--skill-name', 'aws-cdk']) + assert rc == 0 + assert 'Removed aws-cdk from Universal (Codex)' in output + # Codex shares the skills path; the universal row owns the print line. + assert output.count('Removed aws-cdk') == 1 + assert not (shared / 'aws-cdk').exists() + + +def test_remove_skill_without_marker_refused(tmp_path): + make_skill(tmp_path, '.test-agent', 'hand-rolled', with_marker=False) + configs = [make_config(tmp_path)] + with pytest.raises(ParamValidationError, match='not installed'): + _run_remove(configs, ['--skill-name', 'hand-rolled']) + assert (tmp_path / '.test-agent' / 'skills' / 'hand-rolled').exists() + + +def test_remove_invalid_client_rejected(tmp_path): + configs = [make_config(tmp_path)] + with pytest.raises(ParamValidationError, match='Invalid agent'): + _run_remove( + configs, + ['--skill-name', 'aws-serverless', '--agent', 'nonexistent'], + ) diff --git a/tests/unit/customizations/agenttoolkit/test_update_skill.py b/tests/unit/customizations/agenttoolkit/test_update_skill.py new file mode 100644 index 000000000000..fbdc1ca1fec8 --- /dev/null +++ b/tests/unit/customizations/agenttoolkit/test_update_skill.py @@ -0,0 +1,194 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import hashlib +import json +from io import StringIO +from unittest.mock import Mock, patch + +import pytest + +from awscli.customizations.agenttoolkit.agents import ( + SKILL_METADATA_FILENAME, +) +from awscli.customizations.agenttoolkit.update_skill import UpdateSkillCommand +from awscli.customizations.exceptions import ParamValidationError +from tests.unit.customizations.agenttoolkit.utils import ( + make_config, + make_session, + make_skill_zip, +) + + +def _install_skill_at_version(tmp_path, agent_dir, skill_name, version): + skill_dir = tmp_path / agent_dir / 'skills' / skill_name + skill_dir.mkdir(parents=True, exist_ok=True) + (skill_dir / 'SKILL.md').write_text(f'name: {skill_name}\n') + (skill_dir / SKILL_METADATA_FILENAME).write_text( + json.dumps({'version': version}) + ) + + +def _run_update(agent_configs, args, remote_version='v2', zip_bytes=None): + if zip_bytes is not None: + checksum = hashlib.sha256(zip_bytes).hexdigest() + else: + zip_bytes, checksum = make_skill_zip({'SKILL.md': 'test'}) + + mock_client = Mock() + mock_client.meta.endpoint_url = 'https://example.com' + + stream = StringIO() + session = make_session() + + with ( + patch( + 'awscli.customizations.agenttoolkit.update_skill.resolve_latest_version', + return_value=remote_version, + ), + patch( + 'awscli.customizations.agenttoolkit.update_skill.get_skill_download', + return_value=(zip_bytes, checksum, remote_version), + ), + patch( + 'awscli.customizations.agenttoolkit.update_skill.create_client', + return_value=mock_client, + ), + ): + cmd = UpdateSkillCommand( + session, stream=stream, agent_configs=agent_configs + ) + rc = cmd(args=args, parsed_globals=Mock()) + return rc, stream.getvalue() + + +def test_update_skill_outdated(tmp_path): + _install_skill_at_version(tmp_path, '.test-agent', 'aws-s3', 'v1') + configs = [make_config(tmp_path)] + rc, output = _run_update( + configs, ['--skill-name', 'aws-s3'], remote_version='v2' + ) + assert rc == 0 + assert 'Updated aws-s3 (v2)' in output + marker = ( + tmp_path + / '.test-agent' + / 'skills' + / 'aws-s3' + / SKILL_METADATA_FILENAME + ) + assert json.loads(marker.read_text()) == {'version': 'v2'} + + +def test_update_skill_already_up_to_date(tmp_path): + _install_skill_at_version(tmp_path, '.test-agent', 'aws-s3', 'v1') + configs = [make_config(tmp_path)] + rc, output = _run_update( + configs, ['--skill-name', 'aws-s3'], remote_version='v1' + ) + assert rc == 0 + assert 'already up to date' in output + + +def test_update_skill_not_installed(tmp_path): + (tmp_path / '.test-agent' / 'skills').mkdir(parents=True) + configs = [make_config(tmp_path)] + with pytest.raises(ParamValidationError, match='not installed'): + _run_update(configs, ['--skill-name', 'aws-s3']) + + +def test_update_skill_only_outdated_agents_updated(tmp_path): + _install_skill_at_version(tmp_path, '.agent-a', 'aws-s3', 'v1') + _install_skill_at_version(tmp_path, '.agent-b', 'aws-s3', 'v2') + configs = [ + make_config( + tmp_path, + id='agent-a', + display_name='Agent A', + detection_path=str(tmp_path / '.agent-a'), + ), + make_config( + tmp_path, + id='agent-b', + display_name='Agent B', + detection_path=str(tmp_path / '.agent-b'), + ), + ] + rc, output = _run_update( + configs, ['--skill-name', 'aws-s3'], remote_version='v2' + ) + assert rc == 0 + assert 'Updated aws-s3 (v2) to Agent A' in output + assert 'Agent B' not in output + + +def test_update_skill_missing_marker_skipped(tmp_path): + skill_dir = tmp_path / '.test-agent' / 'skills' / 'aws-s3' + skill_dir.mkdir(parents=True) + (skill_dir / 'SKILL.md').write_text('test') + configs = [make_config(tmp_path)] + with pytest.raises(ParamValidationError, match='not installed'): + _run_update(configs, ['--skill-name', 'aws-s3'], remote_version='v2') + + +def test_update_skill_through_symlinked_dir(tmp_path): + # A user symlinks the per-skill dir into a shared location. update-skill + # must follow the link and overwrite the target in place (shutil.rmtree + # refuses to operate on the symlink itself), leaving the link intact. + (tmp_path / '.test-agent' / 'skills').mkdir(parents=True) + target = tmp_path / 'shared' / 'aws-s3' + target.mkdir(parents=True) + (target / 'SKILL.md').write_text('old') + (target / 'old.md').write_text('removed in v2') + (target / SKILL_METADATA_FILENAME).write_text( + json.dumps({'version': 'v1'}) + ) + link = tmp_path / '.test-agent' / 'skills' / 'aws-s3' + link.symlink_to(target, target_is_directory=True) + + configs = [make_config(tmp_path)] + new_zip = make_skill_zip({'SKILL.md': 'new'})[0] + rc, output = _run_update( + configs, + ['--skill-name', 'aws-s3'], + remote_version='v2', + zip_bytes=new_zip, + ) + assert rc == 0 + assert 'Updated aws-s3 (v2)' in output + assert link.is_symlink() + assert (target / 'SKILL.md').read_text() == 'new' + assert not (target / 'old.md').exists() + assert json.loads((target / SKILL_METADATA_FILENAME).read_text()) == { + 'version': 'v2' + } + + +def test_update_skill_removes_orphaned_files(tmp_path): + skill_dir = tmp_path / '.test-agent' / 'skills' / 'aws-s3' + skill_dir.mkdir(parents=True) + (skill_dir / 'SKILL.md').write_text('old') + (skill_dir / 'old.md').write_text('removed in v2') + (skill_dir / SKILL_METADATA_FILENAME).write_text( + json.dumps({'version': 'v1'}) + ) + configs = [make_config(tmp_path)] + new_zip = make_skill_zip({'SKILL.md': 'new'})[0] + rc, _ = _run_update( + configs, + ['--skill-name', 'aws-s3'], + remote_version='v2', + zip_bytes=new_zip, + ) + assert rc == 0 + assert (skill_dir / 'SKILL.md').read_text() == 'new' + assert not (skill_dir / 'old.md').exists() diff --git a/tests/unit/customizations/agenttoolkit/utils.py b/tests/unit/customizations/agenttoolkit/utils.py new file mode 100644 index 000000000000..487484008ffc --- /dev/null +++ b/tests/unit/customizations/agenttoolkit/utils.py @@ -0,0 +1,72 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import hashlib +import io +import json +import zipfile +from unittest.mock import Mock + +from awscli.customizations.agenttoolkit.agents import ( + SKILL_METADATA_FILENAME, + AgentConfig, +) + + +def make_parsed_globals(output='json'): + pg = Mock() + pg.output = output + pg.query = None + pg.color = 'off' + pg.no_paginate = False + return pg + + +def make_session(): + session = Mock() + session.user_agent_extra = '' + session.get_config_variable.return_value = 'json' + session.emit_first_non_none_response.return_value = None + return session + + +def make_skill_zip(files=None): + """Create a skill zip and returns (bytes, checksum).""" + if files is None: + files = {'SKILL.md': '# Test Skill\n'} + buf = io.BytesIO() + with zipfile.ZipFile(buf, 'w') as zf: + for name, content in files.items(): + zf.writestr(name, content) + zip_bytes = buf.getvalue() + checksum = hashlib.sha256(zip_bytes).hexdigest() + return zip_bytes, checksum + + +def make_skill(tmp_path, agent_name, skill_name, with_marker=True): + skill_dir = tmp_path / agent_name / 'skills' / skill_name + skill_dir.mkdir(parents=True) + (skill_dir / 'SKILL.md').write_text('test') + if with_marker: + (skill_dir / SKILL_METADATA_FILENAME).write_text( + json.dumps({'version': 'v1'}) + ) + + +def make_config(tmp_path, **overrides): + defaults = { + 'id': 'test-agent', + 'display_name': 'Test Agent', + 'detection_path': str(tmp_path / '.test-agent'), + } + defaults.update(overrides) + return AgentConfig(**defaults) diff --git a/tests/unit/customizations/test_multiselect.py b/tests/unit/customizations/test_multiselect.py new file mode 100644 index 000000000000..3d866d3515c8 --- /dev/null +++ b/tests/unit/customizations/test_multiselect.py @@ -0,0 +1,99 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import pytest +from prompt_toolkit.input import create_pipe_input +from prompt_toolkit.output import DummyOutput + +from awscli.customizations.prompts import multiselect_choice + +# ANSI escape sequences for simulating input +UP = '\x1b[A' +DOWN = '\x1b[B' +SPACE = ' ' +ENTER = '\r' +CTRL_C = '\x03' + + +@pytest.fixture +def pipe_input(): + with create_pipe_input() as inp: + yield inp + + +def _run(pipe_input, items, **kwargs): + return multiselect_choice( + '', items, pt_input=pipe_input, pt_output=DummyOutput(), **kwargs + ) + + +def test_enter_returns_all_preselected_by_default(pipe_input): + pipe_input.send_text(ENTER) + assert _run(pipe_input, ['a', 'b', 'c']) == ['a', 'b', 'c'] + + +def test_space_deselects_current_item(pipe_input): + pipe_input.send_text(SPACE + ENTER) + assert _run(pipe_input, ['a', 'b', 'c']) == ['b', 'c'] + + +def test_navigate_down_and_deselect(pipe_input): + pipe_input.send_text(DOWN + SPACE + ENTER) + assert _run(pipe_input, ['a', 'b', 'c']) == ['a', 'c'] + + +def test_navigate_up_wraps_around(pipe_input): + pipe_input.send_text(UP + SPACE + ENTER) + assert _run(pipe_input, ['a', 'b', 'c']) == ['a', 'b'] + + +def test_toggle_on_and_off(pipe_input): + pipe_input.send_text(SPACE + SPACE + ENTER) + assert _run(pipe_input, ['a', 'b', 'c']) == ['a', 'b', 'c'] + + +def test_deselect_all(pipe_input): + pipe_input.send_text(SPACE + DOWN + SPACE + DOWN + SPACE + ENTER) + assert _run(pipe_input, ['a', 'b', 'c']) == [] + + +def test_preselected_none_starts_all_selected(pipe_input): + pipe_input.send_text(ENTER) + assert _run(pipe_input, ['x', 'y'], preselected=None) == ['x', 'y'] + + +def test_preselected_subset(pipe_input): + pipe_input.send_text(ENTER) + assert _run(pipe_input, ['a', 'b', 'c'], preselected={1}) == ['b'] + + +def test_preselected_empty(pipe_input): + pipe_input.send_text(ENTER) + assert _run(pipe_input, ['a', 'b', 'c'], preselected=set()) == [] + + +def test_display_format_does_not_affect_return_value(pipe_input): + pipe_input.send_text(ENTER) + assert _run( + pipe_input, [1, 2, 3], display_format=lambda x: f'item-{x}' + ) == [1, 2, 3] + + +def test_single_item(pipe_input): + pipe_input.send_text(ENTER) + assert _run(pipe_input, ['only']) == ['only'] + + +def test_ctrl_c_raises_keyboard_interrupt(pipe_input): + pipe_input.send_text(CTRL_C) + with pytest.raises(KeyboardInterrupt): + _run(pipe_input, ['a', 'b']) From f1d59c3cb7adc85c19eff205f28377b9308d719f Mon Sep 17 00:00:00 2001 From: aws-sdk-python-automation Date: Tue, 9 Jun 2026 16:03:49 +0000 Subject: [PATCH 09/18] Bump version to 2.35.0 --- .changes/2.35.0.json | 7 +++++++ .changes/next-release/feature-configure-32033.json | 5 ----- CHANGELOG.rst | 6 ++++++ awscli/__init__.py | 2 +- configure | 14 +++++++------- configure.ac | 2 +- doc/source/conf.py | 2 +- 7 files changed, 23 insertions(+), 15 deletions(-) create mode 100644 .changes/2.35.0.json delete mode 100644 .changes/next-release/feature-configure-32033.json diff --git a/.changes/2.35.0.json b/.changes/2.35.0.json new file mode 100644 index 000000000000..d07d782ddbf6 --- /dev/null +++ b/.changes/2.35.0.json @@ -0,0 +1,7 @@ +[ + { + "category": "``configure``", + "description": "Adds the ``agent-toolkit`` and ``aws configure agent-toolkit`` commands, which can be used for configuring your agentic tools with AWS skills and MCP server.", + "type": "feature" + } +] \ No newline at end of file diff --git a/.changes/next-release/feature-configure-32033.json b/.changes/next-release/feature-configure-32033.json deleted file mode 100644 index 39cc7f040243..000000000000 --- a/.changes/next-release/feature-configure-32033.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "feature", - "category": "``configure``", - "description": "Adds the ``agent-toolkit`` and ``aws configure agent-toolkit`` commands, which can be used for configuring your agentic tools with AWS skills and MCP server." -} diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 9e73070431b1..f606902f7a7a 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -2,6 +2,12 @@ CHANGELOG ========= +2.35.0 +====== + +* feature:``configure``: Adds the ``agent-toolkit`` and ``aws configure agent-toolkit`` commands, which can be used for configuring your agentic tools with AWS skills and MCP server. + + 2.34.64 ======= diff --git a/awscli/__init__.py b/awscli/__init__.py index 47a27c23d71e..0089d5f09247 100644 --- a/awscli/__init__.py +++ b/awscli/__init__.py @@ -20,7 +20,7 @@ import os import sys -__version__ = '2.34.64' +__version__ = '2.35.0' # # Get our data path to be added to botocore's search path diff --git a/configure b/configure index 37bcbfd73773..4fa1a95a7bb7 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for awscli 2.34.64. +# Generated by GNU Autoconf 2.71 for awscli 2.35.0. # # # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, @@ -607,8 +607,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='awscli' PACKAGE_TARNAME='awscli' -PACKAGE_VERSION='2.34.64' -PACKAGE_STRING='awscli 2.34.64' +PACKAGE_VERSION='2.35.0' +PACKAGE_STRING='awscli 2.35.0' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1255,7 +1255,7 @@ _ACEOF fi if $ac_init_version; then cat <<\_ACEOF -awscli configure 2.34.64 +awscli configure 2.35.0 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -1292,7 +1292,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by awscli $as_me 2.34.64, which was +It was created by awscli $as_me 2.35.0, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -2668,7 +2668,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by awscli $as_me 2.34.64, which was +This file was extended by awscli $as_me 2.35.0, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -2723,7 +2723,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -awscli config.status 2.34.64 +awscli config.status 2.35.0 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 8cc6a62ed77a..ac4bb54abafc 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ AC_CONFIG_MACRO_DIRS([m4]) -AC_INIT([awscli], [2.34.64]) +AC_INIT([awscli], [2.35.0]) AC_CONFIG_SRCDIR([bin/aws]) AM_PATH_PYTHON([3.8]) diff --git a/doc/source/conf.py b/doc/source/conf.py index 48ef22763ab3..36844982f413 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -66,7 +66,7 @@ # The short X.Y version. version = '2.0' # The full version, including alpha/beta/rc tags. -release = '2.34.64' +release = '2.35.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. From 14eaf8e6d8da698c39d0c02040e599c6e0d81897 Mon Sep 17 00:00:00 2001 From: aws-sdk-python-automation Date: Tue, 9 Jun 2026 18:05:40 +0000 Subject: [PATCH 10/18] Update to latest models --- .../api-change-bedrock-53644.json | 5 + .../api-change-bedrockagentcore-74088.json | 5 + .../api-change-cloudwatch-90462.json | 5 + .../next-release/api-change-ec2-7505.json | 5 + .../next-release/api-change-odb-4951.json | 5 + .../api-change-outposts-61761.json | 5 + .../2024-02-28/service-2.json | 2 + .../data/bedrock/2023-04-20/service-2.json | 88 + .../data/cloudwatch/2010-08-01/service-2.json | 173 + .../data/ec2/2016-11-15/service-2.json | 90 +- .../data/odb/2024-08-20/paginators-1.json | 36 + .../data/odb/2024-08-20/service-2.json | 3900 ++++++++++++++++- .../outposts/2019-12-03/paginators-1.json | 12 + .../data/outposts/2019-12-03/service-2.json | 872 +++- 14 files changed, 5082 insertions(+), 121 deletions(-) create mode 100644 .changes/next-release/api-change-bedrock-53644.json create mode 100644 .changes/next-release/api-change-bedrockagentcore-74088.json create mode 100644 .changes/next-release/api-change-cloudwatch-90462.json create mode 100644 .changes/next-release/api-change-ec2-7505.json create mode 100644 .changes/next-release/api-change-odb-4951.json create mode 100644 .changes/next-release/api-change-outposts-61761.json diff --git a/.changes/next-release/api-change-bedrock-53644.json b/.changes/next-release/api-change-bedrock-53644.json new file mode 100644 index 000000000000..c620dfc381ea --- /dev/null +++ b/.changes/next-release/api-change-bedrock-53644.json @@ -0,0 +1,5 @@ +{ + "type": "api-change", + "category": "``bedrock``", + "description": "Adds support for the Amazon Bedrock account-level data retention APIs PutAccountDataRetention and GetAccountDataRetention." +} diff --git a/.changes/next-release/api-change-bedrockagentcore-74088.json b/.changes/next-release/api-change-bedrockagentcore-74088.json new file mode 100644 index 000000000000..7e92ccf45912 --- /dev/null +++ b/.changes/next-release/api-change-bedrockagentcore-74088.json @@ -0,0 +1,5 @@ +{ + "type": "api-change", + "category": "``bedrock-agentcore``", + "description": "Add RetryableConflictException (HTTP 409) to InvokeAgentRuntimeCommand and GetAgentCard to prevent orphaned VMs during concurrent session access. The SDK automatically retries this exception with backoff. Enforcement is not yet active and will be enabled in a future service update." +} diff --git a/.changes/next-release/api-change-cloudwatch-90462.json b/.changes/next-release/api-change-cloudwatch-90462.json new file mode 100644 index 000000000000..cd12f04573c2 --- /dev/null +++ b/.changes/next-release/api-change-cloudwatch-90462.json @@ -0,0 +1,5 @@ +{ + "type": "api-change", + "category": "``cloudwatch``", + "description": "This release adds the APIs (AssociateDatasetKmsKey, DisassociateDatasetKmsKey, GetDataset) to manage encryption at rest for OpenTelemetry metrics in CloudWatch using AWS KMS customer managed keys." +} diff --git a/.changes/next-release/api-change-ec2-7505.json b/.changes/next-release/api-change-ec2-7505.json new file mode 100644 index 000000000000..898bbfcf9cad --- /dev/null +++ b/.changes/next-release/api-change-ec2-7505.json @@ -0,0 +1,5 @@ +{ + "type": "api-change", + "category": "``ec2``", + "description": "Added TagFieldSpecifications to CreateFlowLogs and DescribeFlowLogs APIs. Customers can now specify tag keys in their Flow Logs subscriptions to capture associated EC2 resource tag values in their logs, enabling tag-based visibility." +} diff --git a/.changes/next-release/api-change-odb-4951.json b/.changes/next-release/api-change-odb-4951.json new file mode 100644 index 000000000000..2d95861d9a9d --- /dev/null +++ b/.changes/next-release/api-change-odb-4951.json @@ -0,0 +1,5 @@ +{ + "type": "api-change", + "category": "``odb``", + "description": "Releases Autonomous Database Serverless APIs, autonomousDatabaseOciIntegrationIamRoles, linkedOciTenancyId, linkedOciCompartmentId, and subscriptionErrors fields in GetOciOnboardingStatus API response." +} diff --git a/.changes/next-release/api-change-outposts-61761.json b/.changes/next-release/api-change-outposts-61761.json new file mode 100644 index 000000000000..2d33e99b6af6 --- /dev/null +++ b/.changes/next-release/api-change-outposts-61761.json @@ -0,0 +1,5 @@ +{ + "type": "api-change", + "category": "``outposts``", + "description": "Added AWS Outposts APIs for self-service Outposts quoting and ordering. New operations include CreateQuote, GetQuote, UpdateQuote, DeleteQuote, ListQuotes, and ListOrderableInstanceTypes." +} diff --git a/awscli/botocore/data/bedrock-agentcore/2024-02-28/service-2.json b/awscli/botocore/data/bedrock-agentcore/2024-02-28/service-2.json index 0a73b0683f43..4338825fac7f 100644 --- a/awscli/botocore/data/bedrock-agentcore/2024-02-28/service-2.json +++ b/awscli/botocore/data/bedrock-agentcore/2024-02-28/service-2.json @@ -365,6 +365,7 @@ "output":{"shape":"GetAgentCardResponse"}, "errors":[ {"shape":"ServiceQuotaExceededException"}, + {"shape":"RetryableConflictException"}, {"shape":"ValidationException"}, {"shape":"AccessDeniedException"}, {"shape":"RuntimeClientError"}, @@ -699,6 +700,7 @@ "output":{"shape":"InvokeAgentRuntimeCommandResponse"}, "errors":[ {"shape":"ServiceQuotaExceededException"}, + {"shape":"RetryableConflictException"}, {"shape":"ValidationException"}, {"shape":"AccessDeniedException"}, {"shape":"RuntimeClientError"}, diff --git a/awscli/botocore/data/bedrock/2023-04-20/service-2.json b/awscli/botocore/data/bedrock/2023-04-20/service-2.json index cc628c018c8a..c172d91495d3 100644 --- a/awscli/botocore/data/bedrock/2023-04-20/service-2.json +++ b/awscli/botocore/data/bedrock/2023-04-20/service-2.json @@ -784,6 +784,24 @@ "documentation":"

Exports the policy definition for an Automated Reasoning policy version. Returns the complete policy definition including rules, variables, and custom variable types in a structured format.

", "readonly":true }, + "GetAccountDataRetention":{ + "name":"GetAccountDataRetention", + "http":{ + "method":"GET", + "requestUri":"/data-retention", + "responseCode":200 + }, + "input":{"shape":"GetAccountDataRetentionRequest"}, + "output":{"shape":"GetAccountDataRetentionResponse"}, + "errors":[ + {"shape":"AccessDeniedException"}, + {"shape":"ValidationException"}, + {"shape":"InternalServerException"}, + {"shape":"ThrottlingException"} + ], + "documentation":"

Returns the account-wide data retention mode for Amazon Bedrock.

", + "readonly":true + }, "GetAdvancedPromptOptimizationJob":{ "name":"GetAdvancedPromptOptimizationJob", "http":{ @@ -1681,6 +1699,24 @@ ], "documentation":"

List the tags associated with the specified resource.

For more information, see Tagging resources in the Amazon Bedrock User Guide.

" }, + "PutAccountDataRetention":{ + "name":"PutAccountDataRetention", + "http":{ + "method":"PUT", + "requestUri":"/data-retention", + "responseCode":200 + }, + "input":{"shape":"PutAccountDataRetentionRequest"}, + "output":{"shape":"PutAccountDataRetentionResponse"}, + "errors":[ + {"shape":"AccessDeniedException"}, + {"shape":"ValidationException"}, + {"shape":"InternalServerException"}, + {"shape":"ThrottlingException"} + ], + "documentation":"

Sets the account-wide data retention mode for Amazon Bedrock.

", + "idempotent":true + }, "PutEnforcedGuardrailConfiguration":{ "name":"PutEnforcedGuardrailConfiguration", "http":{ @@ -6244,6 +6280,16 @@ }, "documentation":"

For a Distillation job, the status details for the data processing sub-task of the job.

" }, + "DataRetentionMode":{ + "type":"string", + "documentation":"

The data retention mode for the account. Valid values are:

  • default – The standard data handling for the model applies.

  • none – Zero data retention.

  • provider_data_share – Data may be shared with the model provider.

  • inherit – No data retention mode is set at this scope.

", + "enum":[ + "default", + "none", + "provider_data_share", + "inherit" + ] + }, "DeleteAutomatedReasoningPolicyBuildWorkflowRequest":{ "type":"structure", "required":[ @@ -7417,6 +7463,24 @@ }, "documentation":"

The configuration details for response generation based on retrieved text chunks.

" }, + "GetAccountDataRetentionRequest":{ + "type":"structure", + "members":{} + }, + "GetAccountDataRetentionResponse":{ + "type":"structure", + "required":["mode"], + "members":{ + "mode":{ + "shape":"DataRetentionMode", + "documentation":"

The data retention mode configured for the account.

" + }, + "updatedAt":{ + "shape":"Timestamp", + "documentation":"

The time at which the data retention mode was last updated.

" + } + } + }, "GetAdvancedPromptOptimizationJobRequest":{ "type":"structure", "required":["jobIdentifier"], @@ -12998,6 +13062,30 @@ }, "documentation":"

A summary of information about a Provisioned Throughput.

This data type is used in the following API operations:

" }, + "PutAccountDataRetentionRequest":{ + "type":"structure", + "required":["mode"], + "members":{ + "mode":{ + "shape":"DataRetentionMode", + "documentation":"

The data retention mode to set for the account.

" + } + } + }, + "PutAccountDataRetentionResponse":{ + "type":"structure", + "required":["mode"], + "members":{ + "mode":{ + "shape":"DataRetentionMode", + "documentation":"

The data retention mode set for the account.

" + }, + "updatedAt":{ + "shape":"Timestamp", + "documentation":"

The time at which the data retention mode was last updated.

" + } + } + }, "PutEnforcedGuardrailConfigurationRequest":{ "type":"structure", "required":["guardrailInferenceConfig"], diff --git a/awscli/botocore/data/cloudwatch/2010-08-01/service-2.json b/awscli/botocore/data/cloudwatch/2010-08-01/service-2.json index a4f8ea75557e..c8cb327127aa 100644 --- a/awscli/botocore/data/cloudwatch/2010-08-01/service-2.json +++ b/awscli/botocore/data/cloudwatch/2010-08-01/service-2.json @@ -21,6 +21,26 @@ "auth":["aws.auth#sigv4"] }, "operations":{ + "AssociateDatasetKmsKey":{ + "name":"AssociateDatasetKmsKey", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"AssociateDatasetKmsKeyInput"}, + "output":{ + "shape":"AssociateDatasetKmsKeyOutput", + "resultWrapper":"AssociateDatasetKmsKeyResult" + }, + "errors":[ + {"shape":"KmsAccessDeniedException"}, + {"shape":"KmsKeyNotFoundException"}, + {"shape":"ConflictException"}, + {"shape":"KmsKeyDisabledException"}, + {"shape":"ResourceNotFoundException"} + ], + "documentation":"

Associates an Amazon Web Services Key Management Service (Amazon Web Services KMS) customer managed key with the specified dataset. After this operation completes, all data published to the dataset is encrypted at rest using the specified KMS key. Callers must have kms:Decrypt permission on the key to read the encrypted data.

Only the default dataset is supported. The default dataset is implicit for every account in every Region — you do not need to create it before calling this operation.

You can call AssociateDatasetKmsKey on a dataset that is already associated with a KMS key to replace the existing key with a different one. To replace a key, the caller must have kms:Decrypt permission on both the current key and the new key.

The KMS key that you specify must meet all of the following requirements:

  • It must be a symmetric encryption KMS key (key spec SYMMETRIC_DEFAULT, key usage ENCRYPT_DECRYPT). Asymmetric keys, HMAC keys, and key material types other than SYMMETRIC_DEFAULT are not supported.

  • It must be enabled and not pending deletion.

  • Its key policy must grant the CloudWatch service principal (cloudwatch.amazonaws.com) these permissions: kms:DescribeKey, kms:GenerateDataKey, kms:Encrypt, kms:Decrypt, and kms:ReEncrypt*. Amazon CloudWatch requires these permissions to manage the data on your behalf.

  • The calling principal must have kms:Decrypt permission on the key.

  • It must be specified as a fully qualified key ARN. Key IDs, aliases, and alias ARNs are not accepted.

  • It must be in the same Amazon Web Services Region as the dataset.

Before completing the association, Amazon CloudWatch validates the key by performing a series of dry-run KMS operations. Service-principal checks run first to verify that the key policy grants the required access to Amazon CloudWatch. These checks include kms:DescribeKey, kms:GenerateDataKey, kms:Encrypt, kms:Decrypt, and kms:ReEncrypt*. After those succeed, a kms:Decrypt dry-run is run with the caller's credentials to verify that the calling principal can use the key. When you are replacing an existing key, the caller's kms:Decrypt dry-run is run on the current key first, and only then on the new key.

If any of these checks fails, the operation fails and the existing key association (if any) remains unchanged. Common failure causes include the key being disabled, the key policy not granting the required permissions to Amazon CloudWatch, or the caller lacking kms:Decrypt permission on the key.

For more information about using customer managed keys with Amazon CloudWatch, see Encryption at rest with customer managed keys in the Amazon CloudWatch User Guide.

" + }, "DeleteAlarmMuteRule":{ "name":"DeleteAlarmMuteRule", "http":{ @@ -238,6 +258,24 @@ ], "documentation":"

Disables the specified Contributor Insights rules. When rules are disabled, they do not analyze log groups and do not incur costs.

" }, + "DisassociateDatasetKmsKey":{ + "name":"DisassociateDatasetKmsKey", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"DisassociateDatasetKmsKeyInput"}, + "output":{ + "shape":"DisassociateDatasetKmsKeyOutput", + "resultWrapper":"DisassociateDatasetKmsKeyResult" + }, + "errors":[ + {"shape":"ConflictException"}, + {"shape":"ResourceNotFoundException"} + ], + "documentation":"

Removes the customer managed Amazon Web Services Key Management Service (Amazon Web Services KMS) key association from the specified dataset. After this operation completes, data that you publish to the dataset is encrypted at rest using an Amazon Web Services owned key managed by Amazon CloudWatch.

Only the default dataset is supported. To call this operation, the dataset must currently have a customer managed KMS key associated with it. If the dataset has no associated KMS key, the operation fails with ResourceNotFoundException.

Amazon CloudWatch performs a dry-run kms:Decrypt call on the key as part of this operation. This verifies that the caller is authorized to use the currently associated key. The caller must have kms:Decrypt permission on the currently associated key, and the key must be enabled and accessible. If the key has been disabled or scheduled for deletion, you must first re-enable or restore it before you can disassociate it from the dataset.

Disassociating a KMS key from a dataset does not immediately remove the kms:Decrypt requirement on data plane operations. For up to three hours after disassociation, callers must continue to have kms:Decrypt permission on the previously associated key. Some data may still be encrypted with that key during this window. After this enforcement window elapses, the kms:Decrypt requirement is lifted.

For more information about using customer managed keys with Amazon CloudWatch, see Encryption at rest with customer managed keys in the Amazon CloudWatch User Guide.

", + "idempotent":true + }, "EnableAlarmActions":{ "name":"EnableAlarmActions", "http":{ @@ -299,6 +337,23 @@ ], "documentation":"

Displays the details of the dashboard that you specify.

To copy an existing dashboard, use GetDashboard, and then use the data returned within DashboardBody as the template for the new dashboard when you call PutDashboard to create the copy.

" }, + "GetDataset":{ + "name":"GetDataset", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"GetDatasetInput"}, + "output":{ + "shape":"GetDatasetOutput", + "resultWrapper":"GetDatasetResult" + }, + "errors":[ + {"shape":"ResourceNotFoundException"} + ], + "documentation":"

Returns information about the specified dataset. This includes its identifier, Amazon Resource Name (ARN), and any customer managed Amazon Web Services Key Management Service (Amazon Web Services KMS) key that is currently associated with it.

Only the default dataset is supported. The default dataset is implicit for every account in every Region — you can call GetDataset for it without first creating it. If no customer managed KMS key has been associated with the dataset, the response omits the KmsKeyArn field, indicating that data is encrypted at rest using an Amazon Web Services owned key managed by Amazon CloudWatch.

To associate a customer managed KMS key with a dataset, use AssociateDatasetKmsKey. To remove the association, use DisassociateDatasetKmsKey.

", + "readonly":true + }, "GetInsightRuleReport":{ "name":"GetInsightRuleReport", "http":{ @@ -1083,6 +1138,27 @@ "max":1600, "min":1 }, + "AssociateDatasetKmsKeyInput":{ + "type":"structure", + "required":[ + "DatasetIdentifier", + "KmsKeyArn" + ], + "members":{ + "DatasetIdentifier":{ + "shape":"DatasetIdentifier", + "documentation":"

Specifies the identifier of the dataset that you want to associate the KMS key with. For the default dataset, you can specify either default or the full dataset Amazon Resource Name (ARN) in the format arn:aws:cloudwatch:Region:account-id:dataset/default.

" + }, + "KmsKeyArn":{ + "shape":"KmsKeyArn", + "documentation":"

Specifies the Amazon Resource Name (ARN) of the customer managed KMS key to associate with the dataset. The key must be a symmetric encryption KMS key (SYMMETRIC_DEFAULT) in the same Amazon Web Services Region as the dataset.

The ARN must be in the format arn:aws:kms:Region:account-id:key/key-id . Key IDs, aliases, and alias ARNs are not accepted.

For more information about KMS key ARNs, see Key ARN in the Amazon Web Services Key Management Service Developer Guide.

" + } + } + }, + "AssociateDatasetKmsKeyOutput":{ + "type":"structure", + "members":{} + }, "AttributeName":{ "type":"string", "max":255, @@ -1400,6 +1476,24 @@ "type":"integer", "min":1 }, + "DatasetArn":{ + "type":"string", + "max":2048, + "min":1, + "pattern":"arn:[a-zA-Z0-9-]+:cloudwatch:[a-zA-Z0-9-]*:\\d{12}:dataset/default" + }, + "DatasetId":{ + "type":"string", + "max":7, + "min":7, + "pattern":"default" + }, + "DatasetIdentifier":{ + "type":"string", + "max":2048, + "min":1, + "pattern":"(default|arn:[a-zA-Z0-9-]+:cloudwatch:[a-zA-Z0-9-]*:\\d{12}:dataset/default)" + }, "DeleteAlarmMuteRuleInput":{ "type":"structure", "required":["AlarmMuteRuleName"], @@ -1848,6 +1942,20 @@ } } }, + "DisassociateDatasetKmsKeyInput":{ + "type":"structure", + "required":["DatasetIdentifier"], + "members":{ + "DatasetIdentifier":{ + "shape":"DatasetIdentifier", + "documentation":"

Specifies the identifier of the dataset from which to remove the KMS key association. For the default dataset, you can specify either default or the full dataset Amazon Resource Name (ARN) in the format arn:aws:cloudwatch:Region:account-id:dataset/default.

" + } + } + }, + "DisassociateDatasetKmsKeyOutput":{ + "type":"structure", + "members":{} + }, "Duration":{ "type":"string", "max":50, @@ -2085,6 +2193,37 @@ } } }, + "GetDatasetInput":{ + "type":"structure", + "required":["DatasetIdentifier"], + "members":{ + "DatasetIdentifier":{ + "shape":"DatasetIdentifier", + "documentation":"

Specifies the identifier of the dataset to retrieve. For the default dataset, you can specify either default or the full dataset Amazon Resource Name (ARN) in the format arn:aws:cloudwatch:Region:account-id:dataset/default.

" + } + } + }, + "GetDatasetOutput":{ + "type":"structure", + "required":[ + "DatasetId", + "Arn" + ], + "members":{ + "DatasetId":{ + "shape":"DatasetId", + "documentation":"

Returns the identifier of the dataset.

" + }, + "Arn":{ + "shape":"DatasetArn", + "documentation":"

Returns the Amazon Resource Name (ARN) of the dataset, in the format arn:aws:cloudwatch:Region:account-id:dataset/dataset-id .

" + }, + "KmsKeyArn":{ + "shape":"KmsKeyArn", + "documentation":"

Returns the Amazon Resource Name (ARN) of the customer managed Amazon Web Services KMS key that is currently associated with the dataset, if any. If the dataset is not associated with a customer managed KMS key, this field is not included in the response and the dataset is encrypted at rest using an Amazon Web Services owned key.

" + } + } + }, "GetInsightRuleReportInput":{ "type":"structure", "required":[ @@ -2667,6 +2806,39 @@ "exception":true, "synthetic":true }, + "KmsAccessDeniedException":{ + "type":"structure", + "required":["Message"], + "members":{ + "Message":{"shape":"String"} + }, + "documentation":"

The operation was denied because either the calling principal lacks the required Amazon Web Services Key Management Service (Amazon Web Services KMS) permission on the key, or the key policy does not grant Amazon CloudWatch the permissions it needs to use the key. Verify that the caller has kms:Decrypt permission on the key, and that the key policy grants the CloudWatch service principal the kms:DescribeKey, kms:GenerateDataKey, kms:Encrypt, kms:Decrypt, and kms:ReEncrypt* permissions described in AssociateDatasetKmsKey.

", + "exception":true + }, + "KmsKeyArn":{ + "type":"string", + "max":2048, + "min":20, + "pattern":"arn:[a-zA-Z0-9-]+:kms:[a-zA-Z0-9-]+:\\d{12}:key/[a-f0-9-]+" + }, + "KmsKeyDisabledException":{ + "type":"structure", + "required":["Message"], + "members":{ + "Message":{"shape":"String"} + }, + "documentation":"

The specified Amazon Web Services Key Management Service (Amazon Web Services KMS) key is disabled or pending deletion. Re-enable the key (or restore it, if it is pending deletion) and retry the operation.

", + "exception":true + }, + "KmsKeyNotFoundException":{ + "type":"structure", + "required":["Message"], + "members":{ + "Message":{"shape":"String"} + }, + "documentation":"

The specified Amazon Web Services Key Management Service (Amazon Web Services KMS) key could not be found. Verify that the key Amazon Resource Name (ARN) is correct, that the key exists, and that it is in the same Amazon Web Services Region as the resource.

", + "exception":true + }, "LabelOptions":{ "type":"structure", "members":{ @@ -4323,6 +4495,7 @@ "min":1 }, "StrictEntityValidation":{"type":"boolean"}, + "String":{"type":"string"}, "SuppressorPeriod":{"type":"integer"}, "Tag":{ "type":"structure", diff --git a/awscli/botocore/data/ec2/2016-11-15/service-2.json b/awscli/botocore/data/ec2/2016-11-15/service-2.json index 207aa1ab5a68..08b36d0aa252 100644 --- a/awscli/botocore/data/ec2/2016-11-15/service-2.json +++ b/awscli/botocore/data/ec2/2016-11-15/service-2.json @@ -15523,10 +15523,7 @@ }, "CreateCapacityReservationFleetRequest":{ "type":"structure", - "required":[ - "InstanceTypeSpecifications", - "TotalTargetCapacity" - ], + "required":["TotalTargetCapacity"], "members":{ "AllocationStrategy":{ "shape":"String", @@ -16431,6 +16428,11 @@ "DestinationOptions":{ "shape":"DestinationOptionsRequest", "documentation":"

The destination options.

" + }, + "TagFieldSpecifications":{ + "shape":"TagFieldSpecificationListRequest", + "documentation":"

The tag configuration associated with the Flow Logs Amazon EC2 Tags feature fields in your custom log format.

", + "locationName":"TagFieldSpecification" } } }, @@ -37988,6 +37990,11 @@ "shape":"DestinationOptionsResponse", "documentation":"

The destination options.

", "locationName":"destinationOptions" + }, + "TagFieldSpecifications":{ + "shape":"TagFieldSpecificationListResponse", + "documentation":"

The tag configuration associated with the Flow Logs Amazon EC2 Tags feature fields in your custom log format.

", + "locationName":"tagFieldSpecificationSet" } }, "documentation":"

Describes a flow log.

" @@ -70431,6 +70438,69 @@ "locationName":"item" } }, + "TagFieldSpecificationListRequest":{ + "type":"list", + "member":{ + "shape":"TagFieldSpecificationRequest", + "locationName":"item" + }, + "max":3, + "min":1 + }, + "TagFieldSpecificationListResponse":{ + "type":"list", + "member":{ + "shape":"TagFieldSpecificationResponse", + "locationName":"item" + }, + "max":3, + "min":1 + }, + "TagFieldSpecificationRequest":{ + "type":"structure", + "members":{ + "ResourceType":{ + "shape":"TaggableResourceType", + "documentation":"

The resource type for the tag keys associated with the Flow Logs Amazon EC2 Tags feature fields in your custom log format.

" + }, + "TagKeys":{ + "shape":"TagKeyList", + "documentation":"

The tag keys on your tagged resources to be displayed by the Flow Logs Amazon EC2 Tags feature fields in your custom log format.

", + "locationName":"TagKey" + } + }, + "documentation":"

A single resource's tag configuration associated with the Flow Logs Amazon EC2 Tags feature fields in your custom log format.

" + }, + "TagFieldSpecificationResponse":{ + "type":"structure", + "members":{ + "ResourceType":{ + "shape":"TaggableResourceType", + "documentation":"

The resource type for the tag keys associated with the Flow Logs Amazon EC2 Tags feature fields in your custom log format.

", + "locationName":"resourceType" + }, + "TagKeys":{ + "shape":"TagKeyList", + "documentation":"

The tag keys on your tagged resources to be displayed by the Flow Logs Amazon EC2 Tags feature fields in your custom log format.

", + "locationName":"tagKeySet" + } + }, + "documentation":"

A single resource's tag configuration associated with the Flow Logs Amazon EC2 Tags feature fields in your custom log format.

" + }, + "TagKey":{ + "type":"string", + "max":128, + "min":1 + }, + "TagKeyList":{ + "type":"list", + "member":{ + "shape":"TagKey", + "locationName":"item" + }, + "max":2, + "min":1 + }, "TagList":{ "type":"list", "member":{ @@ -70462,6 +70532,14 @@ } }, "TaggableResourceId":{"type":"string"}, + "TaggableResourceType":{ + "type":"string", + "enum":[ + "network-interface", + "instance", + "auto-scaling-group" + ] + }, "TargetCapacitySpecification":{ "type":"structure", "members":{ @@ -75515,10 +75593,6 @@ "shape":"DateTime", "documentation":"

The modification completion or failure time.

", "locationName":"endTime" - }, - "Operator":{ - "shape":"OperatorResponse", - "locationName":"operator" } }, "documentation":"

Describes the modification status of an EBS volume.

" diff --git a/awscli/botocore/data/odb/2024-08-20/paginators-1.json b/awscli/botocore/data/odb/2024-08-20/paginators-1.json index 6bda94b16e8e..a145fd570383 100644 --- a/awscli/botocore/data/odb/2024-08-20/paginators-1.json +++ b/awscli/botocore/data/odb/2024-08-20/paginators-1.json @@ -65,6 +65,42 @@ "output_token": "nextToken", "limit_key": "maxResults", "result_key": "systemVersions" + }, + "ListAutonomousDatabaseBackups": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "autonomousDatabaseBackups" + }, + "ListAutonomousDatabaseCharacterSets": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "autonomousDatabaseCharacterSets" + }, + "ListAutonomousDatabaseClones": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "autonomousDatabaseClones" + }, + "ListAutonomousDatabasePeers": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "autonomousDatabasePeers" + }, + "ListAutonomousDatabaseVersions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "autonomousDatabaseVersions" + }, + "ListAutonomousDatabases": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "autonomousDatabases" } } } diff --git a/awscli/botocore/data/odb/2024-08-20/service-2.json b/awscli/botocore/data/odb/2024-08-20/service-2.json index 9077c8a7e231..e330acfcc2ad 100644 --- a/awscli/botocore/data/odb/2024-08-20/service-2.json +++ b/awscli/botocore/data/odb/2024-08-20/service-2.json @@ -51,6 +51,64 @@ ], "documentation":"

Associates an Amazon Web Services Identity and Access Management (IAM) service role with a specified resource to enable Amazon Web Services service integration.

" }, + "CreateAutonomousDatabase":{ + "name":"CreateAutonomousDatabase", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"CreateAutonomousDatabaseInput"}, + "output":{"shape":"CreateAutonomousDatabaseOutput"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"ServiceQuotaExceededException"}, + {"shape":"ValidationException"}, + {"shape":"ConflictException"}, + {"shape":"AccessDeniedException"}, + {"shape":"InternalServerException"}, + {"shape":"ResourceNotFoundException"} + ], + "documentation":"

Creates a new Autonomous Database.

", + "idempotent":true + }, + "CreateAutonomousDatabaseBackup":{ + "name":"CreateAutonomousDatabaseBackup", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"CreateAutonomousDatabaseBackupInput"}, + "output":{"shape":"CreateAutonomousDatabaseBackupOutput"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"ServiceQuotaExceededException"}, + {"shape":"ValidationException"}, + {"shape":"ConflictException"}, + {"shape":"AccessDeniedException"}, + {"shape":"InternalServerException"}, + {"shape":"ResourceNotFoundException"} + ], + "documentation":"

Creates a new backup of the specified Autonomous Database.

", + "idempotent":true + }, + "CreateAutonomousDatabaseWallet":{ + "name":"CreateAutonomousDatabaseWallet", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"CreateAutonomousDatabaseWalletInput"}, + "output":{"shape":"CreateAutonomousDatabaseWalletOutput"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"ValidationException"}, + {"shape":"AccessDeniedException"}, + {"shape":"InternalServerException"}, + {"shape":"ResourceNotFoundException"} + ], + "documentation":"

Creates a new wallet for the specified Autonomous Database.

", + "idempotent":true + }, "CreateCloudAutonomousVmCluster":{ "name":"CreateCloudAutonomousVmCluster", "http":{ @@ -148,6 +206,44 @@ "documentation":"

Creates a peering connection between an ODB network and a VPC.

A peering connection enables private connectivity between the networks for application-tier communication.

", "idempotent":true }, + "DeleteAutonomousDatabase":{ + "name":"DeleteAutonomousDatabase", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"DeleteAutonomousDatabaseInput"}, + "output":{"shape":"DeleteAutonomousDatabaseOutput"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"ValidationException"}, + {"shape":"ConflictException"}, + {"shape":"AccessDeniedException"}, + {"shape":"InternalServerException"}, + {"shape":"ResourceNotFoundException"} + ], + "documentation":"

Deletes the specified Autonomous Database.

", + "idempotent":true + }, + "DeleteAutonomousDatabaseBackup":{ + "name":"DeleteAutonomousDatabaseBackup", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"DeleteAutonomousDatabaseBackupInput"}, + "output":{"shape":"DeleteAutonomousDatabaseBackupOutput"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"ValidationException"}, + {"shape":"ConflictException"}, + {"shape":"AccessDeniedException"}, + {"shape":"InternalServerException"}, + {"shape":"ResourceNotFoundException"} + ], + "documentation":"

Deletes the specified Autonomous Database backup.

", + "idempotent":true + }, "DeleteCloudAutonomousVmCluster":{ "name":"DeleteCloudAutonomousVmCluster", "http":{ @@ -257,6 +353,78 @@ ], "documentation":"

Disassociates an Amazon Web Services Identity and Access Management (IAM) service role from a specified resource to disable Amazon Web Services service integration.

" }, + "FailoverAutonomousDatabase":{ + "name":"FailoverAutonomousDatabase", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"FailoverAutonomousDatabaseInput"}, + "output":{"shape":"FailoverAutonomousDatabaseOutput"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"ValidationException"}, + {"shape":"ConflictException"}, + {"shape":"AccessDeniedException"}, + {"shape":"InternalServerException"}, + {"shape":"ResourceNotFoundException"} + ], + "documentation":"

Initiates a failover of the specified Autonomous Database to a standby peer database.

" + }, + "GetAutonomousDatabase":{ + "name":"GetAutonomousDatabase", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"GetAutonomousDatabaseInput"}, + "output":{"shape":"GetAutonomousDatabaseOutput"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"ValidationException"}, + {"shape":"AccessDeniedException"}, + {"shape":"InternalServerException"}, + {"shape":"ResourceNotFoundException"} + ], + "documentation":"

Gets information about a specific Autonomous Database.

", + "readonly":true + }, + "GetAutonomousDatabaseBackup":{ + "name":"GetAutonomousDatabaseBackup", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"GetAutonomousDatabaseBackupInput"}, + "output":{"shape":"GetAutonomousDatabaseBackupOutput"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"ValidationException"}, + {"shape":"AccessDeniedException"}, + {"shape":"InternalServerException"}, + {"shape":"ResourceNotFoundException"} + ], + "documentation":"

Gets information about a specific Autonomous Database backup.

", + "readonly":true + }, + "GetAutonomousDatabaseWalletDetails":{ + "name":"GetAutonomousDatabaseWalletDetails", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"GetAutonomousDatabaseWalletDetailsInput"}, + "output":{"shape":"GetAutonomousDatabaseWalletDetailsOutput"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"ValidationException"}, + {"shape":"AccessDeniedException"}, + {"shape":"InternalServerException"}, + {"shape":"ResourceNotFoundException"} + ], + "documentation":"

Gets the wallet details for the specified Autonomous Database.

", + "readonly":true + }, "GetCloudAutonomousVmCluster":{ "name":"GetCloudAutonomousVmCluster", "http":{ @@ -435,6 +603,111 @@ "documentation":"

Initializes the ODB service for the first time in an account.

", "idempotent":true }, + "ListAutonomousDatabaseBackups":{ + "name":"ListAutonomousDatabaseBackups", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"ListAutonomousDatabaseBackupsInput"}, + "output":{"shape":"ListAutonomousDatabaseBackupsOutput"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"ValidationException"}, + {"shape":"AccessDeniedException"}, + {"shape":"InternalServerException"}, + {"shape":"ResourceNotFoundException"} + ], + "documentation":"

Lists the backups of the specified Autonomous Database.

", + "readonly":true + }, + "ListAutonomousDatabaseCharacterSets":{ + "name":"ListAutonomousDatabaseCharacterSets", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"ListAutonomousDatabaseCharacterSetsInput"}, + "output":{"shape":"ListAutonomousDatabaseCharacterSetsOutput"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"ValidationException"}, + {"shape":"AccessDeniedException"}, + {"shape":"InternalServerException"} + ], + "documentation":"

Lists the available character sets for Autonomous Databases.

", + "readonly":true + }, + "ListAutonomousDatabaseClones":{ + "name":"ListAutonomousDatabaseClones", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"ListAutonomousDatabaseClonesInput"}, + "output":{"shape":"ListAutonomousDatabaseClonesOutput"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"ValidationException"}, + {"shape":"AccessDeniedException"}, + {"shape":"InternalServerException"}, + {"shape":"ResourceNotFoundException"} + ], + "documentation":"

Lists the clones of the specified Autonomous Database.

", + "readonly":true + }, + "ListAutonomousDatabasePeers":{ + "name":"ListAutonomousDatabasePeers", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"ListAutonomousDatabasePeersInput"}, + "output":{"shape":"ListAutonomousDatabasePeersOutput"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"ValidationException"}, + {"shape":"AccessDeniedException"}, + {"shape":"InternalServerException"}, + {"shape":"ResourceNotFoundException"} + ], + "documentation":"

Lists the peer databases of the specified Autonomous Database.

", + "readonly":true + }, + "ListAutonomousDatabaseVersions":{ + "name":"ListAutonomousDatabaseVersions", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"ListAutonomousDatabaseVersionsInput"}, + "output":{"shape":"ListAutonomousDatabaseVersionsOutput"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"ValidationException"}, + {"shape":"AccessDeniedException"}, + {"shape":"InternalServerException"} + ], + "documentation":"

Lists the available Oracle Database software versions for Autonomous Databases.

", + "readonly":true + }, + "ListAutonomousDatabases":{ + "name":"ListAutonomousDatabases", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"ListAutonomousDatabasesInput"}, + "output":{"shape":"ListAutonomousDatabasesOutput"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"ValidationException"}, + {"shape":"AccessDeniedException"}, + {"shape":"InternalServerException"} + ], + "documentation":"

Returns information about the Autonomous Databases owned by your Amazon Web Services account in the current Amazon Web Services Region.

", + "readonly":true + }, "ListAutonomousVirtualMachines":{ "name":"ListAutonomousVirtualMachines", "http":{ @@ -643,6 +916,24 @@ "documentation":"

Returns information about the tags applied to this resource.

", "readonly":true }, + "RebootAutonomousDatabase":{ + "name":"RebootAutonomousDatabase", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"RebootAutonomousDatabaseInput"}, + "output":{"shape":"RebootAutonomousDatabaseOutput"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"ValidationException"}, + {"shape":"ConflictException"}, + {"shape":"AccessDeniedException"}, + {"shape":"InternalServerException"}, + {"shape":"ResourceNotFoundException"} + ], + "documentation":"

Reboots the specified Autonomous Database.

" + }, "RebootDbNode":{ "name":"RebootDbNode", "http":{ @@ -660,77 +951,85 @@ ], "documentation":"

Reboots the specified DB node in a VM cluster.

" }, - "StartDbNode":{ - "name":"StartDbNode", + "RestoreAutonomousDatabase":{ + "name":"RestoreAutonomousDatabase", "http":{ "method":"POST", "requestUri":"/" }, - "input":{"shape":"StartDbNodeInput"}, - "output":{"shape":"StartDbNodeOutput"}, + "input":{"shape":"RestoreAutonomousDatabaseInput"}, + "output":{"shape":"RestoreAutonomousDatabaseOutput"}, "errors":[ {"shape":"ThrottlingException"}, {"shape":"ValidationException"}, + {"shape":"ConflictException"}, {"shape":"AccessDeniedException"}, {"shape":"InternalServerException"}, {"shape":"ResourceNotFoundException"} ], - "documentation":"

Starts the specified DB node in a VM cluster.

" + "documentation":"

Restores the specified Autonomous Database to a point in time.

" }, - "StopDbNode":{ - "name":"StopDbNode", + "ShrinkAutonomousDatabase":{ + "name":"ShrinkAutonomousDatabase", "http":{ "method":"POST", "requestUri":"/" }, - "input":{"shape":"StopDbNodeInput"}, - "output":{"shape":"StopDbNodeOutput"}, + "input":{"shape":"ShrinkAutonomousDatabaseInput"}, + "output":{"shape":"ShrinkAutonomousDatabaseOutput"}, "errors":[ {"shape":"ThrottlingException"}, {"shape":"ValidationException"}, + {"shape":"ConflictException"}, {"shape":"AccessDeniedException"}, {"shape":"InternalServerException"}, {"shape":"ResourceNotFoundException"} ], - "documentation":"

Stops the specified DB node in a VM cluster.

" + "documentation":"

Shrinks the storage of the specified Autonomous Database to reclaim unused space.

" }, - "TagResource":{ - "name":"TagResource", + "StartAutonomousDatabase":{ + "name":"StartAutonomousDatabase", "http":{ "method":"POST", "requestUri":"/" }, - "input":{"shape":"TagResourceRequest"}, - "output":{"shape":"TagResourceResponse"}, + "input":{"shape":"StartAutonomousDatabaseInput"}, + "output":{"shape":"StartAutonomousDatabaseOutput"}, "errors":[ - {"shape":"ServiceQuotaExceededException"}, + {"shape":"ThrottlingException"}, + {"shape":"ValidationException"}, + {"shape":"ConflictException"}, + {"shape":"AccessDeniedException"}, + {"shape":"InternalServerException"}, {"shape":"ResourceNotFoundException"} ], - "documentation":"

Applies tags to the specified resource.

", - "idempotent":true + "documentation":"

Starts the specified Autonomous Database.

" }, - "UntagResource":{ - "name":"UntagResource", + "StartDbNode":{ + "name":"StartDbNode", "http":{ "method":"POST", "requestUri":"/" }, - "input":{"shape":"UntagResourceRequest"}, - "output":{"shape":"UntagResourceResponse"}, + "input":{"shape":"StartDbNodeInput"}, + "output":{"shape":"StartDbNodeOutput"}, "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"ValidationException"}, + {"shape":"AccessDeniedException"}, + {"shape":"InternalServerException"}, {"shape":"ResourceNotFoundException"} ], - "documentation":"

Removes tags from the specified resource.

", - "idempotent":true + "documentation":"

Starts the specified DB node in a VM cluster.

" }, - "UpdateCloudExadataInfrastructure":{ - "name":"UpdateCloudExadataInfrastructure", + "StopAutonomousDatabase":{ + "name":"StopAutonomousDatabase", "http":{ "method":"POST", "requestUri":"/" }, - "input":{"shape":"UpdateCloudExadataInfrastructureInput"}, - "output":{"shape":"UpdateCloudExadataInfrastructureOutput"}, + "input":{"shape":"StopAutonomousDatabaseInput"}, + "output":{"shape":"StopAutonomousDatabaseOutput"}, "errors":[ {"shape":"ThrottlingException"}, {"shape":"ValidationException"}, @@ -739,9 +1038,127 @@ {"shape":"InternalServerException"}, {"shape":"ResourceNotFoundException"} ], - "documentation":"

Updates the properties of an Exadata infrastructure resource.

" + "documentation":"

Stops the specified Autonomous Database.

" }, - "UpdateOdbNetwork":{ + "StopDbNode":{ + "name":"StopDbNode", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"StopDbNodeInput"}, + "output":{"shape":"StopDbNodeOutput"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"ValidationException"}, + {"shape":"AccessDeniedException"}, + {"shape":"InternalServerException"}, + {"shape":"ResourceNotFoundException"} + ], + "documentation":"

Stops the specified DB node in a VM cluster.

" + }, + "SwitchoverAutonomousDatabase":{ + "name":"SwitchoverAutonomousDatabase", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"SwitchoverAutonomousDatabaseInput"}, + "output":{"shape":"SwitchoverAutonomousDatabaseOutput"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"ValidationException"}, + {"shape":"ConflictException"}, + {"shape":"AccessDeniedException"}, + {"shape":"InternalServerException"}, + {"shape":"ResourceNotFoundException"} + ], + "documentation":"

Performs a switchover of the specified Autonomous Database to a standby peer database.

" + }, + "TagResource":{ + "name":"TagResource", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"TagResourceRequest"}, + "output":{"shape":"TagResourceResponse"}, + "errors":[ + {"shape":"ServiceQuotaExceededException"}, + {"shape":"ResourceNotFoundException"} + ], + "documentation":"

Applies tags to the specified resource.

", + "idempotent":true + }, + "UntagResource":{ + "name":"UntagResource", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"UntagResourceRequest"}, + "output":{"shape":"UntagResourceResponse"}, + "errors":[ + {"shape":"ResourceNotFoundException"} + ], + "documentation":"

Removes tags from the specified resource.

", + "idempotent":true + }, + "UpdateAutonomousDatabase":{ + "name":"UpdateAutonomousDatabase", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"UpdateAutonomousDatabaseInput"}, + "output":{"shape":"UpdateAutonomousDatabaseOutput"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"ValidationException"}, + {"shape":"ConflictException"}, + {"shape":"AccessDeniedException"}, + {"shape":"InternalServerException"}, + {"shape":"ResourceNotFoundException"} + ], + "documentation":"

Updates the properties of an Autonomous Database.

" + }, + "UpdateAutonomousDatabaseBackup":{ + "name":"UpdateAutonomousDatabaseBackup", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"UpdateAutonomousDatabaseBackupInput"}, + "output":{"shape":"UpdateAutonomousDatabaseBackupOutput"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"ValidationException"}, + {"shape":"ConflictException"}, + {"shape":"AccessDeniedException"}, + {"shape":"InternalServerException"}, + {"shape":"ResourceNotFoundException"} + ], + "documentation":"

Updates the properties of an Autonomous Database backup.

" + }, + "UpdateCloudExadataInfrastructure":{ + "name":"UpdateCloudExadataInfrastructure", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"UpdateCloudExadataInfrastructureInput"}, + "output":{"shape":"UpdateCloudExadataInfrastructureOutput"}, + "errors":[ + {"shape":"ThrottlingException"}, + {"shape":"ValidationException"}, + {"shape":"ConflictException"}, + {"shape":"AccessDeniedException"}, + {"shape":"InternalServerException"}, + {"shape":"ResourceNotFoundException"} + ], + "documentation":"

Updates the properties of an Exadata infrastructure resource.

" + }, + "UpdateOdbNetwork":{ "name":"UpdateOdbNetwork", "http":{ "method":"POST", @@ -809,6 +1226,11 @@ "documentation":"

You don't have sufficient access to perform this action. Make sure you have the required permissions and try again.

", "exception":true }, + "Arn":{ + "type":"string", + "max":2048, + "min":20 + }, "AssociateIamRoleToResourceInput":{ "type":"structure", "required":[ @@ -825,21 +1247,1225 @@ "shape":"SupportedAwsIntegration", "documentation":"

The Amazon Web Services integration configuration settings for the Amazon Web Services Identity and Access Management (IAM) service role association.

" }, - "resourceArn":{ - "shape":"AssociateIamRoleToResourceInputResourceArnString", - "documentation":"

The Amazon Resource Name (ARN) of the target resource to associate with the Amazon Web Services Identity and Access Management (IAM) service role.

" + "resourceArn":{ + "shape":"AssociateIamRoleToResourceInputResourceArnString", + "documentation":"

The Amazon Resource Name (ARN) of the target resource to associate with the Amazon Web Services Identity and Access Management (IAM) service role.

" + } + } + }, + "AssociateIamRoleToResourceInputResourceArnString":{ + "type":"string", + "max":2048, + "min":20, + "pattern":"arn:(?:aws|aws-cn|aws-us-gov|aws-iso-[a-z]?|aws-iso):odb:[a-z0-9-]+:\\d{12}:(?:cloud-vm-cluster|cloud-autonomous-vm-cluster|exadb-vm-cluster)/[a-z0-9-_]+" + }, + "AssociateIamRoleToResourceOutput":{ + "type":"structure", + "members":{} + }, + "AutonomousDatabase":{ + "type":"structure", + "members":{ + "autonomousDatabaseId":{ + "shape":"ResourceIdOrArn", + "documentation":"

The unique identifier of the Autonomous Database.

" + }, + "autonomousDatabaseArn":{ + "shape":"ResourceArn", + "documentation":"

The Amazon Resource Name (ARN) of the Autonomous Database.

" + }, + "ociResourceAnchorName":{ + "shape":"String", + "documentation":"

The name of the Oracle Cloud Infrastructure (OCI) resource anchor associated with the Autonomous Database.

" + }, + "percentProgress":{ + "shape":"Float", + "documentation":"

The progress of the current operation on the Autonomous Database, as a percentage.

" + }, + "ocid":{ + "shape":"String", + "documentation":"

The Oracle Cloud Identifier (OCID) of the Autonomous Database.

" + }, + "ociUrl":{ + "shape":"String", + "documentation":"

The URL for accessing the OCI console page for the Autonomous Database.

" + }, + "displayName":{ + "shape":"String", + "documentation":"

The user-friendly name of the Autonomous Database.

" + }, + "dbName":{ + "shape":"String", + "documentation":"

The name of the Autonomous Database.

" + }, + "sourceId":{ + "shape":"String", + "documentation":"

The unique identifier of the source from which the Autonomous Database was created.

" + }, + "status":{ + "shape":"AutonomousDatabaseResourceStatus", + "documentation":"

The current status of the Autonomous Database.

" + }, + "statusReason":{ + "shape":"String", + "documentation":"

Additional information about the current status of the Autonomous Database, if applicable.

" + }, + "databaseType":{ + "shape":"DatabaseType", + "documentation":"

The type of the Autonomous Database, either a regular database or a clone.

" + }, + "dbVersion":{ + "shape":"String", + "documentation":"

The Oracle Database software version of the Autonomous Database.

" + }, + "dbWorkload":{ + "shape":"DbWorkload", + "documentation":"

The intended use of the Autonomous Database, such as transaction processing, data warehouse, JSON database, or APEX.

" + }, + "characterSet":{ + "shape":"String", + "documentation":"

The character set of the Autonomous Database.

" + }, + "ncharacterSet":{ + "shape":"String", + "documentation":"

The national character set of the Autonomous Database.

" + }, + "databaseEdition":{ + "shape":"DatabaseEdition", + "documentation":"

The Oracle Database edition of the Autonomous Database.

" + }, + "licenseModel":{ + "shape":"LicenseModel", + "documentation":"

The Oracle license model that applies to the Autonomous Database.

" + }, + "openMode":{ + "shape":"OpenMode", + "documentation":"

The mode in which the Autonomous Database is open, either read-only or read/write.

" + }, + "permissionLevel":{ + "shape":"PermissionLevel", + "documentation":"

The permission level of the Autonomous Database.

" + }, + "isMtlsConnectionRequired":{ + "shape":"Boolean", + "documentation":"

Indicates whether mutual TLS (mTLS) authentication is required to connect to the Autonomous Database.

" + }, + "autonomousMaintenanceScheduleType":{ + "shape":"AutonomousMaintenanceScheduleType", + "documentation":"

The maintenance schedule type for the Autonomous Database.

" + }, + "netServicesArchitecture":{ + "shape":"NetServicesArchitecture", + "documentation":"

The Oracle Net Services architecture of the Autonomous Database, either dedicated or shared.

" + }, + "availableUpgradeVersions":{ + "shape":"StringList", + "documentation":"

The list of Oracle Database software versions to which the Autonomous Database can be upgraded.

" + }, + "byolComputeCountLimit":{ + "shape":"Integer", + "documentation":"

The maximum number of compute resources that you can allocate to the Autonomous Database under the bring-your-own-license (BYOL) model.

" + }, + "connectionStringDetails":{ + "shape":"AutonomousDatabaseConnectionStrings", + "documentation":"

The connection string details for the Autonomous Database.

" + }, + "serviceConsoleUrl":{ + "shape":"String", + "documentation":"

The URL for accessing the Oracle service console for the Autonomous Database.

" + }, + "sqlWebDeveloperUrl":{ + "shape":"String", + "documentation":"

The URL for accessing Oracle SQL Developer Web for the Autonomous Database.

" + }, + "customerContacts":{ + "shape":"CustomerContacts", + "documentation":"

The list of customer contacts that receive operational notifications from Oracle for the Autonomous Database.

" + }, + "apexDetails":{ + "shape":"AutonomousDatabaseApex", + "documentation":"

The Oracle Application Express (APEX) details for the Autonomous Database.

" + }, + "standbyDb":{ + "shape":"DatabaseStandbySummary", + "documentation":"

The details of the standby Autonomous Database in a cross-Region Oracle Data Guard configuration.

" + }, + "localStandbyDb":{ + "shape":"DatabaseStandbySummary", + "documentation":"

The details of the local standby Autonomous Database in an Oracle Data Guard configuration.

" + }, + "dataSafeStatus":{ + "shape":"DataSafeStatus", + "documentation":"

The status of the Oracle Data Safe registration for the Autonomous Database.

" + }, + "databaseManagementStatus":{ + "shape":"DatabaseManagementStatus", + "documentation":"

The status of Oracle Database Management for the Autonomous Database.

" + }, + "operationsInsightsStatus":{ + "shape":"OperationsInsightsStatus", + "documentation":"

The status of Oracle Operations Insights for the Autonomous Database.

" + }, + "availabilityZone":{ + "shape":"String", + "documentation":"

The Availability Zone where the Autonomous Database is located.

" + }, + "availabilityZoneId":{ + "shape":"String", + "documentation":"

The unique identifier of the Availability Zone where the Autonomous Database is located.

" + }, + "maintenanceTargetComponent":{ + "shape":"String", + "documentation":"

The component on the Autonomous Database that the current maintenance is being applied to.

" + }, + "connectionUrls":{ + "shape":"AutonomousDatabaseConnectionUrls", + "documentation":"

The connection URLs for accessing tools and services for the Autonomous Database.

" + }, + "dbToolsDetails":{ + "shape":"DatabaseToolList", + "documentation":"

The list of database management tools enabled for the Autonomous Database.

" + }, + "scheduledOperations":{ + "shape":"ScheduledOperationDetailsList", + "documentation":"

The list of scheduled start and stop times for the Autonomous Database.

" + }, + "resourcePoolLeaderId":{ + "shape":"String", + "documentation":"

The unique identifier of the resource pool leader Autonomous Database.

" + }, + "computeCount":{ + "shape":"Float", + "documentation":"

The compute capacity, in number of Elastic CPUs (ECPUs) or Oracle CPUs (OCPUs), assigned to the Autonomous Database.

" + }, + "computeModel":{ + "shape":"ComputeModel", + "documentation":"

The compute model of the Autonomous Database, either ECPU or OCPU.

" + }, + "cpuCoreCount":{ + "shape":"Integer", + "documentation":"

The number of CPU cores allocated to the Autonomous Database.

" + }, + "memoryPerOracleComputeUnitInGBs":{ + "shape":"Integer", + "documentation":"

The amount of memory allocated per Oracle Compute Unit, in GB.

" + }, + "provisionableCpus":{ + "shape":"IntegerList", + "documentation":"

The list of CPU core counts that you can provision for the Autonomous Database.

" + }, + "isAutoScalingEnabled":{ + "shape":"Boolean", + "documentation":"

Indicates whether automatic scaling of the compute resources is enabled for the Autonomous Database.

" + }, + "dataStorageSizeInTBs":{ + "shape":"Double", + "documentation":"

The size, in terabytes (TB), of the data volume allocated for the Autonomous Database.

" + }, + "dataStorageSizeInGBs":{ + "shape":"Integer", + "documentation":"

The size, in gigabytes (GB), of the data volume allocated for the Autonomous Database.

" + }, + "usedDataStorageSizeInTBs":{ + "shape":"Double", + "documentation":"

The amount of data storage currently in use by the Autonomous Database, in TB.

" + }, + "usedDataStorageSizeInGBs":{ + "shape":"Integer", + "documentation":"

The amount of data storage currently in use by the Autonomous Database, in GB.

" + }, + "actualUsedDataStorageSizeInTBs":{ + "shape":"Double", + "documentation":"

The actual amount of data storage currently in use by the Autonomous Database, in TB.

" + }, + "allocatedStorageSizeInTBs":{ + "shape":"Double", + "documentation":"

The amount of storage currently allocated to the Autonomous Database, in TB.

" + }, + "inMemoryAreaInGBs":{ + "shape":"Integer", + "documentation":"

The size of the in-memory area of the Autonomous Database, in GB.

" + }, + "isAutoScalingForStorageEnabled":{ + "shape":"Boolean", + "documentation":"

Indicates whether automatic scaling of the storage is enabled for the Autonomous Database.

" + }, + "odbNetworkId":{ + "shape":"ResourceId", + "documentation":"

The unique identifier of the ODB network associated with the Autonomous Database.

" + }, + "odbNetworkArn":{ + "shape":"ResourceArn", + "documentation":"

The Amazon Resource Name (ARN) of the ODB network associated with the Autonomous Database.

" + }, + "privateEndpoint":{ + "shape":"String", + "documentation":"

The private endpoint for the Autonomous Database.

" + }, + "privateEndpointIp":{ + "shape":"String", + "documentation":"

The private endpoint IP address for the Autonomous Database.

" + }, + "privateEndpointLabel":{ + "shape":"String", + "documentation":"

The private endpoint label for the Autonomous Database.

" + }, + "allowlistedIps":{ + "shape":"StringList", + "documentation":"

The list of IP addresses that are allowed to access the Autonomous Database.

" + }, + "standbyAllowlistedIps":{ + "shape":"StringList", + "documentation":"

The list of IP addresses that are allowed to access the standby Autonomous Database.

" + }, + "standbyAllowlistedIpsSource":{ + "shape":"StandbyAllowlistedIpsSource", + "documentation":"

The source of the allowlisted IP addresses for the standby Autonomous Database.

" + }, + "isLocalDataGuardEnabled":{ + "shape":"Boolean", + "documentation":"

Indicates whether local Oracle Data Guard is enabled for the Autonomous Database.

" + }, + "isRemoteDataGuardEnabled":{ + "shape":"Boolean", + "documentation":"

Indicates whether remote Oracle Data Guard is enabled for the Autonomous Database.

" + }, + "localDisasterRecoveryType":{ + "shape":"DisasterRecoveryType", + "documentation":"

The type of local disaster recovery configured for the Autonomous Database.

" + }, + "role":{ + "shape":"DataGuardRole", + "documentation":"

The Oracle Data Guard role of the Autonomous Database.

" + }, + "peerDbIds":{ + "shape":"StringList", + "documentation":"

The list of unique identifiers of the peer Autonomous Databases.

" + }, + "failedDataRecoveryInSeconds":{ + "shape":"Integer", + "documentation":"

The amount of time, in seconds, that the data in the Autonomous Database is behind the data in the primary database.

" + }, + "localAdgAutoFailoverMaxDataLossLimit":{ + "shape":"Integer", + "documentation":"

The maximum data loss limit, in seconds, for automatic failover to the local Oracle Data Guard standby database.

" + }, + "remoteDisasterRecoveryConfiguration":{ + "shape":"DisasterRecoveryConfiguration", + "documentation":"

The configuration of the remote disaster recovery for the Autonomous Database.

" + }, + "isRefreshableClone":{ + "shape":"Boolean", + "documentation":"

Indicates whether the Autonomous Database is a refreshable clone.

" + }, + "refreshableMode":{ + "shape":"RefreshableMode", + "documentation":"

The refresh mode of the refreshable clone Autonomous Database.

" + }, + "refreshableStatus":{ + "shape":"RefreshableStatus", + "documentation":"

The refresh status of the refreshable clone Autonomous Database.

" + }, + "autoRefreshFrequencyInSeconds":{ + "shape":"Integer", + "documentation":"

The frequency, in seconds, at which the refreshable clone Autonomous Database is automatically refreshed.

" + }, + "autoRefreshPointLagInSeconds":{ + "shape":"Integer", + "documentation":"

The time lag, in seconds, between the refreshable clone and its source Autonomous Database.

" + }, + "isReconnectCloneEnabled":{ + "shape":"Boolean", + "documentation":"

Indicates whether reconnecting the refreshable clone to its source Autonomous Database is enabled.

" + }, + "cloneTableSpaceList":{ + "shape":"IntegerList", + "documentation":"

The list of tablespace identifiers to clone for the Autonomous Database.

" + }, + "backupRetentionPeriodInDays":{ + "shape":"Integer", + "documentation":"

The retention period, in days, for automatic backups of the Autonomous Database.

" + }, + "longTermBackupSchedule":{ + "shape":"LongTermBackupSchedule", + "documentation":"

The long-term backup schedule for the Autonomous Database.

" + }, + "isBackupRetentionLocked":{ + "shape":"Boolean", + "documentation":"

Indicates whether the backup retention period of the Autonomous Database is locked.

" + }, + "totalBackupStorageSizeInGBs":{ + "shape":"Double", + "documentation":"

The total amount of backup storage used by the Autonomous Database, in GB.

" + }, + "resourcePoolSummary":{ + "shape":"ResourcePoolSummary", + "documentation":"

The configuration of the resource pool for the Autonomous Database.

" + }, + "encryptionSummary":{ + "shape":"EncryptionSummary", + "documentation":"

The encryption configuration for the Autonomous Database.

" + }, + "createdAt":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time when the Autonomous Database was created.

" + }, + "timeOfLastBackup":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time of the last backup of the Autonomous Database.

" + }, + "timeMaintenanceBegin":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time when the next maintenance of the Autonomous Database begins.

" + }, + "timeMaintenanceEnd":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time when the next maintenance of the Autonomous Database ends.

" + }, + "timeLocalDataGuardEnabled":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time when local Oracle Data Guard was enabled for the Autonomous Database.

" + }, + "timeDataGuardRoleChanged":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time when the Oracle Data Guard role of the Autonomous Database last changed.

" + }, + "timeOfLastSwitchover":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time of the last switchover operation for the Autonomous Database.

" + }, + "timeOfLastFailover":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time of the last failover operation for the Autonomous Database.

" + }, + "timeOfLastRefresh":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time of the last refresh of the refreshable clone Autonomous Database.

" + }, + "timeOfLastRefreshPoint":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time as of which the data in the refreshable clone Autonomous Database is current.

" + }, + "timeOfNextRefresh":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time of the next scheduled refresh of the refreshable clone Autonomous Database.

" + }, + "timeOfAutoRefreshStart":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time at which the automatic refresh of the refreshable clone Autonomous Database starts.

" + }, + "timeDeletionOfFreeAutonomousDatabase":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time when the inactive Always Free Autonomous Database is scheduled to be automatically deleted.

" + }, + "timeReclamationOfFreeAutonomousDatabase":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time when the Always Free Autonomous Database is scheduled to be stopped because of inactivity.

" + }, + "timeDisasterRecoveryRoleChanged":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time when the disaster recovery role of the Autonomous Database last changed.

" + }, + "timeUntilReconnectCloneEnabled":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time until which reconnecting the refreshable clone to its source Autonomous Database is allowed.

" + }, + "nextLongTermBackupTimeStamp":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time of the next scheduled long-term backup of the Autonomous Database.

" + }, + "timeUndeleted":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time when the Autonomous Database was restored after deletion.

" + } + }, + "documentation":"

Information about an Autonomous Database.

" + }, + "AutonomousDatabaseApex":{ + "type":"structure", + "members":{ + "apexVersion":{ + "shape":"String", + "documentation":"

The Oracle Application Express (APEX) version of the Autonomous Database.

" + }, + "ordsVersion":{ + "shape":"String", + "documentation":"

The Oracle REST Data Services (ORDS) version of the Autonomous Database.

" + } + }, + "documentation":"

The Oracle Application Express (APEX) details for an Autonomous Database.

" + }, + "AutonomousDatabaseBackup":{ + "type":"structure", + "members":{ + "autonomousDatabaseBackupId":{ + "shape":"ResourceId", + "documentation":"

The unique identifier of the Autonomous Database backup.

" + }, + "autonomousDatabaseBackupArn":{ + "shape":"ResourceArn", + "documentation":"

The Amazon Resource Name (ARN) of the Autonomous Database backup.

" + }, + "autonomousDatabaseId":{ + "shape":"ResourceId", + "documentation":"

The unique identifier of the Autonomous Database that the backup was created from.

" + }, + "ocid":{ + "shape":"String", + "documentation":"

The Oracle Cloud Identifier (OCID) of the Autonomous Database backup.

" + }, + "displayName":{ + "shape":"String", + "documentation":"

The user-friendly name of the Autonomous Database backup.

" + }, + "dbVersion":{ + "shape":"String", + "documentation":"

The Oracle Database software version of the Autonomous Database backup.

" + }, + "status":{ + "shape":"AutonomousDatabaseBackupStatus", + "documentation":"

The current status of the Autonomous Database backup.

" + }, + "statusReason":{ + "shape":"String", + "documentation":"

Additional information about the current status of the Autonomous Database backup, if applicable.

" + }, + "isAutomatic":{ + "shape":"Boolean", + "documentation":"

Indicates whether the backup was created automatically.

" + }, + "retentionPeriodInDays":{ + "shape":"Integer", + "documentation":"

The retention period, in days, for the Autonomous Database backup.

" + }, + "sizeInTBs":{ + "shape":"Double", + "documentation":"

The size of the Autonomous Database backup, in terabytes (TB).

" + }, + "timeAvailableTill":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time until which the Autonomous Database backup is available for restore.

" + }, + "timeStarted":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time when the Autonomous Database backup started.

" + }, + "timeEnded":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time when the Autonomous Database backup ended.

" + }, + "type":{ + "shape":"AutonomousDatabaseBackupType", + "documentation":"

The type of the Autonomous Database backup.

" + } + }, + "documentation":"

Information about an Autonomous Database backup.

" + }, + "AutonomousDatabaseBackupList":{ + "type":"list", + "member":{"shape":"AutonomousDatabaseBackupSummary"} + }, + "AutonomousDatabaseBackupStatus":{ + "type":"string", + "enum":[ + "ACTIVE", + "CREATING", + "UPDATING", + "DELETING", + "FAILED" + ] + }, + "AutonomousDatabaseBackupSummary":{ + "type":"structure", + "members":{ + "autonomousDatabaseBackupId":{ + "shape":"ResourceId", + "documentation":"

The unique identifier of the Autonomous Database backup.

" + }, + "autonomousDatabaseBackupArn":{ + "shape":"ResourceArn", + "documentation":"

The Amazon Resource Name (ARN) of the Autonomous Database backup.

" + }, + "autonomousDatabaseId":{ + "shape":"ResourceId", + "documentation":"

The unique identifier of the Autonomous Database that the backup was created from.

" + }, + "ocid":{ + "shape":"String", + "documentation":"

The Oracle Cloud Identifier (OCID) of the Autonomous Database backup.

" + }, + "displayName":{ + "shape":"String", + "documentation":"

The user-friendly name of the Autonomous Database backup.

" + }, + "dbVersion":{ + "shape":"String", + "documentation":"

The Oracle Database software version of the Autonomous Database backup.

" + }, + "status":{ + "shape":"AutonomousDatabaseBackupStatus", + "documentation":"

The current status of the Autonomous Database backup.

" + }, + "statusReason":{ + "shape":"String", + "documentation":"

Additional information about the current status of the Autonomous Database backup, if applicable.

" + }, + "isAutomatic":{ + "shape":"Boolean", + "documentation":"

Indicates whether the backup was created automatically.

" + }, + "retentionPeriodInDays":{ + "shape":"Integer", + "documentation":"

The retention period, in days, for the Autonomous Database backup.

" + }, + "sizeInTBs":{ + "shape":"Double", + "documentation":"

The size of the Autonomous Database backup, in terabytes (TB).

" + }, + "timeAvailableTill":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time until which the Autonomous Database backup is available for restore.

" + }, + "timeStarted":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time when the Autonomous Database backup started.

" + }, + "timeEnded":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time when the Autonomous Database backup ended.

" + }, + "type":{ + "shape":"AutonomousDatabaseBackupType", + "documentation":"

The type of the Autonomous Database backup.

" + } + }, + "documentation":"

A summary of an Autonomous Database backup.

" + }, + "AutonomousDatabaseBackupType":{ + "type":"string", + "enum":[ + "INCREMENTAL", + "FULL", + "LONGTERM", + "VIRTUAL_FULL", + "CUMULATIVE_INCREMENTAL", + "ROLL_FORWARD_IMAGE_COPY" + ] + }, + "AutonomousDatabaseCharacterSetList":{ + "type":"list", + "member":{"shape":"AutonomousDatabaseCharacterSetSummary"} + }, + "AutonomousDatabaseCharacterSetSummary":{ + "type":"structure", + "members":{ + "characterSet":{ + "shape":"String", + "documentation":"

The name of the character set.

" + } + }, + "documentation":"

A summary of an available character set for Autonomous Databases.

" + }, + "AutonomousDatabaseConnectionStrings":{ + "type":"structure", + "members":{ + "allConnectionStrings":{ + "shape":"DatabaseConnectionStringMap", + "documentation":"

The list of all connection strings that you can use to connect to the Autonomous Database.

" + }, + "dedicated":{ + "shape":"String", + "documentation":"

The connection string for connecting to the Autonomous Database with a dedicated service.

" + }, + "high":{ + "shape":"String", + "documentation":"

The connection string for the high-priority database service.

" + }, + "medium":{ + "shape":"String", + "documentation":"

The connection string for the medium-priority database service.

" + }, + "low":{ + "shape":"String", + "documentation":"

The connection string for the low-priority database service.

" + }, + "profiles":{ + "shape":"DatabaseConnectionStringProfileList", + "documentation":"

The list of connection string profiles for the Autonomous Database.

" + } + }, + "documentation":"

The connection strings used to connect to an Autonomous Database.

" + }, + "AutonomousDatabaseConnectionUrls":{ + "type":"structure", + "members":{ + "apexUrl":{ + "shape":"String", + "documentation":"

The URL for accessing Oracle Application Express (APEX) for the Autonomous Database.

" + }, + "databaseTransformsUrl":{ + "shape":"String", + "documentation":"

The URL for accessing Oracle Database Transforms for the Autonomous Database.

" + }, + "graphStudioUrl":{ + "shape":"String", + "documentation":"

The URL for accessing Oracle Graph Studio for the Autonomous Database.

" + }, + "machineLearningNotebookUrl":{ + "shape":"String", + "documentation":"

The URL for accessing the Oracle Machine Learning notebook for the Autonomous Database.

" + }, + "machineLearningUserManagementUrl":{ + "shape":"String", + "documentation":"

The URL for accessing Oracle Machine Learning user management for the Autonomous Database.

" + }, + "mongoDbUrl":{ + "shape":"String", + "documentation":"

The URL for accessing the MongoDB API for the Autonomous Database.

" + }, + "ordsUrl":{ + "shape":"String", + "documentation":"

The URL for accessing Oracle REST Data Services (ORDS) for the Autonomous Database.

" + }, + "spatialStudioUrl":{ + "shape":"String", + "documentation":"

The URL for accessing Oracle Spatial Studio for the Autonomous Database.

" + }, + "sqlDevWebUrl":{ + "shape":"String", + "documentation":"

The URL for accessing Oracle SQL Developer Web for the Autonomous Database.

" + } + }, + "documentation":"

The connection URLs for accessing tools and services for an Autonomous Database.

" + }, + "AutonomousDatabaseList":{ + "type":"list", + "member":{"shape":"AutonomousDatabaseSummary"} + }, + "AutonomousDatabasePeerList":{ + "type":"list", + "member":{"shape":"AutonomousDatabasePeerSummary"} + }, + "AutonomousDatabasePeerSummary":{ + "type":"structure", + "members":{ + "autonomousDatabaseId":{ + "shape":"ResourceId", + "documentation":"

The unique identifier of the peer Autonomous Database.

" + }, + "autonomousDatabaseArn":{ + "shape":"ResourceArn", + "documentation":"

The Amazon Resource Name (ARN) of the peer Autonomous Database.

" + }, + "ocid":{ + "shape":"String", + "documentation":"

The Oracle Cloud Identifier (OCID) of the peer Autonomous Database.

" + }, + "region":{ + "shape":"String", + "documentation":"

The Amazon Web Services Region where the peer Autonomous Database is located.

" + } + }, + "documentation":"

A summary of a peer database of an Autonomous Database.

" + }, + "AutonomousDatabaseResourceStatus":{ + "type":"string", + "enum":[ + "AVAILABLE", + "FAILED", + "PROVISIONING", + "TERMINATED", + "TERMINATING", + "UPDATING", + "MAINTENANCE_IN_PROGRESS", + "STOPPING", + "STOPPED", + "STARTING", + "UNAVAILABLE", + "RESTORE_IN_PROGRESS", + "RESTORE_FAILED", + "BACKUP_IN_PROGRESS", + "SCALE_IN_PROGRESS", + "AVAILABLE_NEEDS_ATTENTION", + "RESTARTING", + "RECREATING", + "ROLE_CHANGE_IN_PROGRESS", + "UPGRADING", + "INACCESSIBLE", + "STANDBY" + ] + }, + "AutonomousDatabaseSummary":{ + "type":"structure", + "members":{ + "autonomousDatabaseId":{ + "shape":"ResourceIdOrArn", + "documentation":"

The unique identifier of the Autonomous Database.

" + }, + "autonomousDatabaseArn":{ + "shape":"ResourceArn", + "documentation":"

The Amazon Resource Name (ARN) of the Autonomous Database.

" + }, + "ociResourceAnchorName":{ + "shape":"String", + "documentation":"

The name of the Oracle Cloud Infrastructure (OCI) resource anchor associated with the Autonomous Database.

" + }, + "percentProgress":{ + "shape":"Float", + "documentation":"

The progress of the current operation on the Autonomous Database, as a percentage.

" + }, + "ocid":{ + "shape":"String", + "documentation":"

The Oracle Cloud Identifier (OCID) of the Autonomous Database.

" + }, + "ociUrl":{ + "shape":"String", + "documentation":"

The URL for accessing the OCI console page for the Autonomous Database.

" + }, + "displayName":{ + "shape":"String", + "documentation":"

The user-friendly name of the Autonomous Database.

" + }, + "dbName":{ + "shape":"String", + "documentation":"

The name of the Autonomous Database.

" + }, + "sourceId":{ + "shape":"String", + "documentation":"

The unique identifier of the source from which the Autonomous Database was created.

" + }, + "status":{ + "shape":"AutonomousDatabaseResourceStatus", + "documentation":"

The current status of the Autonomous Database.

" + }, + "statusReason":{ + "shape":"String", + "documentation":"

Additional information about the current status of the Autonomous Database, if applicable.

" + }, + "databaseType":{ + "shape":"DatabaseType", + "documentation":"

The type of the Autonomous Database, either a regular database or a clone.

" + }, + "dbVersion":{ + "shape":"String", + "documentation":"

The Oracle Database software version of the Autonomous Database.

" + }, + "dbWorkload":{ + "shape":"DbWorkload", + "documentation":"

The intended use of the Autonomous Database, such as transaction processing, data warehouse, JSON database, or APEX.

" + }, + "characterSet":{ + "shape":"String", + "documentation":"

The character set of the Autonomous Database.

" + }, + "ncharacterSet":{ + "shape":"String", + "documentation":"

The national character set of the Autonomous Database.

" + }, + "databaseEdition":{ + "shape":"DatabaseEdition", + "documentation":"

The Oracle Database edition of the Autonomous Database.

" + }, + "licenseModel":{ + "shape":"LicenseModel", + "documentation":"

The Oracle license model that applies to the Autonomous Database.

" + }, + "openMode":{ + "shape":"OpenMode", + "documentation":"

The mode in which the Autonomous Database is open, either read-only or read/write.

" + }, + "permissionLevel":{ + "shape":"PermissionLevel", + "documentation":"

The permission level of the Autonomous Database.

" + }, + "isMtlsConnectionRequired":{ + "shape":"Boolean", + "documentation":"

Indicates whether mutual TLS (mTLS) authentication is required to connect to the Autonomous Database.

" + }, + "autonomousMaintenanceScheduleType":{ + "shape":"AutonomousMaintenanceScheduleType", + "documentation":"

The maintenance schedule type for the Autonomous Database.

" + }, + "netServicesArchitecture":{ + "shape":"NetServicesArchitecture", + "documentation":"

The Oracle Net Services architecture of the Autonomous Database, either dedicated or shared.

" + }, + "availableUpgradeVersions":{ + "shape":"StringList", + "documentation":"

The list of Oracle Database software versions to which the Autonomous Database can be upgraded.

" + }, + "byolComputeCountLimit":{ + "shape":"Integer", + "documentation":"

The maximum number of compute resources that you can allocate to the Autonomous Database under the bring-your-own-license (BYOL) model.

" + }, + "connectionStringDetails":{ + "shape":"AutonomousDatabaseConnectionStrings", + "documentation":"

The connection string details for the Autonomous Database.

" + }, + "serviceConsoleUrl":{ + "shape":"String", + "documentation":"

The URL for accessing the Oracle service console for the Autonomous Database.

" + }, + "sqlWebDeveloperUrl":{ + "shape":"String", + "documentation":"

The URL for accessing Oracle SQL Developer Web for the Autonomous Database.

" + }, + "customerContacts":{ + "shape":"CustomerContacts", + "documentation":"

The list of customer contacts that receive operational notifications from Oracle for the Autonomous Database.

" + }, + "apexDetails":{ + "shape":"AutonomousDatabaseApex", + "documentation":"

The Oracle Application Express (APEX) details for the Autonomous Database.

" + }, + "standbyDb":{ + "shape":"DatabaseStandbySummary", + "documentation":"

The details of the standby Autonomous Database in a cross-Region Oracle Data Guard configuration.

" + }, + "localStandbyDb":{ + "shape":"DatabaseStandbySummary", + "documentation":"

The details of the local standby Autonomous Database in an Oracle Data Guard configuration.

" + }, + "dataSafeStatus":{ + "shape":"DataSafeStatus", + "documentation":"

The status of the Oracle Data Safe registration for the Autonomous Database.

" + }, + "databaseManagementStatus":{ + "shape":"DatabaseManagementStatus", + "documentation":"

The status of Oracle Database Management for the Autonomous Database.

" + }, + "operationsInsightsStatus":{ + "shape":"OperationsInsightsStatus", + "documentation":"

The status of Oracle Operations Insights for the Autonomous Database.

" + }, + "availabilityZone":{ + "shape":"String", + "documentation":"

The Availability Zone where the Autonomous Database is located.

" + }, + "availabilityZoneId":{ + "shape":"String", + "documentation":"

The unique identifier of the Availability Zone where the Autonomous Database is located.

" + }, + "maintenanceTargetComponent":{ + "shape":"String", + "documentation":"

The component on the Autonomous Database that the current maintenance is being applied to.

" + }, + "connectionUrls":{ + "shape":"AutonomousDatabaseConnectionUrls", + "documentation":"

The connection URLs for accessing tools and services for the Autonomous Database.

" + }, + "dbToolsDetails":{ + "shape":"DatabaseToolList", + "documentation":"

The list of database management tools enabled for the Autonomous Database.

" + }, + "scheduledOperations":{ + "shape":"ScheduledOperationDetailsList", + "documentation":"

The list of scheduled start and stop times for the Autonomous Database.

" + }, + "resourcePoolLeaderId":{ + "shape":"String", + "documentation":"

The unique identifier of the resource pool leader Autonomous Database.

" + }, + "computeCount":{ + "shape":"Float", + "documentation":"

The compute capacity, in number of Elastic CPUs (ECPUs) or Oracle CPUs (OCPUs), assigned to the Autonomous Database.

" + }, + "computeModel":{ + "shape":"ComputeModel", + "documentation":"

The compute model of the Autonomous Database, either ECPU or OCPU.

" + }, + "cpuCoreCount":{ + "shape":"Integer", + "documentation":"

The number of CPU cores allocated to the Autonomous Database.

" + }, + "memoryPerOracleComputeUnitInGBs":{ + "shape":"Integer", + "documentation":"

The amount of memory allocated per Oracle Compute Unit, in GB.

" + }, + "provisionableCpus":{ + "shape":"IntegerList", + "documentation":"

The list of CPU core counts that you can provision for the Autonomous Database.

" + }, + "isAutoScalingEnabled":{ + "shape":"Boolean", + "documentation":"

Indicates whether automatic scaling of the compute resources is enabled for the Autonomous Database.

" + }, + "dataStorageSizeInTBs":{ + "shape":"Double", + "documentation":"

The size, in terabytes (TB), of the data volume allocated for the Autonomous Database.

" + }, + "dataStorageSizeInGBs":{ + "shape":"Integer", + "documentation":"

The size, in gigabytes (GB), of the data volume allocated for the Autonomous Database.

" + }, + "usedDataStorageSizeInTBs":{ + "shape":"Double", + "documentation":"

The amount of data storage currently in use by the Autonomous Database, in TB.

" + }, + "usedDataStorageSizeInGBs":{ + "shape":"Integer", + "documentation":"

The amount of data storage currently in use by the Autonomous Database, in GB.

" + }, + "actualUsedDataStorageSizeInTBs":{ + "shape":"Double", + "documentation":"

The actual amount of data storage currently in use by the Autonomous Database, in TB.

" + }, + "allocatedStorageSizeInTBs":{ + "shape":"Double", + "documentation":"

The amount of storage currently allocated to the Autonomous Database, in TB.

" + }, + "inMemoryAreaInGBs":{ + "shape":"Integer", + "documentation":"

The size of the in-memory area of the Autonomous Database, in GB.

" + }, + "isAutoScalingForStorageEnabled":{ + "shape":"Boolean", + "documentation":"

Indicates whether automatic scaling of the storage is enabled for the Autonomous Database.

" + }, + "odbNetworkId":{ + "shape":"ResourceId", + "documentation":"

The unique identifier of the ODB network associated with the Autonomous Database.

" + }, + "odbNetworkArn":{ + "shape":"ResourceArn", + "documentation":"

The Amazon Resource Name (ARN) of the ODB network associated with the Autonomous Database.

" + }, + "privateEndpoint":{ + "shape":"String", + "documentation":"

The private endpoint for the Autonomous Database.

" + }, + "privateEndpointIp":{ + "shape":"String", + "documentation":"

The private endpoint IP address for the Autonomous Database.

" + }, + "privateEndpointLabel":{ + "shape":"String", + "documentation":"

The private endpoint label for the Autonomous Database.

" + }, + "allowlistedIps":{ + "shape":"StringList", + "documentation":"

The list of IP addresses that are allowed to access the Autonomous Database.

" + }, + "standbyAllowlistedIps":{ + "shape":"StringList", + "documentation":"

The list of IP addresses that are allowed to access the standby Autonomous Database.

" + }, + "standbyAllowlistedIpsSource":{ + "shape":"StandbyAllowlistedIpsSource", + "documentation":"

The source of the allowlisted IP addresses for the standby Autonomous Database.

" + }, + "isLocalDataGuardEnabled":{ + "shape":"Boolean", + "documentation":"

Indicates whether local Oracle Data Guard is enabled for the Autonomous Database.

" + }, + "isRemoteDataGuardEnabled":{ + "shape":"Boolean", + "documentation":"

Indicates whether remote Oracle Data Guard is enabled for the Autonomous Database.

" + }, + "localDisasterRecoveryType":{ + "shape":"DisasterRecoveryType", + "documentation":"

The type of local disaster recovery configured for the Autonomous Database.

" + }, + "role":{ + "shape":"DataGuardRole", + "documentation":"

The Oracle Data Guard role of the Autonomous Database.

" + }, + "peerDbIds":{ + "shape":"StringList", + "documentation":"

The list of unique identifiers of the peer Autonomous Databases.

" + }, + "failedDataRecoveryInSeconds":{ + "shape":"Integer", + "documentation":"

The amount of time, in seconds, that the data in the Autonomous Database is behind the data in the primary database.

" + }, + "localAdgAutoFailoverMaxDataLossLimit":{ + "shape":"Integer", + "documentation":"

The maximum data loss limit, in seconds, for automatic failover to the local Oracle Data Guard standby database.

" + }, + "remoteDisasterRecoveryConfiguration":{ + "shape":"DisasterRecoveryConfiguration", + "documentation":"

The configuration of the remote disaster recovery for the Autonomous Database.

" + }, + "isRefreshableClone":{ + "shape":"Boolean", + "documentation":"

Indicates whether the Autonomous Database is a refreshable clone.

" + }, + "refreshableMode":{ + "shape":"RefreshableMode", + "documentation":"

The refresh mode of the refreshable clone Autonomous Database.

" + }, + "refreshableStatus":{ + "shape":"RefreshableStatus", + "documentation":"

The refresh status of the refreshable clone Autonomous Database.

" + }, + "autoRefreshFrequencyInSeconds":{ + "shape":"Integer", + "documentation":"

The frequency, in seconds, at which the refreshable clone Autonomous Database is automatically refreshed.

" + }, + "autoRefreshPointLagInSeconds":{ + "shape":"Integer", + "documentation":"

The time lag, in seconds, between the refreshable clone and its source Autonomous Database.

" + }, + "isReconnectCloneEnabled":{ + "shape":"Boolean", + "documentation":"

Indicates whether reconnecting the refreshable clone to its source Autonomous Database is enabled.

" + }, + "cloneTableSpaceList":{ + "shape":"IntegerList", + "documentation":"

The list of tablespace identifiers to clone for the Autonomous Database.

" + }, + "backupRetentionPeriodInDays":{ + "shape":"Integer", + "documentation":"

The retention period, in days, for automatic backups of the Autonomous Database.

" + }, + "longTermBackupSchedule":{ + "shape":"LongTermBackupSchedule", + "documentation":"

The long-term backup schedule for the Autonomous Database.

" + }, + "isBackupRetentionLocked":{ + "shape":"Boolean", + "documentation":"

Indicates whether the backup retention period of the Autonomous Database is locked.

" + }, + "totalBackupStorageSizeInGBs":{ + "shape":"Double", + "documentation":"

The total amount of backup storage used by the Autonomous Database, in GB.

" + }, + "resourcePoolSummary":{ + "shape":"ResourcePoolSummary", + "documentation":"

The configuration of the resource pool for the Autonomous Database.

" + }, + "encryptionSummary":{ + "shape":"EncryptionSummary", + "documentation":"

The encryption configuration for the Autonomous Database.

" + }, + "createdAt":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time when the Autonomous Database was created.

" + }, + "timeOfLastBackup":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time of the last backup of the Autonomous Database.

" + }, + "timeMaintenanceBegin":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time when the next maintenance of the Autonomous Database begins.

" + }, + "timeMaintenanceEnd":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time when the next maintenance of the Autonomous Database ends.

" + }, + "timeLocalDataGuardEnabled":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time when local Oracle Data Guard was enabled for the Autonomous Database.

" + }, + "timeDataGuardRoleChanged":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time when the Oracle Data Guard role of the Autonomous Database last changed.

" + }, + "timeOfLastSwitchover":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time of the last switchover operation for the Autonomous Database.

" + }, + "timeOfLastFailover":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time of the last failover operation for the Autonomous Database.

" + }, + "timeOfLastRefresh":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time of the last refresh of the refreshable clone Autonomous Database.

" + }, + "timeOfLastRefreshPoint":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time as of which the data in the refreshable clone Autonomous Database is current.

" + }, + "timeOfNextRefresh":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time of the next scheduled refresh of the refreshable clone Autonomous Database.

" + }, + "timeOfAutoRefreshStart":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time at which the automatic refresh of the refreshable clone Autonomous Database starts.

" + }, + "timeDeletionOfFreeAutonomousDatabase":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time when the inactive Always Free Autonomous Database is scheduled to be automatically deleted.

" + }, + "timeReclamationOfFreeAutonomousDatabase":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time when the Always Free Autonomous Database is scheduled to be stopped because of inactivity.

" + }, + "timeDisasterRecoveryRoleChanged":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time when the disaster recovery role of the Autonomous Database last changed.

" + }, + "timeUntilReconnectCloneEnabled":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time until which reconnecting the refreshable clone to its source Autonomous Database is allowed.

" + }, + "nextLongTermBackupTimeStamp":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time of the next scheduled long-term backup of the Autonomous Database.

" + }, + "timeUndeleted":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time when the Autonomous Database was restored after deletion.

" + } + }, + "documentation":"

A summary of an Autonomous Database.

" + }, + "AutonomousDatabaseVersionList":{ + "type":"list", + "member":{"shape":"AutonomousDatabaseVersionSummary"} + }, + "AutonomousDatabaseVersionSummary":{ + "type":"structure", + "members":{ + "dbWorkload":{ + "shape":"DbWorkload", + "documentation":"

The intended use of the Autonomous Database that the version supports, such as transaction processing, data warehouse, JSON database, or APEX.

" + }, + "details":{ + "shape":"String", + "documentation":"

Additional details about the Autonomous Database software version.

" + }, + "version":{ + "shape":"String", + "documentation":"

The Oracle Database software version.

" + } + }, + "documentation":"

A summary of an available Oracle Database software version for Autonomous Databases.

" + }, + "AutonomousDatabaseWalletDetails":{ + "type":"structure", + "members":{ + "status":{ + "shape":"AutonomousDatabaseWalletStatus", + "documentation":"

The current status of the Autonomous Database wallet.

" + }, + "timeRotated":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time when the Autonomous Database wallet was last rotated.

" } - } + }, + "documentation":"

The wallet details for an Autonomous Database.

" }, - "AssociateIamRoleToResourceInputResourceArnString":{ + "AutonomousDatabaseWalletFile":{ + "type":"blob", + "sensitive":true + }, + "AutonomousDatabaseWalletStatus":{ "type":"string", - "max":2048, - "min":20, - "pattern":"arn:(?:aws|aws-cn|aws-us-gov|aws-iso-[a-z]?|aws-iso):odb:[a-z0-9-]+:\\d{12}:(?:cloud-vm-cluster|cloud-autonomous-vm-cluster)/[a-z0-9-_]+" + "enum":[ + "ACTIVE", + "UPDATING" + ] }, - "AssociateIamRoleToResourceOutput":{ - "type":"structure", - "members":{} + "AutonomousMaintenanceScheduleType":{ + "type":"string", + "enum":[ + "EARLY", + "REGULAR" + ] }, "AutonomousVirtualMachineList":{ "type":"list", @@ -903,10 +2529,101 @@ }, "documentation":"

A summary of an Autonomous Virtual Machine (VM) within an Autonomous VM cluster.

" }, + "AwsEncryptionKeyConfiguration":{ + "type":"structure", + "members":{ + "iamRoleArn":{ + "shape":"RoleArn", + "documentation":"

The Amazon Resource Name (ARN) of the Amazon Web Services Identity and Access Management (IAM) role that grants access to the KMS key.

" + }, + "externalIdType":{ + "shape":"ExternalIdType", + "documentation":"

The type of external identifier associated with the encryption key.

" + }, + "kmsKeyId":{ + "shape":"KmsKeyIdOrArn", + "documentation":"

The identifier or ARN of the Amazon Web Services KMS key used for encryption.

" + } + }, + "documentation":"

The configuration of the Amazon Web Services Key Management Service (KMS) encryption key used for an Autonomous Database.

" + }, + "AwsEncryptionKeyConfigurationInput":{ + "type":"structure", + "members":{ + "iamRoleArn":{ + "shape":"RoleArn", + "documentation":"

The Amazon Resource Name (ARN) of the Amazon Web Services Identity and Access Management (IAM) role that grants access to the KMS key.

" + }, + "externalIdType":{ + "shape":"ExternalIdType", + "documentation":"

The type of external identifier associated with the encryption key.

" + }, + "kmsKeyId":{ + "shape":"KmsKeyIdOrArn", + "documentation":"

The identifier or ARN of the Amazon Web Services KMS key to use for encryption.

" + } + }, + "documentation":"

The configuration of the Amazon Web Services Key Management Service (KMS) encryption key to use for an Autonomous Database.

" + }, "Boolean":{ "type":"boolean", "box":true }, + "CloneToRefreshableConfiguration":{ + "type":"structure", + "required":["sourceAutonomousDatabaseId"], + "members":{ + "sourceAutonomousDatabaseId":{ + "shape":"ResourceIdOrArn", + "documentation":"

The unique identifier of the source Autonomous Database to create the refreshable clone from.

" + }, + "refreshableMode":{ + "shape":"RefreshableMode", + "documentation":"

The refresh mode of the refreshable clone, either automatic or manual.

" + }, + "autoRefreshFrequencyInSeconds":{ + "shape":"CloneToRefreshableConfigurationAutoRefreshFrequencyInSecondsInteger", + "documentation":"

The frequency, in seconds, at which the refreshable clone is automatically refreshed.

" + }, + "autoRefreshPointLagInSeconds":{ + "shape":"CloneToRefreshableConfigurationAutoRefreshPointLagInSecondsInteger", + "documentation":"

The time lag, in seconds, between the refreshable clone and its source database.

" + }, + "timeOfAutoRefreshStart":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time at which the automatic refresh of the refreshable clone starts.

" + }, + "openMode":{ + "shape":"OpenMode", + "documentation":"

The mode in which to open the refreshable clone, either read-only or read/write.

" + }, + "cloneType":{ + "shape":"CloneType", + "documentation":"

The type of clone to create.

" + } + }, + "documentation":"

The configuration for creating an Autonomous Database as a refreshable clone.

" + }, + "CloneToRefreshableConfigurationAutoRefreshFrequencyInSecondsInteger":{ + "type":"integer", + "box":true, + "max":604800, + "min":3600 + }, + "CloneToRefreshableConfigurationAutoRefreshPointLagInSecondsInteger":{ + "type":"integer", + "box":true, + "max":604800, + "min":0 + }, + "CloneType":{ + "type":"string", + "enum":[ + "FULL", + "METADATA", + "PARTIAL" + ] + }, "CloudAutonomousVmCluster":{ "type":"structure", "required":["cloudAutonomousVmClusterId"], @@ -2071,6 +3788,12 @@ }, "documentation":"

Information about a VM cluster.

" }, + "ClusterName":{ + "type":"string", + "max":11, + "min":1, + "pattern":"[a-zA-Z][a-zA-Z0-9-]*" + }, "ComputeModel":{ "type":"string", "enum":[ @@ -2078,26 +3801,379 @@ "OCPU" ] }, - "ConflictException":{ + "ConflictException":{ + "type":"structure", + "required":[ + "message", + "resourceId", + "resourceType" + ], + "members":{ + "message":{"shape":"String"}, + "resourceId":{ + "shape":"String", + "documentation":"

The identifier of the resource that caused the conflict.

" + }, + "resourceType":{ + "shape":"String", + "documentation":"

The type of resource that caused the conflict.

" + } + }, + "documentation":"

Occurs when a conflict with the current status of your resource. Fix any inconsistencies with your resource and try again.

", + "exception":true + }, + "CreateAutonomousDatabaseBackupInput":{ + "type":"structure", + "required":["autonomousDatabaseId"], + "members":{ + "autonomousDatabaseId":{ + "shape":"ResourceIdOrArn", + "documentation":"

The unique identifier of the Autonomous Database to back up.

" + }, + "displayName":{ + "shape":"ResourceDisplayName", + "documentation":"

The user-friendly name for the Autonomous Database backup.

" + }, + "retentionPeriodInDays":{ + "shape":"CreateAutonomousDatabaseBackupInputRetentionPeriodInDaysInteger", + "documentation":"

The retention period, in days, for the Autonomous Database backup.

" + }, + "clientToken":{ + "shape":"CreateAutonomousDatabaseBackupInputClientTokenString", + "documentation":"

A client-provided token to ensure the idempotency of the request.

", + "idempotencyToken":true + }, + "tags":{ + "shape":"RequestTagMap", + "documentation":"

The list of resource tags to apply to the Autonomous Database backup. Each tag is a key-value pair with no predefined name, type, or namespace.

" + } + } + }, + "CreateAutonomousDatabaseBackupInputClientTokenString":{ + "type":"string", + "max":64, + "min":8, + "pattern":"[a-zA-Z0-9_\\/.=-]+" + }, + "CreateAutonomousDatabaseBackupInputRetentionPeriodInDaysInteger":{ + "type":"integer", + "box":true, + "max":3650, + "min":90 + }, + "CreateAutonomousDatabaseBackupOutput":{ + "type":"structure", + "required":["autonomousDatabaseBackupId"], + "members":{ + "displayName":{ + "shape":"String", + "documentation":"

The user-friendly name of the Autonomous Database backup that was created.

" + }, + "status":{ + "shape":"ResourceStatus", + "documentation":"

The current status of the Autonomous Database backup.

" + }, + "statusReason":{ + "shape":"String", + "documentation":"

Additional information about the current status of the Autonomous Database backup, if applicable.

" + }, + "autonomousDatabaseBackupId":{ + "shape":"String", + "documentation":"

The unique identifier of the Autonomous Database backup that was created.

" + } + } + }, + "CreateAutonomousDatabaseInput":{ + "type":"structure", + "members":{ + "odbNetworkId":{ + "shape":"ResourceIdOrArn", + "documentation":"

The unique identifier of the ODB network to be used for the Autonomous Database.

" + }, + "displayName":{ + "shape":"ResourceDisplayName", + "documentation":"

The user-friendly name for the Autonomous Database. The name does not have to be unique.

" + }, + "dbName":{ + "shape":"CreateAutonomousDatabaseInputDbNameString", + "documentation":"

The name of the Autonomous Database. The name must begin with an alphabetic character and can contain a maximum of 30 alphanumeric characters. Special characters are not permitted. The name must be unique in the Amazon Web Services account.

" + }, + "adminPassword":{ + "shape":"CreateAutonomousDatabaseInputAdminPasswordString", + "documentation":"

The password for the ADMIN user of the Autonomous Database.

" + }, + "computeCount":{ + "shape":"CreateAutonomousDatabaseInputComputeCountDouble", + "documentation":"

The compute capacity, in number of Elastic CPUs (ECPUs) or Oracle CPUs (OCPUs), to assign to the Autonomous Database.

" + }, + "dataStorageSizeInTBs":{ + "shape":"CreateAutonomousDatabaseInputDataStorageSizeInTBsInteger", + "documentation":"

The size, in terabytes (TB), of the data volume to allocate for the Autonomous Database.

" + }, + "dataStorageSizeInGBs":{ + "shape":"CreateAutonomousDatabaseInputDataStorageSizeInGBsInteger", + "documentation":"

The size, in gigabytes (GB), of the data volume to allocate for the Autonomous Database.

" + }, + "dbWorkload":{ + "shape":"DbWorkload", + "documentation":"

The intended use of the Autonomous Database, such as transaction processing, data warehouse, JSON database, or APEX.

" + }, + "isAutoScalingEnabled":{ + "shape":"Boolean", + "documentation":"

Specifies whether to enable automatic scaling of the compute resources for the Autonomous Database.

" + }, + "isAutoScalingForStorageEnabled":{ + "shape":"Boolean", + "documentation":"

Specifies whether to enable automatic scaling of the storage for the Autonomous Database.

" + }, + "licenseModel":{ + "shape":"LicenseModel", + "documentation":"

The Oracle license model to apply to the Autonomous Database.

" + }, + "characterSet":{ + "shape":"CreateAutonomousDatabaseInputCharacterSetString", + "documentation":"

The character set to use for the Autonomous Database.

" + }, + "ncharacterSet":{ + "shape":"CreateAutonomousDatabaseInputNcharacterSetString", + "documentation":"

The national character set to use for the Autonomous Database.

" + }, + "dbVersion":{ + "shape":"CreateAutonomousDatabaseInputDbVersionString", + "documentation":"

The Oracle Database software version to use for the Autonomous Database.

" + }, + "databaseEdition":{ + "shape":"DatabaseEdition", + "documentation":"

The Oracle Database edition to apply to the Autonomous Database.

" + }, + "standbyAllowlistedIpsSource":{ + "shape":"StandbyAllowlistedIpsSource", + "documentation":"

The source of the allowlisted IP addresses for the standby Autonomous Database.

" + }, + "autonomousMaintenanceScheduleType":{ + "shape":"AutonomousMaintenanceScheduleType", + "documentation":"

The maintenance schedule type for the Autonomous Database.

" + }, + "backupRetentionPeriodInDays":{ + "shape":"Integer", + "documentation":"

The retention period, in days, for automatic backups of the Autonomous Database.

" + }, + "byolComputeCountLimit":{ + "shape":"CreateAutonomousDatabaseInputByolComputeCountLimitDouble", + "documentation":"

The maximum number of compute resources that you can allocate to the Autonomous Database under the bring-your-own-license (BYOL) model.

" + }, + "cpuCoreCount":{ + "shape":"CreateAutonomousDatabaseInputCpuCoreCountInteger", + "documentation":"

The number of CPU cores to allocate to the Autonomous Database.

" + }, + "customerContactsToSendToOCI":{ + "shape":"CustomerContacts", + "documentation":"

The list of customer contacts to receive operational notifications from Oracle Cloud Infrastructure (OCI) for the Autonomous Database.

" + }, + "privateEndpointIp":{ + "shape":"String", + "documentation":"

The private endpoint IP address for the Autonomous Database.

" + }, + "privateEndpointLabel":{ + "shape":"String", + "documentation":"

The private endpoint label for the Autonomous Database.

" + }, + "resourcePoolLeaderId":{ + "shape":"ResourceIdOrArn", + "documentation":"

The unique identifier of the resource pool leader Autonomous Database.

" + }, + "resourcePoolSummary":{ + "shape":"ResourcePoolSummary", + "documentation":"

The configuration of the resource pool for the Autonomous Database.

" + }, + "scheduledOperations":{ + "shape":"ScheduledOperationDetailsList", + "documentation":"

The list of scheduled start and stop times for the Autonomous Database.

" + }, + "standbyAllowlistedIps":{ + "shape":"StringList", + "documentation":"

The list of IP addresses that are allowed to access the standby Autonomous Database.

" + }, + "allowlistedIps":{ + "shape":"StringList", + "documentation":"

The list of IP addresses that are allowed to access the Autonomous Database.

" + }, + "transportableTablespace":{ + "shape":"TransportableTablespace", + "documentation":"

The transportable tablespace configuration to use when creating the Autonomous Database.

" + }, + "isBackupRetentionLocked":{ + "shape":"Boolean", + "documentation":"

Specifies whether to lock the backup retention period of the Autonomous Database to prevent it from being shortened.

" + }, + "isLocalDataGuardEnabled":{ + "shape":"Boolean", + "documentation":"

Specifies whether to enable local Oracle Data Guard for the Autonomous Database.

" + }, + "isMtlsConnectionRequired":{ + "shape":"Boolean", + "documentation":"

Specifies whether mutual TLS (mTLS) authentication is required to connect to the Autonomous Database.

" + }, + "dbToolsDetails":{ + "shape":"DatabaseToolList", + "documentation":"

The list of database management tools to enable for the Autonomous Database.

" + }, + "source":{ + "shape":"SourceType", + "documentation":"

The source from which to create the Autonomous Database, such as a clone, backup, or cross-Region copy.

" + }, + "sourceConfiguration":{ + "shape":"SourceConfiguration", + "documentation":"

The configuration details for the source used to create the Autonomous Database.

" + }, + "encryptionKeyProvider":{ + "shape":"EncryptionKeyProviderInput", + "documentation":"

The provider of the encryption key to use for the Autonomous Database.

" + }, + "encryptionKeyConfiguration":{ + "shape":"EncryptionKeyConfigurationInput", + "documentation":"

The configuration of the encryption key to use for the Autonomous Database.

" + }, + "clientToken":{ + "shape":"CreateAutonomousDatabaseInputClientTokenString", + "documentation":"

A client-provided token to ensure the idempotency of the request.

", + "idempotencyToken":true + }, + "tags":{ + "shape":"RequestTagMap", + "documentation":"

The list of resource tags to apply to the Autonomous Database. Each tag is a key-value pair with no predefined name, type, or namespace.

" + } + } + }, + "CreateAutonomousDatabaseInputAdminPasswordString":{ + "type":"string", + "max":30, + "min":12, + "sensitive":true + }, + "CreateAutonomousDatabaseInputByolComputeCountLimitDouble":{ + "type":"double", + "box":true, + "min":2 + }, + "CreateAutonomousDatabaseInputCharacterSetString":{ + "type":"string", + "max":255, + "min":1 + }, + "CreateAutonomousDatabaseInputClientTokenString":{ + "type":"string", + "max":64, + "min":8, + "pattern":"[a-zA-Z0-9_\\/.=-]+" + }, + "CreateAutonomousDatabaseInputComputeCountDouble":{ + "type":"double", + "box":true, + "max":512, + "min":0.1 + }, + "CreateAutonomousDatabaseInputCpuCoreCountInteger":{ + "type":"integer", + "box":true, + "max":128, + "min":1 + }, + "CreateAutonomousDatabaseInputDataStorageSizeInGBsInteger":{ + "type":"integer", + "box":true, + "max":393216, + "min":20 + }, + "CreateAutonomousDatabaseInputDataStorageSizeInTBsInteger":{ + "type":"integer", + "box":true, + "max":384, + "min":1 + }, + "CreateAutonomousDatabaseInputDbNameString":{ + "type":"string", + "max":30, + "min":1 + }, + "CreateAutonomousDatabaseInputDbVersionString":{ + "type":"string", + "max":255, + "min":1 + }, + "CreateAutonomousDatabaseInputNcharacterSetString":{ + "type":"string", + "max":255, + "min":1 + }, + "CreateAutonomousDatabaseOutput":{ + "type":"structure", + "required":["autonomousDatabaseId"], + "members":{ + "autonomousDatabaseId":{ + "shape":"String", + "documentation":"

The unique identifier of the Autonomous Database that was created.

" + }, + "displayName":{ + "shape":"String", + "documentation":"

The user-friendly name of the Autonomous Database that was created.

" + }, + "status":{ + "shape":"AutonomousDatabaseResourceStatus", + "documentation":"

The current status of the Autonomous Database.

" + }, + "statusReason":{ + "shape":"String", + "documentation":"

Additional information about the current status of the Autonomous Database, if applicable.

" + } + } + }, + "CreateAutonomousDatabaseWalletInput":{ "type":"structure", "required":[ - "message", - "resourceId", - "resourceType" + "autonomousDatabaseId", + "password" ], "members":{ - "message":{"shape":"String"}, - "resourceId":{ - "shape":"String", - "documentation":"

The identifier of the resource that caused the conflict.

" + "autonomousDatabaseId":{ + "shape":"ResourceIdOrArn", + "documentation":"

The unique identifier of the Autonomous Database to create a wallet for.

" }, - "resourceType":{ - "shape":"String", - "documentation":"

The type of resource that caused the conflict.

" + "walletType":{ + "shape":"WalletType", + "documentation":"

The type of wallet to create, either a regional wallet or an instance wallet.

" + }, + "password":{ + "shape":"CreateAutonomousDatabaseWalletInputPasswordString", + "documentation":"

The password to encrypt the keys inside the wallet.

" + }, + "clientToken":{ + "shape":"CreateAutonomousDatabaseWalletInputClientTokenString", + "documentation":"

A client-provided token to ensure the idempotency of the request.

", + "idempotencyToken":true } - }, - "documentation":"

Occurs when a conflict with the current status of your resource. Fix any inconsistencies with your resource and try again.

", - "exception":true + } + }, + "CreateAutonomousDatabaseWalletInputClientTokenString":{ + "type":"string", + "max":64, + "min":8, + "pattern":"[a-zA-Z0-9_\\/.=-]+" + }, + "CreateAutonomousDatabaseWalletInputPasswordString":{ + "type":"string", + "min":8, + "sensitive":true + }, + "CreateAutonomousDatabaseWalletOutput":{ + "type":"structure", + "required":["autonomousDatabaseWalletFile"], + "members":{ + "autonomousDatabaseWalletFile":{ + "shape":"AutonomousDatabaseWalletFile", + "documentation":"

The generated wallet file for the Autonomous Database, returned as a compressed archive.

" + } + } }, "CreateCloudAutonomousVmClusterInput":{ "type":"structure", @@ -2397,7 +4473,7 @@ "documentation":"

A valid software version of Oracle Grid Infrastructure (GI). To get the list of valid values, use the ListGiVersions operation and specify the shape of the Exadata infrastructure.

Example: 19.0.0.0

" }, "hostname":{ - "shape":"CreateCloudVmClusterInputHostnameString", + "shape":"Hostname", "documentation":"

The host name for the VM cluster.

Constraints:

  • Can't be \"localhost\" or \"hostname\".

  • Can't contain \"-version\".

  • The maximum length of the combined hostname and domain is 63 characters.

  • The hostname must be unique within the subnet.

" }, "sshPublicKeys":{ @@ -2409,7 +4485,7 @@ "documentation":"

The unique identifier of the ODB network for the VM cluster.

" }, "clusterName":{ - "shape":"CreateCloudVmClusterInputClusterNameString", + "shape":"ClusterName", "documentation":"

A name for the Grid Infrastructure cluster. The name isn't case sensitive.

" }, "dataCollectionOptions":{ @@ -2473,12 +4549,6 @@ "min":8, "pattern":"[a-zA-Z0-9_\\/.=-]+" }, - "CreateCloudVmClusterInputClusterNameString":{ - "type":"string", - "max":11, - "min":1, - "pattern":"[a-zA-Z][a-zA-Z0-9-]*" - }, "CreateCloudVmClusterInputCpuCoreCountInteger":{ "type":"integer", "box":true, @@ -2490,12 +4560,6 @@ "max":255, "min":1 }, - "CreateCloudVmClusterInputHostnameString":{ - "type":"string", - "max":12, - "min":1, - "pattern":"[a-zA-Z][a-zA-Z0-9-]*[a-zA-Z0-9]" - }, "CreateCloudVmClusterInputScanListenerPortTcpInteger":{ "type":"integer", "box":true, @@ -2737,6 +4801,39 @@ } } }, + "CrossRegionDataGuardConfiguration":{ + "type":"structure", + "required":["sourceAutonomousDatabaseArn"], + "members":{ + "sourceAutonomousDatabaseArn":{ + "shape":"Arn", + "documentation":"

The Amazon Resource Name (ARN) of the source Autonomous Database for the cross-Region Oracle Data Guard configuration.

" + } + }, + "documentation":"

The configuration for creating an Autonomous Database as a cross-Region Oracle Data Guard peer.

" + }, + "CrossRegionDisasterRecoveryConfiguration":{ + "type":"structure", + "required":[ + "sourceAutonomousDatabaseArn", + "remoteDisasterRecoveryType" + ], + "members":{ + "sourceAutonomousDatabaseArn":{ + "shape":"Arn", + "documentation":"

The Amazon Resource Name (ARN) of the source Autonomous Database for the cross-Region disaster recovery configuration.

" + }, + "remoteDisasterRecoveryType":{ + "shape":"DisasterRecoveryType", + "documentation":"

The type of remote disaster recovery to configure, either Autonomous Data Guard or backup-based.

" + }, + "isReplicateAutomaticBackups":{ + "shape":"Boolean", + "documentation":"

Indicates whether automatic backups are replicated to the disaster recovery database.

" + } + }, + "documentation":"

The configuration for creating an Autonomous Database as a cross-Region disaster recovery peer.

" + }, "CrossRegionS3RestoreSourcesAccess":{ "type":"structure", "members":{ @@ -2797,6 +4894,188 @@ }, "documentation":"

Information about the data collection options enabled for a VM cluster.

" }, + "DataGuardRole":{ + "type":"string", + "enum":[ + "PRIMARY", + "STANDBY", + "DISABLED_STANDBY", + "BACKUP_COPY", + "SNAPSHOT_STANDBY" + ] + }, + "DataSafeStatus":{ + "type":"string", + "enum":[ + "REGISTERING", + "REGISTERED", + "DEREGISTERING", + "NOT_REGISTERED", + "FAILED" + ] + }, + "DatabaseCloneConfiguration":{ + "type":"structure", + "required":[ + "sourceAutonomousDatabaseId", + "cloneType" + ], + "members":{ + "sourceAutonomousDatabaseId":{ + "shape":"ResourceIdOrArn", + "documentation":"

The unique identifier of the source Autonomous Database to clone.

" + }, + "cloneType":{ + "shape":"CloneType", + "documentation":"

The type of clone to create, either a full clone, a metadata clone, or a partial clone.

" + } + }, + "documentation":"

The configuration for creating an Autonomous Database as a clone of an existing database.

" + }, + "DatabaseConnectionStringMap":{ + "type":"map", + "key":{"shape":"String"}, + "value":{"shape":"String"} + }, + "DatabaseConnectionStringProfile":{ + "type":"structure", + "members":{ + "consumerGroup":{ + "shape":"String", + "documentation":"

The consumer group associated with the connection string profile.

" + }, + "displayName":{ + "shape":"String", + "documentation":"

The user-friendly name of the connection string profile.

" + }, + "hostFormat":{ + "shape":"String", + "documentation":"

The host name format used in the connection string.

" + }, + "isRegional":{ + "shape":"Boolean", + "documentation":"

Indicates whether the connection string profile is regional.

" + }, + "protocol":{ + "shape":"String", + "documentation":"

The protocol used by the connection string profile.

" + }, + "sessionMode":{ + "shape":"String", + "documentation":"

The session mode of the connection string profile.

" + }, + "syntaxFormat":{ + "shape":"String", + "documentation":"

The syntax format of the connection string profile.

" + }, + "tlsAuthentication":{ + "shape":"String", + "documentation":"

The TLS authentication method used by the connection string profile.

" + }, + "value":{ + "shape":"String", + "documentation":"

The connection string value of the profile.

" + } + }, + "documentation":"

A connection string profile for an Autonomous Database.

" + }, + "DatabaseConnectionStringProfileList":{ + "type":"list", + "member":{"shape":"DatabaseConnectionStringProfile"} + }, + "DatabaseEdition":{ + "type":"string", + "enum":[ + "STANDARD_EDITION", + "ENTERPRISE_EDITION" + ] + }, + "DatabaseManagementStatus":{ + "type":"string", + "enum":[ + "ENABLING", + "ENABLED", + "DISABLING", + "NOT_ENABLED", + "FAILED_ENABLING", + "FAILED_DISABLING" + ] + }, + "DatabaseStandbySummary":{ + "type":"structure", + "members":{ + "availabilityDomain":{ + "shape":"String", + "documentation":"

The availability domain of the standby Autonomous Database.

" + }, + "lagTimeInSeconds":{ + "shape":"Integer", + "documentation":"

The time lag, in seconds, between the standby database and the primary database.

" + }, + "status":{ + "shape":"AutonomousDatabaseResourceStatus", + "documentation":"

The current status of the standby Autonomous Database.

" + }, + "statusReason":{ + "shape":"String", + "documentation":"

Additional information about the current status of the standby Autonomous Database, if applicable.

" + }, + "maintenanceTargetComponent":{ + "shape":"String", + "documentation":"

The component on the standby Autonomous Database that the current maintenance is being applied to.

" + }, + "timeDataGuardRoleChanged":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time when the Oracle Data Guard role of the standby database last changed.

" + }, + "timeDisasterRecoveryRoleChanged":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time when the disaster recovery role of the standby database last changed.

" + }, + "timeMaintenanceBegin":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time when the next maintenance of the standby database begins.

" + }, + "timeMaintenanceEnd":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time when the next maintenance of the standby database ends.

" + } + }, + "documentation":"

A summary of a standby Autonomous Database in an Oracle Data Guard configuration.

" + }, + "DatabaseTool":{ + "type":"structure", + "members":{ + "isEnabled":{ + "shape":"Boolean", + "documentation":"

Indicates whether the database management tool is enabled.

" + }, + "name":{ + "shape":"String", + "documentation":"

The name of the database management tool.

" + }, + "computeCount":{ + "shape":"Double", + "documentation":"

The compute capacity allocated to the database management tool.

" + }, + "maxIdleTimeInMinutes":{ + "shape":"Integer", + "documentation":"

The maximum amount of time, in minutes, that the database management tool can be idle before it is shut down.

" + } + }, + "documentation":"

Information about a database management tool for an Autonomous Database.

" + }, + "DatabaseToolList":{ + "type":"list", + "member":{"shape":"DatabaseTool"} + }, + "DatabaseType":{ + "type":"string", + "enum":[ + "REGULAR", + "CLONE" + ] + }, "DayOfWeek":{ "type":"structure", "members":{ @@ -3405,6 +5684,43 @@ }, "documentation":"

Information about a hardware system model (shape) that's available for an Exadata infrastructure. The shape determines resources, such as CPU cores, memory, and storage, to allocate to the Exadata infrastructure.

" }, + "DbWorkload":{ + "type":"string", + "enum":[ + "OLTP", + "AJD", + "APEX", + "LH" + ] + }, + "DeleteAutonomousDatabaseBackupInput":{ + "type":"structure", + "required":["autonomousDatabaseBackupId"], + "members":{ + "autonomousDatabaseBackupId":{ + "shape":"ResourceId", + "documentation":"

The unique identifier of the Autonomous Database backup to delete.

" + } + } + }, + "DeleteAutonomousDatabaseBackupOutput":{ + "type":"structure", + "members":{} + }, + "DeleteAutonomousDatabaseInput":{ + "type":"structure", + "required":["autonomousDatabaseId"], + "members":{ + "autonomousDatabaseId":{ + "shape":"ResourceIdOrArn", + "documentation":"

The unique identifier of the Autonomous Database to delete.

" + } + } + }, + "DeleteAutonomousDatabaseOutput":{ + "type":"structure", + "members":{} + }, "DeleteCloudAutonomousVmClusterInput":{ "type":"structure", "required":["cloudAutonomousVmClusterId"], @@ -3508,12 +5824,41 @@ "type":"string", "max":2048, "min":20, - "pattern":"arn:(?:aws|aws-cn|aws-us-gov|aws-iso-[a-z]?|aws-iso):odb:[a-z0-9-]+:\\d{12}:(?:cloud-vm-cluster|cloud-autonomous-vm-cluster)/[a-z0-9-_]+" + "pattern":"arn:(?:aws|aws-cn|aws-us-gov|aws-iso-[a-z]?|aws-iso):odb:[a-z0-9-]+:\\d{12}:(?:cloud-vm-cluster|cloud-autonomous-vm-cluster|exadb-vm-cluster)/[a-z0-9-_]+" }, "DisassociateIamRoleFromResourceOutput":{ "type":"structure", "members":{} }, + "DisasterRecoveryConfiguration":{ + "type":"structure", + "members":{ + "disasterRecoveryType":{ + "shape":"DisasterRecoveryType", + "documentation":"

The type of disaster recovery configured for the Autonomous Database.

" + }, + "isReplicateAutomaticBackups":{ + "shape":"Boolean", + "documentation":"

Indicates whether automatic backups are replicated to the disaster recovery database.

" + }, + "isSnapshotStandby":{ + "shape":"Boolean", + "documentation":"

Indicates whether the standby database is a snapshot standby.

" + }, + "timeSnapshotStandbyEnabledTill":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time until which the snapshot standby database remains enabled.

" + } + }, + "documentation":"

The disaster recovery configuration for an Autonomous Database.

" + }, + "DisasterRecoveryType":{ + "type":"string", + "enum":[ + "ADG", + "BACKUP_BASED" + ] + }, "DiskRedundancy":{ "type":"string", "enum":[ @@ -3525,32 +5870,195 @@ "type":"double", "box":true }, - "ExadataIormConfig":{ + "EncryptionKeyConfiguration":{ + "type":"structure", + "members":{ + "awsEncryptionKey":{ + "shape":"AwsEncryptionKeyConfiguration", + "documentation":"

The configuration of the Amazon Web Services Key Management Service (KMS) encryption key.

" + }, + "ociEncryptionKey":{ + "shape":"OciEncryptionKeyConfiguration", + "documentation":"

The configuration of the Oracle Cloud Infrastructure (OCI) Vault encryption key.

" + }, + "okvEncryptionKey":{ + "shape":"OkvEncryptionKeyConfiguration", + "documentation":"

The configuration of the Oracle Key Vault (OKV) encryption key.

" + } + }, + "documentation":"

The configuration of the encryption key used for an Autonomous Database. This is a union, so only one of the following members can be specified.

", + "union":true + }, + "EncryptionKeyConfigurationInput":{ + "type":"structure", + "members":{ + "awsEncryptionKey":{ + "shape":"AwsEncryptionKeyConfigurationInput", + "documentation":"

The configuration of the Amazon Web Services Key Management Service (KMS) encryption key to use.

" + } + }, + "documentation":"

The configuration of the encryption key to use for an Autonomous Database. This is a union, so only one of the following members can be specified.

", + "union":true + }, + "EncryptionKeyProvider":{ + "type":"string", + "enum":[ + "ORACLE_MANAGED", + "AWS_KMS", + "OKV", + "OCI" + ] + }, + "EncryptionKeyProviderInput":{ + "type":"string", + "enum":[ + "ORACLE_MANAGED", + "AWS_KMS" + ] + }, + "EncryptionSummary":{ + "type":"structure", + "members":{ + "encryptionKeyProvider":{ + "shape":"EncryptionKeyProvider", + "documentation":"

The provider of the encryption key used for the Autonomous Database.

" + }, + "encryptionKeyConfiguration":{ + "shape":"EncryptionKeyConfiguration", + "documentation":"

The configuration of the encryption key used for the Autonomous Database.

" + } + }, + "documentation":"

The encryption configuration for an Autonomous Database.

" + }, + "ExadataIormConfig":{ + "type":"structure", + "members":{ + "dbPlans":{ + "shape":"DbIormConfigList", + "documentation":"

An array of IORM settings for all the database in the Exadata DB system.

" + }, + "lifecycleDetails":{ + "shape":"String", + "documentation":"

Additional information about the current lifecycleState.

" + }, + "lifecycleState":{ + "shape":"IormLifecycleState", + "documentation":"

The current state of IORM configuration for the Exadata DB system.

" + }, + "objective":{ + "shape":"Objective", + "documentation":"

The current value for the IORM objective. The default is AUTO.

" + } + }, + "documentation":"

The IORM settings of the Exadata DB system.

" + }, + "ExternalIdType":{ + "type":"string", + "enum":[ + "database_ocid", + "compartment_ocid", + "tenant_ocid" + ] + }, + "FailoverAutonomousDatabaseInput":{ + "type":"structure", + "required":["autonomousDatabaseId"], + "members":{ + "autonomousDatabaseId":{ + "shape":"ResourceIdOrArn", + "documentation":"

The unique identifier of the Autonomous Database to fail over.

" + }, + "peerDbArn":{ + "shape":"ResourceArn", + "documentation":"

The Amazon Resource Name (ARN) of the peer Autonomous Database to fail over to.

" + } + } + }, + "FailoverAutonomousDatabaseOutput":{ "type":"structure", + "required":["autonomousDatabaseId"], "members":{ - "dbPlans":{ - "shape":"DbIormConfigList", - "documentation":"

An array of IORM settings for all the database in the Exadata DB system.

" + "autonomousDatabaseId":{ + "shape":"String", + "documentation":"

The unique identifier of the Autonomous Database that was failed over.

" }, - "lifecycleDetails":{ + "displayName":{ "shape":"String", - "documentation":"

Additional information about the current lifecycleState.

" + "documentation":"

The user-friendly name of the Autonomous Database.

" }, - "lifecycleState":{ - "shape":"IormLifecycleState", - "documentation":"

The current state of IORM configuration for the Exadata DB system.

" + "status":{ + "shape":"AutonomousDatabaseResourceStatus", + "documentation":"

The current status of the Autonomous Database after the failover operation.

" }, - "objective":{ - "shape":"Objective", - "documentation":"

The current value for the IORM objective. The default is AUTO.

" + "statusReason":{ + "shape":"String", + "documentation":"

Additional information about the status of the Autonomous Database after the failover operation.

" } - }, - "documentation":"

The IORM settings of the Exadata DB system.

" + } }, "Float":{ "type":"float", "box":true }, + "GetAutonomousDatabaseBackupInput":{ + "type":"structure", + "required":["autonomousDatabaseBackupId"], + "members":{ + "autonomousDatabaseBackupId":{ + "shape":"ResourceId", + "documentation":"

The unique identifier of the Autonomous Database backup to retrieve information about.

" + } + } + }, + "GetAutonomousDatabaseBackupOutput":{ + "type":"structure", + "members":{ + "autonomousDatabaseBackup":{ + "shape":"AutonomousDatabaseBackup", + "documentation":"

The details of the requested Autonomous Database backup.

" + } + } + }, + "GetAutonomousDatabaseInput":{ + "type":"structure", + "required":["autonomousDatabaseId"], + "members":{ + "autonomousDatabaseId":{ + "shape":"ResourceIdOrArn", + "documentation":"

The unique identifier of the Autonomous Database to retrieve information about.

" + } + } + }, + "GetAutonomousDatabaseOutput":{ + "type":"structure", + "required":["autonomousDatabase"], + "members":{ + "autonomousDatabase":{ + "shape":"AutonomousDatabase", + "documentation":"

The details of the requested Autonomous Database.

" + } + } + }, + "GetAutonomousDatabaseWalletDetailsInput":{ + "type":"structure", + "required":["autonomousDatabaseId"], + "members":{ + "autonomousDatabaseId":{ + "shape":"ResourceIdOrArn", + "documentation":"

The unique identifier of the Autonomous Database to retrieve wallet details for.

" + } + } + }, + "GetAutonomousDatabaseWalletDetailsOutput":{ + "type":"structure", + "required":["autonomousDatabaseWalletDetails"], + "members":{ + "autonomousDatabaseWalletDetails":{ + "shape":"AutonomousDatabaseWalletDetails", + "documentation":"

The wallet details for the Autonomous Database.

" + } + } + }, "GetCloudAutonomousVmClusterInput":{ "type":"structure", "required":["cloudAutonomousVmClusterId"], @@ -3699,6 +6207,22 @@ "ociIdentityDomain":{ "shape":"OciIdentityDomain", "documentation":"

The Oracle Cloud Infrastructure (OCI) identity domain information in the onboarding status response.

" + }, + "autonomousDatabaseOciIntegrationIamRoles":{ + "shape":"OciIamRoleList", + "documentation":"

The list of Amazon Web Services Identity and Access Management (IAM) service roles used for Autonomous Database integration with Oracle Cloud Infrastructure (OCI).

" + }, + "linkedOciTenancyId":{ + "shape":"String", + "documentation":"

The unique identifier of the Oracle Cloud Infrastructure (OCI) tenancy that is linked to your Amazon Web Services account.

" + }, + "linkedOciCompartmentId":{ + "shape":"String", + "documentation":"

The unique identifier of the Oracle Cloud Infrastructure (OCI) compartment that is linked to your Amazon Web Services account.

" + }, + "subscriptionErrors":{ + "shape":"SubscriptionErrors", + "documentation":"

The list of errors that occurred during the subscription process for your Amazon Web Services account, if any.

" } } }, @@ -3751,6 +6275,12 @@ }, "documentation":"

Information about a specific version of Oracle Grid Infrastructure (GI) software that can be installed on a VM cluster.

" }, + "Hostname":{ + "type":"string", + "max":12, + "min":1, + "pattern":"[a-zA-Z][a-zA-Z0-9-]*[a-zA-Z0-9]" + }, "HoursOfDay":{ "type":"list", "member":{"shape":"Integer"} @@ -3810,6 +6340,10 @@ "type":"integer", "box":true }, + "IntegerList":{ + "type":"list", + "member":{"shape":"Integer"} + }, "InternalServerException":{ "type":"structure", "required":["message"], @@ -3857,6 +6391,12 @@ }, "documentation":"

Configuration for Amazon Web Services Key Management Service (KMS) access from the ODB network.

" }, + "KmsKeyIdOrArn":{ + "type":"string", + "max":2048, + "min":1, + "pattern":"[a-zA-Z0-9_:./-]+" + }, "LicenseModel":{ "type":"string", "enum":[ @@ -3864,6 +6404,265 @@ "LICENSE_INCLUDED" ] }, + "ListAutonomousDatabaseBackupsInput":{ + "type":"structure", + "required":["autonomousDatabaseId"], + "members":{ + "maxResults":{ + "shape":"ListAutonomousDatabaseBackupsInputMaxResultsInteger", + "documentation":"

The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output.

" + }, + "nextToken":{ + "shape":"ListAutonomousDatabaseBackupsInputNextTokenString", + "documentation":"

The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request.

" + }, + "autonomousDatabaseId":{ + "shape":"ResourceId", + "documentation":"

The unique identifier of the Autonomous Database whose backups you want to list.

" + }, + "status":{ + "shape":"AutonomousDatabaseBackupStatus", + "documentation":"

The status of the Autonomous Database backups to return results for.

" + }, + "type":{ + "shape":"AutonomousDatabaseBackupType", + "documentation":"

The type of the Autonomous Database backups to return results for.

" + } + } + }, + "ListAutonomousDatabaseBackupsInputMaxResultsInteger":{ + "type":"integer", + "box":true, + "max":1000, + "min":1 + }, + "ListAutonomousDatabaseBackupsInputNextTokenString":{ + "type":"string", + "max":8192, + "min":1 + }, + "ListAutonomousDatabaseBackupsOutput":{ + "type":"structure", + "required":["autonomousDatabaseBackups"], + "members":{ + "nextToken":{ + "shape":"String", + "documentation":"

The token to include in another request to get the next page of items. This value is null when there are no more items to return.

" + }, + "autonomousDatabaseBackups":{ + "shape":"AutonomousDatabaseBackupList", + "documentation":"

The list of Autonomous Database backups along with their properties.

" + } + } + }, + "ListAutonomousDatabaseCharacterSetsInput":{ + "type":"structure", + "members":{ + "maxResults":{ + "shape":"ListAutonomousDatabaseCharacterSetsInputMaxResultsInteger", + "documentation":"

The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output.

" + }, + "nextToken":{ + "shape":"ListAutonomousDatabaseCharacterSetsInputNextTokenString", + "documentation":"

The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request.

" + }, + "characterSetType":{ + "shape":"characterSetType", + "documentation":"

The type of character set to return results for, either the database character set or the national character set.

" + } + } + }, + "ListAutonomousDatabaseCharacterSetsInputMaxResultsInteger":{ + "type":"integer", + "box":true, + "max":1000, + "min":1 + }, + "ListAutonomousDatabaseCharacterSetsInputNextTokenString":{ + "type":"string", + "max":8192, + "min":1 + }, + "ListAutonomousDatabaseCharacterSetsOutput":{ + "type":"structure", + "required":["autonomousDatabaseCharacterSets"], + "members":{ + "nextToken":{ + "shape":"String", + "documentation":"

The token to include in another request to get the next page of items. This value is null when there are no more items to return.

" + }, + "autonomousDatabaseCharacterSets":{ + "shape":"AutonomousDatabaseCharacterSetList", + "documentation":"

The list of available Autonomous Database character sets.

" + } + } + }, + "ListAutonomousDatabaseClonesInput":{ + "type":"structure", + "required":["autonomousDatabaseId"], + "members":{ + "maxResults":{ + "shape":"ListAutonomousDatabaseClonesInputMaxResultsInteger", + "documentation":"

The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output.

" + }, + "nextToken":{ + "shape":"ListAutonomousDatabaseClonesInputNextTokenString", + "documentation":"

The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request.

" + }, + "autonomousDatabaseId":{ + "shape":"ResourceIdOrArn", + "documentation":"

The unique identifier of the source Autonomous Database whose clones you want to list.

" + } + } + }, + "ListAutonomousDatabaseClonesInputMaxResultsInteger":{ + "type":"integer", + "box":true, + "max":1000, + "min":1 + }, + "ListAutonomousDatabaseClonesInputNextTokenString":{ + "type":"string", + "max":8192, + "min":1 + }, + "ListAutonomousDatabaseClonesOutput":{ + "type":"structure", + "required":["autonomousDatabaseClones"], + "members":{ + "nextToken":{ + "shape":"String", + "documentation":"

The token to include in another request to get the next page of items. This value is null when there are no more items to return.

" + }, + "autonomousDatabaseClones":{ + "shape":"AutonomousDatabaseList", + "documentation":"

The list of Autonomous Database clones along with their properties.

" + } + } + }, + "ListAutonomousDatabasePeersInput":{ + "type":"structure", + "required":["autonomousDatabaseId"], + "members":{ + "maxResults":{ + "shape":"ListAutonomousDatabasePeersInputMaxResultsInteger", + "documentation":"

The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output.

" + }, + "nextToken":{ + "shape":"ListAutonomousDatabasePeersInputNextTokenString", + "documentation":"

The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request.

" + }, + "autonomousDatabaseId":{ + "shape":"ResourceIdOrArn", + "documentation":"

The unique identifier of the Autonomous Database whose peer databases you want to list.

" + } + } + }, + "ListAutonomousDatabasePeersInputMaxResultsInteger":{ + "type":"integer", + "box":true, + "max":1000, + "min":1 + }, + "ListAutonomousDatabasePeersInputNextTokenString":{ + "type":"string", + "max":8192, + "min":1 + }, + "ListAutonomousDatabasePeersOutput":{ + "type":"structure", + "required":["autonomousDatabasePeers"], + "members":{ + "nextToken":{ + "shape":"String", + "documentation":"

The token to include in another request to get the next page of items. This value is null when there are no more items to return.

" + }, + "autonomousDatabasePeers":{ + "shape":"AutonomousDatabasePeerList", + "documentation":"

The list of peer databases for the Autonomous Database.

" + } + } + }, + "ListAutonomousDatabaseVersionsInput":{ + "type":"structure", + "members":{ + "maxResults":{ + "shape":"ListAutonomousDatabaseVersionsInputMaxResultsInteger", + "documentation":"

The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output.

" + }, + "nextToken":{ + "shape":"ListAutonomousDatabaseVersionsInputNextTokenString", + "documentation":"

The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request.

" + }, + "dbWorkload":{ + "shape":"DbWorkload", + "documentation":"

The intended use of the Autonomous Database to return versions for, such as transaction processing, data warehouse, JSON database, or APEX.

" + } + } + }, + "ListAutonomousDatabaseVersionsInputMaxResultsInteger":{ + "type":"integer", + "box":true, + "max":1000, + "min":1 + }, + "ListAutonomousDatabaseVersionsInputNextTokenString":{ + "type":"string", + "max":8192, + "min":1 + }, + "ListAutonomousDatabaseVersionsOutput":{ + "type":"structure", + "required":["autonomousDatabaseVersions"], + "members":{ + "nextToken":{ + "shape":"String", + "documentation":"

The token to include in another request to get the next page of items. This value is null when there are no more items to return.

" + }, + "autonomousDatabaseVersions":{ + "shape":"AutonomousDatabaseVersionList", + "documentation":"

The list of available Autonomous Database software versions.

" + } + } + }, + "ListAutonomousDatabasesInput":{ + "type":"structure", + "members":{ + "maxResults":{ + "shape":"ListAutonomousDatabasesInputMaxResultsInteger", + "documentation":"

The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output.

" + }, + "nextToken":{ + "shape":"ListAutonomousDatabasesInputNextTokenString", + "documentation":"

The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request.

" + } + } + }, + "ListAutonomousDatabasesInputMaxResultsInteger":{ + "type":"integer", + "box":true, + "max":1000, + "min":1 + }, + "ListAutonomousDatabasesInputNextTokenString":{ + "type":"string", + "max":8192, + "min":1 + }, + "ListAutonomousDatabasesOutput":{ + "type":"structure", + "required":["autonomousDatabases"], + "members":{ + "nextToken":{ + "shape":"String", + "documentation":"

The token to include in another request to get the next page of items. This value is null when there are no more items to return.

" + }, + "autonomousDatabases":{ + "shape":"AutonomousDatabaseList", + "documentation":"

The list of Autonomous Databases along with their properties.

" + } + } + }, "ListAutonomousVirtualMachinesInput":{ "type":"structure", "required":["cloudAutonomousVmClusterId"], @@ -4377,6 +7176,34 @@ } } }, + "LongTermBackupSchedule":{ + "type":"structure", + "members":{ + "isDisabled":{ + "shape":"Boolean", + "documentation":"

Indicates whether the long-term backup schedule is disabled.

" + }, + "repeatCadence":{ + "shape":"RepeatCadence", + "documentation":"

The cadence at which long-term backups are taken.

" + }, + "retentionPeriodInDays":{ + "shape":"LongTermBackupScheduleRetentionPeriodInDaysInteger", + "documentation":"

The retention period, in days, for long-term backups.

" + }, + "timeOfBackup":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time at which the long-term backup is taken.

" + } + }, + "documentation":"

The long-term backup schedule for an Autonomous Database.

" + }, + "LongTermBackupScheduleRetentionPeriodInDaysInteger":{ + "type":"integer", + "box":true, + "max":3650, + "min":90 + }, "MaintenanceWindow":{ "type":"structure", "members":{ @@ -4535,6 +7362,13 @@ "type":"list", "member":{"shape":"Month"} }, + "NetServicesArchitecture":{ + "type":"string", + "enum":[ + "DEDICATED", + "SHARED" + ] + }, "Objective":{ "type":"string", "enum":[ @@ -4545,6 +7379,10 @@ "LOW_LATENCY" ] }, + "OciAwsIntegration":{ + "type":"string", + "enum":["KmsTde"] + }, "OciDnsForwardingConfig":{ "type":"structure", "members":{ @@ -4568,6 +7406,54 @@ "type":"list", "member":{"shape":"OciDnsForwardingConfig"} }, + "OciEncryptionKeyConfiguration":{ + "type":"structure", + "required":[ + "kmsKeyId", + "vaultId" + ], + "members":{ + "kmsKeyId":{ + "shape":"OciEncryptionKeyConfigurationKmsKeyIdString", + "documentation":"

The Oracle Cloud Identifier (OCID) of the OCI Vault key to use for encryption.

" + }, + "vaultId":{ + "shape":"OciEncryptionKeyConfigurationVaultIdString", + "documentation":"

The Oracle Cloud Identifier (OCID) of the OCI Vault that contains the encryption key.

" + } + }, + "documentation":"

The configuration of the Oracle Cloud Infrastructure (OCI) Vault encryption key used for an Autonomous Database.

" + }, + "OciEncryptionKeyConfigurationKmsKeyIdString":{ + "type":"string", + "max":255, + "min":1 + }, + "OciEncryptionKeyConfigurationVaultIdString":{ + "type":"string", + "max":255, + "min":1 + }, + "OciIamRole":{ + "type":"structure", + "members":{ + "iamRoleArn":{ + "shape":"RoleArn", + "documentation":"

The Amazon Resource Name (ARN) of the Amazon Web Services Identity and Access Management (IAM) service role.

" + }, + "awsIntegration":{ + "shape":"OciAwsIntegration", + "documentation":"

The Amazon Web Services integration configuration settings for the Amazon Web Services Identity and Access Management (IAM) service role.

" + } + }, + "documentation":"

Information about an Amazon Web Services Identity and Access Management (IAM) service role used for Autonomous Database integration with Oracle Cloud Infrastructure (OCI).

" + }, + "OciIamRoleList":{ + "type":"list", + "member":{"shape":"OciIamRole"}, + "max":10, + "min":0 + }, "OciIdentityDomain":{ "type":"structure", "members":{ @@ -4996,6 +7882,56 @@ }, "documentation":"

A summary of an ODB peering connection.

" }, + "OkvEncryptionKeyConfiguration":{ + "type":"structure", + "required":[ + "certificateDirectoryName", + "directoryName", + "okvKmsKey", + "okvUri" + ], + "members":{ + "certificateDirectoryName":{ + "shape":"String", + "documentation":"

The name of the directory that contains the Oracle Key Vault (OKV) certificate.

" + }, + "certificateId":{ + "shape":"String", + "documentation":"

The identifier of the Oracle Key Vault (OKV) certificate.

" + }, + "directoryName":{ + "shape":"String", + "documentation":"

The name of the directory where the Oracle Key Vault (OKV) configuration is stored.

" + }, + "okvKmsKey":{ + "shape":"String", + "documentation":"

The identifier of the Oracle Key Vault (OKV) key to use for encryption.

" + }, + "okvUri":{ + "shape":"String", + "documentation":"

The URI of the Oracle Key Vault (OKV) server.

" + } + }, + "documentation":"

The configuration of the Oracle Key Vault (OKV) encryption key used for an Autonomous Database.

" + }, + "OpenMode":{ + "type":"string", + "enum":[ + "READ_ONLY", + "READ_WRITE" + ] + }, + "OperationsInsightsStatus":{ + "type":"string", + "enum":[ + "ENABLING", + "ENABLED", + "DISABLING", + "NOT_ENABLED", + "FAILED_ENABLING", + "FAILED_DISABLING" + ] + }, "PatchingModeType":{ "type":"string", "enum":[ @@ -5023,6 +7959,43 @@ "type":"list", "member":{"shape":"PeeredCidr"} }, + "PermissionLevel":{ + "type":"string", + "enum":[ + "RESTRICTED", + "UNRESTRICTED" + ] + }, + "PointInTimeRestoreConfiguration":{ + "type":"structure", + "required":[ + "sourceAutonomousDatabaseId", + "cloneType" + ], + "members":{ + "sourceAutonomousDatabaseId":{ + "shape":"ResourceIdOrArn", + "documentation":"

The unique identifier of the source Autonomous Database to restore from.

" + }, + "cloneType":{ + "shape":"CloneType", + "documentation":"

The type of clone to create from the point-in-time restore.

" + }, + "timestamp":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time to which to restore the Autonomous Database.

" + }, + "useLatestAvailableBackupTimestamp":{ + "shape":"Boolean", + "documentation":"

Indicates whether to use the latest available backup timestamp for the restore.

" + }, + "cloneTableSpaceList":{ + "shape":"IntegerList", + "documentation":"

The list of tablespace identifiers to clone from the point-in-time restore.

" + } + }, + "documentation":"

The configuration for creating an Autonomous Database by restoring to a point in time.

" + }, "PolicyDocument":{ "type":"string", "max":20480, @@ -5035,6 +8008,42 @@ "CUSTOM_PREFERENCE" ] }, + "RebootAutonomousDatabaseInput":{ + "type":"structure", + "required":["autonomousDatabaseId"], + "members":{ + "autonomousDatabaseId":{ + "shape":"ResourceIdOrArn", + "documentation":"

The unique identifier of the Autonomous Database to reboot.

" + }, + "isOnlineReboot":{ + "shape":"Boolean", + "documentation":"

Specifies whether to perform an online reboot of the Autonomous Database without interrupting active connections.

" + } + } + }, + "RebootAutonomousDatabaseOutput":{ + "type":"structure", + "required":["autonomousDatabaseId"], + "members":{ + "autonomousDatabaseId":{ + "shape":"String", + "documentation":"

The unique identifier of the Autonomous Database that was rebooted.

" + }, + "displayName":{ + "shape":"String", + "documentation":"

The user-friendly name of the Autonomous Database.

" + }, + "status":{ + "shape":"AutonomousDatabaseResourceStatus", + "documentation":"

The current status of the Autonomous Database after the reboot operation.

" + }, + "statusReason":{ + "shape":"String", + "documentation":"

Additional information about the status of the Autonomous Database after the reboot operation.

" + } + } + }, "RebootDbNodeInput":{ "type":"structure", "required":[ @@ -5070,6 +8079,29 @@ } } }, + "RefreshableMode":{ + "type":"string", + "enum":[ + "AUTOMATIC", + "MANUAL" + ] + }, + "RefreshableStatus":{ + "type":"string", + "enum":[ + "REFRESHING", + "NOT_REFRESHING" + ] + }, + "RepeatCadence":{ + "type":"string", + "enum":[ + "ONE_TIME", + "WEEKLY", + "MONTHLY", + "YEARLY" + ] + }, "RequestTagMap":{ "type":"map", "key":{"shape":"TagKey"}, @@ -5126,6 +8158,36 @@ "documentation":"

The operation tried to access a resource that doesn't exist. Make sure you provided the correct resource and try again.

", "exception":true }, + "ResourcePoolSummary":{ + "type":"structure", + "members":{ + "isDisabled":{ + "shape":"Boolean", + "documentation":"

Indicates whether the resource pool is disabled.

" + }, + "poolSize":{ + "shape":"Integer", + "documentation":"

The number of Autonomous Databases that the resource pool can contain.

" + }, + "poolStorageSizeInTBs":{ + "shape":"Integer", + "documentation":"

The total storage size of the resource pool, in terabytes (TB).

" + }, + "availableStorageCapacityInTBs":{ + "shape":"Double", + "documentation":"

The available storage capacity in the resource pool, in TB.

" + }, + "totalComputeCapacity":{ + "shape":"Integer", + "documentation":"

The total compute capacity of the resource pool.

" + }, + "availableComputeCapacity":{ + "shape":"Integer", + "documentation":"

The available compute capacity in the resource pool.

" + } + }, + "documentation":"

The configuration of a resource pool for an Autonomous Database.

" + }, "ResourceStatus":{ "type":"string", "enum":[ @@ -5145,6 +8207,67 @@ "max":200, "min":0 }, + "RestoreAutonomousDatabaseInput":{ + "type":"structure", + "required":[ + "autonomousDatabaseId", + "timestamp" + ], + "members":{ + "autonomousDatabaseId":{ + "shape":"ResourceIdOrArn", + "documentation":"

The unique identifier of the Autonomous Database to restore.

" + }, + "timestamp":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time to which to restore the Autonomous Database.

" + } + } + }, + "RestoreAutonomousDatabaseOutput":{ + "type":"structure", + "required":["autonomousDatabaseId"], + "members":{ + "autonomousDatabaseId":{ + "shape":"String", + "documentation":"

The unique identifier of the Autonomous Database that was restored.

" + }, + "displayName":{ + "shape":"String", + "documentation":"

The user-friendly name of the Autonomous Database.

" + }, + "status":{ + "shape":"AutonomousDatabaseResourceStatus", + "documentation":"

The current status of the Autonomous Database after the restore operation.

" + }, + "statusReason":{ + "shape":"String", + "documentation":"

Additional information about the status of the Autonomous Database after the restore operation.

" + } + } + }, + "RestoreFromBackupConfiguration":{ + "type":"structure", + "required":[ + "autonomousDatabaseBackupId", + "cloneType" + ], + "members":{ + "autonomousDatabaseBackupId":{ + "shape":"ResourceIdOrArn", + "documentation":"

The unique identifier of the Autonomous Database backup to restore from.

" + }, + "cloneType":{ + "shape":"CloneType", + "documentation":"

The type of clone to create from the backup.

" + }, + "cloneTableSpaceList":{ + "shape":"IntegerList", + "documentation":"

The list of tablespace identifiers to clone from the backup.

" + } + }, + "documentation":"

The configuration for creating an Autonomous Database by restoring from a backup.

" + }, "RoleArn":{ "type":"string", "max":2048, @@ -5173,6 +8296,29 @@ }, "documentation":"

The configuration for Amazon S3 access from the ODB network.

" }, + "ScheduledOperationDetails":{ + "type":"structure", + "required":["dayOfWeek"], + "members":{ + "dayOfWeek":{ + "shape":"DayOfWeek", + "documentation":"

The day of the week on which the scheduled operation occurs.

" + }, + "scheduledStartTime":{ + "shape":"String", + "documentation":"

The scheduled start time for the Autonomous Database, in UTC.

" + }, + "scheduledStopTime":{ + "shape":"String", + "documentation":"

The scheduled stop time for the Autonomous Database, in UTC.

" + } + }, + "documentation":"

The scheduled start and stop times for an Autonomous Database on a specific day of the week.

" + }, + "ScheduledOperationDetailsList":{ + "type":"list", + "member":{"shape":"ScheduledOperationDetails"} + }, "SensitiveString":{ "type":"string", "sensitive":true @@ -5192,43 +8338,158 @@ "shape":"VpcEndpointType", "documentation":"

The type of the VPC endpoint.

" } - }, - "documentation":"

The configuration for a service network endpoint.

" + }, + "documentation":"

The configuration for a service network endpoint.

" + }, + "ServiceQuotaExceededException":{ + "type":"structure", + "required":[ + "message", + "resourceId", + "resourceType", + "quotaCode" + ], + "members":{ + "message":{"shape":"String"}, + "resourceId":{ + "shape":"String", + "documentation":"

The identifier of the resource that exceeded the service quota.

" + }, + "resourceType":{ + "shape":"String", + "documentation":"

The type of resource that exceeded the service quota.

" + }, + "quotaCode":{ + "shape":"String", + "documentation":"

The unqiue identifier of the service quota that was exceeded.

" + } + }, + "documentation":"

You have exceeded the service quota.

", + "exception":true + }, + "ShapeType":{ + "type":"string", + "enum":[ + "AMD", + "INTEL", + "INTEL_FLEX_X9", + "AMPERE_FLEX_A1" + ] + }, + "ShrinkAutonomousDatabaseInput":{ + "type":"structure", + "required":["autonomousDatabaseId"], + "members":{ + "autonomousDatabaseId":{ + "shape":"ResourceIdOrArn", + "documentation":"

The unique identifier of the Autonomous Database to shrink.

" + } + } + }, + "ShrinkAutonomousDatabaseOutput":{ + "type":"structure", + "required":["autonomousDatabaseId"], + "members":{ + "autonomousDatabaseId":{ + "shape":"String", + "documentation":"

The unique identifier of the Autonomous Database that was shrunk.

" + }, + "displayName":{ + "shape":"String", + "documentation":"

The user-friendly name of the Autonomous Database.

" + }, + "status":{ + "shape":"AutonomousDatabaseResourceStatus", + "documentation":"

The current status of the Autonomous Database after the shrink operation.

" + }, + "statusReason":{ + "shape":"String", + "documentation":"

Additional information about the status of the Autonomous Database after the shrink operation.

" + } + } + }, + "SourceConfiguration":{ + "type":"structure", + "members":{ + "databaseClone":{ + "shape":"DatabaseCloneConfiguration", + "documentation":"

The configuration for creating the Autonomous Database as a clone of an existing database.

" + }, + "restoreFromBackup":{ + "shape":"RestoreFromBackupConfiguration", + "documentation":"

The configuration for creating the Autonomous Database by restoring from a backup.

" + }, + "pointInTimeRestore":{ + "shape":"PointInTimeRestoreConfiguration", + "documentation":"

The configuration for creating the Autonomous Database by restoring to a point in time.

" + }, + "crossRegionDataGuard":{ + "shape":"CrossRegionDataGuardConfiguration", + "documentation":"

The configuration for creating the Autonomous Database as a cross-Region Oracle Data Guard peer.

" + }, + "crossRegionDisasterRecovery":{ + "shape":"CrossRegionDisasterRecoveryConfiguration", + "documentation":"

The configuration for creating the Autonomous Database as a cross-Region disaster recovery peer.

" + }, + "cloneToRefreshable":{ + "shape":"CloneToRefreshableConfiguration", + "documentation":"

The configuration for creating the Autonomous Database as a refreshable clone.

" + } + }, + "documentation":"

The configuration details for the source used to create an Autonomous Database. This is a union, so only one of the following members can be specified.

", + "union":true + }, + "SourceType":{ + "type":"string", + "enum":[ + "NONE", + "DATABASE", + "BACKUP_FROM_ID", + "BACKUP_FROM_TIMESTAMP", + "CROSS_REGION_DATAGUARD", + "CROSS_REGION_DISASTER_RECOVERY", + "CLONE_TO_REFRESHABLE" + ] + }, + "StandbyAllowlistedIpsSource":{ + "type":"string", + "enum":[ + "PRIMARY", + "SEPARATE", + "NOT_APPLICABLE" + ] + }, + "StartAutonomousDatabaseInput":{ + "type":"structure", + "required":["autonomousDatabaseId"], + "members":{ + "autonomousDatabaseId":{ + "shape":"ResourceIdOrArn", + "documentation":"

The unique identifier of the Autonomous Database to start.

" + } + } }, - "ServiceQuotaExceededException":{ + "StartAutonomousDatabaseOutput":{ "type":"structure", - "required":[ - "message", - "resourceId", - "resourceType", - "quotaCode" - ], + "required":["autonomousDatabaseId"], "members":{ - "message":{"shape":"String"}, - "resourceId":{ + "autonomousDatabaseId":{ "shape":"String", - "documentation":"

The identifier of the resource that exceeded the service quota.

" + "documentation":"

The unique identifier of the Autonomous Database that was started.

" }, - "resourceType":{ + "displayName":{ "shape":"String", - "documentation":"

The type of resource that exceeded the service quota.

" + "documentation":"

The user-friendly name of the Autonomous Database.

" }, - "quotaCode":{ + "status":{ + "shape":"AutonomousDatabaseResourceStatus", + "documentation":"

The current status of the Autonomous Database after the start operation.

" + }, + "statusReason":{ "shape":"String", - "documentation":"

The unqiue identifier of the service quota that was exceeded.

" + "documentation":"

Additional information about the status of the Autonomous Database after the start operation.

" } - }, - "documentation":"

You have exceeded the service quota.

", - "exception":true - }, - "ShapeType":{ - "type":"string", - "enum":[ - "AMD", - "INTEL", - "INTEL_FLEX_X9", - "AMPERE_FLEX_A1" - ] + } }, "StartDbNodeInput":{ "type":"structure", @@ -5265,6 +8526,38 @@ } } }, + "StopAutonomousDatabaseInput":{ + "type":"structure", + "required":["autonomousDatabaseId"], + "members":{ + "autonomousDatabaseId":{ + "shape":"ResourceIdOrArn", + "documentation":"

The unique identifier of the Autonomous Database to stop.

" + } + } + }, + "StopAutonomousDatabaseOutput":{ + "type":"structure", + "required":["autonomousDatabaseId"], + "members":{ + "autonomousDatabaseId":{ + "shape":"String", + "documentation":"

The unique identifier of the Autonomous Database that was stopped.

" + }, + "displayName":{ + "shape":"String", + "documentation":"

The user-friendly name of the Autonomous Database.

" + }, + "status":{ + "shape":"AutonomousDatabaseResourceStatus", + "documentation":"

The current status of the Autonomous Database after the stop operation.

" + }, + "statusReason":{ + "shape":"String", + "documentation":"

Additional information about the status of the Autonomous Database after the stop operation.

" + } + } + }, "StopDbNodeInput":{ "type":"structure", "required":[ @@ -5329,10 +8622,60 @@ }, "documentation":"

Configuration for Amazon Web Services Security Token Service (STS) access from the ODB network.

" }, + "SubscriptionError":{ + "type":"structure", + "members":{ + "errorMessage":{ + "shape":"String", + "documentation":"

A human-readable message that describes the subscription error.

" + } + }, + "documentation":"

Information about an error that occurred during the subscription process.

" + }, + "SubscriptionErrors":{ + "type":"list", + "member":{"shape":"SubscriptionError"} + }, "SupportedAwsIntegration":{ "type":"string", "enum":["KmsTde"] }, + "SwitchoverAutonomousDatabaseInput":{ + "type":"structure", + "required":["autonomousDatabaseId"], + "members":{ + "autonomousDatabaseId":{ + "shape":"ResourceIdOrArn", + "documentation":"

The unique identifier of the Autonomous Database to switch over.

" + }, + "peerDbArn":{ + "shape":"ResourceArn", + "documentation":"

The Amazon Resource Name (ARN) of the peer Autonomous Database to switch over to.

" + } + } + }, + "SwitchoverAutonomousDatabaseOutput":{ + "type":"structure", + "required":["autonomousDatabaseId"], + "members":{ + "autonomousDatabaseId":{ + "shape":"String", + "documentation":"

The unique identifier of the Autonomous Database that was switched over.

" + }, + "displayName":{ + "shape":"String", + "documentation":"

The user-friendly name of the Autonomous Database.

" + }, + "status":{ + "shape":"AutonomousDatabaseResourceStatus", + "documentation":"

The current status of the Autonomous Database after the switchover operation.

" + }, + "statusReason":{ + "shape":"String", + "documentation":"

Additional information about the status of the Autonomous Database after the switchover operation.

" + } + } + }, "SyntheticTimestamp_date_time":{ "type":"timestamp", "timestampFormat":"iso8601" @@ -5409,6 +8752,16 @@ "documentation":"

The request was denied due to request throttling.

", "exception":true }, + "TransportableTablespace":{ + "type":"structure", + "members":{ + "ttsBundleUrl":{ + "shape":"String", + "documentation":"

The URL of the transportable tablespace bundle to use when creating the Autonomous Database.

" + } + }, + "documentation":"

The transportable tablespace configuration used when creating an Autonomous Database.

" + }, "UntagResourceRequest":{ "type":"structure", "required":[ @@ -5430,6 +8783,317 @@ "type":"structure", "members":{} }, + "UpdateAutonomousDatabaseBackupInput":{ + "type":"structure", + "required":["autonomousDatabaseBackupId"], + "members":{ + "autonomousDatabaseBackupId":{ + "shape":"ResourceId", + "documentation":"

The unique identifier of the Autonomous Database backup to update.

" + }, + "retentionPeriodInDays":{ + "shape":"UpdateAutonomousDatabaseBackupInputRetentionPeriodInDaysInteger", + "documentation":"

The retention period, in days, for the Autonomous Database backup.

" + } + } + }, + "UpdateAutonomousDatabaseBackupInputRetentionPeriodInDaysInteger":{ + "type":"integer", + "box":true, + "max":3650, + "min":90 + }, + "UpdateAutonomousDatabaseBackupOutput":{ + "type":"structure", + "required":["autonomousDatabaseBackupId"], + "members":{ + "displayName":{ + "shape":"String", + "documentation":"

The user-friendly name of the Autonomous Database backup.

" + }, + "status":{ + "shape":"ResourceStatus", + "documentation":"

The current status of the Autonomous Database backup.

" + }, + "statusReason":{ + "shape":"String", + "documentation":"

Additional information about the current status of the Autonomous Database backup, if applicable.

" + }, + "autonomousDatabaseBackupId":{ + "shape":"String", + "documentation":"

The unique identifier of the Autonomous Database backup that was updated.

" + } + } + }, + "UpdateAutonomousDatabaseInput":{ + "type":"structure", + "required":["autonomousDatabaseId"], + "members":{ + "autonomousDatabaseId":{ + "shape":"ResourceIdOrArn", + "documentation":"

The unique identifier of the Autonomous Database to update.

" + }, + "adminPassword":{ + "shape":"UpdateAutonomousDatabaseInputAdminPasswordString", + "documentation":"

The new password for the ADMIN user of the Autonomous Database.

" + }, + "computeCount":{ + "shape":"UpdateAutonomousDatabaseInputComputeCountDouble", + "documentation":"

The compute capacity, in number of ECPUs or OCPUs, to assign to the Autonomous Database.

" + }, + "cpuCoreCount":{ + "shape":"UpdateAutonomousDatabaseInputCpuCoreCountInteger", + "documentation":"

The number of CPU cores to allocate to the Autonomous Database.

" + }, + "dataStorageSizeInTBs":{ + "shape":"UpdateAutonomousDatabaseInputDataStorageSizeInTBsInteger", + "documentation":"

The size, in terabytes (TB), of the data volume to allocate for the Autonomous Database.

" + }, + "dataStorageSizeInGBs":{ + "shape":"UpdateAutonomousDatabaseInputDataStorageSizeInGBsInteger", + "documentation":"

The size, in gigabytes (GB), of the data volume to allocate for the Autonomous Database.

" + }, + "displayName":{ + "shape":"ResourceDisplayName", + "documentation":"

The new user-friendly name for the Autonomous Database.

" + }, + "dbName":{ + "shape":"UpdateAutonomousDatabaseInputDbNameString", + "documentation":"

The new name of the Autonomous Database.

" + }, + "dbVersion":{ + "shape":"UpdateAutonomousDatabaseInputDbVersionString", + "documentation":"

The Oracle Database software version to use for the Autonomous Database.

" + }, + "dbWorkload":{ + "shape":"DbWorkload", + "documentation":"

The intended use of the Autonomous Database, such as transaction processing, data warehouse, JSON database, or APEX.

" + }, + "dbToolsDetails":{ + "shape":"DatabaseToolList", + "documentation":"

The list of database management tools to enable for the Autonomous Database.

" + }, + "databaseEdition":{ + "shape":"DatabaseEdition", + "documentation":"

The Oracle Database edition to apply to the Autonomous Database.

" + }, + "licenseModel":{ + "shape":"LicenseModel", + "documentation":"

The Oracle license model to apply to the Autonomous Database.

" + }, + "isAutoScalingEnabled":{ + "shape":"Boolean", + "documentation":"

Specifies whether to enable automatic scaling of the compute resources for the Autonomous Database.

" + }, + "isAutoScalingForStorageEnabled":{ + "shape":"Boolean", + "documentation":"

Specifies whether to enable automatic scaling of the storage for the Autonomous Database.

" + }, + "isBackupRetentionLocked":{ + "shape":"Boolean", + "documentation":"

Specifies whether to lock the backup retention period of the Autonomous Database to prevent it from being shortened.

" + }, + "isLocalDataGuardEnabled":{ + "shape":"Boolean", + "documentation":"

Specifies whether to enable local Oracle Data Guard for the Autonomous Database.

" + }, + "isMtlsConnectionRequired":{ + "shape":"Boolean", + "documentation":"

Specifies whether mutual TLS (mTLS) authentication is required to connect to the Autonomous Database.

" + }, + "isRefreshableClone":{ + "shape":"Boolean", + "documentation":"

Specifies whether the Autonomous Database is a refreshable clone.

" + }, + "isDisconnectPeer":{ + "shape":"Boolean", + "documentation":"

Specifies whether to disconnect the Autonomous Database from its peer database.

" + }, + "backupRetentionPeriodInDays":{ + "shape":"UpdateAutonomousDatabaseInputBackupRetentionPeriodInDaysInteger", + "documentation":"

The retention period, in days, for automatic backups of the Autonomous Database.

" + }, + "byolComputeCountLimit":{ + "shape":"UpdateAutonomousDatabaseInputByolComputeCountLimitDouble", + "documentation":"

The maximum number of compute resources that you can allocate to the Autonomous Database under the bring-your-own-license (BYOL) model.

" + }, + "localAdgAutoFailoverMaxDataLossLimit":{ + "shape":"UpdateAutonomousDatabaseInputLocalAdgAutoFailoverMaxDataLossLimitInteger", + "documentation":"

The maximum data loss limit, in seconds, for automatic failover to the local Oracle Data Guard standby database.

" + }, + "autonomousMaintenanceScheduleType":{ + "shape":"AutonomousMaintenanceScheduleType", + "documentation":"

The maintenance schedule type for the Autonomous Database.

" + }, + "customerContactsToSendToOCI":{ + "shape":"CustomerContacts", + "documentation":"

The list of customer contacts to receive operational notifications from OCI for the Autonomous Database.

" + }, + "scheduledOperations":{ + "shape":"ScheduledOperationDetailsList", + "documentation":"

The list of scheduled start and stop times for the Autonomous Database.

" + }, + "longTermBackupSchedule":{ + "shape":"LongTermBackupSchedule", + "documentation":"

The long-term backup schedule for the Autonomous Database.

" + }, + "openMode":{ + "shape":"OpenMode", + "documentation":"

The mode in which to open the Autonomous Database, either read-only or read/write.

" + }, + "permissionLevel":{ + "shape":"PermissionLevel", + "documentation":"

The permission level of the Autonomous Database.

" + }, + "refreshableMode":{ + "shape":"RefreshableMode", + "documentation":"

The refresh mode of the refreshable clone Autonomous Database.

" + }, + "privateEndpointIp":{ + "shape":"String", + "documentation":"

The private endpoint IP address for the Autonomous Database.

" + }, + "privateEndpointLabel":{ + "shape":"String", + "documentation":"

The private endpoint label for the Autonomous Database.

" + }, + "peerDbId":{ + "shape":"ResourceIdOrArn", + "documentation":"

The unique identifier of the peer Autonomous Database.

" + }, + "resourcePoolLeaderId":{ + "shape":"ResourceIdOrArn", + "documentation":"

The unique identifier of the resource pool leader Autonomous Database.

" + }, + "resourcePoolSummary":{ + "shape":"ResourcePoolSummary", + "documentation":"

The configuration of the resource pool for the Autonomous Database.

" + }, + "standbyAllowlistedIpsSource":{ + "shape":"StandbyAllowlistedIpsSource", + "documentation":"

The source of the allowlisted IP addresses for the standby Autonomous Database.

" + }, + "standbyAllowlistedIps":{ + "shape":"StringList", + "documentation":"

The list of IP addresses that are allowed to access the standby Autonomous Database.

" + }, + "allowlistedIps":{ + "shape":"StringList", + "documentation":"

The list of IP addresses that are allowed to access the Autonomous Database.

" + }, + "autoRefreshFrequencyInSeconds":{ + "shape":"UpdateAutonomousDatabaseInputAutoRefreshFrequencyInSecondsInteger", + "documentation":"

The frequency, in seconds, at which the refreshable clone Autonomous Database is automatically refreshed.

" + }, + "autoRefreshPointLagInSeconds":{ + "shape":"UpdateAutonomousDatabaseInputAutoRefreshPointLagInSecondsInteger", + "documentation":"

The time lag, in seconds, between the refreshable clone and its source Autonomous Database.

" + }, + "timeOfAutoRefreshStart":{ + "shape":"SyntheticTimestamp_date_time", + "documentation":"

The date and time at which the automatic refresh of the refreshable clone Autonomous Database starts.

" + }, + "encryptionKeyProvider":{ + "shape":"EncryptionKeyProviderInput", + "documentation":"

The provider of the encryption key to use for the Autonomous Database.

" + }, + "encryptionKeyConfiguration":{ + "shape":"EncryptionKeyConfigurationInput", + "documentation":"

The configuration of the encryption key to use for the Autonomous Database.

" + } + } + }, + "UpdateAutonomousDatabaseInputAdminPasswordString":{ + "type":"string", + "max":30, + "min":12, + "sensitive":true + }, + "UpdateAutonomousDatabaseInputAutoRefreshFrequencyInSecondsInteger":{ + "type":"integer", + "box":true, + "max":604800, + "min":3600 + }, + "UpdateAutonomousDatabaseInputAutoRefreshPointLagInSecondsInteger":{ + "type":"integer", + "box":true, + "max":604800, + "min":0 + }, + "UpdateAutonomousDatabaseInputBackupRetentionPeriodInDaysInteger":{ + "type":"integer", + "box":true, + "max":60, + "min":1 + }, + "UpdateAutonomousDatabaseInputByolComputeCountLimitDouble":{ + "type":"double", + "box":true, + "min":2 + }, + "UpdateAutonomousDatabaseInputComputeCountDouble":{ + "type":"double", + "box":true, + "max":512, + "min":0.1 + }, + "UpdateAutonomousDatabaseInputCpuCoreCountInteger":{ + "type":"integer", + "box":true, + "max":128, + "min":1 + }, + "UpdateAutonomousDatabaseInputDataStorageSizeInGBsInteger":{ + "type":"integer", + "box":true, + "max":393216, + "min":20 + }, + "UpdateAutonomousDatabaseInputDataStorageSizeInTBsInteger":{ + "type":"integer", + "box":true, + "max":384, + "min":1 + }, + "UpdateAutonomousDatabaseInputDbNameString":{ + "type":"string", + "max":30, + "min":1 + }, + "UpdateAutonomousDatabaseInputDbVersionString":{ + "type":"string", + "max":255, + "min":1 + }, + "UpdateAutonomousDatabaseInputLocalAdgAutoFailoverMaxDataLossLimitInteger":{ + "type":"integer", + "box":true, + "max":3600, + "min":0 + }, + "UpdateAutonomousDatabaseOutput":{ + "type":"structure", + "required":["autonomousDatabaseId"], + "members":{ + "autonomousDatabaseId":{ + "shape":"String", + "documentation":"

The unique identifier of the Autonomous Database that was updated.

" + }, + "displayName":{ + "shape":"String", + "documentation":"

The user-friendly name of the Autonomous Database that was updated.

" + }, + "status":{ + "shape":"AutonomousDatabaseResourceStatus", + "documentation":"

The current status of the Autonomous Database.

" + }, + "statusReason":{ + "shape":"String", + "documentation":"

Additional information about the current status of the Autonomous Database, if applicable.

" + } + } + }, "UpdateCloudExadataInfrastructureInput":{ "type":"structure", "required":["cloudExadataInfrastructureId"], @@ -5642,6 +9306,13 @@ "type":"string", "enum":["SERVICENETWORK"] }, + "WalletType":{ + "type":"string", + "enum":[ + "REGIONAL", + "INSTANCE" + ] + }, "WeeksOfMonth":{ "type":"list", "member":{"shape":"Integer"} @@ -5659,6 +9330,13 @@ } }, "documentation":"

The configuration for Zero-ETL access from the ODB network.

" + }, + "characterSetType":{ + "type":"string", + "enum":[ + "DATABASE", + "NATIONAL" + ] } }, "documentation":"

Oracle Database@Amazon Web Services is an offering that enables you to access Oracle Exadata infrastructure managed by Oracle Cloud Infrastructure (OCI) inside Amazon Web Services data centers. You can migrate your Oracle Exadata workloads, establish low-latency connectivity with applications running on Amazon Web Services, and integrate with Amazon Web Services services. For example, you can run application servers in a Virtual Private Cloud (VPC) and access an Oracle Exadata system running in Oracle Database@Amazon Web Services. You can get started with Oracle Database@Amazon Web Services by using the familiar Amazon Web Services Management Console, APIs, or CLI.

This interface reference for Oracle Database@Amazon Web Services contains documentation for a programming or command line interface that you can use to manage Oracle Database@Amazon Web Services. Oracle Database@Amazon Web Services is asynchronous, which means that some interfaces might require techniques such as polling or callback functions to determine when a command has been applied. The reference structure is as follows.

Oracle Database@Amazon Web Services API Reference

" diff --git a/awscli/botocore/data/outposts/2019-12-03/paginators-1.json b/awscli/botocore/data/outposts/2019-12-03/paginators-1.json index 8ccc34fce6d8..9ab08770a11c 100644 --- a/awscli/botocore/data/outposts/2019-12-03/paginators-1.json +++ b/awscli/botocore/data/outposts/2019-12-03/paginators-1.json @@ -65,6 +65,18 @@ "output_token": "NextToken", "limit_key": "MaxResults", "result_key": "Subscriptions" + }, + "ListOrderableInstanceTypes": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "InstanceTypes" + }, + "ListQuotes": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Quotes" } } } diff --git a/awscli/botocore/data/outposts/2019-12-03/service-2.json b/awscli/botocore/data/outposts/2019-12-03/service-2.json index 4f9d472f2965..fc28ad6fc4cb 100644 --- a/awscli/botocore/data/outposts/2019-12-03/service-2.json +++ b/awscli/botocore/data/outposts/2019-12-03/service-2.json @@ -85,6 +85,22 @@ ], "documentation":"

Creates an Outpost.

You can specify either an Availability one or an AZ ID.

" }, + "CreateQuote":{ + "name":"CreateQuote", + "http":{ + "method":"POST", + "requestUri":"/quotes" + }, + "input":{"shape":"CreateQuoteInput"}, + "output":{"shape":"CreateQuoteOutput"}, + "errors":[ + {"shape":"AccessDeniedException"}, + {"shape":"ValidationException"}, + {"shape":"InternalServerException"}, + {"shape":"NotFoundException"} + ], + "documentation":"

Creates a quote for an Outpost. A quote provides pricing and configuration options based on the requested capacity. You can optionally associate the quote with an existing Outpost or create a standalone quote by specifying only the country code and requested capacities.

" + }, "CreateRenewal":{ "name":"CreateRenewal", "http":{ @@ -135,6 +151,22 @@ ], "documentation":"

Deletes the specified Outpost.

" }, + "DeleteQuote":{ + "name":"DeleteQuote", + "http":{ + "method":"DELETE", + "requestUri":"/quotes/{QuoteIdentifier}" + }, + "input":{"shape":"DeleteQuoteInput"}, + "output":{"shape":"DeleteQuoteOutput"}, + "errors":[ + {"shape":"NotFoundException"}, + {"shape":"AccessDeniedException"}, + {"shape":"InternalServerException"}, + {"shape":"ValidationException"} + ], + "documentation":"

Deletes the specified quote.

" + }, "DeleteSite":{ "name":"DeleteSite", "http":{ @@ -278,6 +310,22 @@ ], "documentation":"

Gets the instance types that an Outpost can support in InstanceTypeCapacity. This will generally include instance types that are not currently configured and therefore cannot be launched with the current Outpost capacity configuration.

" }, + "GetQuote":{ + "name":"GetQuote", + "http":{ + "method":"GET", + "requestUri":"/quotes/{QuoteIdentifier}" + }, + "input":{"shape":"GetQuoteInput"}, + "output":{"shape":"GetQuoteOutput"}, + "errors":[ + {"shape":"NotFoundException"}, + {"shape":"AccessDeniedException"}, + {"shape":"InternalServerException"}, + {"shape":"ValidationException"} + ], + "documentation":"

Gets information about the specified quote.

" + }, "GetRenewalPricing":{ "name":"GetRenewalPricing", "http":{ @@ -406,6 +454,22 @@ ], "documentation":"

Lists the items in the catalog.

Use filters to return specific results. If you specify multiple filters, the results include only the resources that match all of the specified filters. For a filter where you can specify multiple values, the results include items that match any of the values that you specify for the filter.

" }, + "ListOrderableInstanceTypes":{ + "name":"ListOrderableInstanceTypes", + "http":{ + "method":"GET", + "requestUri":"/instanceTypes" + }, + "input":{"shape":"ListOrderableInstanceTypesInput"}, + "output":{"shape":"ListOrderableInstanceTypesOutput"}, + "errors":[ + {"shape":"ValidationException"}, + {"shape":"AccessDeniedException"}, + {"shape":"NotFoundException"}, + {"shape":"InternalServerException"} + ], + "documentation":"

Lists the instance types that can be ordered for an Outpost. You can filter the results by Outpost generation.

" + }, "ListOrders":{ "name":"ListOrders", "http":{ @@ -437,6 +501,20 @@ ], "documentation":"

Lists the Outposts for your Amazon Web Services account.

Use filters to return specific results. If you specify multiple filters, the results include only the resources that match all of the specified filters. For a filter where you can specify multiple values, the results include items that match any of the values that you specify for the filter.

" }, + "ListQuotes":{ + "name":"ListQuotes", + "http":{ + "method":"GET", + "requestUri":"/quotes" + }, + "input":{"shape":"ListQuotesInput"}, + "output":{"shape":"ListQuotesOutput"}, + "errors":[ + {"shape":"AccessDeniedException"}, + {"shape":"InternalServerException"} + ], + "documentation":"

Lists the quotes for your Amazon Web Services account.

" + }, "ListSites":{ "name":"ListSites", "http":{ @@ -564,6 +642,22 @@ ], "documentation":"

Updates an Outpost.

" }, + "UpdateQuote":{ + "name":"UpdateQuote", + "http":{ + "method":"PATCH", + "requestUri":"/quotes/{QuoteIdentifier}" + }, + "input":{"shape":"UpdateQuoteInput"}, + "output":{"shape":"UpdateQuoteOutput"}, + "errors":[ + {"shape":"NotFoundException"}, + {"shape":"ValidationException"}, + {"shape":"AccessDeniedException"}, + {"shape":"InternalServerException"} + ], + "documentation":"

Updates the specified quote. You can modify the requested capacities, constraints, payment options, payment terms, or Outpost association.

" + }, "UpdateSite":{ "name":"UpdateSite", "http":{ @@ -989,6 +1083,24 @@ "type":"structure", "members":{} }, + "CapacitySummary":{ + "type":"structure", + "members":{ + "ExistingCapacities":{ + "shape":"QuoteCapacityList", + "documentation":"

The existing capacities on the Outpost before the quote is fulfilled.

" + }, + "FinalCapacities":{ + "shape":"QuoteCapacityList", + "documentation":"

The final capacities on the Outpost after the quote is fulfilled.

" + }, + "CapacityChange":{ + "shape":"QuoteCapacityList", + "documentation":"

The change in capacity between the existing and final state.

" + } + }, + "documentation":"

A summary of the capacity changes for a quote option.

" + }, "CapacityTaskFailure":{ "type":"structure", "required":["Reason"], @@ -1244,6 +1356,12 @@ "min":1, "pattern":"^[a-zA-Z0-9+/=]{1,1024}$" }, + "ConstraintValue":{ + "type":"string", + "max":2048, + "min":1, + "pattern":"^[\\S \\n]+$" + }, "ContactName":{ "type":"string", "max":255, @@ -1331,6 +1449,52 @@ "Outpost":{"shape":"Outpost"} } }, + "CreateQuoteInput":{ + "type":"structure", + "required":[ + "CountryCode", + "RequestedCapacities" + ], + "members":{ + "OutpostIdentifier":{ + "shape":"OutpostIdentifier", + "documentation":"

The ID or ARN of the Outpost to associate with the quote. If not specified, the quote is created without an Outpost association.

" + }, + "CountryCode":{ + "shape":"CountryCode", + "documentation":"

The country code for the Outpost site location.

" + }, + "RequestedCapacities":{ + "shape":"QuoteCapacityList", + "documentation":"

The capacity requirements for the quote. Each entry specifies a capacity type (such as Amazon EC2), the unit, and the quantity. For Amazon EC2, the quantity is the number of additional instances to add to the Outpost. For Amazon EBS and Amazon S3, the quantity is the total desired end-state capacity of the Outpost.

" + }, + "RequestedConstraints":{ + "shape":"QuoteConstraintList", + "documentation":"

The physical constraints for the quote, such as maximum number of racks, maximum power draw per rack, or maximum weight per rack.

" + }, + "RequestedPaymentOptions":{ + "shape":"PaymentOptionList", + "documentation":"

The payment options to include in the quote pricing. If not specified, all available payment options are returned.

" + }, + "RequestedPaymentTerms":{ + "shape":"PaymentTermList", + "documentation":"

The payment terms to include in the quote pricing. If not specified, all available payment terms are returned.

" + }, + "Description":{ + "shape":"QuoteDescription", + "documentation":"

A description for the quote.

" + } + } + }, + "CreateQuoteOutput":{ + "type":"structure", + "members":{ + "Quote":{ + "shape":"Quote", + "documentation":"

Information about the quote.

" + } + } + }, "CreateRenewalInput":{ "type":"structure", "required":[ @@ -1380,6 +1544,10 @@ "MonthlyRecurringPrice":{ "shape":"NullableFloat", "documentation":"

The monthly recurring price of the renewal.

" + }, + "Currency":{ + "shape":"CurrencyCode", + "documentation":"

The currency of the renewal price.

" } } }, @@ -1417,6 +1585,10 @@ "Site":{"shape":"Site"} } }, + "CurrencyCode":{ + "type":"string", + "enum":["USD"] + }, "DecommissionRequestStatus":{ "type":"string", "enum":[ @@ -1441,6 +1613,22 @@ "type":"structure", "members":{} }, + "DeleteQuoteInput":{ + "type":"structure", + "required":["QuoteIdentifier"], + "members":{ + "QuoteIdentifier":{ + "shape":"QuoteIdentifier", + "documentation":"

The ID or ARN of the quote.

", + "location":"uri", + "locationName":"QuoteIdentifier" + } + } + }, + "DeleteQuoteOutput":{ + "type":"structure", + "members":{} + }, "DeleteSiteInput":{ "type":"structure", "required":["SiteId"], @@ -1457,6 +1645,36 @@ "type":"structure", "members":{} }, + "DetailedInstanceTypeItem":{ + "type":"structure", + "members":{ + "InstanceType":{ + "shape":"InstanceType", + "documentation":"

The instance type.

" + }, + "VCPUs":{ + "shape":"VCPUCount", + "documentation":"

The number of default VCPUs in the instance type.

" + }, + "MemoryInMib":{ + "shape":"MemoryInMib", + "documentation":"

The memory size of the instance type, in MiB.

" + }, + "NetworkPerformance":{ + "shape":"NetworkPerformance", + "documentation":"

The network performance of the instance type.

" + }, + "FormFactorConfigs":{ + "shape":"FormFactorConfigList", + "documentation":"

The supported form factor and Outpost generation configurations for the instance type.

" + } + }, + "documentation":"

Information about an instance type that can be ordered for an Outpost, including hardware specifications and supported form factors.

" + }, + "DetailedInstanceTypeListDefinition":{ + "type":"list", + "member":{"shape":"DetailedInstanceTypeItem"} + }, "DeviceSerialNumber":{ "type":"string", "max":100, @@ -1506,7 +1724,7 @@ "type":"string", "max":10, "min":1, - "pattern":"^[a-z0-9]+$" + "pattern":"^[a-z0-9]+[a-z0-9-]*[a-z0-9]+$" }, "FiberOpticCableType":{ "type":"string", @@ -1515,6 +1733,31 @@ "MULTI_MODE" ] }, + "FormFactor":{ + "type":"string", + "enum":[ + "RACK", + "SERVER" + ] + }, + "FormFactorConfig":{ + "type":"structure", + "members":{ + "FormFactor":{ + "shape":"FormFactor", + "documentation":"

The form factor. Valid values are RACK for rack-based Outposts and SERVER for server-based Outposts.

" + }, + "OutpostGeneration":{ + "shape":"OutpostGeneration", + "documentation":"

The Outpost generation. Valid values are GENERATION_1 for first-generation rack deployments and GENERATION_2 for second-generation rack deployments. This value is not set for server form factors.

" + } + }, + "documentation":"

A supported form factor and Outpost generation configuration for an instance type.

" + }, + "FormFactorConfigList":{ + "type":"list", + "member":{"shape":"FormFactorConfig"} + }, "GetCapacityTaskInput":{ "type":"structure", "required":[ @@ -1794,6 +2037,27 @@ "NextToken":{"shape":"Token"} } }, + "GetQuoteInput":{ + "type":"structure", + "required":["QuoteIdentifier"], + "members":{ + "QuoteIdentifier":{ + "shape":"QuoteIdentifier", + "documentation":"

The ID or ARN of the quote.

", + "location":"uri", + "locationName":"QuoteIdentifier" + } + } + }, + "GetQuoteOutput":{ + "type":"structure", + "members":{ + "Quote":{ + "shape":"Quote", + "documentation":"

Information about the quote.

" + } + } + }, "GetRenewalPricingInput":{ "type":"structure", "required":["OutpostIdentifier"], @@ -2326,6 +2590,42 @@ "NextToken":{"shape":"Token"} } }, + "ListOrderableInstanceTypesInput":{ + "type":"structure", + "members":{ + "OutpostGenerationFilter":{ + "shape":"OutpostGeneration", + "documentation":"

Filters the results by Outpost generation. Specify GENERATION_1 for first-generation rack deployments or GENERATION_2 for second-generation rack deployments.

", + "location":"querystring", + "locationName":"OutpostGenerationFilter" + }, + "MaxResults":{ + "shape":"MaxResults1000", + "documentation":"

The maximum page size.

", + "location":"querystring", + "locationName":"MaxResults" + }, + "NextToken":{ + "shape":"Token", + "documentation":"

The pagination token.

", + "location":"querystring", + "locationName":"NextToken" + } + } + }, + "ListOrderableInstanceTypesOutput":{ + "type":"structure", + "members":{ + "InstanceTypes":{ + "shape":"DetailedInstanceTypeListDefinition", + "documentation":"

Information about the instance types that can be ordered for the Outpost.

" + }, + "NextToken":{ + "shape":"Token", + "documentation":"

The pagination token.

" + } + } + }, "ListOrdersInput":{ "type":"structure", "members":{ @@ -2397,6 +2697,36 @@ "NextToken":{"shape":"Token"} } }, + "ListQuotesInput":{ + "type":"structure", + "members":{ + "NextToken":{ + "shape":"Token", + "documentation":"

The pagination token.

", + "location":"querystring", + "locationName":"NextToken" + }, + "MaxResults":{ + "shape":"MaxResults1000", + "documentation":"

The maximum page size.

", + "location":"querystring", + "locationName":"MaxResults" + } + } + }, + "ListQuotesOutput":{ + "type":"structure", + "members":{ + "Quotes":{ + "shape":"QuoteSummaryListDefinition", + "documentation":"

Information about the quotes.

" + }, + "NextToken":{ + "shape":"Token", + "documentation":"

The pagination token.

" + } + } + }, "ListSitesInput":{ "type":"structure", "members":{ @@ -2486,6 +2816,7 @@ "MAX_2000_LBS" ] }, + "MemoryInMib":{"type":"integer"}, "Municipality":{ "type":"string", "max":180, @@ -2497,6 +2828,7 @@ "max":1, "min":0 }, + "NetworkPerformance":{"type":"string"}, "NotFoundException":{ "type":"structure", "members":{ @@ -2581,6 +2913,12 @@ "type":"list", "member":{"shape":"String"} }, + "OrderIdentifier":{ + "type":"string", + "max":20, + "min":1, + "pattern":"^oo-[a-f0-9]{17}$" + }, "OrderStatus":{ "type":"string", "enum":[ @@ -2642,6 +2980,59 @@ "REPLACEMENT" ] }, + "OrderingRequirement":{ + "type":"structure", + "members":{ + "StatusMessage":{ + "shape":"StatusMessage", + "documentation":"

A message about the ordering requirement.

" + }, + "OrderingRequirementType":{ + "shape":"OrderingRequirementType", + "documentation":"

The type of ordering requirement. Indicates which check failed or passed.

  • OUTPOST_ACTIVE_CHECK_ERROR - The Outpost must be in an active state.

  • MAXIMUM_ALLOWED_ORDERS_CHECK_ERROR - The maximum number of allowed orders has been reached.

  • VALID_ZIP_CODE_CHECK_ERROR - The site address must have a valid zip code.

  • RACK_PHYSICAL_PROPERTIES_CHECK_ERROR - The rack physical properties do not meet requirements.

  • OPERATING_ADDRESS_EXISTENCE_CHECK_ERROR - The site must have an operating address.

  • SHIPPING_ADDRESS_EXISTENCE_CHECK_ERROR - The site must have a shipping address.

  • COUNTRY_CODE_MISMATCH_CHECK_ERROR - The country code on the quote does not match the Outpost site country.

  • OUTPOST_GENERATION_MISMATCH_ERROR - The Outpost generation does not match the requested configuration.

  • OUTPOST_ID_MISSING_ON_QUOTE_ERROR - The quote must be associated with an Outpost before submitting an order.

  • ENTERPRISE_SUPPORT_ERROR - Enterprise Support is required.

  • SHIPPING_ADDRESS_MISSING_CONTACT_NAME_ERROR - The shipping address must have a contact name.

  • SHIPPING_ADDRESS_MISSING_CONTACT_NUMBER_ERROR - The shipping address must have a contact phone number.

  • SHIPPING_ADDRESS_MISSING_CONTACT_INFO_ERROR - The shipping address must have contact information.

  • OUTPOST_STATE_CHANGED_ERROR - The Outpost state has changed since the quote was created.

  • OUTPOST_NOT_FOUND_ERROR - The Outpost associated with the quote was not found.

  • OUTPOST_RENEWAL_REQUIRED_ERROR - The Outpost requires a renewal before a new order can be submitted.

  • UNSUPPORTED - The requirement type is not recognized.

" + }, + "Status":{ + "shape":"OrderingRequirementStatus", + "documentation":"

The status of the ordering requirement. Valid values are PASS, FAIL, and EXEMPT.

" + } + }, + "documentation":"

A requirement that must be met before an order can be submitted for a quote.

" + }, + "OrderingRequirementList":{ + "type":"list", + "member":{"shape":"OrderingRequirement"}, + "max":50 + }, + "OrderingRequirementStatus":{ + "type":"string", + "enum":[ + "PASS", + "FAIL", + "EXEMPT" + ] + }, + "OrderingRequirementType":{ + "type":"string", + "enum":[ + "OUTPOST_ACTIVE_CHECK_ERROR", + "MAXIMUM_ALLOWED_ORDERS_CHECK_ERROR", + "VALID_ZIP_CODE_CHECK_ERROR", + "RACK_PHYSICAL_PROPERTIES_CHECK_ERROR", + "OPERATING_ADDRESS_EXISTENCE_CHECK_ERROR", + "SHIPPING_ADDRESS_EXISTENCE_CHECK_ERROR", + "COUNTRY_CODE_MISMATCH_CHECK_ERROR", + "OUTPOST_GENERATION_MISMATCH_ERROR", + "UNSUPPORTED", + "OUTPOST_ID_MISSING_ON_QUOTE_ERROR", + "ENTERPRISE_SUPPORT_ERROR", + "SHIPPING_ADDRESS_MISSING_CONTACT_NAME_ERROR", + "SHIPPING_ADDRESS_MISSING_CONTACT_NUMBER_ERROR", + "SHIPPING_ADDRESS_MISSING_CONTACT_INFO_ERROR", + "OUTPOST_STATE_CHANGED_ERROR", + "OUTPOST_NOT_FOUND_ERROR", + "OUTPOST_RENEWAL_REQUIRED_ERROR" + ] + }, "Outpost":{ "type":"structure", "members":{ @@ -2683,6 +3074,13 @@ "min":0, "pattern":"^[\\S ]*$" }, + "OutpostGeneration":{ + "type":"string", + "enum":[ + "GENERATION_2", + "GENERATION_1" + ] + }, "OutpostId":{ "type":"string", "max":180, @@ -2701,6 +3099,12 @@ "min":1, "pattern":"^(arn:aws([a-z-]+)?:outposts:[a-z\\d-]+:\\d{12}:outpost/)?op-[a-f0-9]{17}$" }, + "OutpostIdentifierOrEmpty":{ + "type":"string", + "max":180, + "min":0, + "pattern":"^((arn:aws([a-z-]+)?:outposts:[a-z\\d-]+:\\d{12}:outpost/)?op-[a-f0-9]{17})?$" + }, "OutpostInstanceType":{ "type":"string", "max":30, @@ -2733,6 +3137,11 @@ "PARTIAL_UPFRONT" ] }, + "PaymentOptionList":{ + "type":"list", + "member":{"shape":"PaymentOption"}, + "max":3 + }, "PaymentTerm":{ "type":"string", "enum":[ @@ -2741,6 +3150,11 @@ "FIVE_YEARS" ] }, + "PaymentTermList":{ + "type":"list", + "member":{"shape":"PaymentTerm"}, + "max":3 + }, "PostalCode":{ "type":"string", "max":20, @@ -2796,7 +3210,8 @@ }, "PricingOptionList":{ "type":"list", - "member":{"shape":"PricingOption"} + "member":{"shape":"PricingOption"}, + "max":9 }, "PricingResult":{ "type":"string", @@ -2806,10 +3221,316 @@ ] }, "Quantity":{"type":"string"}, + "Quote":{ + "type":"structure", + "members":{ + "QuoteId":{ + "shape":"QuoteId", + "documentation":"

The ID of the quote.

" + }, + "AccountId":{ + "shape":"AccountId", + "documentation":"

The ID of the account that owns the quote.

" + }, + "QuoteStatus":{ + "shape":"QuoteStatus", + "documentation":"

The status of the quote.

  • CREATED - The quote has been created and is available for review.

  • ORDER_SUBMITTED - An order has been submitted for the quote.

  • EXPIRED - The quote has expired and can no longer be used to submit an order.

" + }, + "StatusMessage":{ + "shape":"StatusMessage", + "documentation":"

A message about the status of the quote.

" + }, + "OutpostArn":{ + "shape":"OutpostArn", + "documentation":"

The ARN of the Outpost associated with the quote.

" + }, + "CountryCode":{ + "shape":"CountryCode", + "documentation":"

The country code for the Outpost site location.

" + }, + "RequestedCapacities":{ + "shape":"QuoteCapacityList", + "documentation":"

The capacity requirements specified in the quote request.

" + }, + "RequestedConstraints":{ + "shape":"QuoteConstraintList", + "documentation":"

The physical constraints specified in the quote request.

" + }, + "RequestedPaymentOptions":{ + "shape":"PaymentOptionList", + "documentation":"

The payment options specified in the quote request.

" + }, + "RequestedPaymentTerms":{ + "shape":"PaymentTermList", + "documentation":"

The payment terms specified in the quote request.

" + }, + "QuoteOptions":{ + "shape":"QuoteOptionList", + "documentation":"

The configuration and pricing options for the quote. Each option includes capacity details, physical specifications, and pricing information.

" + }, + "OrderingRequirements":{ + "shape":"OrderingRequirementList", + "documentation":"

The requirements that must be met before an order can be submitted for the quote.

" + }, + "SubmittedOrderId":{ + "shape":"OrderIdentifier", + "documentation":"

The ID of the order submitted for the quote.

" + }, + "CreatedDate":{ + "shape":"ISO8601Timestamp", + "documentation":"

The date the quote was created.

" + }, + "ExpirationDate":{ + "shape":"ISO8601Timestamp", + "documentation":"

The date the quote expires.

" + }, + "Description":{ + "shape":"QuoteDescription", + "documentation":"

The description of the quote.

" + } + }, + "documentation":"

Information about a quote for an Outpost. A quote provides pricing and configuration options based on the requested capacity.

" + }, + "QuoteCapacity":{ + "type":"structure", + "members":{ + "QuoteCapacityType":{ + "shape":"QuoteCapacityType", + "documentation":"

The type of capacity. Valid values are EC2, EBS, and S3.

" + }, + "Unit":{ + "shape":"String", + "documentation":"

The unit of measurement for the capacity. For Amazon EC2, this is the instance type (for example, c5.24xlarge). For Amazon EBS and Amazon S3, this is the storage unit (for example, TiB for tebibytes).

" + }, + "Quantity":{ + "shape":"NullableFloat", + "documentation":"

The quantity of the specified capacity unit. For Amazon EC2, this is the number of additional instances to add to the Outpost. For Amazon EBS and Amazon S3, this is the total desired end-state capacity of the Outpost.

" + } + }, + "documentation":"

A capacity requirement for a quote. Specifies the type of capacity, the unit, and the quantity.

" + }, + "QuoteCapacityList":{ + "type":"list", + "member":{"shape":"QuoteCapacity"}, + "max":2000 + }, + "QuoteCapacityType":{ + "type":"string", + "enum":[ + "EC2", + "EBS", + "S3" + ] + }, + "QuoteConstraint":{ + "type":"structure", + "members":{ + "QuoteConstraintType":{ + "shape":"QuoteConstraintType", + "documentation":"

The type of constraint. Valid values are RACK_MAXIMUM, RACK_MAX_POWER_KVA, and RACK_MAX_WEIGHT_LBS.

" + }, + "Value":{ + "shape":"ConstraintValue", + "documentation":"

The value of the constraint.

" + } + }, + "documentation":"

A physical constraint for a quote.

" + }, + "QuoteConstraintList":{ + "type":"list", + "member":{"shape":"QuoteConstraint"}, + "max":10 + }, + "QuoteConstraintType":{ + "type":"string", + "enum":[ + "RACK_MAXIMUM", + "RACK_MAX_POWER_KVA", + "RACK_MAX_WEIGHT_LBS" + ] + }, + "QuoteDescription":{ + "type":"string", + "max":1024, + "min":0, + "pattern":"^[\\S \\n]*$", + "sensitive":true + }, + "QuoteId":{ + "type":"string", + "max":255, + "min":1, + "pattern":"^oq-[a-f0-9]{17}$" + }, + "QuoteIdentifier":{ + "type":"string", + "max":255, + "min":1, + "pattern":"^(arn:aws([a-z-]+)?:outposts:[a-z\\d-]+:\\d{12}:quote/)?oq-[a-f0-9]{17}$" + }, + "QuoteOption":{ + "type":"structure", + "members":{ + "QuoteOptionIdentifier":{ + "shape":"QuoteOptionIdentifier", + "documentation":"

The ID of the quote option.

" + }, + "Capacities":{ + "shape":"QuoteCapacityList", + "documentation":"

The capacities included in this quote option.

" + }, + "CapacitySummary":{ + "shape":"CapacitySummary", + "documentation":"

A summary of the existing, final, and changed capacity for this quote option.

" + }, + "Specifications":{ + "shape":"QuoteSpecificationList", + "documentation":"

The physical specifications for the racks or servers in this quote option.

" + }, + "PricingOptions":{ + "shape":"PricingOptionList", + "documentation":"

The pricing options for this quote option.

" + } + }, + "documentation":"

A configuration and pricing option for a quote. Each option includes the capacity breakdown, physical specifications for the racks or servers, and pricing details.

" + }, + "QuoteOptionIdentifier":{ + "type":"string", + "max":21, + "min":1, + "pattern":"^oqo-[a-f0-9]{17}$" + }, + "QuoteOptionList":{ + "type":"list", + "member":{"shape":"QuoteOption"}, + "max":10 + }, "QuotePricingType":{ "type":"string", "enum":["SUBSCRIPTION"] }, + "QuoteRackUseType":{ + "type":"string", + "enum":[ + "NETWORKING", + "COMPUTE" + ] + }, + "QuoteSpecification":{ + "type":"structure", + "members":{ + "QuoteSpecificationType":{ + "shape":"QuoteSpecificationType", + "documentation":"

The type of specification. Valid values are NEW_RACK, UPDATED_RACK, EXISTING_RACK, and SERVER.

" + }, + "ExistingRackSpecificationDetails":{ + "shape":"RackSpecificationDetails", + "documentation":"

The existing rack specification details, if the specification type is UPDATED_RACK or EXISTING_RACK.

" + }, + "FinalRackSpecificationDetails":{ + "shape":"RackSpecificationDetails", + "documentation":"

The final rack specification details after the quote is fulfilled.

" + }, + "ServerSpecificationDetails":{ + "shape":"ServerSpecificationDetails", + "documentation":"

The server specification details, if the specification type is SERVER.

" + } + }, + "documentation":"

A physical specification for a quote option. Describes the rack or server configuration that would be deployed.

" + }, + "QuoteSpecificationList":{ + "type":"list", + "member":{"shape":"QuoteSpecification"}, + "max":100 + }, + "QuoteSpecificationType":{ + "type":"string", + "enum":[ + "UPDATED_RACK", + "NEW_RACK", + "EXISTING_RACK", + "SERVER" + ] + }, + "QuoteStatus":{ + "type":"string", + "enum":[ + "CREATED", + "ORDER_SUBMITTED", + "EXPIRED" + ] + }, + "QuoteSummary":{ + "type":"structure", + "members":{ + "QuoteId":{ + "shape":"QuoteId", + "documentation":"

The ID of the quote.

" + }, + "AccountId":{ + "shape":"AccountId", + "documentation":"

The ID of the account that owns the quote.

" + }, + "QuoteStatus":{ + "shape":"QuoteStatus", + "documentation":"

The status of the quote.

" + }, + "StatusMessage":{ + "shape":"StatusMessage", + "documentation":"

A message about the status of the quote.

" + }, + "OutpostArn":{ + "shape":"OutpostArn", + "documentation":"

The ARN of the Outpost associated with the quote.

" + }, + "CountryCode":{ + "shape":"CountryCode", + "documentation":"

The country code for the Outpost site location.

" + }, + "RequestedCapacities":{ + "shape":"QuoteCapacityList", + "documentation":"

The capacity requirements specified in the quote request.

" + }, + "RequestedConstraints":{ + "shape":"QuoteConstraintList", + "documentation":"

The physical constraints specified in the quote request.

" + }, + "RequestedPaymentOptions":{ + "shape":"PaymentOptionList", + "documentation":"

The payment options specified in the quote request.

" + }, + "RequestedPaymentTerms":{ + "shape":"PaymentTermList", + "documentation":"

The payment terms specified in the quote request.

" + }, + "QuoteOptions":{ + "shape":"QuoteOptionList", + "documentation":"

The configuration and pricing options for the quote.

" + }, + "SubmittedOrderId":{ + "shape":"OrderIdentifier", + "documentation":"

The ID of the order submitted for the quote.

" + }, + "CreatedDate":{ + "shape":"ISO8601Timestamp", + "documentation":"

The date the quote was created.

" + }, + "ExpirationDate":{ + "shape":"ISO8601Timestamp", + "documentation":"

The date the quote expires.

" + }, + "Description":{ + "shape":"QuoteDescription", + "documentation":"

The description of the quote.

" + } + }, + "documentation":"

Summary information about a quote.

" + }, + "QuoteSummaryListDefinition":{ + "type":"list", + "member":{"shape":"QuoteSummary"}, + "max":1000 + }, "RackElevation":{ "type":"float", "box":true, @@ -2864,6 +3585,56 @@ }, "documentation":"

Information about the physical and logistical details for racks at sites. For more information about hardware requirements for racks, see Network readiness checklist in the Amazon Web Services Outposts User Guide.

" }, + "RackSpecificationDetails":{ + "type":"structure", + "members":{ + "RackId":{ + "shape":"RackId", + "documentation":"

The ID of the rack.

" + }, + "RackUse":{ + "shape":"QuoteRackUseType", + "documentation":"

The use of the rack. Valid values are COMPUTE and NETWORKING.

" + }, + "RackPowerDrawKva":{ + "shape":"NullableFloat", + "documentation":"

The maximum power draw of the rack in kVA.

" + }, + "RackWeightLbs":{ + "shape":"NullableFloat", + "documentation":"

The weight of the rack in pounds.

" + }, + "RackHeightInches":{ + "shape":"NullableFloat", + "documentation":"

The height of the rack in inches.

" + }, + "RackWidthInches":{ + "shape":"NullableFloat", + "documentation":"

The width of the rack in inches.

" + }, + "RackDepthInches":{ + "shape":"NullableFloat", + "documentation":"

The depth of the rack in inches.

" + }, + "RackUnitHeight":{ + "shape":"RackUnitHeight", + "documentation":"

The rack unit height.

  • HEIGHT_42U - 42 rack units.

  • HEIGHT_2U - 2 rack units.

  • HEIGHT_1U - 1 rack unit.

" + }, + "EC2Capacities":{ + "shape":"EC2CapacityListDefinition", + "documentation":"

The Amazon EC2 capacities for the rack.

" + } + }, + "documentation":"

The physical specification details for a rack in a quote option.

" + }, + "RackUnitHeight":{ + "type":"string", + "enum":[ + "HEIGHT_42U", + "HEIGHT_2U", + "HEIGHT_1U" + ] + }, "RequestedInstancePools":{ "type":"list", "member":{"shape":"InstanceTypeCapacity"} @@ -2881,6 +3652,40 @@ "min":9, "pattern":"^([0-9]{1,3}\\.){3}[0-9]{1,3}:[0-9]{1,5}$" }, + "ServerSpecificationDetails":{ + "type":"structure", + "members":{ + "ServerPowerDrawKva":{ + "shape":"NullableFloat", + "documentation":"

The maximum power draw of the server in kVA.

" + }, + "ServerWeightLbs":{ + "shape":"NullableFloat", + "documentation":"

The weight of the server in pounds.

" + }, + "ServerHeightInches":{ + "shape":"NullableFloat", + "documentation":"

The height of the server in inches.

" + }, + "ServerWidthInches":{ + "shape":"NullableFloat", + "documentation":"

The width of the server in inches.

" + }, + "ServerDepthInches":{ + "shape":"NullableFloat", + "documentation":"

The depth of the server in inches.

" + }, + "RackUnitHeight":{ + "shape":"RackUnitHeight", + "documentation":"

The rack unit height of the server.

  • HEIGHT_2U - 2 rack units.

  • HEIGHT_1U - 1 rack unit.

" + }, + "EC2Capacities":{ + "shape":"EC2CapacityListDefinition", + "documentation":"

The Amazon EC2 capacities for the server.

" + } + }, + "documentation":"

The physical specification details for a server in a quote option.

" + }, "ServiceQuotaExceededException":{ "type":"structure", "members":{ @@ -3169,6 +3974,12 @@ "max":5, "min":1 }, + "StatusMessage":{ + "type":"string", + "max":2048, + "min":1, + "pattern":"^[\\S \\n]+$" + }, "String":{ "type":"string", "max":1000, @@ -3202,6 +4013,10 @@ "shape":"ISO8601Timestamp", "documentation":"

The date your subscription ends.

" }, + "Currency":{ + "shape":"CurrencyCode", + "documentation":"

The currency of the subscription price. Currently only USD is supported.

" + }, "MonthlyRecurringPrice":{ "shape":"NullableDouble", "documentation":"

The amount you are billed each month in the subscription period.

" @@ -3235,6 +4050,10 @@ "MonthlyRecurringPrice":{ "shape":"NullableFloat", "documentation":"

The monthly recurring price.

" + }, + "Currency":{ + "shape":"CurrencyCode", + "documentation":"

The currency of the price. Currently only USD is supported.

" } }, "documentation":"

The pricing details for a subscription.

" @@ -3401,6 +4220,55 @@ "Outpost":{"shape":"Outpost"} } }, + "UpdateQuoteInput":{ + "type":"structure", + "required":["QuoteIdentifier"], + "members":{ + "QuoteIdentifier":{ + "shape":"QuoteIdentifier", + "documentation":"

The ID or ARN of the quote.

", + "location":"uri", + "locationName":"QuoteIdentifier" + }, + "OutpostIdentifier":{ + "shape":"OutpostIdentifierOrEmpty", + "documentation":"

The ID or ARN of the Outpost to associate with the quote. Specify an empty string to remove the Outpost association.

" + }, + "CountryCode":{ + "shape":"CountryCode", + "documentation":"

The country code for the Outpost site location.

" + }, + "RequestedCapacities":{ + "shape":"QuoteCapacityList", + "documentation":"

The updated capacity requirements for the quote.

" + }, + "RequestedConstraints":{ + "shape":"QuoteConstraintList", + "documentation":"

The updated physical constraints for the quote.

" + }, + "RequestedPaymentOptions":{ + "shape":"PaymentOptionList", + "documentation":"

The updated payment options to include in the quote pricing.

" + }, + "RequestedPaymentTerms":{ + "shape":"PaymentTermList", + "documentation":"

The updated payment terms to include in the quote pricing.

" + }, + "Description":{ + "shape":"QuoteDescription", + "documentation":"

A description for the quote.

" + } + } + }, + "UpdateQuoteOutput":{ + "type":"structure", + "members":{ + "Quote":{ + "shape":"Quote", + "documentation":"

Information about the updated quote.

" + } + } + }, "UpdateSiteAddressInput":{ "type":"structure", "required":[ From d4b3b4cef542a6d8f3eaafb42ccec252e0e804b1 Mon Sep 17 00:00:00 2001 From: aws-sdk-python-automation Date: Tue, 9 Jun 2026 18:05:41 +0000 Subject: [PATCH 11/18] Update endpoints model --- awscli/botocore/data/endpoints.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/awscli/botocore/data/endpoints.json b/awscli/botocore/data/endpoints.json index 7c4131e03261..4ed6efe8984c 100644 --- a/awscli/botocore/data/endpoints.json +++ b/awscli/botocore/data/endpoints.json @@ -40174,6 +40174,12 @@ "us-isof-south-1" : { } } }, + "securityhub" : { + "endpoints" : { + "us-isof-east-1" : { }, + "us-isof-south-1" : { } + } + }, "servicediscovery" : { "endpoints" : { "us-isof-east-1" : { }, From 9830ee834046fc1f98b692b2a969d8af0bba1593 Mon Sep 17 00:00:00 2001 From: aws-sdk-python-automation Date: Tue, 9 Jun 2026 18:07:41 +0000 Subject: [PATCH 12/18] Bump version to 2.35.1 --- .changes/2.35.1.json | 32 +++++++++++++++++++ .../api-change-bedrock-53644.json | 5 --- .../api-change-bedrockagentcore-74088.json | 5 --- .../api-change-cloudwatch-90462.json | 5 --- .../next-release/api-change-ec2-7505.json | 5 --- .../next-release/api-change-odb-4951.json | 5 --- .../api-change-outposts-61761.json | 5 --- CHANGELOG.rst | 11 +++++++ awscli/__init__.py | 2 +- configure | 14 ++++---- configure.ac | 2 +- doc/source/conf.py | 2 +- 12 files changed, 53 insertions(+), 40 deletions(-) create mode 100644 .changes/2.35.1.json delete mode 100644 .changes/next-release/api-change-bedrock-53644.json delete mode 100644 .changes/next-release/api-change-bedrockagentcore-74088.json delete mode 100644 .changes/next-release/api-change-cloudwatch-90462.json delete mode 100644 .changes/next-release/api-change-ec2-7505.json delete mode 100644 .changes/next-release/api-change-odb-4951.json delete mode 100644 .changes/next-release/api-change-outposts-61761.json diff --git a/.changes/2.35.1.json b/.changes/2.35.1.json new file mode 100644 index 000000000000..150a1e8fb7ca --- /dev/null +++ b/.changes/2.35.1.json @@ -0,0 +1,32 @@ +[ + { + "category": "``bedrock-agentcore``", + "description": "Add RetryableConflictException (HTTP 409) to InvokeAgentRuntimeCommand and GetAgentCard to prevent orphaned VMs during concurrent session access. The SDK automatically retries this exception with backoff. Enforcement is not yet active and will be enabled in a future service update.", + "type": "api-change" + }, + { + "category": "``outposts``", + "description": "Added AWS Outposts APIs for self-service Outposts quoting and ordering. New operations include CreateQuote, GetQuote, UpdateQuote, DeleteQuote, ListQuotes, and ListOrderableInstanceTypes.", + "type": "api-change" + }, + { + "category": "``odb``", + "description": "Releases Autonomous Database Serverless APIs, autonomousDatabaseOciIntegrationIamRoles, linkedOciTenancyId, linkedOciCompartmentId, and subscriptionErrors fields in GetOciOnboardingStatus API response.", + "type": "api-change" + }, + { + "category": "``cloudwatch``", + "description": "This release adds the APIs (AssociateDatasetKmsKey, DisassociateDatasetKmsKey, GetDataset) to manage encryption at rest for OpenTelemetry metrics in CloudWatch using AWS KMS customer managed keys.", + "type": "api-change" + }, + { + "category": "``ec2``", + "description": "Added TagFieldSpecifications to CreateFlowLogs and DescribeFlowLogs APIs. Customers can now specify tag keys in their Flow Logs subscriptions to capture associated EC2 resource tag values in their logs, enabling tag-based visibility.", + "type": "api-change" + }, + { + "category": "``bedrock``", + "description": "Adds support for the Amazon Bedrock account-level data retention APIs PutAccountDataRetention and GetAccountDataRetention.", + "type": "api-change" + } +] \ No newline at end of file diff --git a/.changes/next-release/api-change-bedrock-53644.json b/.changes/next-release/api-change-bedrock-53644.json deleted file mode 100644 index c620dfc381ea..000000000000 --- a/.changes/next-release/api-change-bedrock-53644.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "api-change", - "category": "``bedrock``", - "description": "Adds support for the Amazon Bedrock account-level data retention APIs PutAccountDataRetention and GetAccountDataRetention." -} diff --git a/.changes/next-release/api-change-bedrockagentcore-74088.json b/.changes/next-release/api-change-bedrockagentcore-74088.json deleted file mode 100644 index 7e92ccf45912..000000000000 --- a/.changes/next-release/api-change-bedrockagentcore-74088.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "api-change", - "category": "``bedrock-agentcore``", - "description": "Add RetryableConflictException (HTTP 409) to InvokeAgentRuntimeCommand and GetAgentCard to prevent orphaned VMs during concurrent session access. The SDK automatically retries this exception with backoff. Enforcement is not yet active and will be enabled in a future service update." -} diff --git a/.changes/next-release/api-change-cloudwatch-90462.json b/.changes/next-release/api-change-cloudwatch-90462.json deleted file mode 100644 index cd12f04573c2..000000000000 --- a/.changes/next-release/api-change-cloudwatch-90462.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "api-change", - "category": "``cloudwatch``", - "description": "This release adds the APIs (AssociateDatasetKmsKey, DisassociateDatasetKmsKey, GetDataset) to manage encryption at rest for OpenTelemetry metrics in CloudWatch using AWS KMS customer managed keys." -} diff --git a/.changes/next-release/api-change-ec2-7505.json b/.changes/next-release/api-change-ec2-7505.json deleted file mode 100644 index 898bbfcf9cad..000000000000 --- a/.changes/next-release/api-change-ec2-7505.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "api-change", - "category": "``ec2``", - "description": "Added TagFieldSpecifications to CreateFlowLogs and DescribeFlowLogs APIs. Customers can now specify tag keys in their Flow Logs subscriptions to capture associated EC2 resource tag values in their logs, enabling tag-based visibility." -} diff --git a/.changes/next-release/api-change-odb-4951.json b/.changes/next-release/api-change-odb-4951.json deleted file mode 100644 index 2d95861d9a9d..000000000000 --- a/.changes/next-release/api-change-odb-4951.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "api-change", - "category": "``odb``", - "description": "Releases Autonomous Database Serverless APIs, autonomousDatabaseOciIntegrationIamRoles, linkedOciTenancyId, linkedOciCompartmentId, and subscriptionErrors fields in GetOciOnboardingStatus API response." -} diff --git a/.changes/next-release/api-change-outposts-61761.json b/.changes/next-release/api-change-outposts-61761.json deleted file mode 100644 index 2d33e99b6af6..000000000000 --- a/.changes/next-release/api-change-outposts-61761.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "api-change", - "category": "``outposts``", - "description": "Added AWS Outposts APIs for self-service Outposts quoting and ordering. New operations include CreateQuote, GetQuote, UpdateQuote, DeleteQuote, ListQuotes, and ListOrderableInstanceTypes." -} diff --git a/CHANGELOG.rst b/CHANGELOG.rst index f606902f7a7a..24b63ab00acf 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -2,6 +2,17 @@ CHANGELOG ========= +2.35.1 +====== + +* api-change:``bedrock-agentcore``: Add RetryableConflictException (HTTP 409) to InvokeAgentRuntimeCommand and GetAgentCard to prevent orphaned VMs during concurrent session access. The SDK automatically retries this exception with backoff. Enforcement is not yet active and will be enabled in a future service update. +* api-change:``outposts``: Added AWS Outposts APIs for self-service Outposts quoting and ordering. New operations include CreateQuote, GetQuote, UpdateQuote, DeleteQuote, ListQuotes, and ListOrderableInstanceTypes. +* api-change:``odb``: Releases Autonomous Database Serverless APIs, autonomousDatabaseOciIntegrationIamRoles, linkedOciTenancyId, linkedOciCompartmentId, and subscriptionErrors fields in GetOciOnboardingStatus API response. +* api-change:``cloudwatch``: This release adds the APIs (AssociateDatasetKmsKey, DisassociateDatasetKmsKey, GetDataset) to manage encryption at rest for OpenTelemetry metrics in CloudWatch using AWS KMS customer managed keys. +* api-change:``ec2``: Added TagFieldSpecifications to CreateFlowLogs and DescribeFlowLogs APIs. Customers can now specify tag keys in their Flow Logs subscriptions to capture associated EC2 resource tag values in their logs, enabling tag-based visibility. +* api-change:``bedrock``: Adds support for the Amazon Bedrock account-level data retention APIs PutAccountDataRetention and GetAccountDataRetention. + + 2.35.0 ====== diff --git a/awscli/__init__.py b/awscli/__init__.py index 0089d5f09247..bd761dd9ac89 100644 --- a/awscli/__init__.py +++ b/awscli/__init__.py @@ -20,7 +20,7 @@ import os import sys -__version__ = '2.35.0' +__version__ = '2.35.1' # # Get our data path to be added to botocore's search path diff --git a/configure b/configure index 4fa1a95a7bb7..b9a88df4f459 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for awscli 2.35.0. +# Generated by GNU Autoconf 2.71 for awscli 2.35.1. # # # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, @@ -607,8 +607,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='awscli' PACKAGE_TARNAME='awscli' -PACKAGE_VERSION='2.35.0' -PACKAGE_STRING='awscli 2.35.0' +PACKAGE_VERSION='2.35.1' +PACKAGE_STRING='awscli 2.35.1' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1255,7 +1255,7 @@ _ACEOF fi if $ac_init_version; then cat <<\_ACEOF -awscli configure 2.35.0 +awscli configure 2.35.1 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -1292,7 +1292,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by awscli $as_me 2.35.0, which was +It was created by awscli $as_me 2.35.1, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -2668,7 +2668,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by awscli $as_me 2.35.0, which was +This file was extended by awscli $as_me 2.35.1, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -2723,7 +2723,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -awscli config.status 2.35.0 +awscli config.status 2.35.1 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index ac4bb54abafc..4d944dc7b817 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ AC_CONFIG_MACRO_DIRS([m4]) -AC_INIT([awscli], [2.35.0]) +AC_INIT([awscli], [2.35.1]) AC_CONFIG_SRCDIR([bin/aws]) AM_PATH_PYTHON([3.8]) diff --git a/doc/source/conf.py b/doc/source/conf.py index 36844982f413..8a53f98e37db 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -66,7 +66,7 @@ # The short X.Y version. version = '2.0' # The full version, including alpha/beta/rc tags. -release = '2.35.0' +release = '2.35.1' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. From 6bccbba1da94282bd8cf3a3de0f3c5517d62734f Mon Sep 17 00:00:00 2001 From: aemous Date: Wed, 10 Jun 2026 08:54:44 -0400 Subject: [PATCH 13/18] Remove reference to the global PLUGIN_REGISTRY in lazy_emitter and replaced it with instance variable. --- awscli/lazy_emitter.py | 12 +++++------- exe/pyinstaller/hook-awscli.py | 1 - 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/awscli/lazy_emitter.py b/awscli/lazy_emitter.py index 422ae65f6242..f24912cadc3e 100644 --- a/awscli/lazy_emitter.py +++ b/awscli/lazy_emitter.py @@ -25,10 +25,7 @@ from botocore.hooks import HierarchicalEmitter, PrefixTrie -from awscli.handlers_registry import ( - PLUGIN_REGISTRY, - CommandTableOp, -) +from awscli.handlers_registry import CommandTableOp from awscli.lazy import LazyCommand logger = logging.getLogger(__name__) @@ -52,10 +49,11 @@ def __init__(self, plugin_registry=None, main_command_table_ops=None): self._pending_count = 0 # event_name -> list of entries from init trie self._init_cache: dict[str, list] = {} + self._registry = plugin_registry or {} self._main_ops = main_command_table_ops self._main_ops_applied = False - if plugin_registry: - self.load_registry(plugin_registry) + if self._registry: + self.load_registry(self._registry) def load_registry(self, registry): unique = set() @@ -106,7 +104,7 @@ def _apply_main_command_table_ops(self, kwargs): # Mark all building-command-table.main entries as initialized so # _ensure_initialized never imports them. The ops list fully # accounts for all plugins registered against this event. - for entry in PLUGIN_REGISTRY.get('building-command-table.main', []): + for entry in self._registry.get('building-command-table.main', []): entry = tuple(entry) if entry not in self._initialized: self._initialized.add(entry) diff --git a/exe/pyinstaller/hook-awscli.py b/exe/pyinstaller/hook-awscli.py index 5d284fabeae6..ff85fc698eb4 100644 --- a/exe/pyinstaller/hook-awscli.py +++ b/exe/pyinstaller/hook-awscli.py @@ -13,7 +13,6 @@ 'xml.etree', 'pipes', 'colorama', - 'awscli.handlers', # NOTE: This can be removed once this hidden import issue related to # setuptools and PyInstaller is resolved: # https://github.com/pypa/setuptools/issues/1963 From de6c4ead1758fb923559deb3cfecf0c076a1f906 Mon Sep 17 00:00:00 2001 From: aemous Date: Wed, 10 Jun 2026 08:57:10 -0400 Subject: [PATCH 14/18] Add missing comma for consistency. --- awscli/handlers_registry.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/awscli/handlers_registry.py b/awscli/handlers_registry.py index 1b097c9afe09..7da3e904369a 100644 --- a/awscli/handlers_registry.py +++ b/awscli/handlers_registry.py @@ -902,5 +902,5 @@ class CommandTableOp(enum.Enum): CommandTableOp.RENAME, 'agenttoolkit', 'agent-toolkit', - ) + ), ] From dc01e8ced0877d6d72384b232e95e656ca114ea7 Mon Sep 17 00:00:00 2001 From: aemous Date: Wed, 10 Jun 2026 09:00:58 -0400 Subject: [PATCH 15/18] Remove unused agent-toolkit function. --- awscli/customizations/agenttoolkit/__init__.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/awscli/customizations/agenttoolkit/__init__.py b/awscli/customizations/agenttoolkit/__init__.py index 9dfddc448f8a..32667db797a9 100644 --- a/awscli/customizations/agenttoolkit/__init__.py +++ b/awscli/customizations/agenttoolkit/__init__.py @@ -56,13 +56,6 @@ def _inject_nonprod_header(request, **kwargs): request.headers[NONPROD_ACCESS_TOKEN_HEADER] = token -def _rename_service(command_table, session, **kwargs): - service_cmd = command_table.pop('agenttoolkit', None) - if service_cmd is not None: - service_cmd._name = 'agent-toolkit' - command_table['agent-toolkit'] = service_cmd - - def _inject_commands(command_table, session, **kwargs): # Remove any modeled commands not in our allowlist, then rename the rest for name in list(command_table): From 90b5155cbda6cfe5c7c2e1df94ddc9b25195cb2a Mon Sep 17 00:00:00 2001 From: aemous Date: Wed, 10 Jun 2026 09:09:12 -0400 Subject: [PATCH 16/18] Fix bug with lazy_emitter now that we use the instance variable. --- awscli/lazy_emitter.py | 1 + tests/unit/test_lazy_emitter.py | 32 ++++++++++++-------------------- 2 files changed, 13 insertions(+), 20 deletions(-) diff --git a/awscli/lazy_emitter.py b/awscli/lazy_emitter.py index f24912cadc3e..e48dcce180ed 100644 --- a/awscli/lazy_emitter.py +++ b/awscli/lazy_emitter.py @@ -56,6 +56,7 @@ def __init__(self, plugin_registry=None, main_command_table_ops=None): self.load_registry(self._registry) def load_registry(self, registry): + self._registry = registry unique = set() for event_pattern, entries in registry.items(): for entry in entries: diff --git a/tests/unit/test_lazy_emitter.py b/tests/unit/test_lazy_emitter.py index 3ecac7320cac..071d4725994f 100644 --- a/tests/unit/test_lazy_emitter.py +++ b/tests/unit/test_lazy_emitter.py @@ -133,10 +133,7 @@ def test_covered_plugins_not_imported(self, mock_module): command_table = {'existing': MagicMock(name='existing')} session = MagicMock() - with ( - patch('awscli.lazy_emitter.PLUGIN_REGISTRY', registry), - patch('importlib.import_module', return_value=mock_module) as imp, - ): + with patch('importlib.import_module', return_value=mock_module) as imp: emitter.emit( 'building-command-table.main', command_table=command_table, @@ -165,12 +162,11 @@ def test_rename_op_applied_to_command_table(self): command_table = {'old-name': cmd} session = MagicMock() - with patch('awscli.lazy_emitter.PLUGIN_REGISTRY', registry): - emitter.emit( - 'building-command-table.main', - command_table=command_table, - session=session, - ) + emitter.emit( + 'building-command-table.main', + command_table=command_table, + session=session, + ) assert 'old-name' not in command_table assert 'new-name' in command_table @@ -192,12 +188,11 @@ def test_add_op_creates_lazy_command(self): command_table = {} session = MagicMock() - with patch('awscli.lazy_emitter.PLUGIN_REGISTRY', registry): - emitter.emit( - 'building-command-table.main', - command_table=command_table, - session=session, - ) + emitter.emit( + 'building-command-table.main', + command_table=command_table, + session=session, + ) assert 'my-cmd' in command_table assert isinstance(command_table['my-cmd'], LazyCommand) @@ -236,10 +231,7 @@ def import_side_effect(mod_path): return mock_global raise AssertionError(f'Unexpected import of {mod_path!r}') - with ( - patch('awscli.lazy_emitter.PLUGIN_REGISTRY', registry), - patch('importlib.import_module', side_effect=import_side_effect), - ): + with patch('importlib.import_module', side_effect=import_side_effect): emitter.emit( 'building-command-table.main', command_table=command_table, From b33e3a99ba3d11b2d86ba188a190e8340c97a24c Mon Sep 17 00:00:00 2001 From: aemous Date: Wed, 10 Jun 2026 13:43:01 -0400 Subject: [PATCH 17/18] Add missing agent-toolkit argrename plugin handlers registry. --- awscli/handlers_registry.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/awscli/handlers_registry.py b/awscli/handlers_registry.py index 7da3e904369a..15cc3db2f745 100644 --- a/awscli/handlers_registry.py +++ b/awscli/handlers_registry.py @@ -115,6 +115,12 @@ class CommandTableOp(enum.Enum): 'register_streaming_output_arg', ) ], + 'building-argument-table.agent-toolkit.*.name': [ + ('awscli.customizations.argrename', 'register_arg_renames') + ], + 'building-argument-table.search-skills.query': [ + ('awscli.customizations.argrename', 'register_arg_renames') + ], 'building-argument-table.apigateway.create-rest-api': [ ('awscli.customizations.argrename', 'register_arg_renames') ], From ee0cef97bd661060607a7da83a7fdcd37356ef9a Mon Sep 17 00:00:00 2001 From: aemous Date: Wed, 10 Jun 2026 15:05:57 -0400 Subject: [PATCH 18/18] Fix new agent-toolkit entries in handlers_registry. --- awscli/handlers_registry.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/awscli/handlers_registry.py b/awscli/handlers_registry.py index 15cc3db2f745..b2d4044ea17c 100644 --- a/awscli/handlers_registry.py +++ b/awscli/handlers_registry.py @@ -115,10 +115,10 @@ class CommandTableOp(enum.Enum): 'register_streaming_output_arg', ) ], - 'building-argument-table.agent-toolkit.*.name': [ + 'building-argument-table.agent-toolkit.*': [ ('awscli.customizations.argrename', 'register_arg_renames') ], - 'building-argument-table.search-skills.query': [ + 'building-argument-table.agent-toolkit.search-skills': [ ('awscli.customizations.argrename', 'register_arg_renames') ], 'building-argument-table.apigateway.create-rest-api': [