From 50cf29a6404f6d2aa3418c5cc08123b97ebc72b2 Mon Sep 17 00:00:00 2001 From: awstools Date: Fri, 13 Dec 2024 19:26:09 +0000 Subject: [PATCH] feat(client-cloudhsm-v2): Add support for Dual-Stack hsm2m.medium clusters. The customers will now be able to create hsm2m.medium clusters having both IPv4 and IPv6 connection capabilities by specifying a new param called NetworkType=DUALSTACK during cluster creation. --- .../src/commands/CreateClusterCommand.ts | 5 +- .../src/commands/CreateHsmCommand.ts | 1 + .../src/commands/DeleteClusterCommand.ts | 4 +- .../src/commands/DescribeClustersCommand.ts | 4 +- .../src/commands/InitializeClusterCommand.ts | 2 +- .../src/commands/ModifyClusterCommand.ts | 4 +- .../src/commands/TagResourceCommand.ts | 3 + .../client-cloudhsm-v2/src/models/models_0.ts | 62 +++++++++++++ .../src/protocols/Aws_json1_1.ts | 23 +++++ .../sdk-codegen/aws-models/cloudhsm-v2.json | 86 ++++++++++++++++++- 10 files changed, 188 insertions(+), 6 deletions(-) diff --git a/clients/client-cloudhsm-v2/src/commands/CreateClusterCommand.ts b/clients/client-cloudhsm-v2/src/commands/CreateClusterCommand.ts index 10fb7fcdca2f..1a58bcfc0823 100644 --- a/clients/client-cloudhsm-v2/src/commands/CreateClusterCommand.ts +++ b/clients/client-cloudhsm-v2/src/commands/CreateClusterCommand.ts @@ -48,6 +48,7 @@ export interface CreateClusterCommandOutput extends CreateClusterResponse, __Met * SubnetIds: [ // SubnetIds // required * "STRING_VALUE", * ], + * NetworkType: "IPV4" || "DUALSTACK", * TagList: [ // TagList * { // Tag * Key: "STRING_VALUE", // required @@ -74,6 +75,7 @@ export interface CreateClusterCommandOutput extends CreateClusterResponse, __Met * // SubnetId: "STRING_VALUE", * // EniId: "STRING_VALUE", * // EniIp: "STRING_VALUE", + * // EniIpV6: "STRING_VALUE", * // HsmId: "STRING_VALUE", // required * // State: "CREATE_IN_PROGRESS" || "ACTIVE" || "DEGRADED" || "DELETE_IN_PROGRESS" || "DELETED", * // StateMessage: "STRING_VALUE", @@ -83,12 +85,13 @@ export interface CreateClusterCommandOutput extends CreateClusterResponse, __Met * // PreCoPassword: "STRING_VALUE", * // SecurityGroup: "STRING_VALUE", * // SourceBackupId: "STRING_VALUE", - * // State: "CREATE_IN_PROGRESS" || "UNINITIALIZED" || "INITIALIZE_IN_PROGRESS" || "INITIALIZED" || "ACTIVE" || "UPDATE_IN_PROGRESS" || "DELETE_IN_PROGRESS" || "DELETED" || "DEGRADED", + * // State: "CREATE_IN_PROGRESS" || "UNINITIALIZED" || "INITIALIZE_IN_PROGRESS" || "INITIALIZED" || "ACTIVE" || "UPDATE_IN_PROGRESS" || "MODIFY_IN_PROGRESS" || "ROLLBACK_IN_PROGRESS" || "DELETE_IN_PROGRESS" || "DELETED" || "DEGRADED", * // StateMessage: "STRING_VALUE", * // SubnetMapping: { // ExternalSubnetMapping * // "": "STRING_VALUE", * // }, * // VpcId: "STRING_VALUE", + * // NetworkType: "IPV4" || "DUALSTACK", * // Certificates: { // Certificates * // ClusterCsr: "STRING_VALUE", * // HsmCertificate: "STRING_VALUE", diff --git a/clients/client-cloudhsm-v2/src/commands/CreateHsmCommand.ts b/clients/client-cloudhsm-v2/src/commands/CreateHsmCommand.ts index c326559cf3c4..e47d28b3935c 100644 --- a/clients/client-cloudhsm-v2/src/commands/CreateHsmCommand.ts +++ b/clients/client-cloudhsm-v2/src/commands/CreateHsmCommand.ts @@ -52,6 +52,7 @@ export interface CreateHsmCommandOutput extends CreateHsmResponse, __MetadataBea * // SubnetId: "STRING_VALUE", * // EniId: "STRING_VALUE", * // EniIp: "STRING_VALUE", + * // EniIpV6: "STRING_VALUE", * // HsmId: "STRING_VALUE", // required * // State: "CREATE_IN_PROGRESS" || "ACTIVE" || "DEGRADED" || "DELETE_IN_PROGRESS" || "DELETED", * // StateMessage: "STRING_VALUE", diff --git a/clients/client-cloudhsm-v2/src/commands/DeleteClusterCommand.ts b/clients/client-cloudhsm-v2/src/commands/DeleteClusterCommand.ts index 8a175ee80fda..8ce3a53fa9a5 100644 --- a/clients/client-cloudhsm-v2/src/commands/DeleteClusterCommand.ts +++ b/clients/client-cloudhsm-v2/src/commands/DeleteClusterCommand.ts @@ -59,6 +59,7 @@ export interface DeleteClusterCommandOutput extends DeleteClusterResponse, __Met * // SubnetId: "STRING_VALUE", * // EniId: "STRING_VALUE", * // EniIp: "STRING_VALUE", + * // EniIpV6: "STRING_VALUE", * // HsmId: "STRING_VALUE", // required * // State: "CREATE_IN_PROGRESS" || "ACTIVE" || "DEGRADED" || "DELETE_IN_PROGRESS" || "DELETED", * // StateMessage: "STRING_VALUE", @@ -68,12 +69,13 @@ export interface DeleteClusterCommandOutput extends DeleteClusterResponse, __Met * // PreCoPassword: "STRING_VALUE", * // SecurityGroup: "STRING_VALUE", * // SourceBackupId: "STRING_VALUE", - * // State: "CREATE_IN_PROGRESS" || "UNINITIALIZED" || "INITIALIZE_IN_PROGRESS" || "INITIALIZED" || "ACTIVE" || "UPDATE_IN_PROGRESS" || "DELETE_IN_PROGRESS" || "DELETED" || "DEGRADED", + * // State: "CREATE_IN_PROGRESS" || "UNINITIALIZED" || "INITIALIZE_IN_PROGRESS" || "INITIALIZED" || "ACTIVE" || "UPDATE_IN_PROGRESS" || "MODIFY_IN_PROGRESS" || "ROLLBACK_IN_PROGRESS" || "DELETE_IN_PROGRESS" || "DELETED" || "DEGRADED", * // StateMessage: "STRING_VALUE", * // SubnetMapping: { // ExternalSubnetMapping * // "": "STRING_VALUE", * // }, * // VpcId: "STRING_VALUE", + * // NetworkType: "IPV4" || "DUALSTACK", * // Certificates: { // Certificates * // ClusterCsr: "STRING_VALUE", * // HsmCertificate: "STRING_VALUE", diff --git a/clients/client-cloudhsm-v2/src/commands/DescribeClustersCommand.ts b/clients/client-cloudhsm-v2/src/commands/DescribeClustersCommand.ts index f676da81eaa4..a175a14b7f72 100644 --- a/clients/client-cloudhsm-v2/src/commands/DescribeClustersCommand.ts +++ b/clients/client-cloudhsm-v2/src/commands/DescribeClustersCommand.ts @@ -70,6 +70,7 @@ export interface DescribeClustersCommandOutput extends DescribeClustersResponse, * // SubnetId: "STRING_VALUE", * // EniId: "STRING_VALUE", * // EniIp: "STRING_VALUE", + * // EniIpV6: "STRING_VALUE", * // HsmId: "STRING_VALUE", // required * // State: "CREATE_IN_PROGRESS" || "ACTIVE" || "DEGRADED" || "DELETE_IN_PROGRESS" || "DELETED", * // StateMessage: "STRING_VALUE", @@ -79,12 +80,13 @@ export interface DescribeClustersCommandOutput extends DescribeClustersResponse, * // PreCoPassword: "STRING_VALUE", * // SecurityGroup: "STRING_VALUE", * // SourceBackupId: "STRING_VALUE", - * // State: "CREATE_IN_PROGRESS" || "UNINITIALIZED" || "INITIALIZE_IN_PROGRESS" || "INITIALIZED" || "ACTIVE" || "UPDATE_IN_PROGRESS" || "DELETE_IN_PROGRESS" || "DELETED" || "DEGRADED", + * // State: "CREATE_IN_PROGRESS" || "UNINITIALIZED" || "INITIALIZE_IN_PROGRESS" || "INITIALIZED" || "ACTIVE" || "UPDATE_IN_PROGRESS" || "MODIFY_IN_PROGRESS" || "ROLLBACK_IN_PROGRESS" || "DELETE_IN_PROGRESS" || "DELETED" || "DEGRADED", * // StateMessage: "STRING_VALUE", * // SubnetMapping: { // ExternalSubnetMapping * // "": "STRING_VALUE", * // }, * // VpcId: "STRING_VALUE", + * // NetworkType: "IPV4" || "DUALSTACK", * // Certificates: { // Certificates * // ClusterCsr: "STRING_VALUE", * // HsmCertificate: "STRING_VALUE", diff --git a/clients/client-cloudhsm-v2/src/commands/InitializeClusterCommand.ts b/clients/client-cloudhsm-v2/src/commands/InitializeClusterCommand.ts index 4b0b16c3e961..82bd2e022325 100644 --- a/clients/client-cloudhsm-v2/src/commands/InitializeClusterCommand.ts +++ b/clients/client-cloudhsm-v2/src/commands/InitializeClusterCommand.ts @@ -48,7 +48,7 @@ export interface InitializeClusterCommandOutput extends InitializeClusterRespons * const command = new InitializeClusterCommand(input); * const response = await client.send(command); * // { // InitializeClusterResponse - * // State: "CREATE_IN_PROGRESS" || "UNINITIALIZED" || "INITIALIZE_IN_PROGRESS" || "INITIALIZED" || "ACTIVE" || "UPDATE_IN_PROGRESS" || "DELETE_IN_PROGRESS" || "DELETED" || "DEGRADED", + * // State: "CREATE_IN_PROGRESS" || "UNINITIALIZED" || "INITIALIZE_IN_PROGRESS" || "INITIALIZED" || "ACTIVE" || "UPDATE_IN_PROGRESS" || "MODIFY_IN_PROGRESS" || "ROLLBACK_IN_PROGRESS" || "DELETE_IN_PROGRESS" || "DELETED" || "DEGRADED", * // StateMessage: "STRING_VALUE", * // }; * diff --git a/clients/client-cloudhsm-v2/src/commands/ModifyClusterCommand.ts b/clients/client-cloudhsm-v2/src/commands/ModifyClusterCommand.ts index 8cde48bf9be8..7620eb714071 100644 --- a/clients/client-cloudhsm-v2/src/commands/ModifyClusterCommand.ts +++ b/clients/client-cloudhsm-v2/src/commands/ModifyClusterCommand.ts @@ -62,6 +62,7 @@ export interface ModifyClusterCommandOutput extends ModifyClusterResponse, __Met * // SubnetId: "STRING_VALUE", * // EniId: "STRING_VALUE", * // EniIp: "STRING_VALUE", + * // EniIpV6: "STRING_VALUE", * // HsmId: "STRING_VALUE", // required * // State: "CREATE_IN_PROGRESS" || "ACTIVE" || "DEGRADED" || "DELETE_IN_PROGRESS" || "DELETED", * // StateMessage: "STRING_VALUE", @@ -71,12 +72,13 @@ export interface ModifyClusterCommandOutput extends ModifyClusterResponse, __Met * // PreCoPassword: "STRING_VALUE", * // SecurityGroup: "STRING_VALUE", * // SourceBackupId: "STRING_VALUE", - * // State: "CREATE_IN_PROGRESS" || "UNINITIALIZED" || "INITIALIZE_IN_PROGRESS" || "INITIALIZED" || "ACTIVE" || "UPDATE_IN_PROGRESS" || "DELETE_IN_PROGRESS" || "DELETED" || "DEGRADED", + * // State: "CREATE_IN_PROGRESS" || "UNINITIALIZED" || "INITIALIZE_IN_PROGRESS" || "INITIALIZED" || "ACTIVE" || "UPDATE_IN_PROGRESS" || "MODIFY_IN_PROGRESS" || "ROLLBACK_IN_PROGRESS" || "DELETE_IN_PROGRESS" || "DELETED" || "DEGRADED", * // StateMessage: "STRING_VALUE", * // SubnetMapping: { // ExternalSubnetMapping * // "": "STRING_VALUE", * // }, * // VpcId: "STRING_VALUE", + * // NetworkType: "IPV4" || "DUALSTACK", * // Certificates: { // Certificates * // ClusterCsr: "STRING_VALUE", * // HsmCertificate: "STRING_VALUE", diff --git a/clients/client-cloudhsm-v2/src/commands/TagResourceCommand.ts b/clients/client-cloudhsm-v2/src/commands/TagResourceCommand.ts index b1ed04179336..c394ebcc1d68 100644 --- a/clients/client-cloudhsm-v2/src/commands/TagResourceCommand.ts +++ b/clients/client-cloudhsm-v2/src/commands/TagResourceCommand.ts @@ -69,6 +69,9 @@ export interface TagResourceCommandOutput extends TagResourceResponse, __Metadat * @throws {@link CloudHsmInvalidRequestException} (client fault) *

The request was rejected because it is not a valid request.

* + * @throws {@link CloudHsmResourceLimitExceededException} (client fault) + *

The request was rejected because it exceeds an CloudHSM limit.

+ * * @throws {@link CloudHsmResourceNotFoundException} (client fault) *

The request was rejected because it refers to a resource that cannot be * found.

diff --git a/clients/client-cloudhsm-v2/src/models/models_0.ts b/clients/client-cloudhsm-v2/src/models/models_0.ts index b7ceee8eb93b..f37d165d9ab0 100644 --- a/clients/client-cloudhsm-v2/src/models/models_0.ts +++ b/clients/client-cloudhsm-v2/src/models/models_0.ts @@ -399,6 +399,20 @@ export interface CopyBackupToRegionResponse { DestinationBackup?: DestinationBackup | undefined; } +/** + * @public + * @enum + */ +export const NetworkType = { + DUALSTACK: "DUALSTACK", + IPV4: "IPV4", +} as const; + +/** + * @public + */ +export type NetworkType = (typeof NetworkType)[keyof typeof NetworkType]; + /** * @public */ @@ -440,6 +454,14 @@ export interface CreateClusterRequest { */ SubnetIds: string[] | undefined; + /** + *

The NetworkType to create a cluster with. The allowed values are + * IPV4 and DUALSTACK. + *

+ * @public + */ + NetworkType?: NetworkType | undefined; + /** *

Tags to apply to the CloudHSM cluster during creation.

* @public @@ -545,6 +567,12 @@ export interface Hsm { */ EniIp?: string | undefined; + /** + *

The IPv6 address (if any) of the HSM's elastic network interface (ENI).

+ * @public + */ + EniIpV6?: string | undefined; + /** *

The HSM's identifier (ID).

* @public @@ -576,6 +604,8 @@ export const ClusterState = { DELETE_IN_PROGRESS: "DELETE_IN_PROGRESS", INITIALIZED: "INITIALIZED", INITIALIZE_IN_PROGRESS: "INITIALIZE_IN_PROGRESS", + MODIFY_IN_PROGRESS: "MODIFY_IN_PROGRESS", + ROLLBACK_IN_PROGRESS: "ROLLBACK_IN_PROGRESS", UNINITIALIZED: "UNINITIALIZED", UPDATE_IN_PROGRESS: "UPDATE_IN_PROGRESS", } as const; @@ -670,6 +700,16 @@ export interface Cluster { */ VpcId?: string | undefined; + /** + *

The cluster's NetworkType can be set to either IPV4 (which is the default) or DUALSTACK. + * When set to IPV4, communication between your application and the Hardware Security Modules (HSMs) is restricted to the IPv4 protocol only. + * In contrast, the DUALSTACK network type enables communication over both the IPv4 and IPv6 protocols. + * To use the DUALSTACK option, you'll need to configure your Virtual Private Cloud (VPC) and subnets to support both IPv4 and IPv6. This involves adding IPv6 Classless Inter-Domain Routing (CIDR) blocks to the existing IPv4 CIDR blocks in your subnets. + * The choice between IPV4 and DUALSTACK network types determines the flexibility of the network addressing setup for your cluster. The DUALSTACK option provides more flexibility by allowing both IPv4 and IPv6 communication.

+ * @public + */ + NetworkType?: NetworkType | undefined; + /** *

Contains one or more certificates or a certificate signing request (CSR).

* @public @@ -1210,6 +1250,28 @@ export interface RestoreBackupResponse { Backup?: Backup | undefined; } +/** + *

The request was rejected because it exceeds an CloudHSM limit.

+ * @public + */ +export class CloudHsmResourceLimitExceededException extends __BaseException { + readonly name: "CloudHsmResourceLimitExceededException" = "CloudHsmResourceLimitExceededException"; + readonly $fault: "client" = "client"; + Message?: string | undefined; + /** + * @internal + */ + constructor(opts: __ExceptionOptionType) { + super({ + name: "CloudHsmResourceLimitExceededException", + $fault: "client", + ...opts, + }); + Object.setPrototypeOf(this, CloudHsmResourceLimitExceededException.prototype); + this.Message = opts.Message; + } +} + /** * @public */ diff --git a/clients/client-cloudhsm-v2/src/protocols/Aws_json1_1.ts b/clients/client-cloudhsm-v2/src/protocols/Aws_json1_1.ts index 43ad5fe4d6be..faa6afdfe1af 100644 --- a/clients/client-cloudhsm-v2/src/protocols/Aws_json1_1.ts +++ b/clients/client-cloudhsm-v2/src/protocols/Aws_json1_1.ts @@ -51,6 +51,7 @@ import { CloudHsmAccessDeniedException, CloudHsmInternalFailureException, CloudHsmInvalidRequestException, + CloudHsmResourceLimitExceededException, CloudHsmResourceNotFoundException, CloudHsmServiceException, CloudHsmTagException, @@ -708,6 +709,9 @@ const de_CommandError = async (output: __HttpResponse, context: __SerdeContext): case "CloudHsmTagException": case "com.amazonaws.cloudhsmv2#CloudHsmTagException": throw await de_CloudHsmTagExceptionRes(parsedOutput, context); + case "CloudHsmResourceLimitExceededException": + case "com.amazonaws.cloudhsmv2#CloudHsmResourceLimitExceededException": + throw await de_CloudHsmResourceLimitExceededExceptionRes(parsedOutput, context); default: const parsedBody = parsedOutput.body; return throwDefaultError({ @@ -766,6 +770,22 @@ const de_CloudHsmInvalidRequestExceptionRes = async ( return __decorateServiceException(exception, body); }; +/** + * deserializeAws_json1_1CloudHsmResourceLimitExceededExceptionRes + */ +const de_CloudHsmResourceLimitExceededExceptionRes = async ( + parsedOutput: any, + context: __SerdeContext +): Promise => { + const body = parsedOutput.body; + const deserialized: any = _json(body); + const exception = new CloudHsmResourceLimitExceededException({ + $metadata: deserializeMetadata(parsedOutput), + ...deserialized, + }); + return __decorateServiceException(exception, body); +}; + /** * deserializeAws_json1_1CloudHsmResourceNotFoundExceptionRes */ @@ -908,6 +928,8 @@ const de_Backups = (output: any, context: __SerdeContext): Backup[] => { // de_CloudHsmInvalidRequestException omitted. +// de_CloudHsmResourceLimitExceededException omitted. + // de_CloudHsmResourceNotFoundException omitted. // de_CloudHsmServiceException omitted. @@ -927,6 +949,7 @@ const de_Cluster = (output: any, context: __SerdeContext): Cluster => { HsmType: __expectString, Hsms: _json, Mode: __expectString, + NetworkType: __expectString, PreCoPassword: __expectString, SecurityGroup: __expectString, SourceBackupId: __expectString, diff --git a/codegen/sdk-codegen/aws-models/cloudhsm-v2.json b/codegen/sdk-codegen/aws-models/cloudhsm-v2.json index 1cbc1ca2c827..b4714d93a876 100644 --- a/codegen/sdk-codegen/aws-models/cloudhsm-v2.json +++ b/codegen/sdk-codegen/aws-models/cloudhsm-v2.json @@ -1350,6 +1350,18 @@ "smithy.api#error": "client" } }, + "com.amazonaws.cloudhsmv2#CloudHsmResourceLimitExceededException": { + "type": "structure", + "members": { + "Message": { + "target": "com.amazonaws.cloudhsmv2#errorMessage" + } + }, + "traits": { + "smithy.api#documentation": "

The request was rejected because it exceeds an CloudHSM limit.

", + "smithy.api#error": "client" + } + }, "com.amazonaws.cloudhsmv2#CloudHsmResourceNotFoundException": { "type": "structure", "members": { @@ -1467,6 +1479,12 @@ "smithy.api#documentation": "

The identifier (ID) of the virtual private cloud (VPC) that contains the\n cluster.

" } }, + "NetworkType": { + "target": "com.amazonaws.cloudhsmv2#NetworkType", + "traits": { + "smithy.api#documentation": "

The cluster's NetworkType can be set to either IPV4 (which is the default) or DUALSTACK.\n When set to IPV4, communication between your application and the Hardware Security Modules (HSMs) is restricted to the IPv4 protocol only.\n In contrast, the DUALSTACK network type enables communication over both the IPv4 and IPv6 protocols.\n To use the DUALSTACK option, you'll need to configure your Virtual Private Cloud (VPC) and subnets to support both IPv4 and IPv6. This involves adding IPv6 Classless Inter-Domain Routing (CIDR) blocks to the existing IPv4 CIDR blocks in your subnets.\n The choice between IPV4 and DUALSTACK network types determines the flexibility of the network addressing setup for your cluster. The DUALSTACK option provides more flexibility by allowing both IPv4 and IPv6 communication.

" + } + }, "Certificates": { "target": "com.amazonaws.cloudhsmv2#Certificates", "traits": { @@ -1552,6 +1570,18 @@ "smithy.api#enumValue": "UPDATE_IN_PROGRESS" } }, + "MODIFY_IN_PROGRESS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "MODIFY_IN_PROGRESS" + } + }, + "ROLLBACK_IN_PROGRESS": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "ROLLBACK_IN_PROGRESS" + } + }, "DELETE_IN_PROGRESS": { "target": "smithy.api#Unit", "traits": { @@ -1722,6 +1752,12 @@ "smithy.api#required": {} } }, + "NetworkType": { + "target": "com.amazonaws.cloudhsmv2#NetworkType", + "traits": { + "smithy.api#documentation": "

The NetworkType to create a cluster with. The allowed values are\n IPV4 and DUALSTACK.\n

" + } + }, "TagList": { "target": "com.amazonaws.cloudhsmv2#TagList", "traits": { @@ -2208,7 +2244,20 @@ "inputToken": "NextToken", "outputToken": "NextToken", "pageSize": "MaxResults" - } + }, + "smithy.test#smokeTests": [ + { + "id": "DescribeClustersSuccess", + "params": {}, + "vendorParams": { + "region": "us-west-2" + }, + "vendorParamsShape": "aws.test#AwsVendorParams", + "expect": { + "success": {} + } + } + ] } }, "com.amazonaws.cloudhsmv2#DescribeClustersRequest": { @@ -2421,6 +2470,12 @@ "smithy.api#documentation": "

The IP address of the HSM's elastic network interface (ENI).

" } }, + "EniIpV6": { + "target": "com.amazonaws.cloudhsmv2#IpV6Address", + "traits": { + "smithy.api#documentation": "

The IPv6 address (if any) of the HSM's elastic network interface (ENI).

" + } + }, "HsmId": { "target": "com.amazonaws.cloudhsmv2#HsmId", "traits": { @@ -2586,6 +2641,15 @@ "smithy.api#pattern": "^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$" } }, + "com.amazonaws.cloudhsmv2#IpV6Address": { + "type": "string", + "traits": { + "smithy.api#length": { + "min": 0, + "max": 100 + } + } + }, "com.amazonaws.cloudhsmv2#ListTags": { "type": "operation", "input": { @@ -2804,6 +2868,23 @@ "smithy.api#output": {} } }, + "com.amazonaws.cloudhsmv2#NetworkType": { + "type": "enum", + "members": { + "IPV4": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "IPV4" + } + }, + "DUALSTACK": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "DUALSTACK" + } + } + } + }, "com.amazonaws.cloudhsmv2#NextToken": { "type": "string", "traits": { @@ -3088,6 +3169,9 @@ { "target": "com.amazonaws.cloudhsmv2#CloudHsmInvalidRequestException" }, + { + "target": "com.amazonaws.cloudhsmv2#CloudHsmResourceLimitExceededException" + }, { "target": "com.amazonaws.cloudhsmv2#CloudHsmResourceNotFoundException" },