From b5ae656f84ed00fe3f0822a140b528732f11ee53 Mon Sep 17 00:00:00 2001 From: Rico Huijbers Date: Thu, 23 Aug 2018 16:40:29 +0200 Subject: [PATCH 1/6] WIP: annotate CloudFormation model with strong types for Refs Fixes #619. --- .../cfnspec/lib/schema/resource-type.ts | 22 + .../spec-source/600_RefAnnotations_patch.json | 3616 +++++++++++++++++ tools/cfn2ts/lib/codegen.ts | 21 +- tools/cfn2ts/lib/genspec.ts | 16 + 4 files changed, 3674 insertions(+), 1 deletion(-) create mode 100644 packages/@aws-cdk/cfnspec/spec-source/600_RefAnnotations_patch.json diff --git a/packages/@aws-cdk/cfnspec/lib/schema/resource-type.ts b/packages/@aws-cdk/cfnspec/lib/schema/resource-type.ts index 03335a74c5965..d2f8ae0305ae5 100644 --- a/packages/@aws-cdk/cfnspec/lib/schema/resource-type.ts +++ b/packages/@aws-cdk/cfnspec/lib/schema/resource-type.ts @@ -14,6 +14,11 @@ export interface ResourceType extends Documented { * The ``Transform`` required by the resource type, if any. */ RequiredTransform?: string; + + /** + * What kind of value the 'Ref' operator refers to, if any. + */ + RefType?: RefType; } export type Attribute = PrimitiveAttribute | ListAttribute; @@ -49,3 +54,20 @@ export function isPrimitiveListAttribute(spec: Attribute): spec is PrimitiveList export function isComplexListAttribute(spec: Attribute): spec is ComplexListAttribute { return isListAttribute(spec) && !!(spec as ComplexListAttribute).ItemType; } + +/** + * Type declaration for special values of the "Ref" attribute represents. + * + * The attribute can take on more values than these, but these are treated specially. + */ +export enum RefType { + /** + * No '.ref' member is generated for this type, because it doesn't have a meaningful value. + */ + None = 'None', + + /** + * The generated class will inherit from the built-in 'Arn' type. + */ + Arn = 'Arn' +} diff --git a/packages/@aws-cdk/cfnspec/spec-source/600_RefAnnotations_patch.json b/packages/@aws-cdk/cfnspec/spec-source/600_RefAnnotations_patch.json new file mode 100644 index 0000000000000..a66b8b236142b --- /dev/null +++ b/packages/@aws-cdk/cfnspec/spec-source/600_RefAnnotations_patch.json @@ -0,0 +1,3616 @@ +{ + "ResourceTypes": { + "AWS::AmazonMQ::Broker": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::AmazonMQ::Broker to Id" + } + }, + "AWS::AmazonMQ::Configuration": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::AmazonMQ::Configuration to Id" + } + }, + "AWS::ApiGateway::Account": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ApiGateway::Account to Id" + } + }, + "AWS::ApiGateway::ApiKey": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ApiGateway::ApiKey to Id" + } + }, + "AWS::ApiGateway::Authorizer": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ApiGateway::Authorizer to Id" + } + }, + "AWS::ApiGateway::BasePathMapping": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ApiGateway::BasePathMapping to Id" + } + }, + "AWS::ApiGateway::ClientCertificate": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::ApiGateway::ClientCertificate to Name" + } + }, + "AWS::ApiGateway::Deployment": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ApiGateway::Deployment to Id" + } + }, + "AWS::ApiGateway::DocumentationPart": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ApiGateway::DocumentationPart to Id" + } + }, + "AWS::ApiGateway::DocumentationVersion": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ApiGateway::DocumentationVersion to Id" + } + }, + "AWS::ApiGateway::DomainName": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::ApiGateway::DomainName to Name" + } + }, + "AWS::ApiGateway::GatewayResponse": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ApiGateway::GatewayResponse to Id" + } + }, + "AWS::ApiGateway::Method": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ApiGateway::Method to Id" + } + }, + "AWS::ApiGateway::Model": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::ApiGateway::Model to Name" + } + }, + "AWS::ApiGateway::RequestValidator": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ApiGateway::RequestValidator to Id" + } + }, + "AWS::ApiGateway::Resource": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ApiGateway::Resource to Id" + } + }, + "AWS::ApiGateway::RestApi": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ApiGateway::RestApi to Id" + } + }, + "AWS::ApiGateway::Stage": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::ApiGateway::Stage to Name" + } + }, + "AWS::ApiGateway::UsagePlan": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ApiGateway::UsagePlan to Id" + } + }, + "AWS::ApiGateway::UsagePlanKey": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ApiGateway::UsagePlanKey to Id" + } + }, + "AWS::ApiGateway::VpcLink": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ApiGateway::VpcLink to Id" + } + }, + "AWS::AppSync::ApiKey": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::AppSync::ApiKey to Arn" + } + }, + "AWS::AppSync::DataSource": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::AppSync::DataSource to Arn" + } + }, + "AWS::AppSync::GraphQLApi": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::AppSync::GraphQLApi to Arn" + } + }, + "AWS::AppSync::GraphQLSchema": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::AppSync::GraphQLSchema to Id" + } + }, + "AWS::AppSync::Resolver": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::AppSync::Resolver to Arn" + } + }, + "AWS::ApplicationAutoScaling::ScalableTarget": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ApplicationAutoScaling::ScalableTarget to Id" + } + }, + "AWS::ApplicationAutoScaling::ScalingPolicy": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::ApplicationAutoScaling::ScalingPolicy to Arn" + } + }, + "AWS::Athena::NamedQuery": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Athena::NamedQuery to Name" + } + }, + "AWS::AutoScaling::AutoScalingGroup": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::AutoScaling::AutoScalingGroup to Name" + } + }, + "AWS::AutoScaling::LaunchConfiguration": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::AutoScaling::LaunchConfiguration to Name" + } + }, + "AWS::AutoScaling::LifecycleHook": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::AutoScaling::LifecycleHook to Name" + } + }, + "AWS::AutoScaling::ScalingPolicy": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::AutoScaling::ScalingPolicy to Arn" + } + }, + "AWS::AutoScaling::ScheduledAction": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::AutoScaling::ScheduledAction to Name" + } + }, + "AWS::AutoScalingPlans::ScalingPlan": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::AutoScalingPlans::ScalingPlan to Arn" + } + }, + "AWS::Batch::ComputeEnvironment": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::Batch::ComputeEnvironment to Arn" + } + }, + "AWS::Batch::JobDefinition": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::Batch::JobDefinition to Arn" + } + }, + "AWS::Batch::JobQueue": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::Batch::JobQueue to Arn" + } + }, + "AWS::Budgets::Budget": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Budgets::Budget to Name" + } + }, + "AWS::CertificateManager::Certificate": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::CertificateManager::Certificate to Arn" + } + }, + "AWS::Cloud9::EnvironmentEC2": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::Cloud9::EnvironmentEC2 to Id" + } + }, + "AWS::CloudFormation::CustomResource": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "None" + } + ], + "description": "Set RefType of AWS::CloudFormation::CustomResource to None" + } + }, + "AWS::CloudFormation::Stack": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::CloudFormation::Stack to Id" + } + }, + "AWS::CloudFormation::WaitCondition": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::CloudFormation::WaitCondition to Name" + } + }, + "AWS::CloudFormation::WaitConditionHandle": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Url" + } + ], + "description": "Set RefType of AWS::CloudFormation::WaitConditionHandle to Url" + } + }, + "AWS::CloudFront::CloudFrontOriginAccessIdentity": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::CloudFront::CloudFrontOriginAccessIdentity to Id" + } + }, + "AWS::CloudFront::Distribution": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::CloudFront::Distribution to Id" + } + }, + "AWS::CloudFront::StreamingDistribution": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::CloudFront::StreamingDistribution to Id" + } + }, + "AWS::CloudTrail::Trail": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::CloudTrail::Trail to Name" + } + }, + "AWS::CloudWatch::Alarm": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::CloudWatch::Alarm to Name" + } + }, + "AWS::CloudWatch::Dashboard": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::CloudWatch::Dashboard to Name" + } + }, + "AWS::CodeBuild::Project": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::CodeBuild::Project to Name" + } + }, + "AWS::CodeCommit::Repository": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::CodeCommit::Repository to Id" + } + }, + "AWS::CodeDeploy::Application": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::CodeDeploy::Application to Name" + } + }, + "AWS::CodeDeploy::DeploymentConfig": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::CodeDeploy::DeploymentConfig to Id" + } + }, + "AWS::CodeDeploy::DeploymentGroup": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::CodeDeploy::DeploymentGroup to Name" + } + }, + "AWS::CodePipeline::CustomActionType": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::CodePipeline::CustomActionType to Name" + } + }, + "AWS::CodePipeline::Pipeline": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::CodePipeline::Pipeline to Name" + } + }, + "AWS::CodePipeline::Webhook": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::CodePipeline::Webhook to Name" + } + }, + "AWS::Cognito::IdentityPool": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::Cognito::IdentityPool to Id" + } + }, + "AWS::Cognito::IdentityPoolRoleAttachment": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::Cognito::IdentityPoolRoleAttachment to Id" + } + }, + "AWS::Cognito::UserPool": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::Cognito::UserPool to Id" + } + }, + "AWS::Cognito::UserPoolClient": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::Cognito::UserPoolClient to Id" + } + }, + "AWS::Cognito::UserPoolGroup": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Cognito::UserPoolGroup to Name" + } + }, + "AWS::Cognito::UserPoolUser": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Cognito::UserPoolUser to Name" + } + }, + "AWS::Cognito::UserPoolUserToGroupAttachment": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::Cognito::UserPoolUserToGroupAttachment to Id" + } + }, + "AWS::Config::AggregationAuthorization": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::Config::AggregationAuthorization to Arn" + } + }, + "AWS::Config::ConfigRule": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Config::ConfigRule to Name" + } + }, + "AWS::Config::ConfigurationAggregator": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Config::ConfigurationAggregator to Name" + } + }, + "AWS::Config::ConfigurationRecorder": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Config::ConfigurationRecorder to Name" + } + }, + "AWS::Config::DeliveryChannel": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Config::DeliveryChannel to Name" + } + }, + "AWS::DAX::Cluster": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::DAX::Cluster to Name" + } + }, + "AWS::DAX::ParameterGroup": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::DAX::ParameterGroup to Arn" + } + }, + "AWS::DAX::SubnetGroup": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::DAX::SubnetGroup to Arn" + } + }, + "AWS::DMS::Certificate": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::DMS::Certificate to Arn" + } + }, + "AWS::DMS::Endpoint": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::DMS::Endpoint to Arn" + } + }, + "AWS::DMS::EventSubscription": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::DMS::EventSubscription to Name" + } + }, + "AWS::DMS::ReplicationInstance": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::DMS::ReplicationInstance to Arn" + } + }, + "AWS::DMS::ReplicationSubnetGroup": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::DMS::ReplicationSubnetGroup to Name" + } + }, + "AWS::DMS::ReplicationTask": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::DMS::ReplicationTask to Arn" + } + }, + "AWS::DataPipeline::Pipeline": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::DataPipeline::Pipeline to Id" + } + }, + "AWS::DirectoryService::MicrosoftAD": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::DirectoryService::MicrosoftAD to Id" + } + }, + "AWS::DirectoryService::SimpleAD": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::DirectoryService::SimpleAD to Id" + } + }, + "AWS::DynamoDB::Table": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::DynamoDB::Table to Name" + } + }, + "AWS::EC2::CustomerGateway": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::EC2::CustomerGateway to Name" + } + }, + "AWS::EC2::DHCPOptions": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::EC2::DHCPOptions to Name" + } + }, + "AWS::EC2::EIP": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Ip" + } + ], + "description": "Set RefType of AWS::EC2::EIP to Ip" + } + }, + "AWS::EC2::EIPAssociation": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::EC2::EIPAssociation to Name" + } + }, + "AWS::EC2::EgressOnlyInternetGateway": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::EC2::EgressOnlyInternetGateway to Id" + } + }, + "AWS::EC2::FlowLog": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::EC2::FlowLog to Id" + } + }, + "AWS::EC2::Host": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::EC2::Host to Id" + } + }, + "AWS::EC2::Instance": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::EC2::Instance to Id" + } + }, + "AWS::EC2::InternetGateway": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::EC2::InternetGateway to Name" + } + }, + "AWS::EC2::LaunchTemplate": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::EC2::LaunchTemplate to Id" + } + }, + "AWS::EC2::NatGateway": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::EC2::NatGateway to Id" + } + }, + "AWS::EC2::NetworkAcl": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::EC2::NetworkAcl to Name" + } + }, + "AWS::EC2::NetworkAclEntry": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::EC2::NetworkAclEntry to Name" + } + }, + "AWS::EC2::NetworkInterface": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::EC2::NetworkInterface to Name" + } + }, + "AWS::EC2::NetworkInterfaceAttachment": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::EC2::NetworkInterfaceAttachment to Name" + } + }, + "AWS::EC2::NetworkInterfacePermission": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::EC2::NetworkInterfacePermission to Id" + } + }, + "AWS::EC2::PlacementGroup": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::EC2::PlacementGroup to Name" + } + }, + "AWS::EC2::Route": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::EC2::Route to Name" + } + }, + "AWS::EC2::RouteTable": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::EC2::RouteTable to Id" + } + }, + "AWS::EC2::SecurityGroup": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::EC2::SecurityGroup to Name" + } + }, + "AWS::EC2::SecurityGroupEgress": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::EC2::SecurityGroupEgress to Id" + } + }, + "AWS::EC2::SecurityGroupIngress": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::EC2::SecurityGroupIngress to Id" + } + }, + "AWS::EC2::SpotFleet": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::EC2::SpotFleet to Name" + } + }, + "AWS::EC2::Subnet": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::EC2::Subnet to Id" + } + }, + "AWS::EC2::SubnetCidrBlock": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::EC2::SubnetCidrBlock to Id" + } + }, + "AWS::EC2::SubnetNetworkAclAssociation": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::EC2::SubnetNetworkAclAssociation to Name" + } + }, + "AWS::EC2::SubnetRouteTableAssociation": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::EC2::SubnetRouteTableAssociation to Name" + } + }, + "AWS::EC2::TrunkInterfaceAssociation": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::EC2::TrunkInterfaceAssociation to Id" + } + }, + "AWS::EC2::VPC": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::EC2::VPC to Id" + } + }, + "AWS::EC2::VPCCidrBlock": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::EC2::VPCCidrBlock to Id" + } + }, + "AWS::EC2::VPCDHCPOptionsAssociation": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::EC2::VPCDHCPOptionsAssociation to Name" + } + }, + "AWS::EC2::VPCEndpoint": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::EC2::VPCEndpoint to Id" + } + }, + "AWS::EC2::VPCEndpointConnectionNotification": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "None" + } + ], + "description": "Set RefType of AWS::EC2::VPCEndpointConnectionNotification to None" + } + }, + "AWS::EC2::VPCEndpointServicePermissions": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "None" + } + ], + "description": "Set RefType of AWS::EC2::VPCEndpointServicePermissions to None" + } + }, + "AWS::EC2::VPCGatewayAttachment": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::EC2::VPCGatewayAttachment to Name" + } + }, + "AWS::EC2::VPCPeeringConnection": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::EC2::VPCPeeringConnection to Name" + } + }, + "AWS::EC2::VPNConnection": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::EC2::VPNConnection to Name" + } + }, + "AWS::EC2::VPNConnectionRoute": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::EC2::VPNConnectionRoute to Name" + } + }, + "AWS::EC2::VPNGateway": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::EC2::VPNGateway to Name" + } + }, + "AWS::EC2::VPNGatewayRoutePropagation": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::EC2::VPNGatewayRoutePropagation to Name" + } + }, + "AWS::EC2::Volume": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::EC2::Volume to Id" + } + }, + "AWS::EC2::VolumeAttachment": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::EC2::VolumeAttachment to Id" + } + }, + "AWS::ECR::Repository": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::ECR::Repository to Name" + } + }, + "AWS::ECS::Cluster": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::ECS::Cluster to Name" + } + }, + "AWS::ECS::Service": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::ECS::Service to Arn" + } + }, + "AWS::ECS::TaskDefinition": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::ECS::TaskDefinition to Arn" + } + }, + "AWS::EFS::FileSystem": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::EFS::FileSystem to Id" + } + }, + "AWS::EFS::MountTarget": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::EFS::MountTarget to Id" + } + }, + "AWS::EKS::Cluster": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::EKS::Cluster to Name" + } + }, + "AWS::EMR::Cluster": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::EMR::Cluster to Id" + } + }, + "AWS::EMR::InstanceFleetConfig": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::EMR::InstanceFleetConfig to Id" + } + }, + "AWS::EMR::InstanceGroupConfig": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::EMR::InstanceGroupConfig to Id" + } + }, + "AWS::EMR::SecurityConfiguration": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::EMR::SecurityConfiguration to Name" + } + }, + "AWS::EMR::Step": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::EMR::Step to Id" + } + }, + "AWS::ElastiCache::CacheCluster": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::ElastiCache::CacheCluster to Name" + } + }, + "AWS::ElastiCache::ParameterGroup": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::ElastiCache::ParameterGroup to Name" + } + }, + "AWS::ElastiCache::ReplicationGroup": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::ElastiCache::ReplicationGroup to Name" + } + }, + "AWS::ElastiCache::SecurityGroup": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::ElastiCache::SecurityGroup to Name" + } + }, + "AWS::ElastiCache::SecurityGroupIngress": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ElastiCache::SecurityGroupIngress to Id" + } + }, + "AWS::ElastiCache::SubnetGroup": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::ElastiCache::SubnetGroup to Name" + } + }, + "AWS::ElasticBeanstalk::Application": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::ElasticBeanstalk::Application to Name" + } + }, + "AWS::ElasticBeanstalk::ApplicationVersion": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::ElasticBeanstalk::ApplicationVersion to Name" + } + }, + "AWS::ElasticBeanstalk::ConfigurationTemplate": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::ElasticBeanstalk::ConfigurationTemplate to Name" + } + }, + "AWS::ElasticBeanstalk::Environment": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::ElasticBeanstalk::Environment to Name" + } + }, + "AWS::ElasticLoadBalancing::LoadBalancer": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::ElasticLoadBalancing::LoadBalancer to Name" + } + }, + "AWS::ElasticLoadBalancingV2::Listener": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::ElasticLoadBalancingV2::Listener to Arn" + } + }, + "AWS::ElasticLoadBalancingV2::ListenerCertificate": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::ElasticLoadBalancingV2::ListenerCertificate to Arn" + } + }, + "AWS::ElasticLoadBalancingV2::ListenerRule": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::ElasticLoadBalancingV2::ListenerRule to Arn" + } + }, + "AWS::ElasticLoadBalancingV2::LoadBalancer": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::ElasticLoadBalancingV2::LoadBalancer to Arn" + } + }, + "AWS::ElasticLoadBalancingV2::TargetGroup": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::ElasticLoadBalancingV2::TargetGroup to Arn" + } + }, + "AWS::Elasticsearch::Domain": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Elasticsearch::Domain to Name" + } + }, + "AWS::Events::Rule": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::Events::Rule to Id" + } + }, + "AWS::GameLift::Alias": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::GameLift::Alias to Id" + } + }, + "AWS::GameLift::Build": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::GameLift::Build to Id" + } + }, + "AWS::GameLift::Fleet": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::GameLift::Fleet to Id" + } + }, + "AWS::Glue::Classifier": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Glue::Classifier to Name" + } + }, + "AWS::Glue::Connection": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Glue::Connection to Name" + } + }, + "AWS::Glue::Crawler": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Glue::Crawler to Name" + } + }, + "AWS::Glue::Database": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Glue::Database to Name" + } + }, + "AWS::Glue::DevEndpoint": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::Glue::DevEndpoint to Id" + } + }, + "AWS::Glue::Job": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Glue::Job to Name" + } + }, + "AWS::Glue::Partition": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::Glue::Partition to Id" + } + }, + "AWS::Glue::Table": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Glue::Table to Name" + } + }, + "AWS::Glue::Trigger": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Glue::Trigger to Name" + } + }, + "AWS::GuardDuty::Detector": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::GuardDuty::Detector to Id" + } + }, + "AWS::GuardDuty::Filter": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::GuardDuty::Filter to Name" + } + }, + "AWS::GuardDuty::IPSet": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::GuardDuty::IPSet to Id" + } + }, + "AWS::GuardDuty::Master": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "None" + } + ], + "description": "Set RefType of AWS::GuardDuty::Master to None" + } + }, + "AWS::GuardDuty::Member": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "None" + } + ], + "description": "Set RefType of AWS::GuardDuty::Member to None" + } + }, + "AWS::GuardDuty::ThreatIntelSet": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::GuardDuty::ThreatIntelSet to Id" + } + }, + "AWS::IAM::AccessKey": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::IAM::AccessKey to Id" + } + }, + "AWS::IAM::Group": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::IAM::Group to Name" + } + }, + "AWS::IAM::InstanceProfile": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::IAM::InstanceProfile to Name" + } + }, + "AWS::IAM::ManagedPolicy": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::IAM::ManagedPolicy to Arn" + } + }, + "AWS::IAM::Policy": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::IAM::Policy to Name" + } + }, + "AWS::IAM::Role": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::IAM::Role to Name" + } + }, + "AWS::IAM::ServiceLinkedRole": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "None" + } + ], + "description": "Set RefType of AWS::IAM::ServiceLinkedRole to None" + } + }, + "AWS::IAM::User": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::IAM::User to Name" + } + }, + "AWS::IAM::UserToGroupAddition": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "None" + } + ], + "description": "Set RefType of AWS::IAM::UserToGroupAddition to None" + } + }, + "AWS::Inspector::AssessmentTarget": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "None" + } + ], + "description": "Set RefType of AWS::Inspector::AssessmentTarget to None" + } + }, + "AWS::Inspector::AssessmentTemplate": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "None" + } + ], + "description": "Set RefType of AWS::Inspector::AssessmentTemplate to None" + } + }, + "AWS::Inspector::ResourceGroup": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "None" + } + ], + "description": "Set RefType of AWS::Inspector::ResourceGroup to None" + } + }, + "AWS::IoT::Certificate": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::IoT::Certificate to Id" + } + }, + "AWS::IoT::Policy": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::IoT::Policy to Name" + } + }, + "AWS::IoT::PolicyPrincipalAttachment": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "None" + } + ], + "description": "Set RefType of AWS::IoT::PolicyPrincipalAttachment to None" + } + }, + "AWS::IoT::Thing": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::IoT::Thing to Name" + } + }, + "AWS::IoT::ThingPrincipalAttachment": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "None" + } + ], + "description": "Set RefType of AWS::IoT::ThingPrincipalAttachment to None" + } + }, + "AWS::IoT::TopicRule": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::IoT::TopicRule to Name" + } + }, + "AWS::KMS::Alias": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::KMS::Alias to Name" + } + }, + "AWS::KMS::Key": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::KMS::Key to Id" + } + }, + "AWS::Kinesis::Stream": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::Kinesis::Stream to Id" + } + }, + "AWS::KinesisAnalytics::Application": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::KinesisAnalytics::Application to Id" + } + }, + "AWS::KinesisAnalytics::ApplicationOutput": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::KinesisAnalytics::ApplicationOutput to Id" + } + }, + "AWS::KinesisAnalytics::ApplicationReferenceDataSource": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::KinesisAnalytics::ApplicationReferenceDataSource to Id" + } + }, + "AWS::KinesisFirehose::DeliveryStream": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::KinesisFirehose::DeliveryStream to Name" + } + }, + "AWS::Lambda::Alias": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::Lambda::Alias to Arn" + } + }, + "AWS::Lambda::EventSourceMapping": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Lambda::EventSourceMapping to Name" + } + }, + "AWS::Lambda::Function": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Lambda::Function to Name" + } + }, + "AWS::Lambda::Permission": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "None" + } + ], + "description": "Set RefType of AWS::Lambda::Permission to None" + } + }, + "AWS::Lambda::Version": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::Lambda::Version to Arn" + } + }, + "AWS::Logs::Destination": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Logs::Destination to Name" + } + }, + "AWS::Logs::LogGroup": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Logs::LogGroup to Name" + } + }, + "AWS::Logs::LogStream": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Logs::LogStream to Name" + } + }, + "AWS::Logs::MetricFilter": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Logs::MetricFilter to Name" + } + }, + "AWS::Logs::SubscriptionFilter": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Logs::SubscriptionFilter to Name" + } + }, + "AWS::Neptune::DBCluster": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Neptune::DBCluster to Name" + } + }, + "AWS::Neptune::DBClusterParameterGroup": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Neptune::DBClusterParameterGroup to Name" + } + }, + "AWS::Neptune::DBInstance": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::Neptune::DBInstance to Id" + } + }, + "AWS::Neptune::DBParameterGroup": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Neptune::DBParameterGroup to Name" + } + }, + "AWS::Neptune::DBSubnetGroup": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Neptune::DBSubnetGroup to Name" + } + }, + "AWS::OpsWorks::App": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::OpsWorks::App to Id" + } + }, + "AWS::OpsWorks::ElasticLoadBalancerAttachment": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "None" + } + ], + "description": "Set RefType of AWS::OpsWorks::ElasticLoadBalancerAttachment to None" + } + }, + "AWS::OpsWorks::Instance": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::OpsWorks::Instance to Id" + } + }, + "AWS::OpsWorks::Layer": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::OpsWorks::Layer to Id" + } + }, + "AWS::OpsWorks::Stack": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::OpsWorks::Stack to Id" + } + }, + "AWS::OpsWorks::UserProfile": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::OpsWorks::UserProfile to Arn" + } + }, + "AWS::OpsWorks::Volume": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::OpsWorks::Volume to Id" + } + }, + "AWS::RDS::DBCluster": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::RDS::DBCluster to Name" + } + }, + "AWS::RDS::DBClusterParameterGroup": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::RDS::DBClusterParameterGroup to Name" + } + }, + "AWS::RDS::DBInstance": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::RDS::DBInstance to Id" + } + }, + "AWS::RDS::DBParameterGroup": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::RDS::DBParameterGroup to Name" + } + }, + "AWS::RDS::DBSecurityGroup": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::RDS::DBSecurityGroup to Name" + } + }, + "AWS::RDS::DBSecurityGroupIngress": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::RDS::DBSecurityGroupIngress to Name" + } + }, + "AWS::RDS::DBSubnetGroup": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::RDS::DBSubnetGroup to Name" + } + }, + "AWS::RDS::EventSubscription": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::RDS::EventSubscription to Name" + } + }, + "AWS::RDS::OptionGroup": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::RDS::OptionGroup to Name" + } + }, + "AWS::Redshift::Cluster": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Redshift::Cluster to Name" + } + }, + "AWS::Redshift::ClusterParameterGroup": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Redshift::ClusterParameterGroup to Name" + } + }, + "AWS::Redshift::ClusterSecurityGroup": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Redshift::ClusterSecurityGroup to Name" + } + }, + "AWS::Redshift::ClusterSecurityGroupIngress": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "None" + } + ], + "description": "Set RefType of AWS::Redshift::ClusterSecurityGroupIngress to None" + } + }, + "AWS::Redshift::ClusterSubnetGroup": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Redshift::ClusterSubnetGroup to Name" + } + }, + "AWS::Route53::HealthCheck": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::Route53::HealthCheck to Id" + } + }, + "AWS::Route53::HostedZone": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::Route53::HostedZone to Id" + } + }, + "AWS::Route53::RecordSet": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "DomainName" + } + ], + "description": "Set RefType of AWS::Route53::RecordSet to DomainName" + } + }, + "AWS::Route53::RecordSetGroup": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Route53::RecordSetGroup to Name" + } + }, + "AWS::S3::Bucket": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::S3::Bucket to Name" + } + }, + "AWS::S3::BucketPolicy": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "None" + } + ], + "description": "Set RefType of AWS::S3::BucketPolicy to None" + } + }, + "AWS::SDB::Domain": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "None" + } + ], + "description": "Set RefType of AWS::SDB::Domain to None" + } + }, + "AWS::SES::ConfigurationSet": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::SES::ConfigurationSet to Name" + } + }, + "AWS::SES::ConfigurationSetEventDestination": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "None" + } + ], + "description": "Set RefType of AWS::SES::ConfigurationSetEventDestination to None" + } + }, + "AWS::SES::ReceiptFilter": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::SES::ReceiptFilter to Name" + } + }, + "AWS::SES::ReceiptRule": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::SES::ReceiptRule to Name" + } + }, + "AWS::SES::ReceiptRuleSet": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::SES::ReceiptRuleSet to Name" + } + }, + "AWS::SES::Template": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::SES::Template to Id" + } + }, + "AWS::SNS::Subscription": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::SNS::Subscription to Arn" + } + }, + "AWS::SNS::Topic": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::SNS::Topic to Arn" + } + }, + "AWS::SNS::TopicPolicy": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "None" + } + ], + "description": "Set RefType of AWS::SNS::TopicPolicy to None" + } + }, + "AWS::SQS::Queue": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Url" + } + ], + "description": "Set RefType of AWS::SQS::Queue to Url" + } + }, + "AWS::SQS::QueuePolicy": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "None" + } + ], + "description": "Set RefType of AWS::SQS::QueuePolicy to None" + } + }, + "AWS::SSM::Association": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "None" + } + ], + "description": "Set RefType of AWS::SSM::Association to None" + } + }, + "AWS::SSM::Document": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::SSM::Document to Name" + } + }, + "AWS::SSM::MaintenanceWindowTask": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::SSM::MaintenanceWindowTask to Id" + } + }, + "AWS::SSM::Parameter": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::SSM::Parameter to Name" + } + }, + "AWS::SSM::PatchBaseline": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::SSM::PatchBaseline to Id" + } + }, + "AWS::SSM::ResourceDataSync": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::SSM::ResourceDataSync to Name" + } + }, + "AWS::SageMaker::Endpoint": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::SageMaker::Endpoint to Arn" + } + }, + "AWS::SageMaker::EndpointConfig": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::SageMaker::EndpointConfig to Arn" + } + }, + "AWS::SageMaker::Model": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::SageMaker::Model to Arn" + } + }, + "AWS::SageMaker::NotebookInstance": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::SageMaker::NotebookInstance to Arn" + } + }, + "AWS::SageMaker::NotebookInstanceLifecycleConfig": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::SageMaker::NotebookInstanceLifecycleConfig to Arn" + } + }, + "AWS::Serverless::Api": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Serverless::Api to Name" + } + }, + "AWS::Serverless::Function": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Serverless::Function to Name" + } + }, + "AWS::Serverless::SimpleTable": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::Serverless::SimpleTable to Name" + } + }, + "AWS::ServiceCatalog::AcceptedPortfolioShare": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ServiceCatalog::AcceptedPortfolioShare to Id" + } + }, + "AWS::ServiceCatalog::CloudFormationProduct": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ServiceCatalog::CloudFormationProduct to Id" + } + }, + "AWS::ServiceCatalog::CloudFormationProvisionedProduct": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ServiceCatalog::CloudFormationProvisionedProduct to Id" + } + }, + "AWS::ServiceCatalog::LaunchNotificationConstraint": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ServiceCatalog::LaunchNotificationConstraint to Id" + } + }, + "AWS::ServiceCatalog::LaunchRoleConstraint": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ServiceCatalog::LaunchRoleConstraint to Id" + } + }, + "AWS::ServiceCatalog::LaunchTemplateConstraint": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ServiceCatalog::LaunchTemplateConstraint to Id" + } + }, + "AWS::ServiceCatalog::Portfolio": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ServiceCatalog::Portfolio to Id" + } + }, + "AWS::ServiceCatalog::PortfolioPrincipalAssociation": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ServiceCatalog::PortfolioPrincipalAssociation to Id" + } + }, + "AWS::ServiceCatalog::PortfolioProductAssociation": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ServiceCatalog::PortfolioProductAssociation to Id" + } + }, + "AWS::ServiceCatalog::PortfolioShare": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ServiceCatalog::PortfolioShare to Id" + } + }, + "AWS::ServiceCatalog::TagOption": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ServiceCatalog::TagOption to Id" + } + }, + "AWS::ServiceCatalog::TagOptionAssociation": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ServiceCatalog::TagOptionAssociation to Id" + } + }, + "AWS::ServiceDiscovery::Instance": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ServiceDiscovery::Instance to Id" + } + }, + "AWS::ServiceDiscovery::PrivateDnsNamespace": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ServiceDiscovery::PrivateDnsNamespace to Id" + } + }, + "AWS::ServiceDiscovery::PublicDnsNamespace": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ServiceDiscovery::PublicDnsNamespace to Id" + } + }, + "AWS::ServiceDiscovery::Service": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::ServiceDiscovery::Service to Id" + } + }, + "AWS::StepFunctions::Activity": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::StepFunctions::Activity to Arn" + } + }, + "AWS::StepFunctions::StateMachine": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Arn" + } + ], + "description": "Set RefType of AWS::StepFunctions::StateMachine to Arn" + } + }, + "AWS::WAF::ByteMatchSet": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::WAF::ByteMatchSet to Id" + } + }, + "AWS::WAF::IPSet": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::WAF::IPSet to Id" + } + }, + "AWS::WAF::Rule": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::WAF::Rule to Id" + } + }, + "AWS::WAF::SizeConstraintSet": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::WAF::SizeConstraintSet to Id" + } + }, + "AWS::WAF::SqlInjectionMatchSet": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::WAF::SqlInjectionMatchSet to Id" + } + }, + "AWS::WAF::WebACL": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::WAF::WebACL to Id" + } + }, + "AWS::WAF::XssMatchSet": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::WAF::XssMatchSet to Id" + } + }, + "AWS::WAFRegional::ByteMatchSet": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::WAFRegional::ByteMatchSet to Id" + } + }, + "AWS::WAFRegional::IPSet": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::WAFRegional::IPSet to Id" + } + }, + "AWS::WAFRegional::Rule": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::WAFRegional::Rule to Id" + } + }, + "AWS::WAFRegional::SizeConstraintSet": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::WAFRegional::SizeConstraintSet to Id" + } + }, + "AWS::WAFRegional::SqlInjectionMatchSet": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::WAFRegional::SqlInjectionMatchSet to Id" + } + }, + "AWS::WAFRegional::WebACL": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::WAFRegional::WebACL to Id" + } + }, + "AWS::WAFRegional::WebACLAssociation": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::WAFRegional::WebACLAssociation to Id" + } + }, + "AWS::WAFRegional::XssMatchSet": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Id" + } + ], + "description": "Set RefType of AWS::WAFRegional::XssMatchSet to Id" + } + }, + "AWS::WorkSpaces::Workspace": { + "patch": { + "operations": [ + { + "op": "add", + "path": "/RefType", + "value": "Name" + } + ], + "description": "Set RefType of AWS::WorkSpaces::Workspace to Name" + } + } + } +} diff --git a/tools/cfn2ts/lib/codegen.ts b/tools/cfn2ts/lib/codegen.ts index 7db0e23609c85..2eeb11d0757e9 100644 --- a/tools/cfn2ts/lib/codegen.ts +++ b/tools/cfn2ts/lib/codegen.ts @@ -65,11 +65,15 @@ export default class CodeGenerator { public emitCode() { for (const name of Object.keys(this.spec.ResourceTypes).sort()) { + const resourceType = this.spec.ResourceTypes[name]; + + this.validateRefTypePresence(name, resourceType); + const cfnName = SpecName.parse(name); const resourceName = genspec.CodeName.forResource(cfnName); this.code.line(); this.code.openBlock('export namespace cloudformation'); - const attributeTypes = this.emitResourceType(resourceName, this.spec.ResourceTypes[name]); + const attributeTypes = this.emitResourceType(resourceName, resourceType); this.emitPropertyTypes(name); @@ -232,6 +236,15 @@ export default class CodeGenerator { } } + // + // Ref attribute + // + if (spec.RefType !== schema.RefType.None) { + const refAttribute = genspec.refAttributeDefinition(resourceName, spec.RefType!); + this.code.line(`public readonly ${refAttribute.propertyName}: ${refAttribute.typeName.className};`); + attributeTypes.push(refAttribute); + } + // // Constructor // @@ -570,6 +583,12 @@ export default class CodeGenerator { this.code.line(' */'); return; } + + private validateRefTypePresence(name: string, resourceType: schema.ResourceType): any { + if (resourceType.RefType === undefined) { + throw new Error(`Resource ${name} does not have a Ref type; please annotate this new resources in @aws-cdk/cfnspec`); + } + } } /** diff --git a/tools/cfn2ts/lib/genspec.ts b/tools/cfn2ts/lib/genspec.ts index 2ae8c2ad840ad..109bf872f761d 100644 --- a/tools/cfn2ts/lib/genspec.ts +++ b/tools/cfn2ts/lib/genspec.ts @@ -181,6 +181,22 @@ export function attributeDefinition(resourceName: CodeName, attributeName: strin return new Attribute(propertyName, typeName, baseClass, docLink); } +/** + * Return an attribute definition name for the RefType for this class + */ +export function refAttributeDefinition(resourceName: CodeName, refType: schema.RefType): Attribute { + const suffix = refType; // Already a string + + // If the class name already ends in the suffix, such as "DomainName" + "Name", + // don't turn it into "DomainNameName", but use the word "Value" instead. + const className = resourceName.className.endsWith(suffix) ? resourceName.className : (resourceName.className + suffix); + + const refTypeName = new CodeName(resourceName.packageName, '', className); + const baseClass = refType === schema.RefType.Arn ? `${CORE_NAMESPACE}.Arn` : `${CORE_NAMESPACE}.Token`; + + return new Attribute('ref', refTypeName, baseClass); +} + /** * In the CDK, attribute names will be prefixed with the name of the resource (unless they already * have the name of the resource as a prefix). There are a few reasons for that, mainly to avoid name From 9d69d3849057dd8ef14852963e50e08a39c64ec8 Mon Sep 17 00:00:00 2001 From: Rico Huijbers Date: Fri, 24 Aug 2018 14:57:04 +0200 Subject: [PATCH 2/6] WIP2 --- .../@aws-cdk/aws-ec2/lib/security-group.ts | 4 +-- tools/cfn2ts/lib/codegen.ts | 8 ++--- tools/cfn2ts/lib/genspec.ts | 36 +++++++++---------- 3 files changed, 21 insertions(+), 27 deletions(-) diff --git a/packages/@aws-cdk/aws-ec2/lib/security-group.ts b/packages/@aws-cdk/aws-ec2/lib/security-group.ts index b506df17aae46..0204439d1d74b 100644 --- a/packages/@aws-cdk/aws-ec2/lib/security-group.ts +++ b/packages/@aws-cdk/aws-ec2/lib/security-group.ts @@ -1,6 +1,6 @@ import { Construct, Output, Token } from '@aws-cdk/cdk'; import { Connections, IConnectable } from './connections'; -import { cloudformation, SecurityGroupId, SecurityGroupVpcId } from './ec2.generated'; +import { cloudformation, SecurityGroupId, SecurityGroupName, SecurityGroupVpcId } from './ec2.generated'; import { IPortRange, ISecurityGroupRule } from './security-group-rule'; import { slugify } from './util'; import { VpcNetworkRef } from './vpc-ref'; @@ -198,8 +198,6 @@ export class SecurityGroup extends SecurityGroupRef { } } -export class SecurityGroupName extends Token { } - export interface ConnectionRule { /** * The IP protocol name (tcp, udp, icmp) or number (see Protocol Numbers). diff --git a/tools/cfn2ts/lib/codegen.ts b/tools/cfn2ts/lib/codegen.ts index 2eeb11d0757e9..b130c4c8bc701 100644 --- a/tools/cfn2ts/lib/codegen.ts +++ b/tools/cfn2ts/lib/codegen.ts @@ -283,11 +283,7 @@ export default class CodeGenerator { // initialize all attribute properties for (const at of attributeTypes) { - if (!(at.typeName.specName instanceof PropertyAttributeName)) { - throw new Error('SpecName must be a PropertyAttributeName'); - } - - this.code.line(`this.${at.propertyName} = new ${at.typeName.className}(this.getAtt('${at.typeName.specName.propAttrName}'));`); + this.code.line(`this.${at.propertyName} = new ${at.typeName.className}(${at.constructorArguments});`); } this.code.closeBlock(); @@ -469,7 +465,7 @@ export default class CodeGenerator { * Attribute types are classes that represent resource attributes (e.g. QueueArnAttribute). */ private emitAttributeType(attr: genspec.Attribute) { - this.openClass(attr.typeName, attr.docLink, attr.baseClassName); + this.openClass(attr.typeName, attr.docLink, attr.baseClassName.fqn); this.closeClass(attr.typeName); } diff --git a/tools/cfn2ts/lib/genspec.ts b/tools/cfn2ts/lib/genspec.ts index 109bf872f761d..b115a2e8a0e49 100644 --- a/tools/cfn2ts/lib/genspec.ts +++ b/tools/cfn2ts/lib/genspec.ts @@ -100,10 +100,17 @@ export class CodeName { } export const TAG_NAME = new CodeName('', CORE_NAMESPACE, 'Tag'); -export const TOKEN_NAME = new CodeName('', CORE_NAMESPACE, 'Token'); +export const ARN_NAME = new CodeName('', CORE_NAMESPACE, 'Arn'); +export const TOKEN_NAME = new CodeName('', CORE_NAMESPACE, 'CloudFormationToken'); export class Attribute { - constructor(readonly propertyName: string, readonly typeName: CodeName, readonly baseClassName: string, readonly docLink?: string) { + constructor( + readonly propertyName: string, + readonly typeName: CodeName, + readonly baseClassName: CodeName, + readonly constructorArguments: string, + readonly docLink?: string, + ) { } } @@ -164,21 +171,16 @@ export function validatorName(typeName: CodeName): CodeName { * - The property name we will use to refer to the attribute. */ export function attributeDefinition(resourceName: CodeName, attributeName: string, docLink?: string): Attribute { - // Original, unmodified CloudFormation name - const specName = new PropertyAttributeName(resourceName.specName!.module, resourceName.specName!.resourceName, attributeName); // "Arn" - const descriptiveName = descriptiveAttributeName(resourceName, attributeName); // "BucketArn" const propertyName = cloudFormationToScriptName(descriptiveName); // "bucketArn" // Not in a namespace, base the name on the descriptive name - const typeName = new CodeName(resourceName.packageName, '', descriptiveName, specName); // "BucketArn" + const typeName = new CodeName(resourceName.packageName, '', descriptiveName); // "BucketArn" + const baseClass = attributeName.endsWith('Arn') ? ARN_NAME : TOKEN_NAME; - let baseClass = `${CORE_NAMESPACE}.Token`; - if (attributeName.endsWith('Arn')) { - baseClass = `${CORE_NAMESPACE}.Arn`; - } + const constructorArguments = `this.getAtt('${attributeName}')`; - return new Attribute(propertyName, typeName, baseClass, docLink); + return new Attribute(propertyName, typeName, baseClass, constructorArguments, docLink); } /** @@ -186,15 +188,13 @@ export function attributeDefinition(resourceName: CodeName, attributeName: strin */ export function refAttributeDefinition(resourceName: CodeName, refType: schema.RefType): Attribute { const suffix = refType; // Already a string + const descriptiveName = descriptiveAttributeName(resourceName, suffix); + const refTypeName = new CodeName(resourceName.packageName, '', descriptiveName); + const baseClass = refType === schema.RefType.Arn ? ARN_NAME : TOKEN_NAME; - // If the class name already ends in the suffix, such as "DomainName" + "Name", - // don't turn it into "DomainNameName", but use the word "Value" instead. - const className = resourceName.className.endsWith(suffix) ? resourceName.className : (resourceName.className + suffix); - - const refTypeName = new CodeName(resourceName.packageName, '', className); - const baseClass = refType === schema.RefType.Arn ? `${CORE_NAMESPACE}.Arn` : `${CORE_NAMESPACE}.Token`; + const constructorArguments = '{ Ref: this.logicalId }, `${this.logicalId}.Ref`'; - return new Attribute('ref', refTypeName, baseClass); + return new Attribute('ref', refTypeName, baseClass, constructorArguments); } /** From 93a19ddc57ad43b4cb35c85ce828f4704220c8b2 Mon Sep 17 00:00:00 2001 From: Rico Huijbers Date: Fri, 24 Aug 2018 16:58:20 +0200 Subject: [PATCH 3/6] BREAKING CHANGE: remove all strongly-typed redeclarations of Refs in L2 packages --- packages/@aws-cdk/assets/lib/asset.ts | 2 +- .../test/integ.assets.refs.lit.expected.json | 53 ++++---- .../test/test.auto-scaling-group.ts | 6 +- .../lib/certificate-ref.ts | 9 +- .../aws-certificatemanager/lib/certificate.ts | 4 +- .../@aws-cdk/aws-codebuild/lib/project.ts | 6 +- .../@aws-cdk/aws-codepipeline/lib/pipeline.ts | 7 +- packages/@aws-cdk/aws-dynamodb/lib/index.ts | 123 +----------------- packages/@aws-cdk/aws-ec2/lib/vpc-ref.ts | 31 ++--- packages/@aws-cdk/aws-ec2/lib/vpc.ts | 8 +- packages/@aws-cdk/aws-iam/lib/group.ts | 10 +- packages/@aws-cdk/aws-iam/lib/role.ts | 8 +- packages/@aws-cdk/aws-iam/lib/user.ts | 10 +- packages/@aws-cdk/aws-kinesis/lib/stream.ts | 2 +- packages/@aws-cdk/aws-kms/lib/alias.ts | 6 +- packages/@aws-cdk/aws-lambda/lib/alias.ts | 4 +- .../@aws-cdk/aws-lambda/lib/lambda-ref.ts | 5 +- packages/@aws-cdk/aws-lambda/lib/lambda.ts | 4 +- .../aws-lambda/lib/singleton-lambda.ts | 4 +- .../aws-logs/lib/cross-account-destination.ts | 10 +- packages/@aws-cdk/aws-logs/lib/log-group.ts | 8 +- packages/@aws-cdk/aws-logs/lib/log-stream.ts | 10 +- packages/@aws-cdk/aws-neptune/lib/index.ts | 4 +- packages/@aws-cdk/aws-rds/lib/cluster-ref.ts | 37 ++---- packages/@aws-cdk/aws-rds/lib/cluster.ts | 8 +- .../aws-route53/lib/hosted-zone-ref.ts | 9 +- .../@aws-cdk/aws-route53/lib/hosted-zone.ts | 4 +- packages/@aws-cdk/aws-s3/lib/bucket.ts | 11 +- .../aws-s3/test/notification-dests.ts | 5 +- packages/@aws-cdk/aws-sns/lib/topic-ref.ts | 7 +- packages/@aws-cdk/aws-sns/lib/topic.ts | 4 +- packages/@aws-cdk/aws-sqs/lib/queue-ref.ts | 10 +- packages/@aws-cdk/aws-sqs/lib/queue.ts | 4 +- .../cdk/lib/cloudformation/resource.ts | 4 +- .../@aws-cdk/cdk/lib/cloudformation/stack.ts | 21 ++- .../test/cloudformation/test.logical-id.ts | 6 +- .../cdk/test/cloudformation/test.output.ts | 6 +- .../cdk/test/cloudformation/test.resource.ts | 13 +- tools/cdk-build-tools/config/nycrc | 1 + tools/cfn2ts/lib/codegen.ts | 29 +++-- tools/cfn2ts/lib/genspec.ts | 34 +++-- 41 files changed, 189 insertions(+), 358 deletions(-) diff --git a/packages/@aws-cdk/assets/lib/asset.ts b/packages/@aws-cdk/assets/lib/asset.ts index 92e010de59983..f8e53a0a0a36a 100644 --- a/packages/@aws-cdk/assets/lib/asset.ts +++ b/packages/@aws-cdk/assets/lib/asset.ts @@ -97,7 +97,7 @@ export class Asset extends cdk.Construct { this.s3BucketName = bucketParam.value; this.s3Prefix = new cdk.FnSelect(0, new cdk.FnSplit(cxapi.ASSET_PREFIX_SEPARATOR, keyParam.value)); const s3Filename = new cdk.FnSelect(1, new cdk.FnSplit(cxapi.ASSET_PREFIX_SEPARATOR, keyParam.value)); - this.s3ObjectKey = new cdk.FnConcat(this.s3Prefix, s3Filename); + this.s3ObjectKey = new s3.ObjectKey(new cdk.FnConcat(this.s3Prefix, s3Filename)); this.bucket = s3.BucketRef.import(parent, 'AssetBucket', { bucketName: this.s3BucketName diff --git a/packages/@aws-cdk/assets/test/integ.assets.refs.lit.expected.json b/packages/@aws-cdk/assets/test/integ.assets.refs.lit.expected.json index 6f239e31e2a97..9539e0a25879a 100644 --- a/packages/@aws-cdk/assets/test/integ.assets.refs.lit.expected.json +++ b/packages/@aws-cdk/assets/test/integ.assets.refs.lit.expected.json @@ -76,29 +76,36 @@ }, "/", { - "Fn::Select": [ - 0, - { - "Fn::Split": [ - "||", - { - "Ref": "SampleAssetS3VersionKey3E106D34" - } - ] - } - ] - }, - { - "Fn::Select": [ - 1, - { - "Fn::Split": [ - "||", - { - "Ref": "SampleAssetS3VersionKey3E106D34" - } - ] - } + "Fn::Join": [ + "", + [ + { + "Fn::Select": [ + 0, + { + "Fn::Split": [ + "||", + { + "Ref": "SampleAssetS3VersionKey3E106D34" + } + ] + } + ] + }, + { + "Fn::Select": [ + 1, + { + "Fn::Split": [ + "||", + { + "Ref": "SampleAssetS3VersionKey3E106D34" + } + ] + } + ] + } + ] ] } ] diff --git a/packages/@aws-cdk/aws-autoscaling/test/test.auto-scaling-group.ts b/packages/@aws-cdk/aws-autoscaling/test/test.auto-scaling-group.ts index 5deccbfbe8d5b..321d8d6235787 100644 --- a/packages/@aws-cdk/aws-autoscaling/test/test.auto-scaling-group.ts +++ b/packages/@aws-cdk/aws-autoscaling/test/test.auto-scaling-group.ts @@ -336,9 +336,9 @@ export = { function mockVpc(stack: cdk.Stack) { return ec2.VpcNetwork.import(stack, 'MyVpc', { - vpcId: new ec2.VpcNetworkId('my-vpc'), + vpcId: new ec2.VPCId('my-vpc'), availabilityZones: [ 'az1' ], - publicSubnetIds: [ new ec2.VpcSubnetId('pub1') ], - privateSubnetIds: [ new ec2.VpcSubnetId('pri1') ], + publicSubnetIds: [ new ec2.SubnetId('pub1') ], + privateSubnetIds: [ new ec2.SubnetId('pri1') ], }); } diff --git a/packages/@aws-cdk/aws-certificatemanager/lib/certificate-ref.ts b/packages/@aws-cdk/aws-certificatemanager/lib/certificate-ref.ts index d208a2f74ba5c..76d8d9b687e77 100644 --- a/packages/@aws-cdk/aws-certificatemanager/lib/certificate-ref.ts +++ b/packages/@aws-cdk/aws-certificatemanager/lib/certificate-ref.ts @@ -1,10 +1,5 @@ -import { Arn, Construct, Output } from "@aws-cdk/cdk"; - -/** - * Represents the ARN of a certificate - */ -export class CertificateArn extends Arn { -} +import { Construct, Output } from "@aws-cdk/cdk"; +import { CertificateArn } from './certificatemanager.generated'; /** * Interface for certificate-like objects diff --git a/packages/@aws-cdk/aws-certificatemanager/lib/certificate.ts b/packages/@aws-cdk/aws-certificatemanager/lib/certificate.ts index 8265b749be8ab..99d75a7cc07f2 100644 --- a/packages/@aws-cdk/aws-certificatemanager/lib/certificate.ts +++ b/packages/@aws-cdk/aws-certificatemanager/lib/certificate.ts @@ -1,6 +1,6 @@ import { Construct } from '@aws-cdk/cdk'; -import { CertificateArn, CertificateRef } from './certificate-ref'; -import { cloudformation } from './certificatemanager.generated'; +import { CertificateRef } from './certificate-ref'; +import { CertificateArn, cloudformation } from './certificatemanager.generated'; import { apexDomain } from './util'; /** diff --git a/packages/@aws-cdk/aws-codebuild/lib/project.ts b/packages/@aws-cdk/aws-codebuild/lib/project.ts index 48120f478fa55..7ff73c7276df1 100644 --- a/packages/@aws-cdk/aws-codebuild/lib/project.ts +++ b/packages/@aws-cdk/aws-codebuild/lib/project.ts @@ -5,7 +5,7 @@ import kms = require('@aws-cdk/aws-kms'); import s3 = require('@aws-cdk/aws-s3'); import cdk = require('@aws-cdk/cdk'); import { BuildArtifacts, CodePipelineBuildArtifacts, NoBuildArtifacts } from './artifacts'; -import { cloudformation, ProjectArn } from './codebuild.generated'; +import { cloudformation, ProjectArn, ProjectName } from './codebuild.generated'; import { BuildSource } from './source'; const CODEPIPELINE_TYPE = 'CODEPIPELINE'; @@ -704,6 +704,4 @@ export enum BuildEnvironmentVariableType { * An environment variable stored in Systems Manager Parameter Store. */ ParameterStore = 'PARAMETER_STORE' -} - -export class ProjectName extends cdk.Token { } +} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-codepipeline/lib/pipeline.ts b/packages/@aws-cdk/aws-codepipeline/lib/pipeline.ts index 0044707ef3f15..ffe8b6f01c214 100644 --- a/packages/@aws-cdk/aws-codepipeline/lib/pipeline.ts +++ b/packages/@aws-cdk/aws-codepipeline/lib/pipeline.ts @@ -4,7 +4,7 @@ import iam = require('@aws-cdk/aws-iam'); import s3 = require('@aws-cdk/aws-s3'); import cdk = require('@aws-cdk/cdk'); import util = require('@aws-cdk/util'); -import { cloudformation, PipelineVersion } from './codepipeline.generated'; +import { cloudformation, PipelineName, PipelineVersion } from './codepipeline.generated'; import { Stage } from './stage'; /** @@ -12,11 +12,6 @@ import { Stage } from './stage'; */ export class PipelineArn extends cdk.Arn { } -/** - * The name of the pipeline. - */ -export class PipelineName extends cdk.Token { } - export interface PipelineProps { /** * The S3 bucket used by this Pipeline to store artifacts. diff --git a/packages/@aws-cdk/aws-dynamodb/lib/index.ts b/packages/@aws-cdk/aws-dynamodb/lib/index.ts index 6aa8541733f21..45e70d3bb0f0a 100644 --- a/packages/@aws-cdk/aws-dynamodb/lib/index.ts +++ b/packages/@aws-cdk/aws-dynamodb/lib/index.ts @@ -1,123 +1,2 @@ -import { Construct, Token } from '@aws-cdk/cdk'; -import { cloudformation } from './dynamodb.generated'; - -// AWS::DynamoDB CloudFormation Resources: export * from './dynamodb.generated'; - -const HASH_KEY_TYPE = 'HASH'; -const RANGE_KEY_TYPE = 'RANGE'; - -export interface TableProps { - /** - * The read capacity for the table. Careful if you add Global Secondary Indexes, as - * those will share the table's provisioned throughput. - * @default 5 - */ - readCapacity?: number; - /** - * The write capacity for the table. Careful if you add Global Secondary Indexes, as - * those will share the table's provisioned throughput. - * @default 5 - */ - writeCapacity?: number; - - /** - * Enforces a particular physical table name. - * @default - */ - tableName?: string; -} - -/** - * Provides a DynamoDB table. - */ -export class Table extends Construct { - private readonly table: cloudformation.TableResource; - - private readonly keySchema = new Array(); - private readonly attributeDefinitions = new Array(); - - constructor(parent: Construct, name: string, props: TableProps = {}) { - super(parent, name); - - const readCapacityUnits = props.readCapacity || 5; - const writeCapacityUnits = props.writeCapacity || 5; - - this.table = new cloudformation.TableResource(this, 'Resource', { - tableName: props.tableName, - keySchema: this.keySchema, - attributeDefinitions: this.attributeDefinitions, - provisionedThroughput: { readCapacityUnits, writeCapacityUnits } - }); - - if (props.tableName) { this.addMetadata('aws:cdk:hasPhysicalName', props.tableName); } - } - - public get tableArn() { - return this.table.tableArn; - } - - public get tableName() { - return this.table.ref as TableName; - } - - public get tableStreamArn() { - return this.table.tableStreamArn; - } - - public addPartitionKey(name: string, type: KeyAttributeType): this { - this.addKey(name, type, HASH_KEY_TYPE); - return this; - } - - public addSortKey(name: string, type: KeyAttributeType): this { - this.addKey(name, type, RANGE_KEY_TYPE); - return this; - } - - public validate(): string[] { - const errors = new Array(); - if (!this.findKey(HASH_KEY_TYPE)) { - errors.push('a partition key must be specified'); - } - return errors; - } - - private findKey(keyType: string) { - return this.keySchema.find(prop => prop.keyType === keyType); - } - - private addKey(name: string, type: KeyAttributeType, keyType: string) { - const existingProp = this.findKey(keyType); - if (existingProp) { - throw new Error(`Unable to set ${name} as a ${keyType} key, because ${existingProp.attributeName} is a ${keyType} key`); - } - this.registerAttribute(name, type); - this.keySchema.push({ - attributeName: name, - keyType - }); - return this; - } - - private registerAttribute(name: string, type: KeyAttributeType) { - const existingDef = this.attributeDefinitions.find(def => def.attributeName === name); - if (existingDef && existingDef.attributeType !== type) { - throw new Error(`Unable to specify ${name} as ${type} because it was already defined as ${existingDef.attributeType}`); - } - if (!existingDef) { - this.attributeDefinitions.push({ - attributeName: name, - attributeType: type - }); - } - } -} - -export class TableName extends Token {} - -export enum KeyAttributeType { - Binary = 'B', - Number = 'N', - String = 'S', -} +export * from './table'; diff --git a/packages/@aws-cdk/aws-ec2/lib/vpc-ref.ts b/packages/@aws-cdk/aws-ec2/lib/vpc-ref.ts index 7a7500fe4b538..7ad02e46ca69f 100644 --- a/packages/@aws-cdk/aws-ec2/lib/vpc-ref.ts +++ b/packages/@aws-cdk/aws-ec2/lib/vpc-ref.ts @@ -1,4 +1,5 @@ -import { Construct, IDependable, Output, StringListOutput, Token } from "@aws-cdk/cdk"; +import { Construct, IDependable, Output, StringListOutput } from "@aws-cdk/cdk"; +import { SubnetId, VPCId } from "./ec2.generated"; /** * Customize how instances are placed inside a VPC @@ -31,7 +32,7 @@ export abstract class VpcNetworkRef extends Construct implements IDependable { /** * Identifier for this VPC */ - public abstract readonly vpcId: VpcNetworkId; + public abstract readonly vpcId: VPCId; /** * List of public subnets in this VPC @@ -76,7 +77,7 @@ class ImportedVpcNetwork extends VpcNetworkRef { /** * Identifier for this VPC */ - public readonly vpcId: VpcNetworkId; + public readonly vpcId: VPCId; /** * List of public subnets in this VPC @@ -120,7 +121,7 @@ export interface VpcNetworkRefProps { /** * VPC's identifier */ - vpcId: VpcNetworkId; + vpcId: VPCId; /** * List of a availability zones, one for every subnet. @@ -135,20 +136,14 @@ export interface VpcNetworkRefProps { * * Must match the availability zones and private subnet ids in length and order. */ - publicSubnetIds: VpcSubnetId[]; + publicSubnetIds: SubnetId[]; /** * List of private subnet IDs, one for every subnet * * Must match the availability zones and public subnet ids in length and order. */ - privateSubnetIds: VpcSubnetId[]; -} - -/** - * Identifier for a VPC - */ -export class VpcNetworkId extends Token { + privateSubnetIds: SubnetId[]; } /** @@ -167,7 +162,7 @@ export abstract class VpcSubnetRef extends Construct implements IDependable { /** * The subnetId for this particular subnet */ - public abstract readonly subnetId: VpcSubnetId; + public abstract readonly subnetId: SubnetId; /** * Parts of this VPC subnet @@ -187,7 +182,7 @@ class ImportedVpcSubnet extends VpcSubnetRef { /** * The subnetId for this particular subnet */ - public readonly subnetId: VpcSubnetId; + public readonly subnetId: SubnetId; constructor(parent: Construct, name: string, props: VpcSubnetRefProps) { super(parent, name); @@ -206,13 +201,7 @@ export interface VpcSubnetRefProps { /** * The subnetId for this particular subnet */ - subnetId: VpcSubnetId; -} - -/** - * Id of a VPC Subnet - */ -export class VpcSubnetId extends Token { + subnetId: SubnetId; } /** diff --git a/packages/@aws-cdk/aws-ec2/lib/vpc.ts b/packages/@aws-cdk/aws-ec2/lib/vpc.ts index 17c2c33a368a1..2bca6d6a97251 100644 --- a/packages/@aws-cdk/aws-ec2/lib/vpc.ts +++ b/packages/@aws-cdk/aws-ec2/lib/vpc.ts @@ -1,8 +1,8 @@ import cdk = require('@aws-cdk/cdk'); import { Obj } from '@aws-cdk/util'; -import { cloudformation } from './ec2.generated'; +import { cloudformation, SubnetId, VPCId } from './ec2.generated'; import { NetworkBuilder } from './network-util'; -import { VpcNetworkId, VpcNetworkRef, VpcSubnetId, VpcSubnetRef } from './vpc-ref'; +import { VpcNetworkRef, VpcSubnetRef } from './vpc-ref'; /** * VpcNetworkProps allows you to specify configuration options for a VPC */ @@ -231,7 +231,7 @@ export class VpcNetwork extends VpcNetworkRef { /** * Identifier for this VPC */ - public readonly vpcId: VpcNetworkId; + public readonly vpcId: VPCId; /** * List of public subnets in this VPC @@ -466,7 +466,7 @@ export class VpcSubnet extends VpcSubnetRef { /** * The subnetId for this particular subnet */ - public readonly subnetId: VpcSubnetId; + public readonly subnetId: SubnetId; /** * The routeTableId attached to this subnet. diff --git a/packages/@aws-cdk/aws-iam/lib/group.ts b/packages/@aws-cdk/aws-iam/lib/group.ts index b9b37f5f997cf..d8afa34375b4f 100644 --- a/packages/@aws-cdk/aws-iam/lib/group.ts +++ b/packages/@aws-cdk/aws-iam/lib/group.ts @@ -1,5 +1,5 @@ -import { ArnPrincipal, Construct, PolicyPrincipal, PolicyStatement, Token } from '@aws-cdk/cdk'; -import { cloudformation, GroupArn } from './iam.generated'; +import { ArnPrincipal, Construct, PolicyPrincipal, PolicyStatement } from '@aws-cdk/cdk'; +import { cloudformation, GroupArn, GroupName } from './iam.generated'; import { IIdentityResource, IPrincipal, Policy } from './policy'; import { User } from './user'; import { AttachedPolicies, undefinedIfEmpty } from './util'; @@ -104,8 +104,4 @@ export class Group extends Construct implements IIdentityResource, IPrincipal { this.defaultPolicy.addStatement(statement); } -} - -export class GroupName extends Token { - -} +} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-iam/lib/role.ts b/packages/@aws-cdk/aws-iam/lib/role.ts index 260f99f02bb60..0eb2b88055e06 100644 --- a/packages/@aws-cdk/aws-iam/lib/role.ts +++ b/packages/@aws-cdk/aws-iam/lib/role.ts @@ -1,5 +1,5 @@ -import { ArnPrincipal, Construct, IDependable, PolicyDocument, PolicyPrincipal, PolicyStatement, Token } from '@aws-cdk/cdk'; -import { cloudformation, RoleArn } from './iam.generated'; +import { ArnPrincipal, Construct, IDependable, PolicyDocument, PolicyPrincipal, PolicyStatement } from '@aws-cdk/cdk'; +import { cloudformation, RoleArn, RoleName } from './iam.generated'; import { IIdentityResource, IPrincipal, Policy } from './policy'; import { AttachedPolicies, undefinedIfEmpty } from './util'; @@ -154,10 +154,6 @@ export class Role extends Construct implements IIdentityResource, IPrincipal, ID } } -export class RoleName extends Token { - -} - function createAssumeRolePolicy(principal: PolicyPrincipal) { return new PolicyDocument() .addStatement(new PolicyStatement() diff --git a/packages/@aws-cdk/aws-iam/lib/user.ts b/packages/@aws-cdk/aws-iam/lib/user.ts index 933b321858ab9..a8040b96caf42 100644 --- a/packages/@aws-cdk/aws-iam/lib/user.ts +++ b/packages/@aws-cdk/aws-iam/lib/user.ts @@ -1,6 +1,6 @@ -import { ArnPrincipal, Construct, PolicyPrincipal, PolicyStatement, Token } from '@aws-cdk/cdk'; +import { ArnPrincipal, Construct, PolicyPrincipal, PolicyStatement } from '@aws-cdk/cdk'; import { Group } from './group'; -import { cloudformation, UserArn } from './iam.generated'; +import { cloudformation, UserArn, UserName } from './iam.generated'; import { IIdentityResource, IPrincipal, Policy } from './policy'; import { AttachedPolicies, undefinedIfEmpty } from './util'; @@ -152,8 +152,4 @@ export class User extends Construct implements IIdentityResource, IPrincipal { return undefined; // no console access } -} - -export class UserName extends Token { - -} +} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-kinesis/lib/stream.ts b/packages/@aws-cdk/aws-kinesis/lib/stream.ts index 0ca4dbe1c6c7b..c0027a76f36ed 100644 --- a/packages/@aws-cdk/aws-kinesis/lib/stream.ts +++ b/packages/@aws-cdk/aws-kinesis/lib/stream.ts @@ -382,7 +382,7 @@ class ImportedStreamRef extends StreamRef { this.streamArn = props.streamArn; // Get the name from the ARN - this.streamName = cdk.Arn.parseToken(props.streamArn).resourceName; + this.streamName = new StreamName(cdk.Arn.parseToken(props.streamArn).resourceName); if (props.encryptionKey) { this.encryptionKey = kms.EncryptionKeyRef.import(parent, 'Key', props.encryptionKey); diff --git a/packages/@aws-cdk/aws-kms/lib/alias.ts b/packages/@aws-cdk/aws-kms/lib/alias.ts index 248747a9f7912..fac0514430288 100644 --- a/packages/@aws-cdk/aws-kms/lib/alias.ts +++ b/packages/@aws-cdk/aws-kms/lib/alias.ts @@ -1,6 +1,6 @@ -import { Construct, Token } from '@aws-cdk/cdk'; +import { Construct } from '@aws-cdk/cdk'; import { EncryptionKeyRef } from './key'; -import { cloudformation } from './kms.generated'; +import { AliasName, cloudformation } from './kms.generated'; const REQUIRED_ALIAS_PREFIX = 'alias/'; const DISALLOWED_PREFIX = REQUIRED_ALIAS_PREFIX + 'AWS'; @@ -59,5 +59,3 @@ export class EncryptionKeyAlias extends Construct { this.aliasName = resource.ref; } } - -export class AliasName extends Token { } diff --git a/packages/@aws-cdk/aws-lambda/lib/alias.ts b/packages/@aws-cdk/aws-lambda/lib/alias.ts index 11b07bcb65fc5..034f3e4ad4489 100644 --- a/packages/@aws-cdk/aws-lambda/lib/alias.ts +++ b/packages/@aws-cdk/aws-lambda/lib/alias.ts @@ -1,8 +1,8 @@ import iam = require('@aws-cdk/aws-iam'); import cdk = require('@aws-cdk/cdk'); -import { FunctionName, FunctionRef } from './lambda-ref'; +import { FunctionRef } from './lambda-ref'; import { FunctionVersion } from './lambda-version'; -import { cloudformation, FunctionArn } from './lambda.generated'; +import { cloudformation, FunctionArn, FunctionName } from './lambda.generated'; import { Permission } from './permission'; /** diff --git a/packages/@aws-cdk/aws-lambda/lib/lambda-ref.ts b/packages/@aws-cdk/aws-lambda/lib/lambda-ref.ts index 505562b050785..126f3f74b623e 100644 --- a/packages/@aws-cdk/aws-lambda/lib/lambda-ref.ts +++ b/packages/@aws-cdk/aws-lambda/lib/lambda-ref.ts @@ -4,7 +4,7 @@ import iam = require('@aws-cdk/aws-iam'); import logs = require('@aws-cdk/aws-logs'); import s3n = require('@aws-cdk/aws-s3-notifications'); import cdk = require('@aws-cdk/cdk'); -import { cloudformation, FunctionArn } from './lambda.generated'; +import { cloudformation, FunctionArn, FunctionName } from './lambda.generated'; import { Permission } from './permission'; /** @@ -341,5 +341,4 @@ class LambdaRefImport extends FunctionRef { return new cdk.FnSelect(6, new cdk.FnSplit(':', arn)); } -} -export class FunctionName extends cdk.Token { } +} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-lambda/lib/lambda.ts b/packages/@aws-cdk/aws-lambda/lib/lambda.ts index 620ffe1ceff55..adf5bf5434a1b 100644 --- a/packages/@aws-cdk/aws-lambda/lib/lambda.ts +++ b/packages/@aws-cdk/aws-lambda/lib/lambda.ts @@ -1,9 +1,9 @@ import iam = require('@aws-cdk/aws-iam'); import cdk = require('@aws-cdk/cdk'); import { Code } from './code'; -import { FunctionName, FunctionRef } from './lambda-ref'; +import { FunctionRef } from './lambda-ref'; import { FunctionVersion } from './lambda-version'; -import { cloudformation, FunctionArn } from './lambda.generated'; +import { cloudformation, FunctionArn, FunctionName } from './lambda.generated'; import { Runtime } from './runtime'; export interface FunctionProps { diff --git a/packages/@aws-cdk/aws-lambda/lib/singleton-lambda.ts b/packages/@aws-cdk/aws-lambda/lib/singleton-lambda.ts index 226f69b733ddf..f0c518f33d69f 100644 --- a/packages/@aws-cdk/aws-lambda/lib/singleton-lambda.ts +++ b/packages/@aws-cdk/aws-lambda/lib/singleton-lambda.ts @@ -1,8 +1,8 @@ import iam = require('@aws-cdk/aws-iam'); import cdk = require('@aws-cdk/cdk'); import { Function, FunctionProps } from './lambda'; -import { FunctionName, FunctionRef } from './lambda-ref'; -import { FunctionArn } from './lambda.generated'; +import { FunctionRef } from './lambda-ref'; +import { FunctionArn, FunctionName } from './lambda.generated'; import { Permission } from './permission'; /** diff --git a/packages/@aws-cdk/aws-logs/lib/cross-account-destination.ts b/packages/@aws-cdk/aws-logs/lib/cross-account-destination.ts index 0e982c9e61cc3..d5a4bb0d5ca8e 100644 --- a/packages/@aws-cdk/aws-logs/lib/cross-account-destination.ts +++ b/packages/@aws-cdk/aws-logs/lib/cross-account-destination.ts @@ -1,7 +1,7 @@ import iam = require('@aws-cdk/aws-iam'); import cdk = require('@aws-cdk/cdk'); import { LogGroup } from './log-group'; -import { cloudformation, DestinationArn } from './logs.generated'; +import { cloudformation, DestinationArn, DestinationName } from './logs.generated'; import { ILogSubscriptionDestination, LogSubscriptionDestination } from './subscription-filter'; export interface CrossAccountDestinationProps { @@ -97,10 +97,4 @@ export class CrossAccountDestination extends cdk.Construct implements ILogSubscr private stringifiedPolicyDocument() { return this.policyDocument.isEmpty ? '' : cdk.CloudFormationJSON.stringify(cdk.resolve(this.policyDocument)); } -} - -/** - * Name of a CloudWatch Destination - */ -export class DestinationName extends cdk.Token { -} +} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-logs/lib/log-group.ts b/packages/@aws-cdk/aws-logs/lib/log-group.ts index e8e0ce1a31f2a..f7810b6d5d9fe 100644 --- a/packages/@aws-cdk/aws-logs/lib/log-group.ts +++ b/packages/@aws-cdk/aws-logs/lib/log-group.ts @@ -1,6 +1,6 @@ import cdk = require('@aws-cdk/cdk'); import { LogStream } from './log-stream'; -import { cloudformation, LogGroupArn } from './logs.generated'; +import { cloudformation, LogGroupArn, LogGroupName } from './logs.generated'; import { MetricFilter } from './metric-filter'; import { IFilterPattern } from './pattern'; import { ILogSubscriptionDestination, SubscriptionFilter } from './subscription-filter'; @@ -119,12 +119,6 @@ export class LogGroup extends cdk.Construct { } } -/** - * Name of a log group - */ -export class LogGroupName extends cdk.Token { -} - /** * Properties for a new LogStream created from a LogGroup */ diff --git a/packages/@aws-cdk/aws-logs/lib/log-stream.ts b/packages/@aws-cdk/aws-logs/lib/log-stream.ts index 057a84736e3ab..e9937fadcb2b3 100644 --- a/packages/@aws-cdk/aws-logs/lib/log-stream.ts +++ b/packages/@aws-cdk/aws-logs/lib/log-stream.ts @@ -1,6 +1,6 @@ import cdk = require('@aws-cdk/cdk'); import { LogGroup } from './log-group'; -import { cloudformation } from './logs.generated'; +import { cloudformation, LogStreamName } from './logs.generated'; /** * Properties for a new LogStream @@ -57,10 +57,4 @@ export class LogStream extends cdk.Construct { this.logStreamName = resource.ref; } -} - -/** - * The name of a log stream - */ -export class LogStreamName extends cdk.Token { -} +} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-neptune/lib/index.ts b/packages/@aws-cdk/aws-neptune/lib/index.ts index 5639643cbd056..22cf821079fa3 100644 --- a/packages/@aws-cdk/aws-neptune/lib/index.ts +++ b/packages/@aws-cdk/aws-neptune/lib/index.ts @@ -86,12 +86,12 @@ export class NeptuneDatabase extends cdk.Construct implements ec2.IConnectable { /** * Identifier of the cluster */ - public readonly clusterIdentifier: rds.ClusterIdentifier; + public readonly clusterIdentifier: rds.DBClusterName; /** * Identifiers of the replicas */ - public readonly instanceIdentifiers: rds.InstanceIdentifier[] = []; + public readonly instanceIdentifiers: rds.DBInstanceId[] = []; /** * The endpoint to use for read/write operations diff --git a/packages/@aws-cdk/aws-rds/lib/cluster-ref.ts b/packages/@aws-cdk/aws-rds/lib/cluster-ref.ts index 3ad5fe24036cb..c2affde36ffae 100644 --- a/packages/@aws-cdk/aws-rds/lib/cluster-ref.ts +++ b/packages/@aws-cdk/aws-rds/lib/cluster-ref.ts @@ -1,6 +1,6 @@ import ec2 = require('@aws-cdk/aws-ec2'); import cdk = require('@aws-cdk/cdk'); -import { DBClusterEndpointAddress } from './rds.generated'; +import { DBClusterEndpointAddress, DBClusterEndpointPort, DBClusterName, DBInstanceId } from './rds.generated'; /** * Create a clustered database with a given number of instances. @@ -21,12 +21,12 @@ export abstract class DatabaseClusterRef extends cdk.Construct implements ec2.IC /** * Identifier of the cluster */ - public abstract readonly clusterIdentifier: ClusterIdentifier; + public abstract readonly clusterIdentifier: DBClusterName; /** * Identifiers of the replicas */ - public abstract readonly instanceIdentifiers: InstanceIdentifier[] = []; + public abstract readonly instanceIdentifiers: DBInstanceId[] = []; /** * The endpoint to use for read/write operations @@ -72,7 +72,7 @@ export interface DatabaseClusterRefProps { /** * The database port */ - port: Port; + port: DBClusterEndpointPort; /** * The security group for this database cluster @@ -82,12 +82,12 @@ export interface DatabaseClusterRefProps { /** * Identifier for the cluster */ - clusterIdentifier: ClusterIdentifier; + clusterIdentifier: DBClusterName; /** * Identifier for the instances */ - instanceIdentifiers: InstanceIdentifier[]; + instanceIdentifiers: DBInstanceId[]; /** * Cluster endpoint address @@ -122,12 +122,12 @@ class ImportedDatabaseCluster extends DatabaseClusterRef { /** * Identifier of the cluster */ - public readonly clusterIdentifier: ClusterIdentifier; + public readonly clusterIdentifier: DBClusterName; /** * Identifiers of the replicas */ - public readonly instanceIdentifiers: InstanceIdentifier[] = []; + public readonly instanceIdentifiers: DBInstanceId[] = []; /** * The endpoint to use for read/write operations @@ -165,21 +165,6 @@ class ImportedDatabaseCluster extends DatabaseClusterRef { } } -/** - * Identifier of a cluster - */ -export class ClusterIdentifier extends cdk.Token { } - -/** - * Identifier of an instance - */ -export class InstanceIdentifier extends cdk.Token { } - -/** - * Port part of an address - */ -export class Port extends cdk.Token { } - /** * A complete socket address (hostname + ":" + port) */ @@ -199,16 +184,16 @@ export class Endpoint { /** * The port of the endpoint */ - public readonly port: Port; + public readonly port: DBClusterEndpointPort; /** * The combination of "HOSTNAME:PORT" for this endpoint */ public readonly socketAddress: SocketAddress; - constructor(address: DBClusterEndpointAddress, port: Port) { + constructor(address: DBClusterEndpointAddress, port: DBClusterEndpointPort) { this.hostname = address; this.port = port; - this.socketAddress = new cdk.FnJoin(":", [address, port]); + this.socketAddress = new SocketAddress(new cdk.FnJoin(":", [address, port])); } } diff --git a/packages/@aws-cdk/aws-rds/lib/cluster.ts b/packages/@aws-cdk/aws-rds/lib/cluster.ts index c85c3238df141..33ae72ce4ce91 100644 --- a/packages/@aws-cdk/aws-rds/lib/cluster.ts +++ b/packages/@aws-cdk/aws-rds/lib/cluster.ts @@ -1,9 +1,9 @@ import ec2 = require('@aws-cdk/aws-ec2'); import kms = require('@aws-cdk/aws-kms'); import cdk = require('@aws-cdk/cdk'); -import { ClusterIdentifier, DatabaseClusterRef, Endpoint, InstanceIdentifier } from './cluster-ref'; +import { DatabaseClusterRef, Endpoint } from './cluster-ref'; import { BackupProps, DatabaseClusterEngine, InstanceProps, Login, Parameters } from './props'; -import { cloudformation } from './rds.generated'; +import { cloudformation, DBClusterName, DBInstanceId } from './rds.generated'; /** * Properties for a new database cluster @@ -95,12 +95,12 @@ export class DatabaseCluster extends DatabaseClusterRef { /** * Identifier of the cluster */ - public readonly clusterIdentifier: ClusterIdentifier; + public readonly clusterIdentifier: DBClusterName; /** * Identifiers of the replicas */ - public readonly instanceIdentifiers: InstanceIdentifier[] = []; + public readonly instanceIdentifiers: DBInstanceId[] = []; /** * The endpoint to use for read/write operations diff --git a/packages/@aws-cdk/aws-route53/lib/hosted-zone-ref.ts b/packages/@aws-cdk/aws-route53/lib/hosted-zone-ref.ts index b642621dd60c4..185c33acadeb7 100644 --- a/packages/@aws-cdk/aws-route53/lib/hosted-zone-ref.ts +++ b/packages/@aws-cdk/aws-route53/lib/hosted-zone-ref.ts @@ -1,4 +1,5 @@ -import { Construct, Output, Token } from "@aws-cdk/cdk"; +import { Construct, Output } from "@aws-cdk/cdk"; +import { HostedZoneId } from './route53.generated'; /** * Imported or created hosted zone @@ -29,12 +30,6 @@ export abstract class HostedZoneRef extends Construct { } } -/** - * Hosted zone identifier - */ -export class HostedZoneId extends Token { -} - /** * Reference to a hosted zone */ diff --git a/packages/@aws-cdk/aws-route53/lib/hosted-zone.ts b/packages/@aws-cdk/aws-route53/lib/hosted-zone.ts index 7d342666b0e35..093f6a9a92c99 100644 --- a/packages/@aws-cdk/aws-route53/lib/hosted-zone.ts +++ b/packages/@aws-cdk/aws-route53/lib/hosted-zone.ts @@ -1,8 +1,8 @@ import ec2 = require('@aws-cdk/aws-ec2'); import logs = require('@aws-cdk/aws-logs'); import cdk = require('@aws-cdk/cdk'); -import { HostedZoneId, HostedZoneRef } from './hosted-zone-ref'; -import { cloudformation, HostedZoneNameServers } from './route53.generated'; +import { HostedZoneRef } from './hosted-zone-ref'; +import { cloudformation, HostedZoneId, HostedZoneNameServers } from './route53.generated'; import { validateZoneName } from './util'; /** diff --git a/packages/@aws-cdk/aws-s3/lib/bucket.ts b/packages/@aws-cdk/aws-s3/lib/bucket.ts index 4f7a62e481c16..748789f1d6467 100644 --- a/packages/@aws-cdk/aws-s3/lib/bucket.ts +++ b/packages/@aws-cdk/aws-s3/lib/bucket.ts @@ -6,7 +6,7 @@ import { BucketPolicy } from './bucket-policy'; import { BucketNotifications } from './notifications-resource'; import perms = require('./perms'); import { LifecycleRule } from './rule'; -import { BucketArn, BucketDomainName, BucketDualStackDomainName, cloudformation } from './s3.generated'; +import { BucketArn, BucketDomainName, BucketDualStackDomainName, BucketName, cloudformation } from './s3.generated'; import { parseBucketArn, parseBucketName, validateBucketName } from './util'; /** @@ -144,7 +144,7 @@ export abstract class BucketRef extends cdk.Construct { components.push(key); } - return new cdk.FnConcat(...components); + return new S3Url(new cdk.FnConcat(...components)); } /** @@ -570,13 +570,6 @@ export enum BucketEncryption { Kms = 'KMS', } -/** - * The name of the bucket. - */ -export class BucketName extends cdk.Token { - -} - /** * A key to an S3 object. */ diff --git a/packages/@aws-cdk/aws-s3/test/notification-dests.ts b/packages/@aws-cdk/aws-s3/test/notification-dests.ts index c707a38dfd12c..c49367c35db53 100644 --- a/packages/@aws-cdk/aws-s3/test/notification-dests.ts +++ b/packages/@aws-cdk/aws-s3/test/notification-dests.ts @@ -14,16 +14,17 @@ export class Topic extends cdk.Construct implements s3notifications.IBucketNotif super(parent, id); const resource = new cdk.Resource(this, 'Resource', { type: 'AWS::SNS::Topic' }); + const topicArn = new cdk.Ref(resource); new cdk.Resource(this, 'Policy', { type: 'AWS::SNS::TopicPolicy', properties: { - Topics: [ resource.ref ], + Topics: [ topicArn ], PolicyDocument: this.policy } }); - this.topicArn = resource.ref; + this.topicArn = topicArn; } public asBucketNotificationDestination(bucketArn: cdk.Arn, bucketId: string): s3notifications.BucketNotificationDestinationProps { diff --git a/packages/@aws-cdk/aws-sns/lib/topic-ref.ts b/packages/@aws-cdk/aws-sns/lib/topic-ref.ts index ec16ea348d5a3..07ffdf18430dd 100644 --- a/packages/@aws-cdk/aws-sns/lib/topic-ref.ts +++ b/packages/@aws-cdk/aws-sns/lib/topic-ref.ts @@ -6,14 +6,9 @@ import s3n = require('@aws-cdk/aws-s3-notifications'); import sqs = require('@aws-cdk/aws-sqs'); import cdk = require('@aws-cdk/cdk'); import { TopicPolicy } from './policy'; -import { TopicName } from './sns.generated'; +import { TopicArn, TopicName } from './sns.generated'; import { Subscription, SubscriptionProtocol } from './subscription'; -/** - * ARN of a Topic - */ -export class TopicArn extends cdk.Arn { } - /** * Either a new or imported Topic */ diff --git a/packages/@aws-cdk/aws-sns/lib/topic.ts b/packages/@aws-cdk/aws-sns/lib/topic.ts index 22f70983240fe..66bae18547c59 100644 --- a/packages/@aws-cdk/aws-sns/lib/topic.ts +++ b/packages/@aws-cdk/aws-sns/lib/topic.ts @@ -1,6 +1,6 @@ import { Construct, } from '@aws-cdk/cdk'; -import { cloudformation, TopicName } from './sns.generated'; -import { TopicArn, TopicRef } from './topic-ref'; +import { cloudformation, TopicArn, TopicName } from './sns.generated'; +import { TopicRef } from './topic-ref'; /** * Properties for a new SNS topic diff --git a/packages/@aws-cdk/aws-sqs/lib/queue-ref.ts b/packages/@aws-cdk/aws-sqs/lib/queue-ref.ts index 047abfa325222..81f2677acaa7b 100644 --- a/packages/@aws-cdk/aws-sqs/lib/queue-ref.ts +++ b/packages/@aws-cdk/aws-sqs/lib/queue-ref.ts @@ -2,7 +2,7 @@ import kms = require('@aws-cdk/aws-kms'); import s3n = require('@aws-cdk/aws-s3-notifications'); import cdk = require('@aws-cdk/cdk'); import { QueuePolicy } from './policy'; -import { QueueArn } from './sqs.generated'; +import { QueueArn, QueueUrl } from './sqs.generated'; /** * Reference to a new or existing Amazon SQS queue @@ -153,10 +153,4 @@ class ImportedQueue extends QueueRef { }); } } -} - -/** - * URL of a queue - */ -export class QueueUrl extends cdk.Token { -} +} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-sqs/lib/queue.ts b/packages/@aws-cdk/aws-sqs/lib/queue.ts index e301133f389be..f0bf362f21f27 100644 --- a/packages/@aws-cdk/aws-sqs/lib/queue.ts +++ b/packages/@aws-cdk/aws-sqs/lib/queue.ts @@ -1,7 +1,7 @@ import kms = require('@aws-cdk/aws-kms'); import cdk = require('@aws-cdk/cdk'); -import { QueueRef, QueueUrl } from './queue-ref'; -import { cloudformation, QueueArn, QueueName } from './sqs.generated'; +import { QueueRef } from './queue-ref'; +import { cloudformation, QueueArn, QueueName, QueueUrl } from './sqs.generated'; import { validateProps } from './validate-props'; /** diff --git a/packages/@aws-cdk/cdk/lib/cloudformation/resource.ts b/packages/@aws-cdk/cdk/lib/cloudformation/resource.ts index ad831f7f27e20..42b17425057c2 100644 --- a/packages/@aws-cdk/cdk/lib/cloudformation/resource.ts +++ b/packages/@aws-cdk/cdk/lib/cloudformation/resource.ts @@ -4,7 +4,7 @@ import { capitalizePropertyNames, ignoreEmpty } from '../core/util'; import { CloudFormationToken } from './cloudformation-token'; import { Condition } from './condition'; import { CreationPolicy, DeletionPolicy, UpdatePolicy } from './resource-policy'; -import { IDependable, Referenceable, StackElement } from './stack'; +import { IDependable, StackElement } from './stack'; export interface ResourceProps { /** @@ -21,7 +21,7 @@ export interface ResourceProps { /** * Represents a CloudFormation resource. */ -export class Resource extends Referenceable { +export class Resource extends StackElement { /** * A decoration used to create a CloudFormation attribute property. * @param customName Custom name for the attribute (default is the name of the property) diff --git a/packages/@aws-cdk/cdk/lib/cloudformation/stack.ts b/packages/@aws-cdk/cdk/lib/cloudformation/stack.ts index 8a4211ad3cf0d..b24ee91e4dbcb 100644 --- a/packages/@aws-cdk/cdk/lib/cloudformation/stack.ts +++ b/packages/@aws-cdk/cdk/lib/cloudformation/stack.ts @@ -392,15 +392,21 @@ export interface TemplateOptions { } /** - * A construct, which is part of a stack and can be referenced using it's logical ID - * using the CloudFormation intrinsic function { Ref: ID }. + * Base class for referenceable CloudFormation constructs which are not Resources + * + * These constructs are things like Conditions and Parameters, can be + * referenced by taking the `.ref` attribute. + * + * Resource constructs do not inherit from Referenceable because they have their + * own, more specific types returned from the .ref attribute. Also, some + * resources aren't referenceable at all (such as BucketPolicies or GatewayAttachments). */ export abstract class Referenceable extends StackElement { /** * Returns a token to a CloudFormation { Ref } that references this entity based on it's logical ID. */ public get ref(): Token { - return new CloudFormationToken({ Ref: this.logicalId }, `${this.logicalId}.Ref`); + return new Ref(this); } } @@ -432,3 +438,12 @@ function stackElements(node: Construct, into: StackElement[] = []): StackElement return into; } + +/** + * A generic, untyped reference to a Stack Element + */ +export class Ref extends CloudFormationToken { + constructor(element: StackElement) { + super({ Ref: element.logicalId }, `${element.logicalId}.Ref`); + } +} \ No newline at end of file diff --git a/packages/@aws-cdk/cdk/test/cloudformation/test.logical-id.ts b/packages/@aws-cdk/cdk/test/cloudformation/test.logical-id.ts index da8bda26f7672..cd90bc1451f23 100644 --- a/packages/@aws-cdk/cdk/test/cloudformation/test.logical-id.ts +++ b/packages/@aws-cdk/cdk/test/cloudformation/test.logical-id.ts @@ -1,5 +1,5 @@ import { Test } from 'nodeunit'; -import { Construct, HashedAddressingScheme, IAddressingScheme, Resource, Stack } from '../../lib'; +import { Construct, HashedAddressingScheme, IAddressingScheme, Ref, Resource, Stack } from '../../lib'; /** * These tests are executed once (for specific ID schemes) @@ -195,7 +195,9 @@ const allSchemesTests: {[name: string]: (scheme: IAddressingScheme, test: Test) // WHEN const c1 = new Resource(stack, 'OriginalName', { type: 'R1' }); - const c2 = new Resource(stack, 'Construct2', { type: 'R2', properties: { ReferenceToR1: c1.ref } }); + const ref = new Ref(c1); + + const c2 = new Resource(stack, 'Construct2', { type: 'R2', properties: { ReferenceToR1: ref } }); c2.addDependency(c1); // THEN diff --git a/packages/@aws-cdk/cdk/test/cloudformation/test.output.ts b/packages/@aws-cdk/cdk/test/cloudformation/test.output.ts index bfbf0693318a7..2cb7870c6b818 100644 --- a/packages/@aws-cdk/cdk/test/cloudformation/test.output.ts +++ b/packages/@aws-cdk/cdk/test/cloudformation/test.output.ts @@ -1,13 +1,15 @@ import { Test } from 'nodeunit'; -import { Construct, Output, resolve, Resource, Stack } from '../../lib'; +import { Construct, Output, Ref, resolve, Resource, Stack } from '../../lib'; export = { 'outputs can be added to the stack'(test: Test) { const stack = new Stack(); const res = new Resource(stack, 'MyResource', { type: 'R' }); + const ref = new Ref(res); + new Output(stack, 'MyOutput', { export: 'ExportName', - value: res.ref, + value: ref, description: 'Output properties' }); test.deepEqual(stack.toCloudFormation(), { Resources: { MyResource: { Type: 'R' } }, diff --git a/packages/@aws-cdk/cdk/test/cloudformation/test.resource.ts b/packages/@aws-cdk/cdk/test/cloudformation/test.resource.ts index 2497303c73d87..4941bf0ad8448 100644 --- a/packages/@aws-cdk/cdk/test/cloudformation/test.resource.ts +++ b/packages/@aws-cdk/cdk/test/cloudformation/test.resource.ts @@ -1,21 +1,19 @@ import { Test } from 'nodeunit'; import { applyRemovalPolicy, Arn, Condition, Construct, DeletionPolicy, - FnEquals, FnNot, HashedAddressingScheme, IDependable, PolicyStatement, Referenceable, + FnEquals, FnNot, HashedAddressingScheme, IDependable, PolicyStatement, RemovalPolicy, Resource, Root, Stack, Token } from '../../lib'; export = { 'all resources derive from Resource, which derives from Entity'(test: Test) { const stack = new Stack(); - const r = new Resource(stack, 'MyResource', { + new Resource(stack, 'MyResource', { type: 'MyResourceType', properties: { Prop1: 'p1', Prop2: 123 } }); - test.ok(r instanceof Referenceable); - test.deepEqual(stack.toCloudFormation(), { Resources: { MyResource: { @@ -51,13 +49,6 @@ export = { test.done(); }, - 'entity.ref will return a token for a CloudFormation {Ref} for this entity'(test: Test) { - const stack = new Stack(); - const res = new Resource(stack, 'MyResource', { type: 'ResourceType' }); - test.deepEqual(res.ref.resolve(), { Ref: 'MyResource' }); - test.done(); - }, - 'resource.props can only be accessed by derived classes'(test: Test) { const stack = new Stack(); const res = new Counter(stack, 'MyResource', { Count: 10 }); diff --git a/tools/cdk-build-tools/config/nycrc b/tools/cdk-build-tools/config/nycrc index 22a398e2c2183..a2a08aea6f5ba 100644 --- a/tools/cdk-build-tools/config/nycrc +++ b/tools/cdk-build-tools/config/nycrc @@ -12,6 +12,7 @@ "coverage/**", "test/**", "examples/**", + "example/**", "lib/*.generated.js", "build-tools/**" ] diff --git a/tools/cfn2ts/lib/codegen.ts b/tools/cfn2ts/lib/codegen.ts index b130c4c8bc701..3b5483b097a17 100644 --- a/tools/cfn2ts/lib/codegen.ts +++ b/tools/cfn2ts/lib/codegen.ts @@ -222,17 +222,21 @@ export default class CodeGenerator { // Attributes // - const attributeTypes = new Array(); + const attributeTypes = new Array(); + const attributes = new Array(); if (spec.Attributes) { - this.code.line(); for (const attributeName of Object.keys(spec.Attributes).sort()) { + this.code.line(); + this.docLink(undefined, `@cloudformation_attribute ${attributeName}`); const attr = genspec.attributeDefinition(resourceName, attributeName, undefined); - this.code.line(`public readonly ${attr.propertyName}: ${attr.typeName.className};`); - attributeTypes.push(attr); + this.code.line(`public readonly ${attr.propertyName}: ${attr.attributeType.typeName.className};`); + + attributes.push(attr); + attributeTypes.push(attr.attributeType); } } @@ -241,8 +245,15 @@ export default class CodeGenerator { // if (spec.RefType !== schema.RefType.None) { const refAttribute = genspec.refAttributeDefinition(resourceName, spec.RefType!); - this.code.line(`public readonly ${refAttribute.propertyName}: ${refAttribute.typeName.className};`); - attributeTypes.push(refAttribute); + this.code.line(`public readonly ${refAttribute.propertyName}: ${refAttribute.attributeType.typeName.className};`); + + // If there's already an attribute with the same declared type, we don't have to duplicate + // the type, but we do have to initialize the attribute variable. + attributes.push(refAttribute); + const alreadyAnAttributeType = attributeTypes.some(t => t.typeName.fqn === refAttribute.attributeType.typeName.fqn); + if (!alreadyAnAttributeType) { + attributeTypes.push(refAttribute.attributeType); + } } // @@ -282,8 +293,8 @@ export default class CodeGenerator { } // initialize all attribute properties - for (const at of attributeTypes) { - this.code.line(`this.${at.propertyName} = new ${at.typeName.className}(${at.constructorArguments});`); + for (const at of attributes) { + this.code.line(`this.${at.propertyName} = new ${at.attributeType.typeName.className}(${at.constructorArguments});`); } this.code.closeBlock(); @@ -464,7 +475,7 @@ export default class CodeGenerator { /** * Attribute types are classes that represent resource attributes (e.g. QueueArnAttribute). */ - private emitAttributeType(attr: genspec.Attribute) { + private emitAttributeType(attr: genspec.TypeDeclaration) { this.openClass(attr.typeName, attr.docLink, attr.baseClassName.fqn); this.closeClass(attr.typeName); } diff --git a/tools/cfn2ts/lib/genspec.ts b/tools/cfn2ts/lib/genspec.ts index b115a2e8a0e49..b61be752a932b 100644 --- a/tools/cfn2ts/lib/genspec.ts +++ b/tools/cfn2ts/lib/genspec.ts @@ -12,7 +12,9 @@ const RESOURCE_CLASS_POSTFIX = 'Resource'; export const CORE_NAMESPACE = 'cdk'; /** - * The name of corresponding objects in the generated code + * The name of a class or method in the generated code. + * + * Has constructor functions to generate them from the CloudFormation specification. * * This refers to TypeScript constructs (typically a class) */ @@ -99,18 +101,30 @@ export class CodeName { } } +/** + * Class declaration + */ +export class TypeDeclaration { + constructor( + readonly typeName: CodeName, + readonly baseClassName: CodeName, + readonly docLink?: string + ) { + } +} + export const TAG_NAME = new CodeName('', CORE_NAMESPACE, 'Tag'); export const ARN_NAME = new CodeName('', CORE_NAMESPACE, 'Arn'); export const TOKEN_NAME = new CodeName('', CORE_NAMESPACE, 'CloudFormationToken'); +/** + * Resource attribute + */ export class Attribute { constructor( - readonly propertyName: string, - readonly typeName: CodeName, - readonly baseClassName: CodeName, - readonly constructorArguments: string, - readonly docLink?: string, - ) { + readonly propertyName: string, + readonly attributeType: TypeDeclaration, + readonly constructorArguments: string) { } } @@ -180,7 +194,8 @@ export function attributeDefinition(resourceName: CodeName, attributeName: strin const constructorArguments = `this.getAtt('${attributeName}')`; - return new Attribute(propertyName, typeName, baseClass, constructorArguments, docLink); + const attrType = new TypeDeclaration(typeName, baseClass, docLink); + return new Attribute(propertyName, attrType, constructorArguments); } /** @@ -194,7 +209,8 @@ export function refAttributeDefinition(resourceName: CodeName, refType: schema.R const constructorArguments = '{ Ref: this.logicalId }, `${this.logicalId}.Ref`'; - return new Attribute('ref', refTypeName, baseClass, constructorArguments); + const attrType = new TypeDeclaration(refTypeName, baseClass); + return new Attribute('ref', attrType, constructorArguments); } /** From c9108be56205a7a8d4fc3a23b559f14a7f2026c6 Mon Sep 17 00:00:00 2001 From: Rico Huijbers Date: Sun, 26 Aug 2018 12:06:21 +0200 Subject: [PATCH 4/6] Add missing file --- packages/@aws-cdk/aws-dynamodb/lib/table.ts | 114 ++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 packages/@aws-cdk/aws-dynamodb/lib/table.ts diff --git a/packages/@aws-cdk/aws-dynamodb/lib/table.ts b/packages/@aws-cdk/aws-dynamodb/lib/table.ts new file mode 100644 index 0000000000000..d6a3ff419a6f4 --- /dev/null +++ b/packages/@aws-cdk/aws-dynamodb/lib/table.ts @@ -0,0 +1,114 @@ +import { Construct } from '@aws-cdk/cdk'; +import { cloudformation, TableArn, TableName, TableStreamArn } from './dynamodb.generated'; + +const HASH_KEY_TYPE = 'HASH'; +const RANGE_KEY_TYPE = 'RANGE'; + +export interface TableProps { + /** + * The read capacity for the table. Careful if you add Global Secondary Indexes, as + * those will share the table's provisioned throughput. + * @default 5 + */ + readCapacity?: number; + /** + * The write capacity for the table. Careful if you add Global Secondary Indexes, as + * those will share the table's provisioned throughput. + * @default 5 + */ + writeCapacity?: number; + + /** + * Enforces a particular physical table name. + * @default + */ + tableName?: string; +} + +/** + * Provides a DynamoDB table. + */ +export class Table extends Construct { + public readonly tableArn: TableArn; + public readonly tableName: TableName; + public readonly tableStreamArn: TableStreamArn; + + private readonly table: cloudformation.TableResource; + + private readonly keySchema = new Array(); + private readonly attributeDefinitions = new Array(); + + constructor(parent: Construct, name: string, props: TableProps = {}) { + super(parent, name); + + const readCapacityUnits = props.readCapacity || 5; + const writeCapacityUnits = props.writeCapacity || 5; + + this.table = new cloudformation.TableResource(this, 'Resource', { + tableName: props.tableName, + keySchema: this.keySchema, + attributeDefinitions: this.attributeDefinitions, + provisionedThroughput: { readCapacityUnits, writeCapacityUnits } + }); + + if (props.tableName) { this.addMetadata('aws:cdk:hasPhysicalName', props.tableName); } + + this.tableArn = this.table.tableArn; + this.tableName = this.table.ref; + this.tableStreamArn = this.table.tableStreamArn; + } + + public addPartitionKey(name: string, type: KeyAttributeType): this { + this.addKey(name, type, HASH_KEY_TYPE); + return this; + } + + public addSortKey(name: string, type: KeyAttributeType): this { + this.addKey(name, type, RANGE_KEY_TYPE); + return this; + } + + public validate(): string[] { + const errors = new Array(); + if (!this.findKey(HASH_KEY_TYPE)) { + errors.push('a partition key must be specified'); + } + return errors; + } + + private findKey(keyType: string) { + return this.keySchema.find(prop => prop.keyType === keyType); + } + + private addKey(name: string, type: KeyAttributeType, keyType: string) { + const existingProp = this.findKey(keyType); + if (existingProp) { + throw new Error(`Unable to set ${name} as a ${keyType} key, because ${existingProp.attributeName} is a ${keyType} key`); + } + this.registerAttribute(name, type); + this.keySchema.push({ + attributeName: name, + keyType + }); + return this; + } + + private registerAttribute(name: string, type: KeyAttributeType) { + const existingDef = this.attributeDefinitions.find(def => def.attributeName === name); + if (existingDef && existingDef.attributeType !== type) { + throw new Error(`Unable to specify ${name} as ${type} because it was already defined as ${existingDef.attributeType}`); + } + if (!existingDef) { + this.attributeDefinitions.push({ + attributeName: name, + attributeType: type + }); + } + } +} + +export enum KeyAttributeType { + Binary = 'B', + Number = 'N', + String = 'S', +} From 1a8ed66aebf59fc293d1744afc67cb4e291b03e0 Mon Sep 17 00:00:00 2001 From: Rico Huijbers Date: Mon, 27 Aug 2018 09:43:40 +0200 Subject: [PATCH 5/6] Rename 'example' => 'examples' to ignore code coverage --- .../@aws-cdk/aws-cloudformation/{example => examples}/cdk.json | 0 .../@aws-cdk/aws-cloudformation/{example => examples}/index.ts | 0 .../aws-cloudformation/{example => examples}/provider.py | 0 tools/cdk-build-tools/config/nycrc | 1 - 4 files changed, 1 deletion(-) rename packages/@aws-cdk/aws-cloudformation/{example => examples}/cdk.json (100%) rename packages/@aws-cdk/aws-cloudformation/{example => examples}/index.ts (100%) rename packages/@aws-cdk/aws-cloudformation/{example => examples}/provider.py (100%) diff --git a/packages/@aws-cdk/aws-cloudformation/example/cdk.json b/packages/@aws-cdk/aws-cloudformation/examples/cdk.json similarity index 100% rename from packages/@aws-cdk/aws-cloudformation/example/cdk.json rename to packages/@aws-cdk/aws-cloudformation/examples/cdk.json diff --git a/packages/@aws-cdk/aws-cloudformation/example/index.ts b/packages/@aws-cdk/aws-cloudformation/examples/index.ts similarity index 100% rename from packages/@aws-cdk/aws-cloudformation/example/index.ts rename to packages/@aws-cdk/aws-cloudformation/examples/index.ts diff --git a/packages/@aws-cdk/aws-cloudformation/example/provider.py b/packages/@aws-cdk/aws-cloudformation/examples/provider.py similarity index 100% rename from packages/@aws-cdk/aws-cloudformation/example/provider.py rename to packages/@aws-cdk/aws-cloudformation/examples/provider.py diff --git a/tools/cdk-build-tools/config/nycrc b/tools/cdk-build-tools/config/nycrc index a2a08aea6f5ba..22a398e2c2183 100644 --- a/tools/cdk-build-tools/config/nycrc +++ b/tools/cdk-build-tools/config/nycrc @@ -12,7 +12,6 @@ "coverage/**", "test/**", "examples/**", - "example/**", "lib/*.generated.js", "build-tools/**" ] From 031598e3d5c693ad1f6063f84951bafc21086cc7 Mon Sep 17 00:00:00 2001 From: Rico Huijbers Date: Mon, 27 Aug 2018 09:57:03 +0200 Subject: [PATCH 6/6] Rename RefType => RefKind, because it's not a type but a type constructor (sort of) Some more codegen renames to make everything more correct. --- .../cfnspec/lib/schema/resource-type.ts | 4 +- ...ons_patch.json => 600_RefKinds_patch.json} | 1204 ++++++++--------- tools/cfn2ts/lib/codegen.ts | 16 +- tools/cfn2ts/lib/genspec.ts | 23 +- 4 files changed, 623 insertions(+), 624 deletions(-) rename packages/@aws-cdk/cfnspec/spec-source/{600_RefAnnotations_patch.json => 600_RefKinds_patch.json} (66%) diff --git a/packages/@aws-cdk/cfnspec/lib/schema/resource-type.ts b/packages/@aws-cdk/cfnspec/lib/schema/resource-type.ts index d2f8ae0305ae5..a335fa37b7346 100644 --- a/packages/@aws-cdk/cfnspec/lib/schema/resource-type.ts +++ b/packages/@aws-cdk/cfnspec/lib/schema/resource-type.ts @@ -18,7 +18,7 @@ export interface ResourceType extends Documented { /** * What kind of value the 'Ref' operator refers to, if any. */ - RefType?: RefType; + RefKind?: string; } export type Attribute = PrimitiveAttribute | ListAttribute; @@ -60,7 +60,7 @@ export function isComplexListAttribute(spec: Attribute): spec is ComplexListAttr * * The attribute can take on more values than these, but these are treated specially. */ -export enum RefType { +export enum SpecialRefKind { /** * No '.ref' member is generated for this type, because it doesn't have a meaningful value. */ diff --git a/packages/@aws-cdk/cfnspec/spec-source/600_RefAnnotations_patch.json b/packages/@aws-cdk/cfnspec/spec-source/600_RefKinds_patch.json similarity index 66% rename from packages/@aws-cdk/cfnspec/spec-source/600_RefAnnotations_patch.json rename to packages/@aws-cdk/cfnspec/spec-source/600_RefKinds_patch.json index a66b8b236142b..f0bf3d08c6299 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/600_RefAnnotations_patch.json +++ b/packages/@aws-cdk/cfnspec/spec-source/600_RefKinds_patch.json @@ -5,11 +5,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::AmazonMQ::Broker to Id" + "description": "Set RefKind of AWS::AmazonMQ::Broker to Id" } }, "AWS::AmazonMQ::Configuration": { @@ -17,11 +17,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::AmazonMQ::Configuration to Id" + "description": "Set RefKind of AWS::AmazonMQ::Configuration to Id" } }, "AWS::ApiGateway::Account": { @@ -29,11 +29,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ApiGateway::Account to Id" + "description": "Set RefKind of AWS::ApiGateway::Account to Id" } }, "AWS::ApiGateway::ApiKey": { @@ -41,11 +41,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ApiGateway::ApiKey to Id" + "description": "Set RefKind of AWS::ApiGateway::ApiKey to Id" } }, "AWS::ApiGateway::Authorizer": { @@ -53,11 +53,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ApiGateway::Authorizer to Id" + "description": "Set RefKind of AWS::ApiGateway::Authorizer to Id" } }, "AWS::ApiGateway::BasePathMapping": { @@ -65,11 +65,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ApiGateway::BasePathMapping to Id" + "description": "Set RefKind of AWS::ApiGateway::BasePathMapping to Id" } }, "AWS::ApiGateway::ClientCertificate": { @@ -77,11 +77,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::ApiGateway::ClientCertificate to Name" + "description": "Set RefKind of AWS::ApiGateway::ClientCertificate to Name" } }, "AWS::ApiGateway::Deployment": { @@ -89,11 +89,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ApiGateway::Deployment to Id" + "description": "Set RefKind of AWS::ApiGateway::Deployment to Id" } }, "AWS::ApiGateway::DocumentationPart": { @@ -101,11 +101,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ApiGateway::DocumentationPart to Id" + "description": "Set RefKind of AWS::ApiGateway::DocumentationPart to Id" } }, "AWS::ApiGateway::DocumentationVersion": { @@ -113,11 +113,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ApiGateway::DocumentationVersion to Id" + "description": "Set RefKind of AWS::ApiGateway::DocumentationVersion to Id" } }, "AWS::ApiGateway::DomainName": { @@ -125,11 +125,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::ApiGateway::DomainName to Name" + "description": "Set RefKind of AWS::ApiGateway::DomainName to Name" } }, "AWS::ApiGateway::GatewayResponse": { @@ -137,11 +137,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ApiGateway::GatewayResponse to Id" + "description": "Set RefKind of AWS::ApiGateway::GatewayResponse to Id" } }, "AWS::ApiGateway::Method": { @@ -149,11 +149,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ApiGateway::Method to Id" + "description": "Set RefKind of AWS::ApiGateway::Method to Id" } }, "AWS::ApiGateway::Model": { @@ -161,11 +161,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::ApiGateway::Model to Name" + "description": "Set RefKind of AWS::ApiGateway::Model to Name" } }, "AWS::ApiGateway::RequestValidator": { @@ -173,11 +173,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ApiGateway::RequestValidator to Id" + "description": "Set RefKind of AWS::ApiGateway::RequestValidator to Id" } }, "AWS::ApiGateway::Resource": { @@ -185,11 +185,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ApiGateway::Resource to Id" + "description": "Set RefKind of AWS::ApiGateway::Resource to Id" } }, "AWS::ApiGateway::RestApi": { @@ -197,11 +197,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ApiGateway::RestApi to Id" + "description": "Set RefKind of AWS::ApiGateway::RestApi to Id" } }, "AWS::ApiGateway::Stage": { @@ -209,11 +209,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::ApiGateway::Stage to Name" + "description": "Set RefKind of AWS::ApiGateway::Stage to Name" } }, "AWS::ApiGateway::UsagePlan": { @@ -221,11 +221,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ApiGateway::UsagePlan to Id" + "description": "Set RefKind of AWS::ApiGateway::UsagePlan to Id" } }, "AWS::ApiGateway::UsagePlanKey": { @@ -233,11 +233,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ApiGateway::UsagePlanKey to Id" + "description": "Set RefKind of AWS::ApiGateway::UsagePlanKey to Id" } }, "AWS::ApiGateway::VpcLink": { @@ -245,11 +245,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ApiGateway::VpcLink to Id" + "description": "Set RefKind of AWS::ApiGateway::VpcLink to Id" } }, "AWS::AppSync::ApiKey": { @@ -257,11 +257,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::AppSync::ApiKey to Arn" + "description": "Set RefKind of AWS::AppSync::ApiKey to Arn" } }, "AWS::AppSync::DataSource": { @@ -269,11 +269,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::AppSync::DataSource to Arn" + "description": "Set RefKind of AWS::AppSync::DataSource to Arn" } }, "AWS::AppSync::GraphQLApi": { @@ -281,11 +281,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::AppSync::GraphQLApi to Arn" + "description": "Set RefKind of AWS::AppSync::GraphQLApi to Arn" } }, "AWS::AppSync::GraphQLSchema": { @@ -293,11 +293,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::AppSync::GraphQLSchema to Id" + "description": "Set RefKind of AWS::AppSync::GraphQLSchema to Id" } }, "AWS::AppSync::Resolver": { @@ -305,11 +305,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::AppSync::Resolver to Arn" + "description": "Set RefKind of AWS::AppSync::Resolver to Arn" } }, "AWS::ApplicationAutoScaling::ScalableTarget": { @@ -317,11 +317,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ApplicationAutoScaling::ScalableTarget to Id" + "description": "Set RefKind of AWS::ApplicationAutoScaling::ScalableTarget to Id" } }, "AWS::ApplicationAutoScaling::ScalingPolicy": { @@ -329,11 +329,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::ApplicationAutoScaling::ScalingPolicy to Arn" + "description": "Set RefKind of AWS::ApplicationAutoScaling::ScalingPolicy to Arn" } }, "AWS::Athena::NamedQuery": { @@ -341,11 +341,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Athena::NamedQuery to Name" + "description": "Set RefKind of AWS::Athena::NamedQuery to Name" } }, "AWS::AutoScaling::AutoScalingGroup": { @@ -353,11 +353,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::AutoScaling::AutoScalingGroup to Name" + "description": "Set RefKind of AWS::AutoScaling::AutoScalingGroup to Name" } }, "AWS::AutoScaling::LaunchConfiguration": { @@ -365,11 +365,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::AutoScaling::LaunchConfiguration to Name" + "description": "Set RefKind of AWS::AutoScaling::LaunchConfiguration to Name" } }, "AWS::AutoScaling::LifecycleHook": { @@ -377,11 +377,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::AutoScaling::LifecycleHook to Name" + "description": "Set RefKind of AWS::AutoScaling::LifecycleHook to Name" } }, "AWS::AutoScaling::ScalingPolicy": { @@ -389,11 +389,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::AutoScaling::ScalingPolicy to Arn" + "description": "Set RefKind of AWS::AutoScaling::ScalingPolicy to Arn" } }, "AWS::AutoScaling::ScheduledAction": { @@ -401,11 +401,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::AutoScaling::ScheduledAction to Name" + "description": "Set RefKind of AWS::AutoScaling::ScheduledAction to Name" } }, "AWS::AutoScalingPlans::ScalingPlan": { @@ -413,11 +413,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::AutoScalingPlans::ScalingPlan to Arn" + "description": "Set RefKind of AWS::AutoScalingPlans::ScalingPlan to Arn" } }, "AWS::Batch::ComputeEnvironment": { @@ -425,11 +425,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::Batch::ComputeEnvironment to Arn" + "description": "Set RefKind of AWS::Batch::ComputeEnvironment to Arn" } }, "AWS::Batch::JobDefinition": { @@ -437,11 +437,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::Batch::JobDefinition to Arn" + "description": "Set RefKind of AWS::Batch::JobDefinition to Arn" } }, "AWS::Batch::JobQueue": { @@ -449,11 +449,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::Batch::JobQueue to Arn" + "description": "Set RefKind of AWS::Batch::JobQueue to Arn" } }, "AWS::Budgets::Budget": { @@ -461,11 +461,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Budgets::Budget to Name" + "description": "Set RefKind of AWS::Budgets::Budget to Name" } }, "AWS::CertificateManager::Certificate": { @@ -473,11 +473,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::CertificateManager::Certificate to Arn" + "description": "Set RefKind of AWS::CertificateManager::Certificate to Arn" } }, "AWS::Cloud9::EnvironmentEC2": { @@ -485,11 +485,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::Cloud9::EnvironmentEC2 to Id" + "description": "Set RefKind of AWS::Cloud9::EnvironmentEC2 to Id" } }, "AWS::CloudFormation::CustomResource": { @@ -497,11 +497,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "None" } ], - "description": "Set RefType of AWS::CloudFormation::CustomResource to None" + "description": "Set RefKind of AWS::CloudFormation::CustomResource to None" } }, "AWS::CloudFormation::Stack": { @@ -509,11 +509,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::CloudFormation::Stack to Id" + "description": "Set RefKind of AWS::CloudFormation::Stack to Id" } }, "AWS::CloudFormation::WaitCondition": { @@ -521,11 +521,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::CloudFormation::WaitCondition to Name" + "description": "Set RefKind of AWS::CloudFormation::WaitCondition to Name" } }, "AWS::CloudFormation::WaitConditionHandle": { @@ -533,11 +533,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Url" } ], - "description": "Set RefType of AWS::CloudFormation::WaitConditionHandle to Url" + "description": "Set RefKind of AWS::CloudFormation::WaitConditionHandle to Url" } }, "AWS::CloudFront::CloudFrontOriginAccessIdentity": { @@ -545,11 +545,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::CloudFront::CloudFrontOriginAccessIdentity to Id" + "description": "Set RefKind of AWS::CloudFront::CloudFrontOriginAccessIdentity to Id" } }, "AWS::CloudFront::Distribution": { @@ -557,11 +557,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::CloudFront::Distribution to Id" + "description": "Set RefKind of AWS::CloudFront::Distribution to Id" } }, "AWS::CloudFront::StreamingDistribution": { @@ -569,11 +569,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::CloudFront::StreamingDistribution to Id" + "description": "Set RefKind of AWS::CloudFront::StreamingDistribution to Id" } }, "AWS::CloudTrail::Trail": { @@ -581,11 +581,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::CloudTrail::Trail to Name" + "description": "Set RefKind of AWS::CloudTrail::Trail to Name" } }, "AWS::CloudWatch::Alarm": { @@ -593,11 +593,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::CloudWatch::Alarm to Name" + "description": "Set RefKind of AWS::CloudWatch::Alarm to Name" } }, "AWS::CloudWatch::Dashboard": { @@ -605,11 +605,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::CloudWatch::Dashboard to Name" + "description": "Set RefKind of AWS::CloudWatch::Dashboard to Name" } }, "AWS::CodeBuild::Project": { @@ -617,11 +617,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::CodeBuild::Project to Name" + "description": "Set RefKind of AWS::CodeBuild::Project to Name" } }, "AWS::CodeCommit::Repository": { @@ -629,11 +629,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::CodeCommit::Repository to Id" + "description": "Set RefKind of AWS::CodeCommit::Repository to Id" } }, "AWS::CodeDeploy::Application": { @@ -641,11 +641,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::CodeDeploy::Application to Name" + "description": "Set RefKind of AWS::CodeDeploy::Application to Name" } }, "AWS::CodeDeploy::DeploymentConfig": { @@ -653,11 +653,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::CodeDeploy::DeploymentConfig to Id" + "description": "Set RefKind of AWS::CodeDeploy::DeploymentConfig to Id" } }, "AWS::CodeDeploy::DeploymentGroup": { @@ -665,11 +665,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::CodeDeploy::DeploymentGroup to Name" + "description": "Set RefKind of AWS::CodeDeploy::DeploymentGroup to Name" } }, "AWS::CodePipeline::CustomActionType": { @@ -677,11 +677,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::CodePipeline::CustomActionType to Name" + "description": "Set RefKind of AWS::CodePipeline::CustomActionType to Name" } }, "AWS::CodePipeline::Pipeline": { @@ -689,11 +689,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::CodePipeline::Pipeline to Name" + "description": "Set RefKind of AWS::CodePipeline::Pipeline to Name" } }, "AWS::CodePipeline::Webhook": { @@ -701,11 +701,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::CodePipeline::Webhook to Name" + "description": "Set RefKind of AWS::CodePipeline::Webhook to Name" } }, "AWS::Cognito::IdentityPool": { @@ -713,11 +713,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::Cognito::IdentityPool to Id" + "description": "Set RefKind of AWS::Cognito::IdentityPool to Id" } }, "AWS::Cognito::IdentityPoolRoleAttachment": { @@ -725,11 +725,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::Cognito::IdentityPoolRoleAttachment to Id" + "description": "Set RefKind of AWS::Cognito::IdentityPoolRoleAttachment to Id" } }, "AWS::Cognito::UserPool": { @@ -737,11 +737,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::Cognito::UserPool to Id" + "description": "Set RefKind of AWS::Cognito::UserPool to Id" } }, "AWS::Cognito::UserPoolClient": { @@ -749,11 +749,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::Cognito::UserPoolClient to Id" + "description": "Set RefKind of AWS::Cognito::UserPoolClient to Id" } }, "AWS::Cognito::UserPoolGroup": { @@ -761,11 +761,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Cognito::UserPoolGroup to Name" + "description": "Set RefKind of AWS::Cognito::UserPoolGroup to Name" } }, "AWS::Cognito::UserPoolUser": { @@ -773,11 +773,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Cognito::UserPoolUser to Name" + "description": "Set RefKind of AWS::Cognito::UserPoolUser to Name" } }, "AWS::Cognito::UserPoolUserToGroupAttachment": { @@ -785,11 +785,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::Cognito::UserPoolUserToGroupAttachment to Id" + "description": "Set RefKind of AWS::Cognito::UserPoolUserToGroupAttachment to Id" } }, "AWS::Config::AggregationAuthorization": { @@ -797,11 +797,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::Config::AggregationAuthorization to Arn" + "description": "Set RefKind of AWS::Config::AggregationAuthorization to Arn" } }, "AWS::Config::ConfigRule": { @@ -809,11 +809,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Config::ConfigRule to Name" + "description": "Set RefKind of AWS::Config::ConfigRule to Name" } }, "AWS::Config::ConfigurationAggregator": { @@ -821,11 +821,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Config::ConfigurationAggregator to Name" + "description": "Set RefKind of AWS::Config::ConfigurationAggregator to Name" } }, "AWS::Config::ConfigurationRecorder": { @@ -833,11 +833,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Config::ConfigurationRecorder to Name" + "description": "Set RefKind of AWS::Config::ConfigurationRecorder to Name" } }, "AWS::Config::DeliveryChannel": { @@ -845,11 +845,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Config::DeliveryChannel to Name" + "description": "Set RefKind of AWS::Config::DeliveryChannel to Name" } }, "AWS::DAX::Cluster": { @@ -857,11 +857,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::DAX::Cluster to Name" + "description": "Set RefKind of AWS::DAX::Cluster to Name" } }, "AWS::DAX::ParameterGroup": { @@ -869,11 +869,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::DAX::ParameterGroup to Arn" + "description": "Set RefKind of AWS::DAX::ParameterGroup to Arn" } }, "AWS::DAX::SubnetGroup": { @@ -881,11 +881,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::DAX::SubnetGroup to Arn" + "description": "Set RefKind of AWS::DAX::SubnetGroup to Arn" } }, "AWS::DMS::Certificate": { @@ -893,11 +893,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::DMS::Certificate to Arn" + "description": "Set RefKind of AWS::DMS::Certificate to Arn" } }, "AWS::DMS::Endpoint": { @@ -905,11 +905,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::DMS::Endpoint to Arn" + "description": "Set RefKind of AWS::DMS::Endpoint to Arn" } }, "AWS::DMS::EventSubscription": { @@ -917,11 +917,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::DMS::EventSubscription to Name" + "description": "Set RefKind of AWS::DMS::EventSubscription to Name" } }, "AWS::DMS::ReplicationInstance": { @@ -929,11 +929,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::DMS::ReplicationInstance to Arn" + "description": "Set RefKind of AWS::DMS::ReplicationInstance to Arn" } }, "AWS::DMS::ReplicationSubnetGroup": { @@ -941,11 +941,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::DMS::ReplicationSubnetGroup to Name" + "description": "Set RefKind of AWS::DMS::ReplicationSubnetGroup to Name" } }, "AWS::DMS::ReplicationTask": { @@ -953,11 +953,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::DMS::ReplicationTask to Arn" + "description": "Set RefKind of AWS::DMS::ReplicationTask to Arn" } }, "AWS::DataPipeline::Pipeline": { @@ -965,11 +965,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::DataPipeline::Pipeline to Id" + "description": "Set RefKind of AWS::DataPipeline::Pipeline to Id" } }, "AWS::DirectoryService::MicrosoftAD": { @@ -977,11 +977,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::DirectoryService::MicrosoftAD to Id" + "description": "Set RefKind of AWS::DirectoryService::MicrosoftAD to Id" } }, "AWS::DirectoryService::SimpleAD": { @@ -989,11 +989,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::DirectoryService::SimpleAD to Id" + "description": "Set RefKind of AWS::DirectoryService::SimpleAD to Id" } }, "AWS::DynamoDB::Table": { @@ -1001,11 +1001,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::DynamoDB::Table to Name" + "description": "Set RefKind of AWS::DynamoDB::Table to Name" } }, "AWS::EC2::CustomerGateway": { @@ -1013,11 +1013,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::EC2::CustomerGateway to Name" + "description": "Set RefKind of AWS::EC2::CustomerGateway to Name" } }, "AWS::EC2::DHCPOptions": { @@ -1025,11 +1025,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::EC2::DHCPOptions to Name" + "description": "Set RefKind of AWS::EC2::DHCPOptions to Name" } }, "AWS::EC2::EIP": { @@ -1037,11 +1037,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Ip" } ], - "description": "Set RefType of AWS::EC2::EIP to Ip" + "description": "Set RefKind of AWS::EC2::EIP to Ip" } }, "AWS::EC2::EIPAssociation": { @@ -1049,11 +1049,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::EC2::EIPAssociation to Name" + "description": "Set RefKind of AWS::EC2::EIPAssociation to Name" } }, "AWS::EC2::EgressOnlyInternetGateway": { @@ -1061,11 +1061,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::EC2::EgressOnlyInternetGateway to Id" + "description": "Set RefKind of AWS::EC2::EgressOnlyInternetGateway to Id" } }, "AWS::EC2::FlowLog": { @@ -1073,11 +1073,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::EC2::FlowLog to Id" + "description": "Set RefKind of AWS::EC2::FlowLog to Id" } }, "AWS::EC2::Host": { @@ -1085,11 +1085,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::EC2::Host to Id" + "description": "Set RefKind of AWS::EC2::Host to Id" } }, "AWS::EC2::Instance": { @@ -1097,11 +1097,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::EC2::Instance to Id" + "description": "Set RefKind of AWS::EC2::Instance to Id" } }, "AWS::EC2::InternetGateway": { @@ -1109,11 +1109,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::EC2::InternetGateway to Name" + "description": "Set RefKind of AWS::EC2::InternetGateway to Name" } }, "AWS::EC2::LaunchTemplate": { @@ -1121,11 +1121,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::EC2::LaunchTemplate to Id" + "description": "Set RefKind of AWS::EC2::LaunchTemplate to Id" } }, "AWS::EC2::NatGateway": { @@ -1133,11 +1133,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::EC2::NatGateway to Id" + "description": "Set RefKind of AWS::EC2::NatGateway to Id" } }, "AWS::EC2::NetworkAcl": { @@ -1145,11 +1145,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::EC2::NetworkAcl to Name" + "description": "Set RefKind of AWS::EC2::NetworkAcl to Name" } }, "AWS::EC2::NetworkAclEntry": { @@ -1157,11 +1157,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::EC2::NetworkAclEntry to Name" + "description": "Set RefKind of AWS::EC2::NetworkAclEntry to Name" } }, "AWS::EC2::NetworkInterface": { @@ -1169,11 +1169,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::EC2::NetworkInterface to Name" + "description": "Set RefKind of AWS::EC2::NetworkInterface to Name" } }, "AWS::EC2::NetworkInterfaceAttachment": { @@ -1181,11 +1181,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::EC2::NetworkInterfaceAttachment to Name" + "description": "Set RefKind of AWS::EC2::NetworkInterfaceAttachment to Name" } }, "AWS::EC2::NetworkInterfacePermission": { @@ -1193,11 +1193,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::EC2::NetworkInterfacePermission to Id" + "description": "Set RefKind of AWS::EC2::NetworkInterfacePermission to Id" } }, "AWS::EC2::PlacementGroup": { @@ -1205,11 +1205,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::EC2::PlacementGroup to Name" + "description": "Set RefKind of AWS::EC2::PlacementGroup to Name" } }, "AWS::EC2::Route": { @@ -1217,11 +1217,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::EC2::Route to Name" + "description": "Set RefKind of AWS::EC2::Route to Name" } }, "AWS::EC2::RouteTable": { @@ -1229,11 +1229,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::EC2::RouteTable to Id" + "description": "Set RefKind of AWS::EC2::RouteTable to Id" } }, "AWS::EC2::SecurityGroup": { @@ -1241,11 +1241,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::EC2::SecurityGroup to Name" + "description": "Set RefKind of AWS::EC2::SecurityGroup to Name" } }, "AWS::EC2::SecurityGroupEgress": { @@ -1253,11 +1253,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::EC2::SecurityGroupEgress to Id" + "description": "Set RefKind of AWS::EC2::SecurityGroupEgress to Id" } }, "AWS::EC2::SecurityGroupIngress": { @@ -1265,11 +1265,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::EC2::SecurityGroupIngress to Id" + "description": "Set RefKind of AWS::EC2::SecurityGroupIngress to Id" } }, "AWS::EC2::SpotFleet": { @@ -1277,11 +1277,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::EC2::SpotFleet to Name" + "description": "Set RefKind of AWS::EC2::SpotFleet to Name" } }, "AWS::EC2::Subnet": { @@ -1289,11 +1289,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::EC2::Subnet to Id" + "description": "Set RefKind of AWS::EC2::Subnet to Id" } }, "AWS::EC2::SubnetCidrBlock": { @@ -1301,11 +1301,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::EC2::SubnetCidrBlock to Id" + "description": "Set RefKind of AWS::EC2::SubnetCidrBlock to Id" } }, "AWS::EC2::SubnetNetworkAclAssociation": { @@ -1313,11 +1313,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::EC2::SubnetNetworkAclAssociation to Name" + "description": "Set RefKind of AWS::EC2::SubnetNetworkAclAssociation to Name" } }, "AWS::EC2::SubnetRouteTableAssociation": { @@ -1325,11 +1325,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::EC2::SubnetRouteTableAssociation to Name" + "description": "Set RefKind of AWS::EC2::SubnetRouteTableAssociation to Name" } }, "AWS::EC2::TrunkInterfaceAssociation": { @@ -1337,11 +1337,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::EC2::TrunkInterfaceAssociation to Id" + "description": "Set RefKind of AWS::EC2::TrunkInterfaceAssociation to Id" } }, "AWS::EC2::VPC": { @@ -1349,11 +1349,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::EC2::VPC to Id" + "description": "Set RefKind of AWS::EC2::VPC to Id" } }, "AWS::EC2::VPCCidrBlock": { @@ -1361,11 +1361,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::EC2::VPCCidrBlock to Id" + "description": "Set RefKind of AWS::EC2::VPCCidrBlock to Id" } }, "AWS::EC2::VPCDHCPOptionsAssociation": { @@ -1373,11 +1373,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::EC2::VPCDHCPOptionsAssociation to Name" + "description": "Set RefKind of AWS::EC2::VPCDHCPOptionsAssociation to Name" } }, "AWS::EC2::VPCEndpoint": { @@ -1385,11 +1385,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::EC2::VPCEndpoint to Id" + "description": "Set RefKind of AWS::EC2::VPCEndpoint to Id" } }, "AWS::EC2::VPCEndpointConnectionNotification": { @@ -1397,11 +1397,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "None" } ], - "description": "Set RefType of AWS::EC2::VPCEndpointConnectionNotification to None" + "description": "Set RefKind of AWS::EC2::VPCEndpointConnectionNotification to None" } }, "AWS::EC2::VPCEndpointServicePermissions": { @@ -1409,11 +1409,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "None" } ], - "description": "Set RefType of AWS::EC2::VPCEndpointServicePermissions to None" + "description": "Set RefKind of AWS::EC2::VPCEndpointServicePermissions to None" } }, "AWS::EC2::VPCGatewayAttachment": { @@ -1421,11 +1421,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::EC2::VPCGatewayAttachment to Name" + "description": "Set RefKind of AWS::EC2::VPCGatewayAttachment to Name" } }, "AWS::EC2::VPCPeeringConnection": { @@ -1433,11 +1433,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::EC2::VPCPeeringConnection to Name" + "description": "Set RefKind of AWS::EC2::VPCPeeringConnection to Name" } }, "AWS::EC2::VPNConnection": { @@ -1445,11 +1445,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::EC2::VPNConnection to Name" + "description": "Set RefKind of AWS::EC2::VPNConnection to Name" } }, "AWS::EC2::VPNConnectionRoute": { @@ -1457,11 +1457,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::EC2::VPNConnectionRoute to Name" + "description": "Set RefKind of AWS::EC2::VPNConnectionRoute to Name" } }, "AWS::EC2::VPNGateway": { @@ -1469,11 +1469,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::EC2::VPNGateway to Name" + "description": "Set RefKind of AWS::EC2::VPNGateway to Name" } }, "AWS::EC2::VPNGatewayRoutePropagation": { @@ -1481,11 +1481,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::EC2::VPNGatewayRoutePropagation to Name" + "description": "Set RefKind of AWS::EC2::VPNGatewayRoutePropagation to Name" } }, "AWS::EC2::Volume": { @@ -1493,11 +1493,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::EC2::Volume to Id" + "description": "Set RefKind of AWS::EC2::Volume to Id" } }, "AWS::EC2::VolumeAttachment": { @@ -1505,11 +1505,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::EC2::VolumeAttachment to Id" + "description": "Set RefKind of AWS::EC2::VolumeAttachment to Id" } }, "AWS::ECR::Repository": { @@ -1517,11 +1517,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::ECR::Repository to Name" + "description": "Set RefKind of AWS::ECR::Repository to Name" } }, "AWS::ECS::Cluster": { @@ -1529,11 +1529,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::ECS::Cluster to Name" + "description": "Set RefKind of AWS::ECS::Cluster to Name" } }, "AWS::ECS::Service": { @@ -1541,11 +1541,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::ECS::Service to Arn" + "description": "Set RefKind of AWS::ECS::Service to Arn" } }, "AWS::ECS::TaskDefinition": { @@ -1553,11 +1553,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::ECS::TaskDefinition to Arn" + "description": "Set RefKind of AWS::ECS::TaskDefinition to Arn" } }, "AWS::EFS::FileSystem": { @@ -1565,11 +1565,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::EFS::FileSystem to Id" + "description": "Set RefKind of AWS::EFS::FileSystem to Id" } }, "AWS::EFS::MountTarget": { @@ -1577,11 +1577,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::EFS::MountTarget to Id" + "description": "Set RefKind of AWS::EFS::MountTarget to Id" } }, "AWS::EKS::Cluster": { @@ -1589,11 +1589,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::EKS::Cluster to Name" + "description": "Set RefKind of AWS::EKS::Cluster to Name" } }, "AWS::EMR::Cluster": { @@ -1601,11 +1601,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::EMR::Cluster to Id" + "description": "Set RefKind of AWS::EMR::Cluster to Id" } }, "AWS::EMR::InstanceFleetConfig": { @@ -1613,11 +1613,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::EMR::InstanceFleetConfig to Id" + "description": "Set RefKind of AWS::EMR::InstanceFleetConfig to Id" } }, "AWS::EMR::InstanceGroupConfig": { @@ -1625,11 +1625,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::EMR::InstanceGroupConfig to Id" + "description": "Set RefKind of AWS::EMR::InstanceGroupConfig to Id" } }, "AWS::EMR::SecurityConfiguration": { @@ -1637,11 +1637,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::EMR::SecurityConfiguration to Name" + "description": "Set RefKind of AWS::EMR::SecurityConfiguration to Name" } }, "AWS::EMR::Step": { @@ -1649,11 +1649,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::EMR::Step to Id" + "description": "Set RefKind of AWS::EMR::Step to Id" } }, "AWS::ElastiCache::CacheCluster": { @@ -1661,11 +1661,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::ElastiCache::CacheCluster to Name" + "description": "Set RefKind of AWS::ElastiCache::CacheCluster to Name" } }, "AWS::ElastiCache::ParameterGroup": { @@ -1673,11 +1673,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::ElastiCache::ParameterGroup to Name" + "description": "Set RefKind of AWS::ElastiCache::ParameterGroup to Name" } }, "AWS::ElastiCache::ReplicationGroup": { @@ -1685,11 +1685,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::ElastiCache::ReplicationGroup to Name" + "description": "Set RefKind of AWS::ElastiCache::ReplicationGroup to Name" } }, "AWS::ElastiCache::SecurityGroup": { @@ -1697,11 +1697,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::ElastiCache::SecurityGroup to Name" + "description": "Set RefKind of AWS::ElastiCache::SecurityGroup to Name" } }, "AWS::ElastiCache::SecurityGroupIngress": { @@ -1709,11 +1709,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ElastiCache::SecurityGroupIngress to Id" + "description": "Set RefKind of AWS::ElastiCache::SecurityGroupIngress to Id" } }, "AWS::ElastiCache::SubnetGroup": { @@ -1721,11 +1721,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::ElastiCache::SubnetGroup to Name" + "description": "Set RefKind of AWS::ElastiCache::SubnetGroup to Name" } }, "AWS::ElasticBeanstalk::Application": { @@ -1733,11 +1733,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::ElasticBeanstalk::Application to Name" + "description": "Set RefKind of AWS::ElasticBeanstalk::Application to Name" } }, "AWS::ElasticBeanstalk::ApplicationVersion": { @@ -1745,11 +1745,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::ElasticBeanstalk::ApplicationVersion to Name" + "description": "Set RefKind of AWS::ElasticBeanstalk::ApplicationVersion to Name" } }, "AWS::ElasticBeanstalk::ConfigurationTemplate": { @@ -1757,11 +1757,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::ElasticBeanstalk::ConfigurationTemplate to Name" + "description": "Set RefKind of AWS::ElasticBeanstalk::ConfigurationTemplate to Name" } }, "AWS::ElasticBeanstalk::Environment": { @@ -1769,11 +1769,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::ElasticBeanstalk::Environment to Name" + "description": "Set RefKind of AWS::ElasticBeanstalk::Environment to Name" } }, "AWS::ElasticLoadBalancing::LoadBalancer": { @@ -1781,11 +1781,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::ElasticLoadBalancing::LoadBalancer to Name" + "description": "Set RefKind of AWS::ElasticLoadBalancing::LoadBalancer to Name" } }, "AWS::ElasticLoadBalancingV2::Listener": { @@ -1793,11 +1793,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::ElasticLoadBalancingV2::Listener to Arn" + "description": "Set RefKind of AWS::ElasticLoadBalancingV2::Listener to Arn" } }, "AWS::ElasticLoadBalancingV2::ListenerCertificate": { @@ -1805,11 +1805,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::ElasticLoadBalancingV2::ListenerCertificate to Arn" + "description": "Set RefKind of AWS::ElasticLoadBalancingV2::ListenerCertificate to Arn" } }, "AWS::ElasticLoadBalancingV2::ListenerRule": { @@ -1817,11 +1817,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::ElasticLoadBalancingV2::ListenerRule to Arn" + "description": "Set RefKind of AWS::ElasticLoadBalancingV2::ListenerRule to Arn" } }, "AWS::ElasticLoadBalancingV2::LoadBalancer": { @@ -1829,11 +1829,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::ElasticLoadBalancingV2::LoadBalancer to Arn" + "description": "Set RefKind of AWS::ElasticLoadBalancingV2::LoadBalancer to Arn" } }, "AWS::ElasticLoadBalancingV2::TargetGroup": { @@ -1841,11 +1841,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::ElasticLoadBalancingV2::TargetGroup to Arn" + "description": "Set RefKind of AWS::ElasticLoadBalancingV2::TargetGroup to Arn" } }, "AWS::Elasticsearch::Domain": { @@ -1853,11 +1853,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Elasticsearch::Domain to Name" + "description": "Set RefKind of AWS::Elasticsearch::Domain to Name" } }, "AWS::Events::Rule": { @@ -1865,11 +1865,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::Events::Rule to Id" + "description": "Set RefKind of AWS::Events::Rule to Id" } }, "AWS::GameLift::Alias": { @@ -1877,11 +1877,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::GameLift::Alias to Id" + "description": "Set RefKind of AWS::GameLift::Alias to Id" } }, "AWS::GameLift::Build": { @@ -1889,11 +1889,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::GameLift::Build to Id" + "description": "Set RefKind of AWS::GameLift::Build to Id" } }, "AWS::GameLift::Fleet": { @@ -1901,11 +1901,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::GameLift::Fleet to Id" + "description": "Set RefKind of AWS::GameLift::Fleet to Id" } }, "AWS::Glue::Classifier": { @@ -1913,11 +1913,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Glue::Classifier to Name" + "description": "Set RefKind of AWS::Glue::Classifier to Name" } }, "AWS::Glue::Connection": { @@ -1925,11 +1925,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Glue::Connection to Name" + "description": "Set RefKind of AWS::Glue::Connection to Name" } }, "AWS::Glue::Crawler": { @@ -1937,11 +1937,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Glue::Crawler to Name" + "description": "Set RefKind of AWS::Glue::Crawler to Name" } }, "AWS::Glue::Database": { @@ -1949,11 +1949,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Glue::Database to Name" + "description": "Set RefKind of AWS::Glue::Database to Name" } }, "AWS::Glue::DevEndpoint": { @@ -1961,11 +1961,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::Glue::DevEndpoint to Id" + "description": "Set RefKind of AWS::Glue::DevEndpoint to Id" } }, "AWS::Glue::Job": { @@ -1973,11 +1973,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Glue::Job to Name" + "description": "Set RefKind of AWS::Glue::Job to Name" } }, "AWS::Glue::Partition": { @@ -1985,11 +1985,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::Glue::Partition to Id" + "description": "Set RefKind of AWS::Glue::Partition to Id" } }, "AWS::Glue::Table": { @@ -1997,11 +1997,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Glue::Table to Name" + "description": "Set RefKind of AWS::Glue::Table to Name" } }, "AWS::Glue::Trigger": { @@ -2009,11 +2009,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Glue::Trigger to Name" + "description": "Set RefKind of AWS::Glue::Trigger to Name" } }, "AWS::GuardDuty::Detector": { @@ -2021,11 +2021,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::GuardDuty::Detector to Id" + "description": "Set RefKind of AWS::GuardDuty::Detector to Id" } }, "AWS::GuardDuty::Filter": { @@ -2033,11 +2033,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::GuardDuty::Filter to Name" + "description": "Set RefKind of AWS::GuardDuty::Filter to Name" } }, "AWS::GuardDuty::IPSet": { @@ -2045,11 +2045,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::GuardDuty::IPSet to Id" + "description": "Set RefKind of AWS::GuardDuty::IPSet to Id" } }, "AWS::GuardDuty::Master": { @@ -2057,11 +2057,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "None" } ], - "description": "Set RefType of AWS::GuardDuty::Master to None" + "description": "Set RefKind of AWS::GuardDuty::Master to None" } }, "AWS::GuardDuty::Member": { @@ -2069,11 +2069,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "None" } ], - "description": "Set RefType of AWS::GuardDuty::Member to None" + "description": "Set RefKind of AWS::GuardDuty::Member to None" } }, "AWS::GuardDuty::ThreatIntelSet": { @@ -2081,11 +2081,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::GuardDuty::ThreatIntelSet to Id" + "description": "Set RefKind of AWS::GuardDuty::ThreatIntelSet to Id" } }, "AWS::IAM::AccessKey": { @@ -2093,11 +2093,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::IAM::AccessKey to Id" + "description": "Set RefKind of AWS::IAM::AccessKey to Id" } }, "AWS::IAM::Group": { @@ -2105,11 +2105,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::IAM::Group to Name" + "description": "Set RefKind of AWS::IAM::Group to Name" } }, "AWS::IAM::InstanceProfile": { @@ -2117,11 +2117,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::IAM::InstanceProfile to Name" + "description": "Set RefKind of AWS::IAM::InstanceProfile to Name" } }, "AWS::IAM::ManagedPolicy": { @@ -2129,11 +2129,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::IAM::ManagedPolicy to Arn" + "description": "Set RefKind of AWS::IAM::ManagedPolicy to Arn" } }, "AWS::IAM::Policy": { @@ -2141,11 +2141,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::IAM::Policy to Name" + "description": "Set RefKind of AWS::IAM::Policy to Name" } }, "AWS::IAM::Role": { @@ -2153,11 +2153,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::IAM::Role to Name" + "description": "Set RefKind of AWS::IAM::Role to Name" } }, "AWS::IAM::ServiceLinkedRole": { @@ -2165,11 +2165,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "None" } ], - "description": "Set RefType of AWS::IAM::ServiceLinkedRole to None" + "description": "Set RefKind of AWS::IAM::ServiceLinkedRole to None" } }, "AWS::IAM::User": { @@ -2177,11 +2177,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::IAM::User to Name" + "description": "Set RefKind of AWS::IAM::User to Name" } }, "AWS::IAM::UserToGroupAddition": { @@ -2189,11 +2189,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "None" } ], - "description": "Set RefType of AWS::IAM::UserToGroupAddition to None" + "description": "Set RefKind of AWS::IAM::UserToGroupAddition to None" } }, "AWS::Inspector::AssessmentTarget": { @@ -2201,11 +2201,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "None" } ], - "description": "Set RefType of AWS::Inspector::AssessmentTarget to None" + "description": "Set RefKind of AWS::Inspector::AssessmentTarget to None" } }, "AWS::Inspector::AssessmentTemplate": { @@ -2213,11 +2213,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "None" } ], - "description": "Set RefType of AWS::Inspector::AssessmentTemplate to None" + "description": "Set RefKind of AWS::Inspector::AssessmentTemplate to None" } }, "AWS::Inspector::ResourceGroup": { @@ -2225,11 +2225,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "None" } ], - "description": "Set RefType of AWS::Inspector::ResourceGroup to None" + "description": "Set RefKind of AWS::Inspector::ResourceGroup to None" } }, "AWS::IoT::Certificate": { @@ -2237,11 +2237,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::IoT::Certificate to Id" + "description": "Set RefKind of AWS::IoT::Certificate to Id" } }, "AWS::IoT::Policy": { @@ -2249,11 +2249,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::IoT::Policy to Name" + "description": "Set RefKind of AWS::IoT::Policy to Name" } }, "AWS::IoT::PolicyPrincipalAttachment": { @@ -2261,11 +2261,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "None" } ], - "description": "Set RefType of AWS::IoT::PolicyPrincipalAttachment to None" + "description": "Set RefKind of AWS::IoT::PolicyPrincipalAttachment to None" } }, "AWS::IoT::Thing": { @@ -2273,11 +2273,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::IoT::Thing to Name" + "description": "Set RefKind of AWS::IoT::Thing to Name" } }, "AWS::IoT::ThingPrincipalAttachment": { @@ -2285,11 +2285,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "None" } ], - "description": "Set RefType of AWS::IoT::ThingPrincipalAttachment to None" + "description": "Set RefKind of AWS::IoT::ThingPrincipalAttachment to None" } }, "AWS::IoT::TopicRule": { @@ -2297,11 +2297,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::IoT::TopicRule to Name" + "description": "Set RefKind of AWS::IoT::TopicRule to Name" } }, "AWS::KMS::Alias": { @@ -2309,11 +2309,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::KMS::Alias to Name" + "description": "Set RefKind of AWS::KMS::Alias to Name" } }, "AWS::KMS::Key": { @@ -2321,11 +2321,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::KMS::Key to Id" + "description": "Set RefKind of AWS::KMS::Key to Id" } }, "AWS::Kinesis::Stream": { @@ -2333,11 +2333,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::Kinesis::Stream to Id" + "description": "Set RefKind of AWS::Kinesis::Stream to Id" } }, "AWS::KinesisAnalytics::Application": { @@ -2345,11 +2345,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::KinesisAnalytics::Application to Id" + "description": "Set RefKind of AWS::KinesisAnalytics::Application to Id" } }, "AWS::KinesisAnalytics::ApplicationOutput": { @@ -2357,11 +2357,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::KinesisAnalytics::ApplicationOutput to Id" + "description": "Set RefKind of AWS::KinesisAnalytics::ApplicationOutput to Id" } }, "AWS::KinesisAnalytics::ApplicationReferenceDataSource": { @@ -2369,11 +2369,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::KinesisAnalytics::ApplicationReferenceDataSource to Id" + "description": "Set RefKind of AWS::KinesisAnalytics::ApplicationReferenceDataSource to Id" } }, "AWS::KinesisFirehose::DeliveryStream": { @@ -2381,11 +2381,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::KinesisFirehose::DeliveryStream to Name" + "description": "Set RefKind of AWS::KinesisFirehose::DeliveryStream to Name" } }, "AWS::Lambda::Alias": { @@ -2393,11 +2393,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::Lambda::Alias to Arn" + "description": "Set RefKind of AWS::Lambda::Alias to Arn" } }, "AWS::Lambda::EventSourceMapping": { @@ -2405,11 +2405,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Lambda::EventSourceMapping to Name" + "description": "Set RefKind of AWS::Lambda::EventSourceMapping to Name" } }, "AWS::Lambda::Function": { @@ -2417,11 +2417,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Lambda::Function to Name" + "description": "Set RefKind of AWS::Lambda::Function to Name" } }, "AWS::Lambda::Permission": { @@ -2429,11 +2429,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "None" } ], - "description": "Set RefType of AWS::Lambda::Permission to None" + "description": "Set RefKind of AWS::Lambda::Permission to None" } }, "AWS::Lambda::Version": { @@ -2441,11 +2441,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::Lambda::Version to Arn" + "description": "Set RefKind of AWS::Lambda::Version to Arn" } }, "AWS::Logs::Destination": { @@ -2453,11 +2453,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Logs::Destination to Name" + "description": "Set RefKind of AWS::Logs::Destination to Name" } }, "AWS::Logs::LogGroup": { @@ -2465,11 +2465,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Logs::LogGroup to Name" + "description": "Set RefKind of AWS::Logs::LogGroup to Name" } }, "AWS::Logs::LogStream": { @@ -2477,11 +2477,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Logs::LogStream to Name" + "description": "Set RefKind of AWS::Logs::LogStream to Name" } }, "AWS::Logs::MetricFilter": { @@ -2489,11 +2489,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Logs::MetricFilter to Name" + "description": "Set RefKind of AWS::Logs::MetricFilter to Name" } }, "AWS::Logs::SubscriptionFilter": { @@ -2501,11 +2501,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Logs::SubscriptionFilter to Name" + "description": "Set RefKind of AWS::Logs::SubscriptionFilter to Name" } }, "AWS::Neptune::DBCluster": { @@ -2513,11 +2513,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Neptune::DBCluster to Name" + "description": "Set RefKind of AWS::Neptune::DBCluster to Name" } }, "AWS::Neptune::DBClusterParameterGroup": { @@ -2525,11 +2525,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Neptune::DBClusterParameterGroup to Name" + "description": "Set RefKind of AWS::Neptune::DBClusterParameterGroup to Name" } }, "AWS::Neptune::DBInstance": { @@ -2537,11 +2537,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::Neptune::DBInstance to Id" + "description": "Set RefKind of AWS::Neptune::DBInstance to Id" } }, "AWS::Neptune::DBParameterGroup": { @@ -2549,11 +2549,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Neptune::DBParameterGroup to Name" + "description": "Set RefKind of AWS::Neptune::DBParameterGroup to Name" } }, "AWS::Neptune::DBSubnetGroup": { @@ -2561,11 +2561,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Neptune::DBSubnetGroup to Name" + "description": "Set RefKind of AWS::Neptune::DBSubnetGroup to Name" } }, "AWS::OpsWorks::App": { @@ -2573,11 +2573,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::OpsWorks::App to Id" + "description": "Set RefKind of AWS::OpsWorks::App to Id" } }, "AWS::OpsWorks::ElasticLoadBalancerAttachment": { @@ -2585,11 +2585,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "None" } ], - "description": "Set RefType of AWS::OpsWorks::ElasticLoadBalancerAttachment to None" + "description": "Set RefKind of AWS::OpsWorks::ElasticLoadBalancerAttachment to None" } }, "AWS::OpsWorks::Instance": { @@ -2597,11 +2597,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::OpsWorks::Instance to Id" + "description": "Set RefKind of AWS::OpsWorks::Instance to Id" } }, "AWS::OpsWorks::Layer": { @@ -2609,11 +2609,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::OpsWorks::Layer to Id" + "description": "Set RefKind of AWS::OpsWorks::Layer to Id" } }, "AWS::OpsWorks::Stack": { @@ -2621,11 +2621,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::OpsWorks::Stack to Id" + "description": "Set RefKind of AWS::OpsWorks::Stack to Id" } }, "AWS::OpsWorks::UserProfile": { @@ -2633,11 +2633,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::OpsWorks::UserProfile to Arn" + "description": "Set RefKind of AWS::OpsWorks::UserProfile to Arn" } }, "AWS::OpsWorks::Volume": { @@ -2645,11 +2645,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::OpsWorks::Volume to Id" + "description": "Set RefKind of AWS::OpsWorks::Volume to Id" } }, "AWS::RDS::DBCluster": { @@ -2657,11 +2657,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::RDS::DBCluster to Name" + "description": "Set RefKind of AWS::RDS::DBCluster to Name" } }, "AWS::RDS::DBClusterParameterGroup": { @@ -2669,11 +2669,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::RDS::DBClusterParameterGroup to Name" + "description": "Set RefKind of AWS::RDS::DBClusterParameterGroup to Name" } }, "AWS::RDS::DBInstance": { @@ -2681,11 +2681,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::RDS::DBInstance to Id" + "description": "Set RefKind of AWS::RDS::DBInstance to Id" } }, "AWS::RDS::DBParameterGroup": { @@ -2693,11 +2693,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::RDS::DBParameterGroup to Name" + "description": "Set RefKind of AWS::RDS::DBParameterGroup to Name" } }, "AWS::RDS::DBSecurityGroup": { @@ -2705,11 +2705,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::RDS::DBSecurityGroup to Name" + "description": "Set RefKind of AWS::RDS::DBSecurityGroup to Name" } }, "AWS::RDS::DBSecurityGroupIngress": { @@ -2717,11 +2717,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::RDS::DBSecurityGroupIngress to Name" + "description": "Set RefKind of AWS::RDS::DBSecurityGroupIngress to Name" } }, "AWS::RDS::DBSubnetGroup": { @@ -2729,11 +2729,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::RDS::DBSubnetGroup to Name" + "description": "Set RefKind of AWS::RDS::DBSubnetGroup to Name" } }, "AWS::RDS::EventSubscription": { @@ -2741,11 +2741,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::RDS::EventSubscription to Name" + "description": "Set RefKind of AWS::RDS::EventSubscription to Name" } }, "AWS::RDS::OptionGroup": { @@ -2753,11 +2753,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::RDS::OptionGroup to Name" + "description": "Set RefKind of AWS::RDS::OptionGroup to Name" } }, "AWS::Redshift::Cluster": { @@ -2765,11 +2765,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Redshift::Cluster to Name" + "description": "Set RefKind of AWS::Redshift::Cluster to Name" } }, "AWS::Redshift::ClusterParameterGroup": { @@ -2777,11 +2777,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Redshift::ClusterParameterGroup to Name" + "description": "Set RefKind of AWS::Redshift::ClusterParameterGroup to Name" } }, "AWS::Redshift::ClusterSecurityGroup": { @@ -2789,11 +2789,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Redshift::ClusterSecurityGroup to Name" + "description": "Set RefKind of AWS::Redshift::ClusterSecurityGroup to Name" } }, "AWS::Redshift::ClusterSecurityGroupIngress": { @@ -2801,11 +2801,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "None" } ], - "description": "Set RefType of AWS::Redshift::ClusterSecurityGroupIngress to None" + "description": "Set RefKind of AWS::Redshift::ClusterSecurityGroupIngress to None" } }, "AWS::Redshift::ClusterSubnetGroup": { @@ -2813,11 +2813,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Redshift::ClusterSubnetGroup to Name" + "description": "Set RefKind of AWS::Redshift::ClusterSubnetGroup to Name" } }, "AWS::Route53::HealthCheck": { @@ -2825,11 +2825,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::Route53::HealthCheck to Id" + "description": "Set RefKind of AWS::Route53::HealthCheck to Id" } }, "AWS::Route53::HostedZone": { @@ -2837,11 +2837,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::Route53::HostedZone to Id" + "description": "Set RefKind of AWS::Route53::HostedZone to Id" } }, "AWS::Route53::RecordSet": { @@ -2849,11 +2849,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "DomainName" } ], - "description": "Set RefType of AWS::Route53::RecordSet to DomainName" + "description": "Set RefKind of AWS::Route53::RecordSet to DomainName" } }, "AWS::Route53::RecordSetGroup": { @@ -2861,11 +2861,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Route53::RecordSetGroup to Name" + "description": "Set RefKind of AWS::Route53::RecordSetGroup to Name" } }, "AWS::S3::Bucket": { @@ -2873,11 +2873,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::S3::Bucket to Name" + "description": "Set RefKind of AWS::S3::Bucket to Name" } }, "AWS::S3::BucketPolicy": { @@ -2885,11 +2885,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "None" } ], - "description": "Set RefType of AWS::S3::BucketPolicy to None" + "description": "Set RefKind of AWS::S3::BucketPolicy to None" } }, "AWS::SDB::Domain": { @@ -2897,11 +2897,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "None" } ], - "description": "Set RefType of AWS::SDB::Domain to None" + "description": "Set RefKind of AWS::SDB::Domain to None" } }, "AWS::SES::ConfigurationSet": { @@ -2909,11 +2909,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::SES::ConfigurationSet to Name" + "description": "Set RefKind of AWS::SES::ConfigurationSet to Name" } }, "AWS::SES::ConfigurationSetEventDestination": { @@ -2921,11 +2921,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "None" } ], - "description": "Set RefType of AWS::SES::ConfigurationSetEventDestination to None" + "description": "Set RefKind of AWS::SES::ConfigurationSetEventDestination to None" } }, "AWS::SES::ReceiptFilter": { @@ -2933,11 +2933,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::SES::ReceiptFilter to Name" + "description": "Set RefKind of AWS::SES::ReceiptFilter to Name" } }, "AWS::SES::ReceiptRule": { @@ -2945,11 +2945,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::SES::ReceiptRule to Name" + "description": "Set RefKind of AWS::SES::ReceiptRule to Name" } }, "AWS::SES::ReceiptRuleSet": { @@ -2957,11 +2957,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::SES::ReceiptRuleSet to Name" + "description": "Set RefKind of AWS::SES::ReceiptRuleSet to Name" } }, "AWS::SES::Template": { @@ -2969,11 +2969,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::SES::Template to Id" + "description": "Set RefKind of AWS::SES::Template to Id" } }, "AWS::SNS::Subscription": { @@ -2981,11 +2981,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::SNS::Subscription to Arn" + "description": "Set RefKind of AWS::SNS::Subscription to Arn" } }, "AWS::SNS::Topic": { @@ -2993,11 +2993,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::SNS::Topic to Arn" + "description": "Set RefKind of AWS::SNS::Topic to Arn" } }, "AWS::SNS::TopicPolicy": { @@ -3005,11 +3005,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "None" } ], - "description": "Set RefType of AWS::SNS::TopicPolicy to None" + "description": "Set RefKind of AWS::SNS::TopicPolicy to None" } }, "AWS::SQS::Queue": { @@ -3017,11 +3017,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Url" } ], - "description": "Set RefType of AWS::SQS::Queue to Url" + "description": "Set RefKind of AWS::SQS::Queue to Url" } }, "AWS::SQS::QueuePolicy": { @@ -3029,11 +3029,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "None" } ], - "description": "Set RefType of AWS::SQS::QueuePolicy to None" + "description": "Set RefKind of AWS::SQS::QueuePolicy to None" } }, "AWS::SSM::Association": { @@ -3041,11 +3041,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "None" } ], - "description": "Set RefType of AWS::SSM::Association to None" + "description": "Set RefKind of AWS::SSM::Association to None" } }, "AWS::SSM::Document": { @@ -3053,11 +3053,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::SSM::Document to Name" + "description": "Set RefKind of AWS::SSM::Document to Name" } }, "AWS::SSM::MaintenanceWindowTask": { @@ -3065,11 +3065,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::SSM::MaintenanceWindowTask to Id" + "description": "Set RefKind of AWS::SSM::MaintenanceWindowTask to Id" } }, "AWS::SSM::Parameter": { @@ -3077,11 +3077,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::SSM::Parameter to Name" + "description": "Set RefKind of AWS::SSM::Parameter to Name" } }, "AWS::SSM::PatchBaseline": { @@ -3089,11 +3089,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::SSM::PatchBaseline to Id" + "description": "Set RefKind of AWS::SSM::PatchBaseline to Id" } }, "AWS::SSM::ResourceDataSync": { @@ -3101,11 +3101,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::SSM::ResourceDataSync to Name" + "description": "Set RefKind of AWS::SSM::ResourceDataSync to Name" } }, "AWS::SageMaker::Endpoint": { @@ -3113,11 +3113,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::SageMaker::Endpoint to Arn" + "description": "Set RefKind of AWS::SageMaker::Endpoint to Arn" } }, "AWS::SageMaker::EndpointConfig": { @@ -3125,11 +3125,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::SageMaker::EndpointConfig to Arn" + "description": "Set RefKind of AWS::SageMaker::EndpointConfig to Arn" } }, "AWS::SageMaker::Model": { @@ -3137,11 +3137,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::SageMaker::Model to Arn" + "description": "Set RefKind of AWS::SageMaker::Model to Arn" } }, "AWS::SageMaker::NotebookInstance": { @@ -3149,11 +3149,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::SageMaker::NotebookInstance to Arn" + "description": "Set RefKind of AWS::SageMaker::NotebookInstance to Arn" } }, "AWS::SageMaker::NotebookInstanceLifecycleConfig": { @@ -3161,11 +3161,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::SageMaker::NotebookInstanceLifecycleConfig to Arn" + "description": "Set RefKind of AWS::SageMaker::NotebookInstanceLifecycleConfig to Arn" } }, "AWS::Serverless::Api": { @@ -3173,11 +3173,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Serverless::Api to Name" + "description": "Set RefKind of AWS::Serverless::Api to Name" } }, "AWS::Serverless::Function": { @@ -3185,11 +3185,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Serverless::Function to Name" + "description": "Set RefKind of AWS::Serverless::Function to Name" } }, "AWS::Serverless::SimpleTable": { @@ -3197,11 +3197,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::Serverless::SimpleTable to Name" + "description": "Set RefKind of AWS::Serverless::SimpleTable to Name" } }, "AWS::ServiceCatalog::AcceptedPortfolioShare": { @@ -3209,11 +3209,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ServiceCatalog::AcceptedPortfolioShare to Id" + "description": "Set RefKind of AWS::ServiceCatalog::AcceptedPortfolioShare to Id" } }, "AWS::ServiceCatalog::CloudFormationProduct": { @@ -3221,11 +3221,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ServiceCatalog::CloudFormationProduct to Id" + "description": "Set RefKind of AWS::ServiceCatalog::CloudFormationProduct to Id" } }, "AWS::ServiceCatalog::CloudFormationProvisionedProduct": { @@ -3233,11 +3233,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ServiceCatalog::CloudFormationProvisionedProduct to Id" + "description": "Set RefKind of AWS::ServiceCatalog::CloudFormationProvisionedProduct to Id" } }, "AWS::ServiceCatalog::LaunchNotificationConstraint": { @@ -3245,11 +3245,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ServiceCatalog::LaunchNotificationConstraint to Id" + "description": "Set RefKind of AWS::ServiceCatalog::LaunchNotificationConstraint to Id" } }, "AWS::ServiceCatalog::LaunchRoleConstraint": { @@ -3257,11 +3257,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ServiceCatalog::LaunchRoleConstraint to Id" + "description": "Set RefKind of AWS::ServiceCatalog::LaunchRoleConstraint to Id" } }, "AWS::ServiceCatalog::LaunchTemplateConstraint": { @@ -3269,11 +3269,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ServiceCatalog::LaunchTemplateConstraint to Id" + "description": "Set RefKind of AWS::ServiceCatalog::LaunchTemplateConstraint to Id" } }, "AWS::ServiceCatalog::Portfolio": { @@ -3281,11 +3281,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ServiceCatalog::Portfolio to Id" + "description": "Set RefKind of AWS::ServiceCatalog::Portfolio to Id" } }, "AWS::ServiceCatalog::PortfolioPrincipalAssociation": { @@ -3293,11 +3293,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ServiceCatalog::PortfolioPrincipalAssociation to Id" + "description": "Set RefKind of AWS::ServiceCatalog::PortfolioPrincipalAssociation to Id" } }, "AWS::ServiceCatalog::PortfolioProductAssociation": { @@ -3305,11 +3305,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ServiceCatalog::PortfolioProductAssociation to Id" + "description": "Set RefKind of AWS::ServiceCatalog::PortfolioProductAssociation to Id" } }, "AWS::ServiceCatalog::PortfolioShare": { @@ -3317,11 +3317,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ServiceCatalog::PortfolioShare to Id" + "description": "Set RefKind of AWS::ServiceCatalog::PortfolioShare to Id" } }, "AWS::ServiceCatalog::TagOption": { @@ -3329,11 +3329,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ServiceCatalog::TagOption to Id" + "description": "Set RefKind of AWS::ServiceCatalog::TagOption to Id" } }, "AWS::ServiceCatalog::TagOptionAssociation": { @@ -3341,11 +3341,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ServiceCatalog::TagOptionAssociation to Id" + "description": "Set RefKind of AWS::ServiceCatalog::TagOptionAssociation to Id" } }, "AWS::ServiceDiscovery::Instance": { @@ -3353,11 +3353,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ServiceDiscovery::Instance to Id" + "description": "Set RefKind of AWS::ServiceDiscovery::Instance to Id" } }, "AWS::ServiceDiscovery::PrivateDnsNamespace": { @@ -3365,11 +3365,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ServiceDiscovery::PrivateDnsNamespace to Id" + "description": "Set RefKind of AWS::ServiceDiscovery::PrivateDnsNamespace to Id" } }, "AWS::ServiceDiscovery::PublicDnsNamespace": { @@ -3377,11 +3377,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ServiceDiscovery::PublicDnsNamespace to Id" + "description": "Set RefKind of AWS::ServiceDiscovery::PublicDnsNamespace to Id" } }, "AWS::ServiceDiscovery::Service": { @@ -3389,11 +3389,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::ServiceDiscovery::Service to Id" + "description": "Set RefKind of AWS::ServiceDiscovery::Service to Id" } }, "AWS::StepFunctions::Activity": { @@ -3401,11 +3401,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::StepFunctions::Activity to Arn" + "description": "Set RefKind of AWS::StepFunctions::Activity to Arn" } }, "AWS::StepFunctions::StateMachine": { @@ -3413,11 +3413,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Arn" } ], - "description": "Set RefType of AWS::StepFunctions::StateMachine to Arn" + "description": "Set RefKind of AWS::StepFunctions::StateMachine to Arn" } }, "AWS::WAF::ByteMatchSet": { @@ -3425,11 +3425,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::WAF::ByteMatchSet to Id" + "description": "Set RefKind of AWS::WAF::ByteMatchSet to Id" } }, "AWS::WAF::IPSet": { @@ -3437,11 +3437,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::WAF::IPSet to Id" + "description": "Set RefKind of AWS::WAF::IPSet to Id" } }, "AWS::WAF::Rule": { @@ -3449,11 +3449,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::WAF::Rule to Id" + "description": "Set RefKind of AWS::WAF::Rule to Id" } }, "AWS::WAF::SizeConstraintSet": { @@ -3461,11 +3461,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::WAF::SizeConstraintSet to Id" + "description": "Set RefKind of AWS::WAF::SizeConstraintSet to Id" } }, "AWS::WAF::SqlInjectionMatchSet": { @@ -3473,11 +3473,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::WAF::SqlInjectionMatchSet to Id" + "description": "Set RefKind of AWS::WAF::SqlInjectionMatchSet to Id" } }, "AWS::WAF::WebACL": { @@ -3485,11 +3485,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::WAF::WebACL to Id" + "description": "Set RefKind of AWS::WAF::WebACL to Id" } }, "AWS::WAF::XssMatchSet": { @@ -3497,11 +3497,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::WAF::XssMatchSet to Id" + "description": "Set RefKind of AWS::WAF::XssMatchSet to Id" } }, "AWS::WAFRegional::ByteMatchSet": { @@ -3509,11 +3509,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::WAFRegional::ByteMatchSet to Id" + "description": "Set RefKind of AWS::WAFRegional::ByteMatchSet to Id" } }, "AWS::WAFRegional::IPSet": { @@ -3521,11 +3521,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::WAFRegional::IPSet to Id" + "description": "Set RefKind of AWS::WAFRegional::IPSet to Id" } }, "AWS::WAFRegional::Rule": { @@ -3533,11 +3533,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::WAFRegional::Rule to Id" + "description": "Set RefKind of AWS::WAFRegional::Rule to Id" } }, "AWS::WAFRegional::SizeConstraintSet": { @@ -3545,11 +3545,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::WAFRegional::SizeConstraintSet to Id" + "description": "Set RefKind of AWS::WAFRegional::SizeConstraintSet to Id" } }, "AWS::WAFRegional::SqlInjectionMatchSet": { @@ -3557,11 +3557,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::WAFRegional::SqlInjectionMatchSet to Id" + "description": "Set RefKind of AWS::WAFRegional::SqlInjectionMatchSet to Id" } }, "AWS::WAFRegional::WebACL": { @@ -3569,11 +3569,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::WAFRegional::WebACL to Id" + "description": "Set RefKind of AWS::WAFRegional::WebACL to Id" } }, "AWS::WAFRegional::WebACLAssociation": { @@ -3581,11 +3581,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::WAFRegional::WebACLAssociation to Id" + "description": "Set RefKind of AWS::WAFRegional::WebACLAssociation to Id" } }, "AWS::WAFRegional::XssMatchSet": { @@ -3593,11 +3593,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Id" } ], - "description": "Set RefType of AWS::WAFRegional::XssMatchSet to Id" + "description": "Set RefKind of AWS::WAFRegional::XssMatchSet to Id" } }, "AWS::WorkSpaces::Workspace": { @@ -3605,11 +3605,11 @@ "operations": [ { "op": "add", - "path": "/RefType", + "path": "/RefKind", "value": "Name" } ], - "description": "Set RefType of AWS::WorkSpaces::Workspace to Name" + "description": "Set RefKind of AWS::WorkSpaces::Workspace to Name" } } } diff --git a/tools/cfn2ts/lib/codegen.ts b/tools/cfn2ts/lib/codegen.ts index 3b5483b097a17..4e62651eb3b87 100644 --- a/tools/cfn2ts/lib/codegen.ts +++ b/tools/cfn2ts/lib/codegen.ts @@ -67,7 +67,7 @@ export default class CodeGenerator { for (const name of Object.keys(this.spec.ResourceTypes).sort()) { const resourceType = this.spec.ResourceTypes[name]; - this.validateRefTypePresence(name, resourceType); + this.validateRefKindPresence(name, resourceType); const cfnName = SpecName.parse(name); const resourceName = genspec.CodeName.forResource(cfnName); @@ -222,7 +222,7 @@ export default class CodeGenerator { // Attributes // - const attributeTypes = new Array(); + const attributeTypes = new Array(); const attributes = new Array(); if (spec.Attributes) { @@ -243,8 +243,8 @@ export default class CodeGenerator { // // Ref attribute // - if (spec.RefType !== schema.RefType.None) { - const refAttribute = genspec.refAttributeDefinition(resourceName, spec.RefType!); + if (spec.RefKind !== schema.SpecialRefKind.None) { + const refAttribute = genspec.refAttributeDefinition(resourceName, spec.RefKind!); this.code.line(`public readonly ${refAttribute.propertyName}: ${refAttribute.attributeType.typeName.className};`); // If there's already an attribute with the same declared type, we don't have to duplicate @@ -475,7 +475,7 @@ export default class CodeGenerator { /** * Attribute types are classes that represent resource attributes (e.g. QueueArnAttribute). */ - private emitAttributeType(attr: genspec.TypeDeclaration) { + private emitAttributeType(attr: genspec.ClassDeclaration) { this.openClass(attr.typeName, attr.docLink, attr.baseClassName.fqn); this.closeClass(attr.typeName); } @@ -591,9 +591,9 @@ export default class CodeGenerator { return; } - private validateRefTypePresence(name: string, resourceType: schema.ResourceType): any { - if (resourceType.RefType === undefined) { - throw new Error(`Resource ${name} does not have a Ref type; please annotate this new resources in @aws-cdk/cfnspec`); + private validateRefKindPresence(name: string, resourceType: schema.ResourceType): any { + if (!resourceType.RefKind) { // Both empty string and undefined + throw new Error(`Resource ${name} does not have a RefKind; please annotate this new resources in @aws-cdk/cfnspec`); } } } diff --git a/tools/cfn2ts/lib/genspec.ts b/tools/cfn2ts/lib/genspec.ts index b61be752a932b..b43ebefb07e2d 100644 --- a/tools/cfn2ts/lib/genspec.ts +++ b/tools/cfn2ts/lib/genspec.ts @@ -104,7 +104,7 @@ export class CodeName { /** * Class declaration */ -export class TypeDeclaration { +export class ClassDeclaration { constructor( readonly typeName: CodeName, readonly baseClassName: CodeName, @@ -123,7 +123,7 @@ export const TOKEN_NAME = new CodeName('', CORE_NAMESPACE, 'CloudFormationToken' export class Attribute { constructor( readonly propertyName: string, - readonly attributeType: TypeDeclaration, + readonly attributeType: ClassDeclaration, readonly constructorArguments: string) { } } @@ -190,27 +190,26 @@ export function attributeDefinition(resourceName: CodeName, attributeName: strin // Not in a namespace, base the name on the descriptive name const typeName = new CodeName(resourceName.packageName, '', descriptiveName); // "BucketArn" - const baseClass = attributeName.endsWith('Arn') ? ARN_NAME : TOKEN_NAME; + const baseClass = attributeName.endsWith('Arn') ? ARN_NAME : TOKEN_NAME; const constructorArguments = `this.getAtt('${attributeName}')`; - const attrType = new TypeDeclaration(typeName, baseClass, docLink); + const attrType = new ClassDeclaration(typeName, baseClass, docLink); return new Attribute(propertyName, attrType, constructorArguments); } /** - * Return an attribute definition name for the RefType for this class + * Return an attribute definition name for the RefKind for this class */ -export function refAttributeDefinition(resourceName: CodeName, refType: schema.RefType): Attribute { - const suffix = refType; // Already a string - const descriptiveName = descriptiveAttributeName(resourceName, suffix); - const refTypeName = new CodeName(resourceName.packageName, '', descriptiveName); - const baseClass = refType === schema.RefType.Arn ? ARN_NAME : TOKEN_NAME; +export function refAttributeDefinition(resourceName: CodeName, refKind: string): Attribute { + const refClassName = descriptiveAttributeName(resourceName, refKind); + const refClass = new CodeName(resourceName.packageName, '', refClassName); + const baseClass = refKind === schema.SpecialRefKind.Arn ? ARN_NAME : TOKEN_NAME; const constructorArguments = '{ Ref: this.logicalId }, `${this.logicalId}.Ref`'; - const attrType = new TypeDeclaration(refTypeName, baseClass); - return new Attribute('ref', attrType, constructorArguments); + const refType = new ClassDeclaration(refClass, baseClass); + return new Attribute('ref', refType, constructorArguments); } /**