diff --git a/Makefile b/Makefile index 6e680b8e8e..83631e7136 100644 --- a/Makefile +++ b/Makefile @@ -185,4 +185,19 @@ install_sdks:: install_dotnet_sdk install_python_sdk install_nodejs_sdk # Required for the codegen action that runs in pulumi/pulumi only_build:: build +ref-db:: + mkdir -p bin + (cd provider/tools/ref-parser && go build -o ../../../bin/ref-parser) + ./bin/ref-parser -guide ./aws-cloudformation-user-guide -schema ./aws-cloudformation-schema -db ./meta/ref-db.json + +ref-db-auto:: + mkdir -p bin + (cd provider/tools/ref-parser && go build -o ../../../bin/ref-parser) + ./bin/ref-parser -guide ./aws-cloudformation-user-guide -schema ./aws-cloudformation-schema -db ./meta/ref-db.json -auto + +ref-db-report:: + mkdir -p bin + (cd provider/tools/ref-parser && go build -o ../../../bin/ref-parser) + ./bin/ref-parser -guide ./aws-cloudformation-user-guide -schema ./aws-cloudformation-schema -db ./meta/ref-db.json -report + .PHONY: ensure generate_schema generate build_provider build diff --git a/meta/README.md b/meta/README.md new file mode 100644 index 0000000000..093e7af2d7 --- /dev/null +++ b/meta/README.md @@ -0,0 +1,21 @@ +# meta + +Reference data used by the `pulumi-aws-native` provider. + +## ref-db.json + +Metadata describing the behavior of the [CloudFormation Ref Intrinsic](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html). + +What Ref returns varies from resource to resource. The only available information on this is free-form text in CloudFormation documentation and anything that can be extracted experimentally. To facilitate building tooling such as `pulumi/pulumi-cdk` that emulates CF behavior, `ref-db.json` collects schematized information describing the behavior of `Ref`. + +`ref-db.json` can be edited directly to correct errors or add entries for resources not yet covered. + +## regions.json + +AWS regions and their names. + +Please do not edit this file directly. + +This list can be refreshed by extracting from `botocore`. See `.botocore.version`. + + make docs diff --git a/meta/ref-db.json b/meta/ref-db.json new file mode 100644 index 0000000000..300a925a30 --- /dev/null +++ b/meta/ref-db.json @@ -0,0 +1,3166 @@ +{ + "resources": { + "AWS::ACMPCA::Certificate": { + "refReturns": { + "notSupported": true + } + }, + "AWS::ACMPCA::CertificateAuthority": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::ACMPCA::CertificateAuthorityActivation": { + "refReturns": { + "property": "CertificateAuthorityArn" + } + }, + "AWS::APS::RuleGroupsNamespace": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::APS::Workspace": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::AccessAnalyzer::Analyzer": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::AmazonMQ::Broker": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::AmazonMQ::Configuration": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::AmazonMQ::ConfigurationAssociation": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::ApiGateway::Account": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::ApiGateway::ApiKey": { + "refReturns": { + "property": "APIKeyId" + } + }, + "AWS::ApiGateway::Authorizer": { + "refReturns": { + "property": "AuthorizerId", + "heuristic": "RefReturnsID" + } + }, + "AWS::ApiGateway::Deployment": { + "refReturns": { + "property": "DeploymentId", + "heuristic": "RefReturnsID" + } + }, + "AWS::ApiGateway::DocumentationPart": { + "refReturns": { + "property": "DocumentationPartId", + "heuristic": "RefReturnsID" + } + }, + "AWS::ApiGateway::Model": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::ApiGateway::RequestValidator": { + "refReturns": { + "property": "RequestValidatorId", + "heuristic": "RefReturnsID" + } + }, + "AWS::ApiGateway::Resource": { + "refReturns": { + "property": "ResourceId" + } + }, + "AWS::ApiGateway::RestApi": { + "refReturns": { + "property": "RestApiId", + "heuristic": "RefReturnsID" + } + }, + "AWS::ApiGateway::Stage": { + "refReturns": { + "property": "StageName", + "heuristic": "RefReturnsName" + } + }, + "AWS::ApiGateway::UsagePlan": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::ApiGateway::UsagePlanKey": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::ApiGateway::VpcLink": { + "refReturns": { + "property": "VpcLinkId", + "heuristic": "RefReturnsID" + } + }, + "AWS::ApiGatewayV2::Api": { + "refReturns": { + "property": "ApiId", + "heuristic": "RefReturnsID" + } + }, + "AWS::ApiGatewayV2::ApiMapping": { + "refReturns": { + "property": "ApiMappingId", + "heuristic": "RefReturnsID" + } + }, + "AWS::ApiGatewayV2::Authorizer": { + "refReturns": { + "property": "AuthorizerId", + "heuristic": "RefReturnsID" + } + }, + "AWS::ApiGatewayV2::Deployment": { + "refReturns": { + "property": "DeploymentId" + } + }, + "AWS::ApiGatewayV2::Integration": { + "refReturns": { + "property": "IntegrationId" + } + }, + "AWS::ApiGatewayV2::IntegrationResponse": { + "refReturns": { + "property": "IntegrationResponseId", + "heuristic": "RefReturnsID" + } + }, + "AWS::ApiGatewayV2::Model": { + "refReturns": { + "property": "ModelId", + "heuristic": "RefReturnsID" + } + }, + "AWS::ApiGatewayV2::Route": { + "refReturns": { + "property": "RouteId", + "heuristic": "RefReturnsID" + } + }, + "AWS::ApiGatewayV2::RouteResponse": { + "refReturns": { + "property": "RouteResponseId", + "heuristic": "RefReturnsID" + } + }, + "AWS::ApiGatewayV2::Stage": { + "refReturns": { + "property": "StageName" + } + }, + "AWS::ApiGatewayV2::VpcLink": { + "refReturns": { + "property": "VpcLinkId" + } + }, + "AWS::AppConfig::Application": { + "refReturns": { + "property": "ApplicationId" + } + }, + "AWS::AppConfig::ConfigurationProfile": { + "refReturns": { + "property": "ConfigurationProfileId", + "heuristic": "RefReturnsID" + } + }, + "AWS::AppConfig::DeploymentStrategy": { + "refReturns": { + "property": "Id" + } + }, + "AWS::AppConfig::Environment": { + "refReturns": { + "property": "EnvironmentId" + } + }, + "AWS::AppFlow::ConnectorProfile": { + "refReturns": { + "property": "ConnectorProfileName" + } + }, + "AWS::AppFlow::Flow": { + "refReturns": { + "property": "FlowName", + "heuristic": "RefReturnsName" + } + }, + "AWS::AppIntegrations::DataIntegration": { + "refReturns": { + "property": "Name" + } + }, + "AWS::AppIntegrations::EventIntegration": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::AppMesh::Mesh": { + "refReturns": { + "property": "Arn" + } + }, + "AWS::AppMesh::VirtualGateway": { + "refReturns": { + "property": "Arn" + } + }, + "AWS::AppRunner::ObservabilityConfiguration": { + "refReturns": { + "property": "ObservabilityConfigurationName" + } + }, + "AWS::AppRunner::VpcIngressConnection": { + "refReturns": { + "property": "VpcIngressConnectionName" + } + }, + "AWS::AppStream::AppBlock": { + "refReturns": { + "property": "Arn" + } + }, + "AWS::AppStream::ApplicationFleetAssociation": { + "refReturns": { + "properties": [ + "FleetName", + "ApplicationArn" + ], + "delimiter": "|" + } + }, + "AWS::AppSync::DomainName": { + "refReturns": { + "property": "DomainName" + } + }, + "AWS::ApplicationAutoScaling::ScalingPolicy": { + "refReturns": { + "property": "Arn" + } + }, + "AWS::ApplicationInsights::Application": { + "refReturns": { + "property": "ApplicationARN" + } + }, + "AWS::Athena::CapacityReservation": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::Athena::DataCatalog": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::Athena::NamedQuery": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::Athena::PreparedStatement": { + "refReturns": { + "property": "StatementName" + } + }, + "AWS::Athena::WorkGroup": { + "refReturns": { + "property": "Name" + } + }, + "AWS::AuditManager::Assessment": { + "refReturns": { + "property": "AssessmentId", + "heuristic": "RefReturnsID" + } + }, + "AWS::AutoScaling::LaunchConfiguration": { + "refReturns": { + "property": "LaunchConfigurationName" + } + }, + "AWS::AutoScaling::LifecycleHook": { + "refReturns": { + "property": "LifecycleHookName" + } + }, + "AWS::AutoScaling::ScheduledAction": { + "refReturns": { + "property": "ScheduledActionName" + } + }, + "AWS::Backup::BackupVault": { + "refReturns": { + "property": "BackupVaultName" + } + }, + "AWS::BackupGateway::Hypervisor": { + "refReturns": { + "property": "HypervisorArn" + } + }, + "AWS::Batch::ComputeEnvironment": { + "refReturns": { + "property": "ComputeEnvironmentArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::Batch::JobQueue": { + "refReturns": { + "property": "JobQueueArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::Batch::SchedulingPolicy": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::CE::CostCategory": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::Cassandra::Keyspace": { + "refReturns": { + "property": "KeyspaceName" + } + }, + "AWS::Cassandra::Table": { + "refReturns": { + "property": "TableName", + "heuristic": "RefReturnsName" + } + }, + "AWS::CertificateManager::Account": { + "refReturns": { + "property": "AccountId", + "heuristic": "RefReturnsID" + } + }, + "AWS::Chatbot::SlackChannelConfiguration": { + "refReturns": { + "property": "Arn" + } + }, + "AWS::CleanRooms::AnalysisTemplate": { + "refReturns": { + "property": "AnalysisTemplateIdentifier" + } + }, + "AWS::CleanRooms::ConfiguredTable": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::Cloud9::EnvironmentEC2": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::CloudFormation::HookDefaultVersion": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::CloudFormation::HookTypeConfig": { + "refReturns": { + "property": "ConfigurationArn" + } + }, + "AWS::CloudFormation::HookVersion": { + "refReturns": { + "property": "Arn" + } + }, + "AWS::CloudFormation::Macro": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::CloudFormation::ModuleDefaultVersion": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::CloudFormation::ModuleVersion": { + "refReturns": { + "property": "Arn" + } + }, + "AWS::CloudFormation::Publisher": { + "refReturns": { + "property": "PublisherId", + "heuristic": "RefReturnsID" + } + }, + "AWS::CloudFormation::ResourceDefaultVersion": { + "refReturns": { + "property": "Arn" + } + }, + "AWS::CloudFormation::ResourceVersion": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::CloudFront::CachePolicy": { + "refReturns": { + "property": "Id" + } + }, + "AWS::CloudFront::CloudFrontOriginAccessIdentity": { + "refReturns": { + "property": "Id" + } + }, + "AWS::CloudFront::Distribution": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::CloudFront::KeyGroup": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::CloudFront::OriginAccessControl": { + "refReturns": { + "property": "Id" + } + }, + "AWS::CloudFront::OriginRequestPolicy": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::CloudFront::PublicKey": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::CloudFront::RealtimeLogConfig": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::CloudFront::ResponseHeadersPolicy": { + "refReturns": { + "property": "Id" + } + }, + "AWS::CloudFront::StreamingDistribution": { + "refReturns": { + "property": "Id" + } + }, + "AWS::CloudTrail::Channel": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::CloudTrail::EventDataStore": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::CloudTrail::Trail": { + "refReturns": { + "property": "TrailName" + } + }, + "AWS::CloudWatch::Alarm": { + "refReturns": { + "property": "AlarmName", + "heuristic": "RefReturnsName" + } + }, + "AWS::CloudWatch::CompositeAlarm": { + "refReturns": { + "property": "AlarmName" + } + }, + "AWS::CloudWatch::Dashboard": { + "refReturns": { + "property": "DashboardName", + "heuristic": "RefReturnsName" + } + }, + "AWS::CloudWatch::MetricStream": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::CodeArtifact::Repository": { + "refReturns": { + "property": "Arn" + } + }, + "AWS::CodeDeploy::DeploymentConfig": { + "refReturns": { + "property": "DeploymentConfigName" + } + }, + "AWS::CodeGuruProfiler::ProfilingGroup": { + "refReturns": { + "property": "ProfilingGroupName", + "heuristic": "RefReturnsName" + } + }, + "AWS::CodePipeline::Pipeline": { + "refReturns": { + "property": "Name" + } + }, + "AWS::CodePipeline::Webhook": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::CodeStarConnections::Connection": { + "refReturns": { + "property": "ConnectionArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::CodeStarNotifications::NotificationRule": { + "refReturns": { + "property": "Arn" + } + }, + "AWS::Cognito::IdentityPool": { + "refReturns": { + "property": "Id" + } + }, + "AWS::Cognito::IdentityPoolRoleAttachment": { + "refReturns": { + "property": "IdentityPoolId" + } + }, + "AWS::Cognito::UserPool": { + "refReturns": { + "property": "UserPoolId", + "heuristic": "RefReturnsID" + } + }, + "AWS::Cognito::UserPoolClient": { + "refReturns": { + "property": "ClientId" + } + }, + "AWS::Cognito::UserPoolResourceServer": { + "refReturns": { + "property": "Identifier" + } + }, + "AWS::Comprehend::DocumentClassifier": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::Comprehend::Flywheel": { + "refReturns": { + "property": "Arn" + } + }, + "AWS::Config::ConfigRule": { + "refReturns": { + "property": "ConfigRuleName", + "heuristic": "RefReturnsName" + } + }, + "AWS::Config::ConfigurationRecorder": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::Config::ConformancePack": { + "refReturns": { + "property": "ConformancePackName", + "heuristic": "RefReturnsName" + } + }, + "AWS::Config::DeliveryChannel": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::Config::OrganizationConformancePack": { + "refReturns": { + "property": "OrganizationConformancePackName", + "heuristic": "RefReturnsName" + } + }, + "AWS::Connect::ContactFlow": { + "refReturns": { + "property": "Name" + } + }, + "AWS::Connect::ContactFlowModule": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::Connect::EvaluationForm": { + "refReturns": { + "property": "Title" + } + }, + "AWS::Connect::Instance": { + "refReturns": { + "property": "Id" + } + }, + "AWS::Connect::Prompt": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::Connect::Queue": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::Connect::QuickConnect": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::Connect::RoutingProfile": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::Connect::Rule": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::Connect::TrafficDistributionGroup": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::Connect::UserHierarchyGroup": { + "refReturns": { + "property": "Name" + } + }, + "AWS::ConnectCampaigns::Campaign": { + "refReturns": { + "property": "Name" + } + }, + "AWS::DAX::Cluster": { + "refReturns": { + "property": "ClusterName", + "heuristic": "RefReturnsName" + } + }, + "AWS::DAX::ParameterGroup": { + "refReturns": { + "property": "ParameterGroupName" + } + }, + "AWS::DAX::SubnetGroup": { + "refReturns": { + "property": "SubnetGroupName" + } + }, + "AWS::DLM::LifecyclePolicy": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::DataBrew::Dataset": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::DataBrew::Job": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::DataBrew::Project": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::DataBrew::Recipe": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::DataBrew::Schedule": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::DataPipeline::Pipeline": { + "refReturns": { + "property": "PipelineId", + "heuristic": "RefReturnsID" + } + }, + "AWS::DataSync::LocationAzureBlob": { + "refReturns": { + "property": "LocationArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::DataSync::LocationEFS": { + "refReturns": { + "property": "LocationArn" + } + }, + "AWS::DataSync::LocationFSxLustre": { + "refReturns": { + "property": "LocationArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::DataSync::LocationFSxONTAP": { + "refReturns": { + "property": "LocationArn" + } + }, + "AWS::DataSync::LocationFSxOpenZFS": { + "refReturns": { + "property": "LocationArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::DataSync::LocationFSxWindows": { + "refReturns": { + "property": "LocationArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::DataSync::LocationHDFS": { + "refReturns": { + "property": "LocationArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::DataSync::LocationNFS": { + "refReturns": { + "property": "LocationArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::DataSync::StorageSystem": { + "refReturns": { + "property": "StorageSystemArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::DataSync::Task": { + "refReturns": { + "property": "TaskArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::Detective::Graph": { + "refReturns": { + "property": "Arn" + } + }, + "AWS::DevOpsGuru::LogAnomalyDetectionIntegration": { + "refReturns": { + "property": "AccountId" + } + }, + "AWS::DeviceFarm::Project": { + "refReturns": { + "notSupported": true + } + }, + "AWS::DeviceFarm::TestGridProject": { + "refReturns": { + "notSupported": true + } + }, + "AWS::DirectoryService::SimpleAD": { + "refReturns": { + "property": "DirectoryId" + } + }, + "AWS::DocDB::DBClusterParameterGroup": { + "refReturns": { + "property": "Name" + } + }, + "AWS::DocDB::DBSubnetGroup": { + "refReturns": { + "property": "DBSubnetGroupName", + "heuristic": "RefReturnsName" + } + }, + "AWS::DynamoDB::Table": { + "refReturns": { + "property": "TableName", + "heuristic": "RefReturnsName" + } + }, + "AWS::EC2::CapacityReservation": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::CapacityReservationFleet": { + "refReturns": { + "property": "CapacityReservationFleetId", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::CarrierGateway": { + "refReturns": { + "property": "CarrierGatewayId", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::ClientVpnEndpoint": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::ClientVpnTargetNetworkAssociation": { + "refReturns": { + "property": "Id" + } + }, + "AWS::EC2::CustomerGateway": { + "refReturns": { + "property": "CustomerGatewayId", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::DHCPOptions": { + "refReturns": { + "property": "DhcpOptionsId" + } + }, + "AWS::EC2::EIP": { + "refReturns": { + "property": "PublicIp" + } + }, + "AWS::EC2::EIPAssociation": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::EgressOnlyInternetGateway": { + "refReturns": { + "property": "Id" + } + }, + "AWS::EC2::FlowLog": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::Host": { + "refReturns": { + "property": "HostId", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::IPAM": { + "refReturns": { + "property": "IpamId" + } + }, + "AWS::EC2::IPAMPool": { + "refReturns": { + "property": "IpamPoolId" + } + }, + "AWS::EC2::InstanceConnectEndpoint": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::InternetGateway": { + "refReturns": { + "property": "InternetGatewayId", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::LaunchTemplate": { + "refReturns": { + "property": "LaunchTemplateId", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::LocalGatewayRouteTable": { + "refReturns": { + "property": "LocalGatewayRouteTableId", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::LocalGatewayRouteTableVirtualInterfaceGroupAssociation": { + "refReturns": { + "property": "LocalGatewayRouteTableVirtualInterfaceGroupAssociationId", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::NatGateway": { + "refReturns": { + "property": "NatGatewayId", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::NetworkAcl": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::NetworkAclEntry": { + "refReturns": { + "property": "Id" + } + }, + "AWS::EC2::NetworkInsightsAccessScope": { + "refReturns": { + "property": "NetworkInsightsAccessScopeId", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::NetworkInsightsAccessScopeAnalysis": { + "refReturns": { + "property": "NetworkInsightsAccessScopeAnalysisId", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::NetworkInsightsAnalysis": { + "refReturns": { + "property": "NetworkInsightsAnalysisId", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::NetworkInsightsPath": { + "refReturns": { + "property": "NetworkInsightsPathId" + } + }, + "AWS::EC2::NetworkInterface": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::PrefixList": { + "refReturns": { + "property": "PrefixListId", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::Route": { + "refReturns": { + "properties": [ + "RouteTableId", + "CidrBlock" + ], + "delimiter": "|" + } + }, + "AWS::EC2::RouteTable": { + "refReturns": { + "property": "RouteTableId", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::SecurityGroup": { + "refReturns": { + "property": "GroupId", + "heuristic": "TODO[pulumi/pulumi-cdk#240]" + } + }, + "AWS::EC2::SpotFleet": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::Subnet": { + "refReturns": { + "property": "SubnetId", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::SubnetCidrBlock": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::SubnetRouteTableAssociation": { + "refReturns": { + "property": "Id" + } + }, + "AWS::EC2::TrafficMirrorFilter": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::TrafficMirrorFilterRule": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::TrafficMirrorSession": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::TrafficMirrorTarget": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::TransitGateway": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::TransitGatewayAttachment": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::TransitGatewayMulticastDomain": { + "refReturns": { + "property": "TransitGatewayMulticastDomainId", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::TransitGatewayRouteTable": { + "refReturns": { + "property": "TransitGatewayRouteTableId", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::TransitGatewayVpcAttachment": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::VPC": { + "refReturns": { + "property": "VpcId" + } + }, + "AWS::EC2::VPCCidrBlock": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::VPCEndpoint": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::VPCEndpointConnectionNotification": { + "refReturns": { + "property": "VPCEndpointConnectionNotificationId" + } + }, + "AWS::EC2::VPCPeeringConnection": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::VPNConnection": { + "refReturns": { + "property": "VpnConnectionId" + } + }, + "AWS::EC2::VPNGateway": { + "refReturns": { + "property": "VPNGatewayId", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::VPNGatewayRoutePropagation": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::VerifiedAccessEndpoint": { + "refReturns": { + "property": "VerifiedAccessEndpointId", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::VerifiedAccessGroup": { + "refReturns": { + "property": "VerifiedAccessGroupId" + } + }, + "AWS::EC2::VerifiedAccessInstance": { + "refReturns": { + "property": "VerifiedAccessInstanceId", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::VerifiedAccessTrustProvider": { + "refReturns": { + "property": "VerifiedAccessTrustProviderId", + "heuristic": "RefReturnsID" + } + }, + "AWS::EC2::Volume": { + "refReturns": { + "property": "VolumeId" + } + }, + "AWS::ECR::PublicRepository": { + "refReturns": { + "property": "RepositoryName" + } + }, + "AWS::ECR::Repository": { + "refReturns": { + "property": "RepositoryName", + "heuristic": "RefReturnsName" + } + }, + "AWS::ECS::CapacityProvider": { + "refReturns": { + "property": "Name" + } + }, + "AWS::ECS::Cluster": { + "refReturns": { + "property": "ClusterName", + "heuristic": "RefReturnsName" + } + }, + "AWS::ECS::Service": { + "refReturns": { + "property": "ServiceArn" + } + }, + "AWS::ECS::TaskDefinition": { + "refReturns": { + "property": "TaskDefinitionArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::EFS::AccessPoint": { + "refReturns": { + "property": "AccessPointId", + "heuristic": "RefReturnsID" + } + }, + "AWS::EFS::FileSystem": { + "refReturns": { + "property": "FileSystemId", + "heuristic": "RefReturnsID" + } + }, + "AWS::EFS::MountTarget": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::EKS::Addon": { + "refReturns": { + "property": "AddonName", + "heuristic": "RefReturnsName" + } + }, + "AWS::EKS::Cluster": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::EKS::FargateProfile": { + "refReturns": { + "property": "FargateProfileName", + "heuristic": "RefReturnsName" + } + }, + "AWS::EKS::IdentityProviderConfig": { + "refReturns": { + "property": "IdentityProviderConfigName", + "heuristic": "RefReturnsName" + } + }, + "AWS::EKS::Nodegroup": { + "refReturns": { + "property": "NodegroupName", + "heuristic": "RefReturnsName" + } + }, + "AWS::EMR::Cluster": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::EMR::InstanceFleetConfig": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::EMR::InstanceGroupConfig": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::EMR::SecurityConfiguration": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::EMR::Step": { + "refReturns": { + "property": "Id" + } + }, + "AWS::EMR::Studio": { + "refReturns": { + "property": "StudioId", + "heuristic": "RefReturnsID" + } + }, + "AWS::EMRContainers::VirtualCluster": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::EMRServerless::Application": { + "refReturns": { + "property": "ApplicationId", + "heuristic": "RefReturnsID" + } + }, + "AWS::ElastiCache::SubnetGroup": { + "refReturns": { + "property": "CacheSubnetGroupName" + } + }, + "AWS::ElasticLoadBalancingV2::Listener": { + "refReturns": { + "property": "ListenerArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::ElasticLoadBalancingV2::ListenerRule": { + "refReturns": { + "property": "RuleArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::ElasticLoadBalancingV2::LoadBalancer": { + "refReturns": { + "property": "LoadBalancerArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::ElasticLoadBalancingV2::TargetGroup": { + "refReturns": { + "property": "TargetGroupArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::Events::ApiDestination": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::Events::Archive": { + "refReturns": { + "property": "ArchiveName", + "heuristic": "RefReturnsName" + } + }, + "AWS::Events::Connection": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::Events::EventBusPolicy": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::Events::Rule": { + "refReturns": { + "property": "Name" + } + }, + "AWS::Evidently::Experiment": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::Evidently::Feature": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::Evidently::Launch": { + "refReturns": { + "property": "Arn" + } + }, + "AWS::Evidently::Project": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::Evidently::Segment": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::FIS::ExperimentTemplate": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::FSx::FileSystem": { + "refReturns": { + "property": "Id" + } + }, + "AWS::FSx::Snapshot": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::FSx::StorageVirtualMachine": { + "refReturns": { + "property": "StorageVirtualMachineId", + "heuristic": "RefReturnsID" + } + }, + "AWS::FSx::Volume": { + "refReturns": { + "property": "VolumeId", + "heuristic": "RefReturnsID" + } + }, + "AWS::FinSpace::Environment": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::Forecast::Dataset": { + "refReturns": { + "property": "DatasetName", + "heuristic": "RefReturnsName" + } + }, + "AWS::FraudDetector::Detector": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::FraudDetector::EntityType": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::FraudDetector::EventType": { + "refReturns": { + "property": "Arn" + } + }, + "AWS::FraudDetector::Label": { + "refReturns": { + "property": "Arn" + } + }, + "AWS::FraudDetector::Outcome": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::FraudDetector::Variable": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::GameLift::Alias": { + "refReturns": { + "property": "AliasId", + "heuristic": "RefReturnsID" + } + }, + "AWS::GameLift::Build": { + "refReturns": { + "property": "BuildId", + "heuristic": "RefReturnsID" + } + }, + "AWS::GameLift::Fleet": { + "refReturns": { + "property": "FleetId", + "heuristic": "RefReturnsID" + } + }, + "AWS::GameLift::GameSessionQueue": { + "refReturns": { + "property": "Name" + } + }, + "AWS::GameLift::MatchmakingConfiguration": { + "refReturns": { + "property": "Name" + } + }, + "AWS::GameLift::MatchmakingRuleSet": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::GlobalAccelerator::Accelerator": { + "refReturns": { + "property": "AcceleratorArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::GlobalAccelerator::EndpointGroup": { + "refReturns": { + "property": "EndpointGroupArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::GlobalAccelerator::Listener": { + "refReturns": { + "property": "ListenerArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::Glue::Connection": { + "refReturns": { + "property": "Id" + } + }, + "AWS::Glue::Crawler": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::Glue::Database": { + "refReturns": { + "property": "DatabaseName", + "heuristic": "RefReturnsName" + } + }, + "AWS::Glue::Job": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::Glue::MLTransform": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::Glue::Table": { + "refReturns": { + "property": "CatalogId" + } + }, + "AWS::Glue::Trigger": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::Glue::Workflow": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::Grafana::Workspace": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::Greengrass::ConnectorDefinition": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::Greengrass::CoreDefinition": { + "refReturns": { + "property": "Id" + } + }, + "AWS::Greengrass::DeviceDefinition": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::Greengrass::FunctionDefinition": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::Greengrass::Group": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::Greengrass::LoggerDefinition": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::Greengrass::ResourceDefinition": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::Greengrass::SubscriptionDefinition": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::GreengrassV2::ComponentVersion": { + "refReturns": { + "property": "Arn" + } + }, + "AWS::GroundStation::Config": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::GuardDuty::Detector": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::GuardDuty::Filter": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::GuardDuty::IPSet": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::GuardDuty::Master": { + "refReturns": { + "property": "MasterId", + "heuristic": "RefReturnsID" + } + }, + "AWS::GuardDuty::Member": { + "refReturns": { + "property": "MemberId", + "heuristic": "RefReturnsID" + } + }, + "AWS::GuardDuty::ThreatIntelSet": { + "refReturns": { + "property": "Id" + } + }, + "AWS::IAM::InstanceProfile": { + "refReturns": { + "property": "InstanceProfileName", + "heuristic": "RefReturnsName" + } + }, + "AWS::IAM::ManagedPolicy": { + "refReturns": { + "property": "PolicyArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::IAM::OIDCProvider": { + "refReturns": { + "property": "Arn" + } + }, + "AWS::IAM::Role": { + "refReturns": { + "property": "RoleName" + } + }, + "AWS::IAM::RolePolicy": { + "refReturns": { + "properties": [ + "PolicyName", + "RoleName" + ], + "delimiter": "|" + } + }, + "AWS::IAM::SAMLProvider": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::IVS::Channel": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::IVS::PlaybackKeyPair": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::IVS::RecordingConfiguration": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::IVS::StreamKey": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::IVSChat::LoggingConfiguration": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::IVSChat::Room": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::ImageBuilder::Component": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::ImageBuilder::ContainerRecipe": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::ImageBuilder::DistributionConfiguration": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::ImageBuilder::Image": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::ImageBuilder::ImagePipeline": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::ImageBuilder::ImageRecipe": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::ImageBuilder::InfrastructureConfiguration": { + "refReturns": { + "property": "Arn" + } + }, + "AWS::Inspector::AssessmentTarget": { + "refReturns": { + "property": "ResourceGroupArn" + } + }, + "AWS::Inspector::AssessmentTemplate": { + "refReturns": { + "property": "AssessmentTargetArn" + } + }, + "AWS::Inspector::ResourceGroup": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::InspectorV2::Filter": { + "refReturns": { + "property": "Arn" + } + }, + "AWS::IoT::Authorizer": { + "refReturns": { + "property": "AuthorizerName", + "heuristic": "RefReturnsName" + } + }, + "AWS::IoT::BillingGroup": { + "refReturns": { + "property": "Id" + } + }, + "AWS::IoT::CACertificate": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::IoT::Certificate": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::IoT::Dimension": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::IoT::DomainConfiguration": { + "refReturns": { + "property": "DomainConfigurationName", + "heuristic": "RefReturnsName" + } + }, + "AWS::IoT::Policy": { + "refReturns": { + "property": "PolicyName", + "heuristic": "RefReturnsName" + } + }, + "AWS::IoT::ScheduledAudit": { + "refReturns": { + "property": "ScheduledAuditName", + "heuristic": "RefReturnsName" + } + }, + "AWS::IoT::SecurityProfile": { + "refReturns": { + "property": "SecurityProfileName", + "heuristic": "RefReturnsName" + } + }, + "AWS::IoT::Thing": { + "refReturns": { + "property": "ThingName", + "heuristic": "RefReturnsName" + } + }, + "AWS::IoT::ThingType": { + "refReturns": { + "property": "Id" + } + }, + "AWS::IoT::TopicRule": { + "refReturns": { + "property": "RuleName" + } + }, + "AWS::IoTEvents::AlarmModel": { + "refReturns": { + "property": "AlarmModelName", + "heuristic": "RefReturnsName" + } + }, + "AWS::IoTEvents::DetectorModel": { + "refReturns": { + "property": "DetectorModelName", + "heuristic": "RefReturnsName" + } + }, + "AWS::IoTEvents::Input": { + "refReturns": { + "property": "InputName", + "heuristic": "RefReturnsName" + } + }, + "AWS::IoTSiteWise::AssetModel": { + "refReturns": { + "property": "AssetModelId" + } + }, + "AWS::IoTWireless::Destination": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::IoTWireless::DeviceProfile": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::IoTWireless::ServiceProfile": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::IoTWireless::WirelessDevice": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::IoTWireless::WirelessDeviceImportTask": { + "refReturns": { + "property": "Id" + } + }, + "AWS::IoTWireless::WirelessGateway": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::KMS::Alias": { + "refReturns": { + "property": "AliasName" + } + }, + "AWS::KMS::Key": { + "refReturns": { + "property": "KeyId", + "heuristic": "RefReturnsID" + } + }, + "AWS::Kendra::DataSource": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::Kendra::Index": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::KendraRanking::ExecutionPlan": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::Kinesis::Stream": { + "refReturns": { + "property": "Name" + } + }, + "AWS::LakeFormation::PrincipalPermissions": { + "refReturns": { + "properties": [ + "PrincipalIdentifier", + "ResourceIdentifier" + ], + "delimiter": "|" + } + }, + "AWS::Lambda::Alias": { + "refReturns": { + "property": "AliasArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::Lambda::EventSourceMapping": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::Lambda::Function": { + "refReturns": { + "property": "FunctionName" + } + }, + "AWS::Lambda::LayerVersion": { + "refReturns": { + "property": "LayerVersionArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::Lambda::Version": { + "refReturns": { + "property": "FunctionArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::Lightsail::Certificate": { + "refReturns": { + "property": "CertificateName" + } + }, + "AWS::Location::Map": { + "refReturns": { + "property": "MapName", + "heuristic": "RefReturnsName" + } + }, + "AWS::Location::PlaceIndex": { + "refReturns": { + "property": "IndexName" + } + }, + "AWS::Location::Tracker": { + "refReturns": { + "property": "TrackerName", + "heuristic": "RefReturnsName" + } + }, + "AWS::Logs::Destination": { + "refReturns": { + "property": "DestinationName", + "heuristic": "RefReturnsName" + } + }, + "AWS::Logs::LogGroup": { + "refReturns": { + "property": "LogGroupName", + "heuristic": "RefReturnsName" + } + }, + "AWS::Logs::LogStream": { + "refReturns": { + "property": "LogStreamName", + "heuristic": "RefReturnsName" + } + }, + "AWS::Logs::QueryDefinition": { + "refReturns": { + "property": "QueryDefinitionId", + "heuristic": "RefReturnsID" + } + }, + "AWS::LookoutMetrics::Alert": { + "refReturns": { + "property": "AlertName", + "heuristic": "RefReturnsName" + } + }, + "AWS::LookoutMetrics::AnomalyDetector": { + "refReturns": { + "property": "AnomalyDetectorName", + "heuristic": "RefReturnsName" + } + }, + "AWS::LookoutVision::Project": { + "refReturns": { + "property": "ProjectName", + "heuristic": "RefReturnsName" + } + }, + "AWS::MSK::ClusterPolicy": { + "refReturns": { + "property": "ClusterArn" + } + }, + "AWS::MSK::VpcConnection": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::Macie::AllowList": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::Macie::CustomDataIdentifier": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::Macie::FindingsFilter": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::ManagedBlockchain::Accessor": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::ManagedBlockchain::Member": { + "refReturns": { + "property": "MemberId", + "heuristic": "RefReturnsID" + } + }, + "AWS::ManagedBlockchain::Node": { + "refReturns": { + "property": "NodeId", + "heuristic": "RefReturnsID" + } + }, + "AWS::MediaConnect::Bridge": { + "refReturns": { + "property": "BridgeArn" + } + }, + "AWS::MediaConnect::BridgeOutput": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::MediaConnect::BridgeSource": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::MediaConnect::Flow": { + "refReturns": { + "property": "FlowArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::MediaConnect::FlowEntitlement": { + "refReturns": { + "property": "EntitlementArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::MediaConnect::FlowOutput": { + "refReturns": { + "property": "OutputArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::MediaConnect::FlowSource": { + "refReturns": { + "property": "SourceArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::MediaConnect::FlowVpcInterface": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::MediaConnect::Gateway": { + "refReturns": { + "property": "GatewayArn" + } + }, + "AWS::MediaConvert::Queue": { + "refReturns": { + "property": "Name" + } + }, + "AWS::MediaLive::Channel": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::MediaPackage::PackagingGroup": { + "refReturns": { + "property": "Id" + } + }, + "AWS::MediaStore::Container": { + "refReturns": { + "property": "ContainerName" + } + }, + "AWS::Neptune::DBClusterParameterGroup": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::Neptune::DBInstance": { + "refReturns": { + "property": "Id" + } + }, + "AWS::Neptune::DBParameterGroup": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::Neptune::DBSubnetGroup": { + "refReturns": { + "property": "DBSubnetGroupName", + "heuristic": "RefReturnsName" + } + }, + "AWS::NetworkFirewall::Firewall": { + "refReturns": { + "property": "FirewallArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::NetworkFirewall::FirewallPolicy": { + "refReturns": { + "property": "FirewallPolicyArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::NetworkFirewall::LoggingConfiguration": { + "refReturns": { + "property": "FirewallArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::NetworkFirewall::RuleGroup": { + "refReturns": { + "property": "RuleGroupArn" + } + }, + "AWS::NetworkManager::CoreNetwork": { + "refReturns": { + "property": "CoreNetworkId", + "heuristic": "RefReturnsID" + } + }, + "AWS::NetworkManager::Device": { + "refReturns": { + "property": "DeviceId", + "heuristic": "RefReturnsID" + } + }, + "AWS::NetworkManager::GlobalNetwork": { + "refReturns": { + "property": "Id" + } + }, + "AWS::NetworkManager::Link": { + "refReturns": { + "property": "LinkId", + "heuristic": "RefReturnsID" + } + }, + "AWS::NetworkManager::Site": { + "refReturns": { + "properties": [ + "GlobalNetworkId", + "SiteId" + ], + "delimiter": "|" + } + }, + "AWS::NetworkManager::TransitGatewayRouteTableAttachment": { + "refReturns": { + "property": "AttachmentId" + } + }, + "AWS::Oam::Link": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::Oam::Sink": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::OpenSearchServerless::AccessPolicy": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::OpenSearchServerless::Collection": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::OpenSearchServerless::SecurityConfig": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::OpenSearchServerless::SecurityPolicy": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::OpenSearchServerless::VpcEndpoint": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::OpsWorks::App": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::OpsWorks::Layer": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::OpsWorks::Stack": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::OpsWorks::Volume": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::Organizations::OrganizationalUnit": { + "refReturns": { + "property": "Id" + } + }, + "AWS::Personalize::Dataset": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::Personalize::DatasetGroup": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::Personalize::Schema": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::Personalize::Solution": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::Pinpoint::APNSChannel": { + "refReturns": { + "property": "ApplicationId" + } + }, + "AWS::Pinpoint::EmailTemplate": { + "refReturns": { + "property": "TemplateName" + } + }, + "AWS::PinpointEmail::ConfigurationSet": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::PinpointEmail::Identity": { + "refReturns": { + "property": "Name" + } + }, + "AWS::Pipes::Pipe": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::Proton::EnvironmentAccountConnection": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::Proton::EnvironmentTemplate": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::Proton::ServiceTemplate": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::QLDB::Ledger": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::RAM::Permission": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::RDS::DBClusterParameterGroup": { + "refReturns": { + "property": "DBClusterParameterGroupName", + "heuristic": "RefReturnsName" + } + }, + "AWS::RDS::DBInstance": { + "refReturns": { + "property": "DBInstanceIdentifier" + } + }, + "AWS::RDS::DBParameterGroup": { + "refReturns": { + "property": "DBParameterGroupName", + "heuristic": "RefReturnsName" + } + }, + "AWS::RDS::DBProxy": { + "refReturns": { + "property": "DBProxyName", + "heuristic": "RefReturnsName" + } + }, + "AWS::RDS::DBProxyEndpoint": { + "refReturns": { + "property": "DBProxyEndpointName", + "heuristic": "RefReturnsName" + } + }, + "AWS::RDS::DBProxyTargetGroup": { + "refReturns": { + "property": "TargetGroupArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::RDS::DBSubnetGroup": { + "refReturns": { + "property": "DBSubnetGroupName", + "heuristic": "RefReturnsName" + } + }, + "AWS::RDS::OptionGroup": { + "refReturns": { + "property": "OptionGroupName", + "heuristic": "RefReturnsName" + } + }, + "AWS::RUM::AppMonitor": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::Redshift::Cluster": { + "refReturns": { + "property": "ClusterIdentifier" + } + }, + "AWS::Redshift::ClusterSubnetGroup": { + "refReturns": { + "property": "ClusterSubnetGroupName" + } + }, + "AWS::Redshift::ScheduledAction": { + "refReturns": { + "property": "ScheduledActionName", + "heuristic": "RefReturnsName" + } + }, + "AWS::Rekognition::Collection": { + "refReturns": { + "property": "CollectionId", + "heuristic": "RefReturnsID" + } + }, + "AWS::Rekognition::Project": { + "refReturns": { + "property": "ProjectName", + "heuristic": "RefReturnsName" + } + }, + "AWS::Rekognition::StreamProcessor": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::ResilienceHub::ResiliencyPolicy": { + "refReturns": { + "property": "PolicyArn" + } + }, + "AWS::ResourceExplorer2::Index": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::ResourceExplorer2::View": { + "refReturns": { + "property": "ViewArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::RoboMaker::Fleet": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::RoboMaker::Robot": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::RoboMaker::RobotApplication": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::RoboMaker::RobotApplicationVersion": { + "refReturns": { + "property": "Arn" + } + }, + "AWS::RoboMaker::SimulationApplication": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::RoboMaker::SimulationApplicationVersion": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::Route53::CidrCollection": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::Route53::DNSSEC": { + "refReturns": { + "property": "HostedZoneId" + } + }, + "AWS::Route53::HealthCheck": { + "refReturns": { + "property": "HealthCheckId", + "heuristic": "RefReturnsID" + } + }, + "AWS::Route53::HostedZone": { + "refReturns": { + "property": "Id" + } + }, + "AWS::Route53RecoveryControl::RoutingControl": { + "refReturns": { + "property": "RoutingControlArn" + } + }, + "AWS::Route53RecoveryReadiness::ResourceSet": { + "refReturns": { + "property": "ResourceSetName" + } + }, + "AWS::Route53Resolver::FirewallRuleGroupAssociation": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::Route53Resolver::ResolverConfig": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::Route53Resolver::ResolverDNSSECConfig": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::Route53Resolver::ResolverQueryLoggingConfig": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::Route53Resolver::ResolverQueryLoggingConfigAssociation": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::S3::AccessPoint": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::S3::Bucket": { + "refReturns": { + "property": "BucketName" + } + }, + "AWS::S3::MultiRegionAccessPoint": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::S3::MultiRegionAccessPointPolicy": { + "refReturns": { + "property": "MrapName" + } + }, + "AWS::S3Outposts::AccessPoint": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::S3Outposts::Endpoint": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::SES::ConfigurationSet": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::SES::ContactList": { + "refReturns": { + "property": "ContactListName" + } + }, + "AWS::SES::ReceiptRuleSet": { + "refReturns": { + "property": "RuleSetName" + } + }, + "AWS::SNS::Topic": { + "refReturns": { + "property": "TopicArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::SQS::Queue": { + "refReturns": { + "property": "QueueUrl" + } + }, + "AWS::SSM::Document": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::SSM::MaintenanceWindow": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::SSM::MaintenanceWindowTarget": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::SSM::MaintenanceWindowTask": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::SSM::Parameter": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::SSM::PatchBaseline": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::SSMContacts::Contact": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::SSMContacts::ContactChannel": { + "refReturns": { + "property": "Arn" + } + }, + "AWS::SSO::Assignment": { + "refReturns": { + "properties": [ + "InstanceArn", + "TargetId", + "TargetType", + "PermissionSetArn", + "PrincipalType", + "PrincipalId" + ], + "delimiter": "|" + } + }, + "AWS::SageMaker::App": { + "refReturns": { + "property": "AppName", + "heuristic": "RefReturnsName" + } + }, + "AWS::SageMaker::AppImageConfig": { + "refReturns": { + "property": "AppImageConfigName", + "heuristic": "RefReturnsName" + } + }, + "AWS::SageMaker::Domain": { + "refReturns": { + "property": "DomainId", + "heuristic": "RefReturnsID" + } + }, + "AWS::SageMaker::Endpoint": { + "refReturns": { + "property": "EndpointArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::SageMaker::ImageVersion": { + "refReturns": { + "property": "ImageVersionArn" + } + }, + "AWS::SageMaker::ModelCard": { + "refReturns": { + "property": "ModelCardName", + "heuristic": "RefReturnsName" + } + }, + "AWS::SageMaker::MonitoringSchedule": { + "refReturns": { + "property": "MonitoringScheduleArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::SageMaker::UserProfile": { + "refReturns": { + "property": "UserProfileName", + "heuristic": "RefReturnsName" + } + }, + "AWS::Scheduler::Schedule": { + "refReturns": { + "property": "Name" + } + }, + "AWS::SecretsManager::Secret": { + "refReturns": { + "property": "Id" + } + }, + "AWS::SecurityHub::Hub": { + "refReturns": { + "property": "ARN" + } + }, + "AWS::SecurityHub::Standard": { + "refReturns": { + "property": "StandardsSubscriptionArn" + } + }, + "AWS::ServiceCatalog::CloudFormationProduct": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::ServiceCatalog::LaunchNotificationConstraint": { + "refReturns": { + "property": "Id" + } + }, + "AWS::ServiceCatalog::LaunchTemplateConstraint": { + "refReturns": { + "property": "Id" + } + }, + "AWS::ServiceCatalog::PortfolioShare": { + "refReturns": { + "property": "Id" + } + }, + "AWS::ServiceDiscovery::HttpNamespace": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::ServiceDiscovery::PrivateDnsNamespace": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::ServiceDiscovery::PublicDnsNamespace": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::Shield::Protection": { + "refReturns": { + "property": "ProtectionArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::Shield::ProtectionGroup": { + "refReturns": { + "property": "ProtectionGroupArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::SimSpaceWeaver::Simulation": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::StepFunctions::StateMachine": { + "refReturns": { + "property": "Arn" + } + }, + "AWS::SupportApp::SlackWorkspaceConfiguration": { + "refReturns": { + "property": "TeamId" + } + }, + "AWS::Synthetics::Canary": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::Synthetics::Group": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::Timestream::Database": { + "refReturns": { + "property": "DatabaseName", + "heuristic": "RefReturnsName" + } + }, + "AWS::Timestream::ScheduledQuery": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::Transfer::Server": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::VpcLattice::AccessLogSubscription": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::VpcLattice::Listener": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::VpcLattice::ResourcePolicy": { + "refReturns": { + "property": "ResourceArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::VpcLattice::Rule": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::VpcLattice::Service": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::VpcLattice::ServiceNetwork": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::VpcLattice::ServiceNetworkServiceAssociation": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::VpcLattice::ServiceNetworkVpcAssociation": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::VpcLattice::TargetGroup": { + "refReturns": { + "property": "Arn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::WAF::ByteMatchSet": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::WAF::IPSet": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::WAF::Rule": { + "refReturns": { + "property": "Id" + } + }, + "AWS::WAF::SizeConstraintSet": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::WAF::SqlInjectionMatchSet": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::WAF::WebACL": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::WAF::XssMatchSet": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::WAFRegional::ByteMatchSet": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::WAFRegional::GeoMatchSet": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::WAFRegional::IPSet": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::WAFRegional::RateBasedRule": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::WAFRegional::RegexPatternSet": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::WAFRegional::Rule": { + "refReturns": { + "property": "Id" + } + }, + "AWS::WAFRegional::SizeConstraintSet": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::WAFRegional::SqlInjectionMatchSet": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::WAFRegional::WebACL": { + "refReturns": { + "property": "Name", + "heuristic": "RefReturnsName" + } + }, + "AWS::WAFRegional::XssMatchSet": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + }, + "AWS::WAFv2::IPSet": { + "refReturns": { + "properties": [ + "Name", + "Id", + "Scope" + ], + "delimiter": "|" + } + }, + "AWS::WAFv2::LoggingConfiguration": { + "refReturns": { + "property": "ResourceArn", + "heuristic": "RefReturnsArn" + } + }, + "AWS::WAFv2::RegexPatternSet": { + "refReturns": { + "properties": [ + "Name", + "Id", + "Scope" + ], + "delimiter": "|" + } + }, + "AWS::WAFv2::WebACL": { + "refReturns": { + "properties": [ + "Name", + "Id", + "Scope" + ], + "delimiter": "|" + } + }, + "AWS::Wisdom::Assistant": { + "refReturns": { + "property": "AssistantId", + "heuristic": "RefReturnsID" + } + }, + "AWS::Wisdom::AssistantAssociation": { + "refReturns": { + "property": "AssistantAssociationId", + "heuristic": "RefReturnsID" + } + }, + "AWS::Wisdom::KnowledgeBase": { + "refReturns": { + "property": "KnowledgeBaseId", + "heuristic": "RefReturnsID" + } + }, + "AWS::XRay::Group": { + "refReturns": { + "property": "GroupARN", + "heuristic": "RefReturnsArn" + } + }, + "AWS::XRay::SamplingRule": { + "refReturns": { + "property": "RuleARN", + "heuristic": "RefReturnsArn" + } + }, + "Alexa::ASK::Skill": { + "refReturns": { + "property": "Id", + "heuristic": "RefReturnsID" + } + } + } +} \ No newline at end of file diff --git a/provider/cmd/pulumi-gen-aws-native/main.go b/provider/cmd/pulumi-gen-aws-native/main.go index 1ca0a46e37..d422d05349 100644 --- a/provider/cmd/pulumi-gen-aws-native/main.go +++ b/provider/cmd/pulumi-gen-aws-native/main.go @@ -27,6 +27,7 @@ import ( "github.com/pkg/errors" jsschema "github.com/pulumi/jsschema" "github.com/pulumi/pulumi-aws-native/provider/pkg/metadata" + "github.com/pulumi/pulumi-aws-native/provider/pkg/refdb" "github.com/pulumi/pulumi-aws-native/provider/pkg/schema" pschema "github.com/pulumi/pulumi/pkg/v3/codegen/schema" "github.com/pulumi/pulumi/sdk/v3/go/common/tools" @@ -103,6 +104,7 @@ func main() { fmt.Println("Error reading autonaming overlay file: ", err) return } + refDBFile := filepath.Join(".", "meta", "ref-db.json") switch operation { case "docs": @@ -147,7 +149,12 @@ func main() { fatalf("error reading regions: %v", err) } - packageSpec, meta, reports, err := schema.GatherPackage(supportedTypes, jsonSchemas, false, &semanticsDocument, docsTypes, regions) + refDB := new(refdb.RefDB) + if err := refDB.LoadJSONFile(refDBFile); err != nil { + fatalf("error reading %q", refDBFile) + } + + packageSpec, meta, reports, err := schema.GatherPackage(supportedTypes, jsonSchemas, false, &semanticsDocument, docsTypes, regions, refDB) if err != nil { fatalf("error generating schema: %v", err) } diff --git a/provider/cmd/pulumi-resource-aws-native/metadata.json b/provider/cmd/pulumi-resource-aws-native/metadata.json index 6dbdee3084..68e3eb377f 100644 --- a/provider/cmd/pulumi-resource-aws-native/metadata.json +++ b/provider/cmd/pulumi-resource-aws-native/metadata.json @@ -77,7 +77,10 @@ "type" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:acmpca:Certificate": { "cf": "AWS::ACMPCA::Certificate", @@ -183,7 +186,10 @@ "templateArn", "validity", "validityNotBefore" - ] + ], + "cfRef": { + "notSupported": true + } }, "aws-native:acmpca:CertificateAuthority": { "cf": "AWS::ACMPCA::CertificateAuthority", @@ -307,7 +313,10 @@ "tags" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:acmpca:CertificateAuthorityActivation": { "cf": "AWS::ACMPCA::CertificateAuthorityActivation", @@ -362,7 +371,10 @@ "writeOnly": [ "certificate", "certificateChain" - ] + ], + "cfRef": { + "property": "CertificateAuthorityArn" + } }, "aws-native:acmpca:Permission": { "cf": "AWS::ACMPCA::Permission", @@ -528,7 +540,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:amplify:App": { "cf": "AWS::Amplify::App", @@ -1444,6 +1459,9 @@ }, "irreversibleNames": { "awsId": "Id" + }, + "cfRef": { + "property": "Id" } }, "aws-native:apigateway:ApiKey": { @@ -1550,7 +1568,10 @@ "apiKeyId": "APIKeyId" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "APIKeyId" + } }, "aws-native:apigateway:Authorizer": { "cf": "AWS::ApiGateway::Authorizer", @@ -1661,6 +1682,9 @@ ], "irreversibleNames": { "providerArns": "ProviderARNs" + }, + "cfRef": { + "property": "AuthorizerId" } }, "aws-native:apigateway:BasePathMapping": { @@ -1862,7 +1886,10 @@ "deploymentCanarySettings", "stageDescription", "stageName" - ] + ], + "cfRef": { + "property": "DeploymentId" + } }, "aws-native:apigateway:DocumentationPart": { "cf": "AWS::ApiGateway::DocumentationPart", @@ -1908,7 +1935,10 @@ "createOnly": [ "location", "restApiId" - ] + ], + "cfRef": { + "property": "DocumentationPartId" + } }, "aws-native:apigateway:DocumentationVersion": { "cf": "AWS::ApiGateway::DocumentationVersion", @@ -2509,7 +2539,10 @@ "contentType", "name", "restApiId" - ] + ], + "cfRef": { + "property": "Name" + } }, "aws-native:apigateway:RequestValidator": { "cf": "AWS::ApiGateway::RequestValidator", @@ -2564,7 +2597,10 @@ "createOnly": [ "name", "restApiId" - ] + ], + "cfRef": { + "property": "RequestValidatorId" + } }, "aws-native:apigateway:Resource": { "cf": "AWS::ApiGateway::Resource", @@ -2612,7 +2648,10 @@ "parentId", "pathPart", "restApiId" - ] + ], + "cfRef": { + "property": "ResourceId" + } }, "aws-native:apigateway:RestApi": { "cf": "AWS::ApiGateway::RestApi", @@ -2781,7 +2820,10 @@ "bodyS3Location": "BodyS3Location" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "RestApiId" + } }, "aws-native:apigateway:Stage": { "cf": "AWS::ApiGateway::Stage", @@ -2932,7 +2974,10 @@ "stageName" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "StageName" + } }, "aws-native:apigateway:UsagePlan": { "cf": "AWS::ApiGateway::UsagePlan", @@ -3011,7 +3056,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:apigateway:UsagePlanKey": { "cf": "AWS::ApiGateway::UsagePlanKey", @@ -3062,6 +3110,9 @@ ], "irreversibleNames": { "awsId": "Id" + }, + "cfRef": { + "property": "Id" } }, "aws-native:apigateway:VpcLink": { @@ -3129,7 +3180,10 @@ "targetArns" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "VpcLinkId" + } }, "aws-native:apigatewayv2:Api": { "cf": "AWS::ApiGatewayV2::Api", @@ -3312,7 +3366,10 @@ "bodyS3Location": "BodyS3Location" }, "tagsProperty": "tags", - "tagsStyle": "stringMap" + "tagsStyle": "stringMap", + "cfRef": { + "property": "ApiId" + } }, "aws-native:apigatewayv2:ApiMapping": { "cf": "AWS::ApiGatewayV2::ApiMapping", @@ -3364,7 +3421,10 @@ ], "createOnly": [ "domainName" - ] + ], + "cfRef": { + "property": "ApiMappingId" + } }, "aws-native:apigatewayv2:Authorizer": { "cf": "AWS::ApiGatewayV2::Authorizer", @@ -3480,7 +3540,10 @@ ], "createOnly": [ "apiId" - ] + ], + "cfRef": { + "property": "AuthorizerId" + } }, "aws-native:apigatewayv2:Deployment": { "cf": "AWS::ApiGatewayV2::Deployment", @@ -3526,7 +3589,10 @@ "writeOnly": [ "stageName" ], - "tagsProperty": "tags" + "tagsProperty": "tags", + "cfRef": { + "property": "DeploymentId" + } }, "aws-native:apigatewayv2:DomainName": { "cf": "AWS::ApiGatewayV2::DomainName", @@ -3785,7 +3851,10 @@ ], "createOnly": [ "apiId" - ] + ], + "cfRef": { + "property": "IntegrationId" + } }, "aws-native:apigatewayv2:IntegrationResponse": { "cf": "AWS::ApiGatewayV2::IntegrationResponse", @@ -3863,7 +3932,10 @@ "createOnly": [ "apiId", "integrationId" - ] + ], + "cfRef": { + "property": "IntegrationResponseId" + } }, "aws-native:apigatewayv2:Model": { "cf": "AWS::ApiGatewayV2::Model", @@ -3925,7 +3997,10 @@ ], "createOnly": [ "apiId" - ] + ], + "cfRef": { + "property": "ModelId" + } }, "aws-native:apigatewayv2:Route": { "cf": "AWS::ApiGatewayV2::Route", @@ -4056,7 +4131,10 @@ "writeOnly": [ "authorizerId", "requestParameters" - ] + ], + "cfRef": { + "property": "RouteId" + } }, "aws-native:apigatewayv2:RouteResponse": { "cf": "AWS::ApiGatewayV2::RouteResponse", @@ -4132,7 +4210,10 @@ "createOnly": [ "apiId", "routeId" - ] + ], + "cfRef": { + "property": "RouteResponseId" + } }, "aws-native:apigatewayv2:VpcLink": { "cf": "AWS::ApiGatewayV2::VpcLink", @@ -4207,7 +4288,10 @@ "subnetIds" ], "tagsProperty": "tags", - "tagsStyle": "stringMap" + "tagsStyle": "stringMap", + "cfRef": { + "property": "VpcLinkId" + } }, "aws-native:appconfig:Application": { "cf": "AWS::AppConfig::Application", @@ -4253,7 +4337,10 @@ "sdkName": "name" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "ApplicationId" + } }, "aws-native:appconfig:ConfigurationProfile": { "cf": "AWS::AppConfig::ConfigurationProfile", @@ -4371,7 +4458,10 @@ "type" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "ConfigurationProfileId" + } }, "aws-native:appconfig:DeploymentStrategy": { "cf": "AWS::AppConfig::DeploymentStrategy", @@ -4471,7 +4561,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:appconfig:Environment": { "cf": "AWS::AppConfig::Environment", @@ -4548,7 +4641,10 @@ "applicationId" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "EnvironmentId" + } }, "aws-native:appconfig:Extension": { "cf": "AWS::AppConfig::Extension", @@ -4992,6 +5088,9 @@ ], "irreversibleNames": { "kmsArn": "KMSArn" + }, + "cfRef": { + "property": "ConnectorProfileName" } }, "aws-native:appflow:Flow": { @@ -5123,7 +5222,10 @@ "kmsArn": "KMSArn" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "FlowName" + } }, "aws-native:appintegrations:Application": { "cf": "AWS::AppIntegrations::Application", @@ -5327,7 +5429,10 @@ "sourceUri": "SourceURI" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:appintegrations:EventIntegration": { "cf": "AWS::AppIntegrations::EventIntegration", @@ -5403,7 +5508,10 @@ "name" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:applicationautoscaling:ScalableTarget": { "cf": "AWS::ApplicationAutoScaling::ScalableTarget", @@ -5608,7 +5716,10 @@ "writeOnly": [ "scalingTargetId", "targetTrackingScalingPolicyConfiguration/PredefinedMetricSpecification/ResourceLabel" - ] + ], + "cfRef": { + "property": "Arn" + } }, "aws-native:applicationinsights:Application": { "cf": "AWS::ApplicationInsights::Application", @@ -5765,7 +5876,10 @@ "snsNotificationArn": "SNSNotificationArn" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "ApplicationARN" + } }, "aws-native:applicationsignals:ServiceLevelObjective": { "cf": "AWS::ApplicationSignals::ServiceLevelObjective", @@ -6019,7 +6133,10 @@ "tags" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArrayCreateOnly" + "tagsStyle": "keyValueArrayCreateOnly", + "cfRef": { + "property": "ObservabilityConfigurationName" + } }, "aws-native:apprunner:Service": { "cf": "AWS::AppRunner::Service", @@ -6309,7 +6426,10 @@ "tags" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArrayCreateOnly" + "tagsStyle": "keyValueArrayCreateOnly", + "cfRef": { + "property": "VpcIngressConnectionName" + } }, "aws-native:appstream:AppBlock": { "cf": "AWS::AppStream::AppBlock", @@ -6438,7 +6558,10 @@ "sourceS3Location": "SourceS3Location" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArrayWithAlternateType" + "tagsStyle": "keyValueArrayWithAlternateType", + "cfRef": { + "property": "Arn" + } }, "aws-native:appstream:AppBlockBuilder": { "cf": "AWS::AppStream::AppBlockBuilder", @@ -6830,7 +6953,14 @@ "createOnly": [ "applicationArn", "fleetName" - ] + ], + "cfRef": { + "properties": [ + "FleetName", + "ApplicationArn" + ], + "delimiter": "|" + } }, "aws-native:appstream:DirectoryConfig": { "cf": "AWS::AppStream::DirectoryConfig", @@ -7453,7 +7583,10 @@ "createOnly": [ "certificateArn", "domainName" - ] + ], + "cfRef": { + "property": "DomainName" + } }, "aws-native:appsync:DomainNameApiAssociation": { "cf": "AWS::AppSync::DomainNameApiAssociation", @@ -8167,7 +8300,10 @@ "workspace" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:aps:Scraper": { "cf": "AWS::APS::Scraper", @@ -8314,7 +8450,10 @@ "kmsKeyArn" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:arczonalshift:AutoshiftObserverNotificationStatus": { "cf": "AWS::ARCZonalShift::AutoshiftObserverNotificationStatus", @@ -8452,7 +8591,10 @@ "name" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:athena:DataCatalog": { "cf": "AWS::Athena::DataCatalog", @@ -8525,7 +8667,10 @@ "name" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:athena:NamedQuery": { "cf": "AWS::Athena::NamedQuery", @@ -8597,7 +8742,10 @@ "name", "queryString", "workGroup" - ] + ], + "cfRef": { + "property": "Name" + } }, "aws-native:athena:PreparedStatement": { "cf": "AWS::Athena::PreparedStatement", @@ -8651,7 +8799,10 @@ "createOnly": [ "statementName", "workGroup" - ] + ], + "cfRef": { + "property": "StatementName" + } }, "aws-native:athena:WorkGroup": { "cf": "AWS::Athena::WorkGroup", @@ -8738,7 +8889,10 @@ "workGroupConfigurationUpdates" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:auditmanager:Assessment": { "cf": "AWS::AuditManager::Assessment", @@ -8870,7 +9024,10 @@ "name" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "AssessmentId" + } }, "aws-native:autoscaling:AutoScalingGroup": { "cf": "AWS::AutoScaling::AutoScalingGroup", @@ -9470,6 +9627,9 @@ "irreversibleNames": { "classicLinkVpcId": "ClassicLinkVPCId", "classicLinkVpcSecurityGroups": "ClassicLinkVPCSecurityGroups" + }, + "cfRef": { + "property": "LaunchConfigurationName" } }, "aws-native:autoscaling:LifecycleHook": { @@ -9560,6 +9720,9 @@ "irreversibleNames": { "notificationTargetArn": "NotificationTargetARN", "roleArn": "RoleARN" + }, + "cfRef": { + "property": "LifecycleHookName" } }, "aws-native:autoscaling:ScalingPolicy": { @@ -9758,7 +9921,10 @@ ], "createOnly": [ "autoScalingGroupName" - ] + ], + "cfRef": { + "property": "ScheduledActionName" + } }, "aws-native:autoscaling:WarmPool": { "cf": "AWS::AutoScaling::WarmPool", @@ -10417,7 +10583,10 @@ "lockConfiguration/ChangeableForDays" ], "tagsProperty": "backupVaultTags", - "tagsStyle": "stringMap" + "tagsStyle": "stringMap", + "cfRef": { + "property": "BackupVaultName" + } }, "aws-native:backup:Framework": { "cf": "AWS::Backup::Framework", @@ -10949,7 +11118,10 @@ "username" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArrayCreateOnly" + "tagsStyle": "keyValueArrayCreateOnly", + "cfRef": { + "property": "HypervisorArn" + } }, "aws-native:batch:ComputeEnvironment": { "cf": "AWS::Batch::ComputeEnvironment", @@ -11078,7 +11250,10 @@ "updatePolicy" ], "tagsProperty": "tags", - "tagsStyle": "stringMap" + "tagsStyle": "stringMap", + "cfRef": { + "property": "ComputeEnvironmentArn" + } }, "aws-native:batch:JobDefinition": { "cf": "AWS::Batch::JobDefinition", @@ -11317,7 +11492,10 @@ "tags" ], "tagsProperty": "tags", - "tagsStyle": "stringMap" + "tagsStyle": "stringMap", + "cfRef": { + "property": "JobQueueArn" + } }, "aws-native:batch:SchedulingPolicy": { "cf": "AWS::Batch::SchedulingPolicy", @@ -11369,7 +11547,10 @@ "tags" ], "tagsProperty": "tags", - "tagsStyle": "stringMap" + "tagsStyle": "stringMap", + "cfRef": { + "property": "Arn" + } }, "aws-native:bedrock:Agent": { "cf": "AWS::Bedrock::Agent", @@ -12845,7 +13026,10 @@ "replicationSpecification" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "KeyspaceName" + } }, "aws-native:cassandra:Table": { "cf": "AWS::Cassandra::Table", @@ -13011,7 +13195,10 @@ "replicaSpecifications" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "TableName" + } }, "aws-native:ce:AnomalyMonitor": { "cf": "AWS::CE::AnomalyMonitor", @@ -13277,7 +13464,10 @@ ], "createOnly": [ "name" - ] + ], + "cfRef": { + "property": "Arn" + } }, "aws-native:certificatemanager:Account": { "cf": "AWS::CertificateManager::Account", @@ -13299,7 +13489,10 @@ }, "required": [ "expiryEventsConfiguration" - ] + ], + "cfRef": { + "property": "AccountId" + } }, "aws-native:chatbot:CustomAction": { "cf": "AWS::Chatbot::CustomAction", @@ -13642,7 +13835,10 @@ "slackWorkspaceId" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:cleanrooms:AnalysisTemplate": { "cf": "AWS::CleanRooms::AnalysisTemplate", @@ -13767,7 +13963,10 @@ "source/Text" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "AnalysisTemplateIdentifier" + } }, "aws-native:cleanrooms:Collaboration": { "cf": "AWS::CleanRooms::Collaboration", @@ -14019,7 +14218,10 @@ "tableReference" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:cleanrooms:ConfiguredTableAssociation": { "cf": "AWS::CleanRooms::ConfiguredTableAssociation", @@ -14736,6 +14938,9 @@ "type": "string", "description": "The ID of an existing version of the hook to set as the default." } + }, + "cfRef": { + "property": "Arn" } }, "aws-native:cloudformation:HookTypeConfig": { @@ -14783,7 +14988,10 @@ }, "createOnly": [ "configurationAlias" - ] + ], + "cfRef": { + "property": "ConfigurationArn" + } }, "aws-native:cloudformation:HookVersion": { "cf": "AWS::CloudFormation::HookVersion", @@ -14859,7 +15067,10 @@ ], "writeOnly": [ "schemaHandlerPackage" - ] + ], + "cfRef": { + "property": "Arn" + } }, "aws-native:cloudformation:LambdaHook": { "cf": "AWS::CloudFormation::LambdaHook", @@ -15009,7 +15220,10 @@ "writeOnly": [ "moduleName", "versionId" - ] + ], + "cfRef": { + "property": "Arn" + } }, "aws-native:cloudformation:ModuleVersion": { "cf": "AWS::CloudFormation::ModuleVersion", @@ -15077,7 +15291,10 @@ ], "writeOnly": [ "modulePackage" - ] + ], + "cfRef": { + "property": "Arn" + } }, "aws-native:cloudformation:PublicTypeVersion": { "cf": "AWS::CloudFormation::PublicTypeVersion", @@ -15199,7 +15416,10 @@ "createOnly": [ "acceptTermsAndConditions", "connectionArn" - ] + ], + "cfRef": { + "property": "PublisherId" + } }, "aws-native:cloudformation:ResourceDefaultVersion": { "cf": "AWS::CloudFormation::ResourceDefaultVersion", @@ -15234,6 +15454,9 @@ "type": "string", "description": "The ID of an existing version of the resource to set as the default." } + }, + "cfRef": { + "property": "Arn" } }, "aws-native:cloudformation:ResourceVersion": { @@ -15314,7 +15537,10 @@ ], "writeOnly": [ "schemaHandlerPackage" - ] + ], + "cfRef": { + "property": "Arn" + } }, "aws-native:cloudformation:Stack": { "cf": "AWS::CloudFormation::Stack", @@ -15835,6 +16061,9 @@ ], "irreversibleNames": { "awsId": "Id" + }, + "cfRef": { + "property": "Id" } }, "aws-native:cloudfront:CloudFrontOriginAccessIdentity": { @@ -15865,6 +16094,9 @@ "irreversibleNames": { "awsId": "Id", "s3CanonicalUserId": "S3CanonicalUserId" + }, + "cfRef": { + "property": "Id" } }, "aws-native:cloudfront:ContinuousDeploymentPolicy": { @@ -15939,7 +16171,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:cloudfront:Function": { "cf": "AWS::CloudFront::Function", @@ -16035,6 +16270,9 @@ ], "irreversibleNames": { "awsId": "Id" + }, + "cfRef": { + "property": "Id" } }, "aws-native:cloudfront:KeyValueStore": { @@ -16157,6 +16395,9 @@ ], "irreversibleNames": { "awsId": "Id" + }, + "cfRef": { + "property": "Id" } }, "aws-native:cloudfront:OriginRequestPolicy": { @@ -16186,6 +16427,9 @@ ], "irreversibleNames": { "awsId": "Id" + }, + "cfRef": { + "property": "Id" } }, "aws-native:cloudfront:PublicKey": { @@ -16215,6 +16459,9 @@ ], "irreversibleNames": { "awsId": "Id" + }, + "cfRef": { + "property": "Id" } }, "aws-native:cloudfront:RealtimeLogConfig": { @@ -16282,7 +16529,10 @@ ], "createOnly": [ "name" - ] + ], + "cfRef": { + "property": "Arn" + } }, "aws-native:cloudfront:ResponseHeadersPolicy": { "cf": "AWS::CloudFront::ResponseHeadersPolicy", @@ -16311,6 +16561,9 @@ ], "irreversibleNames": { "awsId": "Id" + }, + "cfRef": { + "property": "Id" } }, "aws-native:cloudtrail:Channel": { @@ -16378,7 +16631,10 @@ "tags" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:cloudtrail:Dashboard": { "cf": "AWS::CloudTrail::Dashboard", @@ -16618,7 +16874,10 @@ "sdkName": "name" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:cloudtrail:ResourcePolicy": { "cf": "AWS::CloudTrail::ResourcePolicy", @@ -16846,7 +17105,10 @@ "s3KeyPrefix": "S3KeyPrefix" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "TrailName" + } }, "aws-native:cloudwatch:Alarm": { "cf": "AWS::CloudWatch::Alarm", @@ -17085,7 +17347,10 @@ "okActions": "OKActions" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "AlarmName" + } }, "aws-native:cloudwatch:CompositeAlarm": { "cf": "AWS::CloudWatch::CompositeAlarm", @@ -17225,7 +17490,10 @@ "okActions": "OKActions" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "AlarmName" + } }, "aws-native:cloudwatch:Dashboard": { "cf": "AWS::CloudWatch::Dashboard", @@ -17258,7 +17526,10 @@ ], "createOnly": [ "dashboardName" - ] + ], + "cfRef": { + "property": "DashboardName" + } }, "aws-native:cloudwatch:MetricStream": { "cf": "AWS::CloudWatch::MetricStream", @@ -17391,7 +17662,10 @@ "tags" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:codeartifact:Domain": { "cf": "AWS::CodeArtifact::Domain", @@ -17661,7 +17935,10 @@ "repositoryName" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:codebuild:Fleet": { "cf": "AWS::CodeBuild::Fleet", @@ -17963,7 +18240,10 @@ "minimumHealthyHosts", "trafficRoutingConfig", "zonalConfig" - ] + ], + "cfRef": { + "property": "DeploymentConfigName" + } }, "aws-native:codeguruprofiler:ProfilingGroup": { "cf": "AWS::CodeGuruProfiler::ProfilingGroup", @@ -18039,7 +18319,10 @@ "profilingGroupName" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "ProfilingGroupName" + } }, "aws-native:codegurureviewer:RepositoryAssociation": { "cf": "AWS::CodeGuruReviewer::RepositoryAssociation", @@ -18404,7 +18687,10 @@ "restartExecutionOnUpdate" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:codestarconnections:Connection": { "cf": "AWS::CodeStarConnections::Connection", @@ -18476,7 +18762,10 @@ "providerType" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "ConnectionArn" + } }, "aws-native:codestarconnections:RepositoryLink": { "cf": "AWS::CodeStarConnections::RepositoryLink", @@ -18781,7 +19070,10 @@ "targetAddress" ], "tagsProperty": "tags", - "tagsStyle": "stringMap" + "tagsStyle": "stringMap", + "cfRef": { + "property": "Arn" + } }, "aws-native:cognito:IdentityPool": { "cf": "AWS::Cognito::IdentityPool", @@ -18933,7 +19225,10 @@ "samlProviderArns": "SamlProviderARNs" }, "tagsProperty": "identityPoolTags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:cognito:IdentityPoolPrincipalTag": { "cf": "AWS::Cognito::IdentityPoolPrincipalTag", @@ -19039,6 +19334,9 @@ ], "irreversibleNames": { "awsId": "Id" + }, + "cfRef": { + "property": "IdentityPoolId" } }, "aws-native:cognito:LogDeliveryConfiguration": { @@ -19358,7 +19656,10 @@ "providerUrl": "ProviderURL" }, "tagsProperty": "userPoolTags", - "tagsStyle": "stringMap" + "tagsStyle": "stringMap", + "cfRef": { + "property": "UserPoolId" + } }, "aws-native:cognito:UserPoolClient": { "cf": "AWS::Cognito::UserPoolClient", @@ -19618,6 +19919,9 @@ "callbackUrls": "CallbackURLs", "defaultRedirectUri": "DefaultRedirectURI", "logoutUrls": "LogoutURLs" + }, + "cfRef": { + "property": "ClientId" } }, "aws-native:cognito:UserPoolDomain": { @@ -19876,7 +20180,10 @@ "createOnly": [ "identifier", "userPoolId" - ] + ], + "cfRef": { + "property": "Identifier" + } }, "aws-native:cognito:UserPoolRiskConfigurationAttachment": { "cf": "AWS::Cognito::UserPoolRiskConfigurationAttachment", @@ -20294,7 +20601,10 @@ "vpcConfig" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:comprehend:Flywheel": { "cf": "AWS::Comprehend::Flywheel", @@ -20399,7 +20709,10 @@ "dataLakeS3Uri": "DataLakeS3Uri" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:configuration:AggregationAuthorization": { "cf": "AWS::Config::AggregationAuthorization", @@ -20550,7 +20863,10 @@ ], "writeOnly": [ "source/CustomPolicyDetails/PolicyText" - ] + ], + "cfRef": { + "property": "ConfigRuleName" + } }, "aws-native:configuration:ConfigurationAggregator": { "cf": "AWS::Config::ConfigurationAggregator", @@ -20706,7 +21022,10 @@ "templateS3Uri": "TemplateS3Uri", "templateSsmDocumentDetails": "TemplateSSMDocumentDetails" }, - "tagsProperty": "tags" + "tagsProperty": "tags", + "cfRef": { + "property": "ConformancePackName" + } }, "aws-native:configuration:OrganizationConformancePack": { "cf": "AWS::Config::OrganizationConformancePack", @@ -20800,7 +21119,10 @@ "deliveryS3KeyPrefix": "DeliveryS3KeyPrefix", "templateS3Uri": "TemplateS3Uri" }, - "tagsProperty": "tags" + "tagsProperty": "tags", + "cfRef": { + "property": "OrganizationConformancePackName" + } }, "aws-native:configuration:StoredQuery": { "cf": "AWS::Config::StoredQuery", @@ -21089,7 +21411,10 @@ "type" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:connect:ContactFlowModule": { "cf": "AWS::Connect::ContactFlowModule", @@ -21169,7 +21494,10 @@ "instanceArn" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:connect:EmailAddress": { "cf": "AWS::Connect::EmailAddress", @@ -21333,7 +21661,10 @@ "title" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Title" + } }, "aws-native:connect:HoursOfOperation": { "cf": "AWS::Connect::HoursOfOperation", @@ -21523,7 +21854,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:connect:InstanceStorageConfig": { "cf": "AWS::Connect::InstanceStorageConfig", @@ -21874,7 +22208,10 @@ "s3Uri": "S3Uri" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:connect:Queue": { "cf": "AWS::Connect::Queue", @@ -21984,7 +22321,10 @@ "instanceArn" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:connect:QuickConnect": { "cf": "AWS::Connect::QuickConnect", @@ -22056,7 +22396,10 @@ "quickConnectConfig" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:connect:RoutingProfile": { "cf": "AWS::Connect::RoutingProfile", @@ -22162,7 +22505,10 @@ "mediaConcurrencies" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:connect:Rule": { "cf": "AWS::Connect::Rule", @@ -22253,7 +22599,10 @@ "triggerEventSource" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:connect:SecurityKey": { "cf": "AWS::Connect::SecurityKey", @@ -22633,7 +22982,10 @@ "name" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:connect:User": { "cf": "AWS::Connect::User", @@ -22829,7 +23181,10 @@ "parentGroupArn" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:connect:UserHierarchyStructure": { "cf": "AWS::Connect::UserHierarchyStructure", @@ -23091,7 +23446,10 @@ "connectInstanceArn" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:connectcampaignsv2:Campaign": { "cf": "AWS::ConnectCampaignsV2::Campaign", @@ -24061,7 +24419,10 @@ "tags" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArrayCreateOnly" + "tagsStyle": "keyValueArrayCreateOnly", + "cfRef": { + "property": "Name" + } }, "aws-native:databrew:Job": { "cf": "AWS::DataBrew::Job", @@ -24277,7 +24638,10 @@ "type" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArrayCreateOnly" + "tagsStyle": "keyValueArrayCreateOnly", + "cfRef": { + "property": "Name" + } }, "aws-native:databrew:Project": { "cf": "AWS::DataBrew::Project", @@ -24356,7 +24720,10 @@ "tags" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArrayCreateOnly" + "tagsStyle": "keyValueArrayCreateOnly", + "cfRef": { + "property": "Name" + } }, "aws-native:databrew:Recipe": { "cf": "AWS::DataBrew::Recipe", @@ -24423,7 +24790,10 @@ "tags" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArrayCreateOnly" + "tagsStyle": "keyValueArrayCreateOnly", + "cfRef": { + "property": "Name" + } }, "aws-native:databrew:Ruleset": { "cf": "AWS::DataBrew::Ruleset", @@ -24568,7 +24938,10 @@ "tags" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArrayCreateOnly" + "tagsStyle": "keyValueArrayCreateOnly", + "cfRef": { + "property": "Name" + } }, "aws-native:datapipeline:Pipeline": { "cf": "AWS::DataPipeline::Pipeline", @@ -24670,7 +25043,10 @@ "name" ], "tagsProperty": "pipelineTags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "PipelineId" + } }, "aws-native:datasync:Agent": { "cf": "AWS::DataSync::Agent", @@ -24876,7 +25252,10 @@ "subdirectory" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "LocationArn" + } }, "aws-native:datasync:LocationEfs": { "cf": "AWS::DataSync::LocationEFS", @@ -24976,7 +25355,10 @@ "subdirectory" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "LocationArn" + } }, "aws-native:datasync:LocationFSxLustre": { "cf": "AWS::DataSync::LocationFSxLustre", @@ -25052,7 +25434,10 @@ "subdirectory" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "LocationArn" + } }, "aws-native:datasync:LocationFSxOntap": { "cf": "AWS::DataSync::LocationFSxONTAP", @@ -25143,7 +25528,10 @@ "subdirectory" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "LocationArn" + } }, "aws-native:datasync:LocationFSxOpenZfs": { "cf": "AWS::DataSync::LocationFSxOpenZFS", @@ -25230,7 +25618,10 @@ "subdirectory" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "LocationArn" + } }, "aws-native:datasync:LocationFSxWindows": { "cf": "AWS::DataSync::LocationFSxWindows", @@ -25338,7 +25729,10 @@ "subdirectory" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "LocationArn" + } }, "aws-native:datasync:LocationHdfs": { "cf": "AWS::DataSync::LocationHDFS", @@ -25487,7 +25881,10 @@ "subdirectory" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "LocationArn" + } }, "aws-native:datasync:LocationNfs": { "cf": "AWS::DataSync::LocationNFS", @@ -25561,7 +25958,10 @@ "subdirectory" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "LocationArn" + } }, "aws-native:datasync:LocationObjectStorage": { "cf": "AWS::DataSync::LocationObjectStorage", @@ -25978,7 +26378,10 @@ "serverCredentials" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "StorageSystemArn" + } }, "aws-native:datasync:Task": { "cf": "AWS::DataSync::Task", @@ -26140,7 +26543,10 @@ "taskMode" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "TaskArn" + } }, "aws-native:datazone:DataSource": { "cf": "AWS::DataZone::DataSource", @@ -28104,7 +28510,10 @@ } }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:detective:MemberInvitation": { "cf": "AWS::Detective::MemberInvitation", @@ -28539,7 +28948,10 @@ "maxLength": 256 }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "notSupported": true + } }, "aws-native:devicefarm:TestGridProject": { "cf": "AWS::DeviceFarm::TestGridProject", @@ -28598,7 +29010,10 @@ "vpcConfig" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "notSupported": true + } }, "aws-native:devicefarm:VpceConfiguration": { "cf": "AWS::DeviceFarm::VPCEConfiguration", @@ -28676,6 +29091,9 @@ "type": "string", "description": "The account ID associated with the integration of DevOps Guru with CloudWatch log groups for log anomaly detection." } + }, + "cfRef": { + "property": "AccountId" } }, "aws-native:devopsguru:NotificationChannel": { @@ -28839,7 +29257,10 @@ ], "writeOnly": [ "password" - ] + ], + "cfRef": { + "property": "DirectoryId" + } }, "aws-native:dms:DataMigration": { "cf": "AWS::DMS::DataMigration", @@ -29989,7 +30410,10 @@ "sseSpecification": "SSESpecification" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "TableName" + } }, "aws-native:ec2:CapacityReservation": { "cf": "AWS::EC2::CapacityReservation", @@ -30158,6 +30582,9 @@ ], "irreversibleNames": { "awsId": "Id" + }, + "cfRef": { + "property": "Id" } }, "aws-native:ec2:CapacityReservationFleet": { @@ -30267,7 +30694,10 @@ "instanceTypeSpecifications", "tagSpecifications", "tenancy" - ] + ], + "cfRef": { + "property": "CapacityReservationFleetId" + } }, "aws-native:ec2:CarrierGateway": { "cf": "AWS::EC2::CarrierGateway", @@ -30317,7 +30747,10 @@ "vpcId" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "CarrierGatewayId" + } }, "aws-native:ec2:CustomerGateway": { "cf": "AWS::EC2::CustomerGateway", @@ -30410,7 +30843,10 @@ "type" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "CustomerGatewayId" + } }, "aws-native:ec2:DhcpOptions": { "cf": "AWS::EC2::DHCPOptions", @@ -30517,7 +30953,10 @@ "ntpServers" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "DhcpOptionsId" + } }, "aws-native:ec2:Ec2Fleet": { "cf": "AWS::EC2::EC2Fleet", @@ -30689,6 +31128,9 @@ ], "irreversibleNames": { "awsId": "Id" + }, + "cfRef": { + "property": "Id" } }, "aws-native:ec2:Eip": { @@ -30793,7 +31235,10 @@ "transferAddress" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "PublicIp" + } }, "aws-native:ec2:EipAssociation": { "cf": "AWS::EC2::EIPAssociation", @@ -30858,6 +31303,9 @@ "irreversibleNames": { "awsId": "Id", "eip": "EIP" + }, + "cfRef": { + "property": "Id" } }, "aws-native:ec2:EnclaveCertificateIamRoleAssociation": { @@ -31053,7 +31501,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:ec2:GatewayRouteTableAssociation": { "cf": "AWS::EC2::GatewayRouteTableAssociation", @@ -31178,7 +31629,10 @@ "instanceFamily", "instanceType", "outpostArn" - ] + ], + "cfRef": { + "property": "HostId" + } }, "aws-native:ec2:Instance": { "cf": "AWS::EC2::Instance", @@ -31733,7 +32187,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:ec2:InternetGateway": { "cf": "AWS::EC2::InternetGateway", @@ -31760,7 +32217,10 @@ } }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "InternetGatewayId" + } }, "aws-native:ec2:Ipam": { "cf": "AWS::EC2::IPAM", @@ -31853,7 +32313,10 @@ } }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "IpamId" + } }, "aws-native:ec2:IpamAllocation": { "cf": "AWS::EC2::IPAMAllocation", @@ -32121,7 +32584,10 @@ "sourceResource" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "IpamPoolId" + } }, "aws-native:ec2:IpamPoolCidr": { "cf": "AWS::EC2::IPAMPoolCidr", @@ -32544,7 +33010,10 @@ "launchTemplateData", "tagSpecifications", "versionDescription" - ] + ], + "cfRef": { + "property": "LaunchTemplateId" + } }, "aws-native:ec2:LocalGatewayRoute": { "cf": "AWS::EC2::LocalGatewayRoute", @@ -32665,7 +33134,10 @@ "mode" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "LocalGatewayRouteTableId" + } }, "aws-native:ec2:LocalGatewayRouteTableVirtualInterfaceGroupAssociation": { "cf": "AWS::EC2::LocalGatewayRouteTableVirtualInterfaceGroupAssociation", @@ -32734,7 +33206,10 @@ "localGatewayVirtualInterfaceGroupId" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "LocalGatewayRouteTableVirtualInterfaceGroupAssociationId" + } }, "aws-native:ec2:LocalGatewayRouteTableVpcAssociation": { "cf": "AWS::EC2::LocalGatewayRouteTableVPCAssociation", @@ -32914,7 +33389,10 @@ "maxDrainDurationSeconds" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "NatGatewayId" + } }, "aws-native:ec2:NetworkAcl": { "cf": "AWS::EC2::NetworkAcl", @@ -32959,7 +33437,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:ec2:NetworkInsightsAccessScope": { "cf": "AWS::EC2::NetworkInsightsAccessScope", @@ -33036,7 +33517,10 @@ "matchPaths" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "NetworkInsightsAccessScopeId" + } }, "aws-native:ec2:NetworkInsightsAccessScopeAnalysis": { "cf": "AWS::EC2::NetworkInsightsAccessScopeAnalysis", @@ -33106,7 +33590,10 @@ "networkInsightsAccessScopeId" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "NetworkInsightsAccessScopeAnalysisId" + } }, "aws-native:ec2:NetworkInsightsAnalysis": { "cf": "AWS::EC2::NetworkInsightsAnalysis", @@ -33233,7 +33720,10 @@ "networkInsightsPathId" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "NetworkInsightsAnalysisId" + } }, "aws-native:ec2:NetworkInsightsPath": { "cf": "AWS::EC2::NetworkInsightsPath", @@ -33362,7 +33852,10 @@ "sourceIp" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "NetworkInsightsPathId" + } }, "aws-native:ec2:NetworkInterface": { "cf": "AWS::EC2::NetworkInterface", @@ -33580,7 +34073,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:ec2:NetworkInterfaceAttachment": { "cf": "AWS::EC2::NetworkInterfaceAttachment", @@ -33845,7 +34341,10 @@ "addressFamily" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "PrefixListId" + } }, "aws-native:ec2:Route": { "cf": "AWS::EC2::Route", @@ -33989,7 +34488,14 @@ "destinationIpv6CidrBlock", "destinationPrefixListId", "routeTableId" - ] + ], + "cfRef": { + "properties": [ + "RouteTableId", + "CidrBlock" + ], + "delimiter": "|" + } }, "aws-native:ec2:RouteTable": { "cf": "AWS::EC2::RouteTable", @@ -34031,7 +34537,10 @@ "vpcId" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "RouteTableId" + } }, "aws-native:ec2:SecurityGroup": { "cf": "AWS::EC2::SecurityGroup", @@ -34134,7 +34643,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "GroupId" + } }, "aws-native:ec2:SecurityGroupEgress": { "cf": "AWS::EC2::SecurityGroupEgress", @@ -34495,6 +35007,9 @@ ], "irreversibleNames": { "awsId": "Id" + }, + "cfRef": { + "property": "Id" } }, "aws-native:ec2:Subnet": { @@ -34696,7 +35211,10 @@ "enableDns64": "EnableDns64" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "SubnetId" + } }, "aws-native:ec2:SubnetCidrBlock": { "cf": "AWS::EC2::SubnetCidrBlock", @@ -34767,6 +35285,9 @@ ], "irreversibleNames": { "awsId": "Id" + }, + "cfRef": { + "property": "Id" } }, "aws-native:ec2:SubnetNetworkAclAssociation": { @@ -34844,6 +35365,9 @@ ], "irreversibleNames": { "awsId": "Id" + }, + "cfRef": { + "property": "Id" } }, "aws-native:ec2:TransitGateway": { @@ -34985,7 +35509,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:ec2:TransitGatewayAttachment": { "cf": "AWS::EC2::TransitGatewayAttachment", @@ -35064,7 +35591,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:ec2:TransitGatewayConnect": { "cf": "AWS::EC2::TransitGatewayConnect", @@ -35191,7 +35721,10 @@ "transitGatewayId" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "TransitGatewayMulticastDomainId" + } }, "aws-native:ec2:TransitGatewayMulticastDomainAssociation": { "cf": "AWS::EC2::TransitGatewayMulticastDomainAssociation", @@ -35573,7 +36106,10 @@ "transitGatewayId" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "TransitGatewayRouteTableId" + } }, "aws-native:ec2:TransitGatewayRouteTableAssociation": { "cf": "AWS::EC2::TransitGatewayRouteTableAssociation", @@ -35752,7 +36288,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:ec2:VerifiedAccessEndpoint": { "cf": "AWS::EC2::VerifiedAccessEndpoint", @@ -35937,7 +36476,10 @@ "securityGroupIds" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "VerifiedAccessEndpointId" + } }, "aws-native:ec2:VerifiedAccessGroup": { "cf": "AWS::EC2::VerifiedAccessGroup", @@ -36023,7 +36565,10 @@ "verifiedAccessInstanceId" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "VerifiedAccessGroupId" + } }, "aws-native:ec2:VerifiedAccessInstance": { "cf": "AWS::EC2::VerifiedAccessInstance", @@ -36110,7 +36655,10 @@ } }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "VerifiedAccessInstanceId" + } }, "aws-native:ec2:VerifiedAccessTrustProvider": { "cf": "AWS::EC2::VerifiedAccessTrustProvider", @@ -36225,7 +36773,10 @@ "userTrustProviderType" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "VerifiedAccessTrustProviderId" + } }, "aws-native:ec2:Volume": { "cf": "AWS::EC2::Volume", @@ -36346,7 +36897,10 @@ "autoEnableIo": "AutoEnableIO" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "VolumeId" + } }, "aws-native:ec2:VolumeAttachment": { "cf": "AWS::EC2::VolumeAttachment", @@ -36498,7 +37052,10 @@ "ipv4NetmaskLength" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "VpcId" + } }, "aws-native:ec2:VpcBlockPublicAccessExclusion": { "cf": "AWS::EC2::VPCBlockPublicAccessExclusion", @@ -36703,6 +37260,9 @@ ], "irreversibleNames": { "awsId": "Id" + }, + "cfRef": { + "property": "Id" } }, "aws-native:ec2:VpcEndpoint": { @@ -36829,6 +37389,9 @@ ], "irreversibleNames": { "awsId": "Id" + }, + "cfRef": { + "property": "Id" } }, "aws-native:ec2:VpcEndpointConnectionNotification": { @@ -36892,6 +37455,9 @@ "irreversibleNames": { "vpcEndpointConnectionNotificationId": "VPCEndpointConnectionNotificationId", "vpcEndpointId": "VPCEndpointId" + }, + "cfRef": { + "property": "VPCEndpointConnectionNotificationId" } }, "aws-native:ec2:VpcEndpointService": { @@ -37125,7 +37691,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:ec2:VpcdhcpOptionsAssociation": { "cf": "AWS::EC2::VPCDHCPOptionsAssociation", @@ -37337,7 +37906,10 @@ "vpnTunnelOptionsSpecifications" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "VpnConnectionId" + } }, "aws-native:ec2:VpnConnectionRoute": { "cf": "AWS::EC2::VPNConnectionRoute", @@ -37425,7 +37997,10 @@ "vpnGatewayId": "VPNGatewayId" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "VPNGatewayId" + } }, "aws-native:ecr:PullThroughCacheRule": { "cf": "AWS::ECR::PullThroughCacheRule", @@ -37635,7 +38210,10 @@ "emptyOnDelete" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "RepositoryName" + } }, "aws-native:ecr:RepositoryCreationTemplate": { "cf": "AWS::ECR::RepositoryCreationTemplate", @@ -37789,7 +38367,10 @@ "name" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:ecs:Cluster": { "cf": "AWS::ECS::Cluster", @@ -37892,7 +38473,10 @@ "serviceConnectDefaults" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "ClusterName" + } }, "aws-native:ecs:ClusterCapacityProviderAssociations": { "cf": "AWS::ECS::ClusterCapacityProviderAssociations", @@ -38289,7 +38873,10 @@ "enableEcsManagedTags": "EnableECSManagedTags" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "ServiceArn" + } }, "aws-native:ecs:TaskDefinition": { "cf": "AWS::ECS::TaskDefinition", @@ -38508,7 +39095,10 @@ "volumes" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "TaskDefinitionArn" + } }, "aws-native:ecs:TaskSet": { "cf": "AWS::ECS::TaskSet", @@ -38756,7 +39346,10 @@ "rootDirectory/Path" ], "tagsProperty": "accessPointTags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "AccessPointId" + } }, "aws-native:efs:FileSystem": { "cf": "AWS::EFS::FileSystem", @@ -38904,7 +39497,10 @@ "replicationConfiguration/Destinations/0/KmsKeyId" ], "tagsProperty": "fileSystemTags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "FileSystemId" + } }, "aws-native:efs:MountTarget": { "cf": "AWS::EFS::MountTarget", @@ -38969,6 +39565,9 @@ ], "irreversibleNames": { "awsId": "Id" + }, + "cfRef": { + "property": "Id" } }, "aws-native:eks:AccessEntry": { @@ -39183,7 +39782,10 @@ "resolveConflicts" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "AddonName" + } }, "aws-native:eks:Cluster": { "cf": "AWS::EKS::Cluster", @@ -39367,7 +39969,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:eks:FargateProfile": { "cf": "AWS::EKS::FargateProfile", @@ -39467,7 +40072,10 @@ "subnets" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "FargateProfileName" + } }, "aws-native:eks:IdentityProviderConfig": { "cf": "AWS::EKS::IdentityProviderConfig", @@ -39543,7 +40151,10 @@ "type" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "IdentityProviderConfigName" + } }, "aws-native:eks:Nodegroup": { "cf": "AWS::EKS::Nodegroup", @@ -39776,7 +40387,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "stringMap" + "tagsStyle": "stringMap", + "cfRef": { + "property": "NodegroupName" + } }, "aws-native:eks:PodIdentityAssociation": { "cf": "AWS::EKS::PodIdentityAssociation", @@ -40297,7 +40911,10 @@ "cacheSubnetGroupName" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "CacheSubnetGroupName" + } }, "aws-native:elasticache:User": { "cf": "AWS::ElastiCache::User", @@ -40926,7 +41543,10 @@ ], "writeOnly": [ "defaultActions/*/AuthenticateOidcConfig/ClientSecret" - ] + ], + "cfRef": { + "property": "ListenerArn" + } }, "aws-native:elasticloadbalancingv2:ListenerRule": { "cf": "AWS::ElasticLoadBalancingV2::ListenerRule", @@ -40998,7 +41618,10 @@ "writeOnly": [ "actions/*/AuthenticateOidcConfig/ClientSecret", "listenerArn" - ] + ], + "cfRef": { + "property": "RuleArn" + } }, "aws-native:elasticloadbalancingv2:LoadBalancer": { "cf": "AWS::ElasticLoadBalancingV2::LoadBalancer", @@ -41168,7 +41791,10 @@ "dnsName": "DNSName" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "LoadBalancerArn" + } }, "aws-native:elasticloadbalancingv2:TargetGroup": { "cf": "AWS::ElasticLoadBalancingV2::TargetGroup", @@ -41387,7 +42013,10 @@ "vpcId" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "TargetGroupArn" + } }, "aws-native:elasticloadbalancingv2:TrustStore": { "cf": "AWS::ElasticLoadBalancingV2::TrustStore", @@ -41565,7 +42194,10 @@ "createOnly": [ "name", "securityConfiguration" - ] + ], + "cfRef": { + "property": "Name" + } }, "aws-native:emr:Studio": { "cf": "AWS::EMR::Studio", @@ -41773,7 +42405,10 @@ "defaultS3Location": "DefaultS3Location" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "StudioId" + } }, "aws-native:emr:StudioSessionMapping": { "cf": "AWS::EMR::StudioSessionMapping", @@ -41933,7 +42568,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:emrserverless:Application": { "cf": "AWS::EMRServerless::Application", @@ -42109,7 +42747,10 @@ "type" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "ApplicationId" + } }, "aws-native:entityresolution:IdMappingWorkflow": { "cf": "AWS::EntityResolution::IdMappingWorkflow", @@ -42657,7 +43298,10 @@ ], "createOnly": [ "name" - ] + ], + "cfRef": { + "property": "Name" + } }, "aws-native:events:Archive": { "cf": "AWS::Events::Archive", @@ -42722,7 +43366,10 @@ "createOnly": [ "archiveName", "sourceArn" - ] + ], + "cfRef": { + "property": "ArchiveName" + } }, "aws-native:events:Connection": { "cf": "AWS::Events::Connection", @@ -42787,7 +43434,10 @@ "authParameters/OAuthParameters/OAuthHttpParameters/BodyParameters", "authParameters/OAuthParameters/OAuthHttpParameters/HeaderParameters", "authParameters/OAuthParameters/OAuthHttpParameters/QueryStringParameters" - ] + ], + "cfRef": { + "property": "Name" + } }, "aws-native:events:Endpoint": { "cf": "AWS::Events::Endpoint", @@ -43054,7 +43704,10 @@ }, "createOnly": [ "name" - ] + ], + "cfRef": { + "property": "Name" + } }, "aws-native:eventschemas:Discoverer": { "cf": "AWS::EventSchemas::Discoverer", @@ -43449,7 +44102,10 @@ "project" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:evidently:Feature": { "cf": "AWS::Evidently::Feature", @@ -43559,7 +44215,10 @@ "project" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:evidently:Launch": { "cf": "AWS::Evidently::Launch", @@ -43684,7 +44343,10 @@ "project" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:evidently:Project": { "cf": "AWS::Evidently::Project", @@ -43752,7 +44414,10 @@ "name" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:evidently:Segment": { "cf": "AWS::Evidently::Segment", @@ -43808,7 +44473,10 @@ "maxLength": 127 }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:finspace:Environment": { "cf": "AWS::FinSpace::Environment", @@ -43941,7 +44609,10 @@ "tags" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArrayCreateOnly" + "tagsStyle": "keyValueArrayCreateOnly", + "cfRef": { + "property": "Name" + } }, "aws-native:fis:ExperimentTemplate": { "cf": "AWS::FIS::ExperimentTemplate", @@ -44065,7 +44736,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "stringMap" + "tagsStyle": "stringMap", + "cfRef": { + "property": "Id" + } }, "aws-native:fis:TargetAccountConfiguration": { "cf": "AWS::FIS::TargetAccountConfiguration", @@ -44478,7 +45152,10 @@ "datasetName" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "DatasetName" + } }, "aws-native:forecast:DatasetGroup": { "cf": "AWS::Forecast::DatasetGroup", @@ -44663,7 +45340,10 @@ "detectorId" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:frauddetector:EntityType": { "cf": "AWS::FraudDetector::EntityType", @@ -44723,7 +45403,10 @@ "name" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:frauddetector:EventType": { "cf": "AWS::FraudDetector::EventType", @@ -44830,7 +45513,10 @@ "name" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:frauddetector:Label": { "cf": "AWS::FraudDetector::Label", @@ -44890,7 +45576,10 @@ "name" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:frauddetector:List": { "cf": "AWS::FraudDetector::List", @@ -45032,7 +45721,10 @@ "name" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:frauddetector:Variable": { "cf": "AWS::FraudDetector::Variable", @@ -45127,7 +45819,10 @@ "name" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:fsx:DataRepositoryAssociation": { "cf": "AWS::FSx::DataRepositoryAssociation", @@ -45268,7 +45963,10 @@ }, "required": [ "routingStrategy" - ] + ], + "cfRef": { + "property": "AliasId" + } }, "aws-native:gamelift:Build": { "cf": "AWS::GameLift::Build", @@ -45334,7 +46032,10 @@ "writeOnly": [ "serverSdkVersion", "storageLocation" - ] + ], + "cfRef": { + "property": "BuildId" + } }, "aws-native:gamelift:ContainerFleet": { "cf": "AWS::GameLift::ContainerFleet", @@ -45995,6 +46696,9 @@ "ec2InboundPermissions": "EC2InboundPermissions", "ec2InstanceType": "EC2InstanceType", "instanceRoleArn": "InstanceRoleARN" + }, + "cfRef": { + "property": "FleetId" } }, "aws-native:gamelift:GameServerGroup": { @@ -46254,7 +46958,10 @@ "name" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:gamelift:Location": { "cf": "AWS::GameLift::Location", @@ -46478,7 +47185,10 @@ "name" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:gamelift:MatchmakingRuleSet": { "cf": "AWS::GameLift::MatchmakingRuleSet", @@ -46538,7 +47248,10 @@ "ruleSetBody" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:gamelift:Script": { "cf": "AWS::GameLift::Script", @@ -46704,7 +47417,10 @@ "maxLength": 64 }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "AcceleratorArn" + } }, "aws-native:globalaccelerator:CrossAccountAttachment": { "cf": "AWS::GlobalAccelerator::CrossAccountAttachment", @@ -46891,7 +47607,10 @@ ], "writeOnly": [ "endpointConfigurations/*/AttachmentArn" - ] + ], + "cfRef": { + "property": "EndpointGroupArn" + } }, "aws-native:globalaccelerator:Listener": { "cf": "AWS::GlobalAccelerator::Listener", @@ -46949,7 +47668,10 @@ ], "createOnly": [ "acceleratorArn" - ] + ], + "cfRef": { + "property": "ListenerArn" + } }, "aws-native:glue:Crawler": { "cf": "AWS::Glue::Crawler", @@ -47087,7 +47809,10 @@ "name" ], "tagsProperty": "tags", - "tagsStyle": "untyped" + "tagsStyle": "untyped", + "cfRef": { + "property": "Name" + } }, "aws-native:glue:Database": { "cf": "AWS::Glue::Database", @@ -47129,7 +47854,10 @@ ], "createOnly": [ "databaseName" - ] + ], + "cfRef": { + "property": "DatabaseName" + } }, "aws-native:glue:Job": { "cf": "AWS::Glue::Job", @@ -47333,7 +48061,10 @@ "name" ], "tagsProperty": "tags", - "tagsStyle": "untyped" + "tagsStyle": "untyped", + "cfRef": { + "property": "Name" + } }, "aws-native:glue:Registry": { "cf": "AWS::Glue::Registry", @@ -47688,7 +48419,10 @@ "startOnCreation" ], "tagsProperty": "tags", - "tagsStyle": "untyped" + "tagsStyle": "untyped", + "cfRef": { + "property": "Name" + } }, "aws-native:glue:UsageProfile": { "cf": "AWS::Glue::UsageProfile", @@ -47961,6 +48695,9 @@ ], "irreversibleNames": { "awsId": "Id" + }, + "cfRef": { + "property": "Name" } }, "aws-native:greengrassv2:ComponentVersion": { @@ -48027,7 +48764,10 @@ "lambdaFunction" ], "tagsProperty": "tags", - "tagsStyle": "stringMap" + "tagsStyle": "stringMap", + "cfRef": { + "property": "Arn" + } }, "aws-native:greengrassv2:Deployment": { "cf": "AWS::GreengrassV2::Deployment", @@ -48190,7 +48930,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:groundstation:DataflowEndpointGroup": { "cf": "AWS::GroundStation::DataflowEndpointGroup", @@ -48444,7 +49187,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:guardduty:Filter": { "cf": "AWS::GuardDuty::Filter", @@ -48530,7 +49276,10 @@ "name" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:guardduty:IpSet": { "cf": "AWS::GuardDuty::IPSet", @@ -48617,7 +49366,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:guardduty:MalwareProtectionPlan": { "cf": "AWS::GuardDuty::MalwareProtectionPlan", @@ -48734,7 +49486,10 @@ "detectorId", "invitationId", "masterId" - ] + ], + "cfRef": { + "property": "MasterId" + } }, "aws-native:guardduty:Member": { "cf": "AWS::GuardDuty::Member", @@ -48802,7 +49557,10 @@ "writeOnly": [ "disableEmailNotification", "message" - ] + ], + "cfRef": { + "property": "MemberId" + } }, "aws-native:guardduty:ThreatIntelSet": { "cf": "AWS::GuardDuty::ThreatIntelSet", @@ -48888,7 +49646,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:healthimaging:Datastore": { "cf": "AWS::HealthImaging::Datastore", @@ -49217,7 +49978,10 @@ "instanceProfileName", "path" ], - "tagsProperty": "tags" + "tagsProperty": "tags", + "cfRef": { + "property": "InstanceProfileName" + } }, "aws-native:iam:ManagedPolicy": { "cf": "AWS::IAM::ManagedPolicy", @@ -49336,7 +50100,10 @@ "description", "managedPolicyName", "path" - ] + ], + "cfRef": { + "property": "PolicyArn" + } }, "aws-native:iam:OidcProvider": { "cf": "AWS::IAM::OIDCProvider", @@ -49403,7 +50170,10 @@ "url" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:iam:Role": { "cf": "AWS::IAM::Role", @@ -49524,7 +50294,10 @@ "roleName" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "RoleName" + } }, "aws-native:iam:RolePolicy": { "cf": "AWS::IAM::RolePolicy", @@ -49567,7 +50340,14 @@ "createOnly": [ "policyName", "roleName" - ] + ], + "cfRef": { + "properties": [ + "PolicyName", + "RoleName" + ], + "delimiter": "|" + } }, "aws-native:iam:SamlProvider": { "cf": "AWS::IAM::SAMLProvider", @@ -49622,7 +50402,10 @@ "name" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:iam:ServerCertificate": { "cf": "AWS::IAM::ServerCertificate", @@ -50221,7 +51004,10 @@ "uri" ], "tagsProperty": "tags", - "tagsStyle": "stringMap" + "tagsStyle": "stringMap", + "cfRef": { + "property": "Arn" + } }, "aws-native:imagebuilder:ContainerRecipe": { "cf": "AWS::ImageBuilder::ContainerRecipe", @@ -50407,7 +51193,10 @@ "platformOverride" ], "tagsProperty": "tags", - "tagsStyle": "stringMap" + "tagsStyle": "stringMap", + "cfRef": { + "property": "Arn" + } }, "aws-native:imagebuilder:DistributionConfiguration": { "cf": "AWS::ImageBuilder::DistributionConfiguration", @@ -50474,7 +51263,10 @@ "name" ], "tagsProperty": "tags", - "tagsStyle": "stringMap" + "tagsStyle": "stringMap", + "cfRef": { + "property": "Arn" + } }, "aws-native:imagebuilder:Image": { "cf": "AWS::ImageBuilder::Image", @@ -50611,7 +51403,10 @@ "workflows" ], "tagsProperty": "tags", - "tagsStyle": "stringMap" + "tagsStyle": "stringMap", + "cfRef": { + "property": "Arn" + } }, "aws-native:imagebuilder:ImagePipeline": { "cf": "AWS::ImageBuilder::ImagePipeline", @@ -50755,7 +51550,10 @@ "name" ], "tagsProperty": "tags", - "tagsStyle": "stringMap" + "tagsStyle": "stringMap", + "cfRef": { + "property": "Arn" + } }, "aws-native:imagebuilder:ImageRecipe": { "cf": "AWS::ImageBuilder::ImageRecipe", @@ -50884,7 +51682,10 @@ "workingDirectory" ], "tagsProperty": "tags", - "tagsStyle": "stringMap" + "tagsStyle": "stringMap", + "cfRef": { + "property": "Arn" + } }, "aws-native:imagebuilder:InfrastructureConfiguration": { "cf": "AWS::ImageBuilder::InfrastructureConfiguration", @@ -51043,7 +51844,10 @@ "name" ], "tagsProperty": "tags", - "tagsStyle": "stringMap" + "tagsStyle": "stringMap", + "cfRef": { + "property": "Arn" + } }, "aws-native:imagebuilder:LifecyclePolicy": { "cf": "AWS::ImageBuilder::LifecyclePolicy", @@ -51301,7 +52105,10 @@ }, "createOnly": [ "assessmentTargetName" - ] + ], + "cfRef": { + "property": "ResourceGroupArn" + } }, "aws-native:inspector:AssessmentTemplate": { "cf": "AWS::Inspector::AssessmentTemplate", @@ -51384,7 +52191,10 @@ "durationInSeconds", "rulesPackageArns", "userAttributesForFindings" - ] + ], + "cfRef": { + "property": "AssessmentTargetArn" + } }, "aws-native:inspector:ResourceGroup": { "cf": "AWS::Inspector::ResourceGroup", @@ -51416,7 +52226,10 @@ ], "createOnly": [ "resourceGroupTags" - ] + ], + "cfRef": { + "property": "Arn" + } }, "aws-native:inspectorv2:CisScanConfiguration": { "cf": "AWS::InspectorV2::CisScanConfiguration", @@ -51533,7 +52346,10 @@ "required": [ "filterAction", "filterCriteria" - ] + ], + "cfRef": { + "property": "Arn" + } }, "aws-native:internetmonitor:Monitor": { "cf": "AWS::InternetMonitor::Monitor", @@ -51848,7 +52664,10 @@ "signingDisabled" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "AuthorizerName" + } }, "aws-native:iot:BillingGroup": { "cf": "AWS::IoT::BillingGroup", @@ -51907,7 +52726,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:iot:CaCertificate": { "cf": "AWS::IoT::CACertificate", @@ -52014,7 +52836,10 @@ "caCertificatePem": "CACertificatePem" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:iot:Certificate": { "cf": "AWS::IoT::Certificate", @@ -52090,6 +52915,9 @@ "irreversibleNames": { "awsId": "Id", "caCertificatePem": "CACertificatePem" + }, + "cfRef": { + "property": "Id" } }, "aws-native:iot:CertificateProvider": { @@ -52297,7 +53125,10 @@ "type" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:iot:DomainConfiguration": { "cf": "AWS::IoT::DomainConfiguration", @@ -52458,7 +53289,10 @@ "validationCertificateArn" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "DomainConfigurationName" + } }, "aws-native:iot:FleetMetric": { "cf": "AWS::IoT::FleetMetric", @@ -52922,7 +53756,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "PolicyName" + } }, "aws-native:iot:ProvisioningTemplate": { "cf": "AWS::IoT::ProvisioningTemplate", @@ -53220,7 +54057,10 @@ "scheduledAuditName" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "ScheduledAuditName" + } }, "aws-native:iot:SecurityProfile": { "cf": "AWS::IoT::SecurityProfile", @@ -53339,7 +54179,10 @@ "additionalMetricsToRetainV2": "AdditionalMetricsToRetainV2" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "SecurityProfileName" + } }, "aws-native:iot:SoftwarePackage": { "cf": "AWS::IoT::SoftwarePackage", @@ -53517,6 +54360,9 @@ ], "irreversibleNames": { "awsId": "Id" + }, + "cfRef": { + "property": "ThingName" } }, "aws-native:iot:ThingGroup": { @@ -53661,7 +54507,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:iot:TopicRule": { "cf": "AWS::IoT::TopicRule", @@ -53714,7 +54563,10 @@ "ruleName" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "RuleName" + } }, "aws-native:iot:TopicRuleDestination": { "cf": "AWS::IoT::TopicRuleDestination", @@ -54231,7 +55083,10 @@ "key" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "AlarmModelName" + } }, "aws-native:iotevents:DetectorModel": { "cf": "AWS::IoTEvents::DetectorModel", @@ -54317,7 +55172,10 @@ "key" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "DetectorModelName" + } }, "aws-native:iotevents:Input": { "cf": "AWS::IoTEvents::Input", @@ -54376,7 +55234,10 @@ "inputName" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "InputName" + } }, "aws-native:iotfleethub:Application": { "cf": "AWS::IoTFleetHub::Application", @@ -54732,7 +55593,10 @@ "assetModelProperties/*/Type/Transform/Variables/*/Value/PropertyPath/*/Name" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "AssetModelId" + } }, "aws-native:iotsitewise:Dashboard": { "cf": "AWS::IoTSiteWise::Dashboard", @@ -55713,7 +56577,10 @@ "name" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:iotwireless:DeviceProfile": { "cf": "AWS::IoTWireless::DeviceProfile", @@ -55774,7 +56641,10 @@ "loRaWan": "LoRaWAN" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:iotwireless:FuotaTask": { "cf": "AWS::IoTWireless::FuotaTask", @@ -56128,7 +56998,10 @@ "loRaWan": "LoRaWAN" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:iotwireless:TaskDefinition": { "cf": "AWS::IoTWireless::TaskDefinition", @@ -56322,7 +57195,10 @@ "loRaWan": "LoRaWAN" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:iotwireless:WirelessGateway": { "cf": "AWS::IoTWireless::WirelessGateway", @@ -56412,7 +57288,10 @@ "loRaWan": "LoRaWAN" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:ivs:Channel": { "cf": "AWS::IVS::Channel", @@ -56507,7 +57386,10 @@ "maxLength": 128 }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:ivs:EncoderConfiguration": { "cf": "AWS::IVS::EncoderConfiguration", @@ -56720,7 +57602,10 @@ "publicKeyMaterial" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:ivs:PlaybackRestrictionPolicy": { "cf": "AWS::IVS::PlaybackRestrictionPolicy", @@ -56954,7 +57839,10 @@ "thumbnailConfiguration/TargetIntervalSeconds" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:ivs:Stage": { "cf": "AWS::IVS::Stage", @@ -57109,7 +57997,10 @@ "channelArn" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:ivschat:LoggingConfiguration": { "cf": "AWS::IVSChat::LoggingConfiguration", @@ -57170,7 +58061,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:ivschat:Room": { "cf": "AWS::IVSChat::Room", @@ -57254,7 +58148,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:kafkaconnect:Connector": { "cf": "AWS::KafkaConnect::Connector", @@ -57701,7 +58598,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:kendra:Faq": { "cf": "AWS::Kendra::Faq", @@ -57945,7 +58845,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:kendraranking:ExecutionPlan": { "cf": "AWS::KendraRanking::ExecutionPlan", @@ -58006,7 +58909,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:kinesis:ResourcePolicy": { "cf": "AWS::Kinesis::ResourcePolicy", @@ -58123,7 +59029,10 @@ "name" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:kinesisanalyticsv2:Application": { "cf": "AWS::KinesisAnalyticsV2::Application", @@ -58584,7 +59493,10 @@ ], "createOnly": [ "aliasName" - ] + ], + "cfRef": { + "property": "AliasName" + } }, "aws-native:kms:Key": { "cf": "AWS::KMS::Key", @@ -58708,7 +59620,10 @@ "rotationPeriodInDays" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "KeyId" + } }, "aws-native:kms:ReplicaKey": { "cf": "AWS::KMS::ReplicaKey", @@ -58968,7 +59883,14 @@ "permissionsWithGrantOption", "principal", "resource" - ] + ], + "cfRef": { + "properties": [ + "PrincipalIdentifier", + "ResourceIdentifier" + ], + "delimiter": "|" + } }, "aws-native:lakeformation:Tag": { "cf": "AWS::LakeFormation::Tag", @@ -59139,7 +60061,10 @@ "createOnly": [ "functionName", "name" - ] + ], + "cfRef": { + "property": "AliasArn" + } }, "aws-native:lambda:CodeSigningConfig": { "cf": "AWS::Lambda::CodeSigningConfig", @@ -59534,7 +60459,10 @@ "documentDbEventSourceConfig": "DocumentDBEventSourceConfig" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:lambda:Function": { "cf": "AWS::Lambda::Function", @@ -59805,7 +60733,10 @@ "snapStart/ApplyOn" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "FunctionName" + } }, "aws-native:lambda:LayerVersion": { "cf": "AWS::Lambda::LayerVersion", @@ -59896,7 +60827,10 @@ ], "writeOnly": [ "content" - ] + ], + "cfRef": { + "property": "LayerVersionArn" + } }, "aws-native:lambda:LayerVersionPermission": { "cf": "AWS::Lambda::LayerVersionPermission", @@ -60201,6 +61135,9 @@ ], "irreversibleNames": { "codeSha256": "CodeSha256" + }, + "cfRef": { + "property": "FunctionArn" } }, "aws-native:launchwizard:Deployment": { @@ -61181,7 +62118,10 @@ "subjectAlternativeNames" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "CertificateName" + } }, "aws-native:lightsail:Container": { "cf": "AWS::Lightsail::Container", @@ -62284,7 +63224,10 @@ "mapName" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "MapName" + } }, "aws-native:location:PlaceIndex": { "cf": "AWS::Location::PlaceIndex", @@ -62377,7 +63320,10 @@ "indexName" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "IndexName" + } }, "aws-native:location:RouteCalculator": { "cf": "AWS::Location::RouteCalculator", @@ -62570,7 +63516,10 @@ "trackerName" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "TrackerName" + } }, "aws-native:location:TrackerConsumer": { "cf": "AWS::Location::TrackerConsumer", @@ -62984,7 +63933,10 @@ ], "createOnly": [ "destinationName" - ] + ], + "cfRef": { + "property": "DestinationName" + } }, "aws-native:logs:LogAnomalyDetector": { "cf": "AWS::Logs::LogAnomalyDetector", @@ -63151,7 +64103,10 @@ "logGroupName" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "LogGroupName" + } }, "aws-native:logs:LogStream": { "cf": "AWS::Logs::LogStream", @@ -63186,7 +64141,10 @@ "createOnly": [ "logGroupName", "logStreamName" - ] + ], + "cfRef": { + "property": "LogStreamName" + } }, "aws-native:logs:MetricFilter": { "cf": "AWS::Logs::MetricFilter", @@ -63296,7 +64254,10 @@ }, "required": [ "queryString" - ] + ], + "cfRef": { + "property": "QueryDefinitionId" + } }, "aws-native:logs:ResourcePolicy": { "cf": "AWS::Logs::ResourcePolicy", @@ -63473,7 +64434,10 @@ "alertName", "alertSensitivityThreshold", "anomalyDetectorArn" - ] + ], + "cfRef": { + "property": "AlertName" + } }, "aws-native:lookoutmetrics:AnomalyDetector": { "cf": "AWS::LookoutMetrics::AnomalyDetector", @@ -63544,7 +64508,10 @@ "createOnly": [ "anomalyDetectorName", "metricSource" - ] + ], + "cfRef": { + "property": "AnomalyDetectorName" + } }, "aws-native:lookoutvision:Project": { "cf": "AWS::LookoutVision::Project", @@ -63570,7 +64537,10 @@ }, "createOnly": [ "projectName" - ] + ], + "cfRef": { + "property": "ProjectName" + } }, "aws-native:m2:Application": { "cf": "AWS::M2::Application", @@ -63970,7 +64940,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:macie:CustomDataIdentifier": { "cf": "AWS::Macie::CustomDataIdentifier", @@ -64084,7 +65057,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:macie:FindingsFilter": { "cf": "AWS::Macie::FindingsFilter", @@ -64164,7 +65140,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:macie:Session": { "cf": "AWS::Macie::Session", @@ -64285,7 +65264,10 @@ "required": [ "placementArn", "sources" - ] + ], + "cfRef": { + "property": "BridgeArn" + } }, "aws-native:mediaconnect:BridgeOutputResource": { "cf": "AWS::MediaConnect::BridgeOutput", @@ -64329,7 +65311,10 @@ "createOnly": [ "bridgeArn", "name" - ] + ], + "cfRef": { + "property": "Name" + } }, "aws-native:mediaconnect:BridgeSource": { "cf": "AWS::MediaConnect::BridgeSource", @@ -64380,7 +65365,10 @@ "createOnly": [ "bridgeArn", "name" - ] + ], + "cfRef": { + "property": "Name" + } }, "aws-native:mediaconnect:Flow": { "cf": "AWS::MediaConnect::Flow", @@ -64488,7 +65476,10 @@ "availabilityZone", "name", "source/Name" - ] + ], + "cfRef": { + "property": "FlowArn" + } }, "aws-native:mediaconnect:FlowEntitlement": { "cf": "AWS::MediaConnect::FlowEntitlement", @@ -64575,7 +65566,10 @@ "createOnly": [ "dataTransferSubscriberFeePercent", "name" - ] + ], + "cfRef": { + "property": "EntitlementArn" + } }, "aws-native:mediaconnect:FlowOutput": { "cf": "AWS::MediaConnect::FlowOutput", @@ -64737,7 +65731,10 @@ ], "createOnly": [ "name" - ] + ], + "cfRef": { + "property": "OutputArn" + } }, "aws-native:mediaconnect:FlowSource": { "cf": "AWS::MediaConnect::FlowSource", @@ -64910,7 +65907,10 @@ ], "createOnly": [ "name" - ] + ], + "cfRef": { + "property": "SourceArn" + } }, "aws-native:mediaconnect:FlowVpcInterface": { "cf": "AWS::MediaConnect::FlowVpcInterface", @@ -64985,7 +65985,10 @@ "createOnly": [ "flowArn", "name" - ] + ], + "cfRef": { + "property": "Name" + } }, "aws-native:mediaconnect:Gateway": { "cf": "AWS::MediaConnect::Gateway", @@ -65051,7 +66054,10 @@ "egressCidrBlocks", "name", "networks" - ] + ], + "cfRef": { + "property": "GatewayArn" + } }, "aws-native:medialive:ChannelPlacementGroup": { "cf": "AWS::MediaLive::ChannelPlacementGroup", @@ -66605,7 +67611,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArrayCreateOnly" + "tagsStyle": "keyValueArrayCreateOnly", + "cfRef": { + "property": "Id" + } }, "aws-native:mediapackagev2:Channel": { "cf": "AWS::MediaPackageV2::Channel", @@ -68322,7 +69331,10 @@ ], "createOnly": [ "clusterArn" - ] + ], + "cfRef": { + "property": "ClusterArn" + } }, "aws-native:msk:Configuration": { "cf": "AWS::MSK::Configuration", @@ -68649,7 +69661,10 @@ "vpcId" ], "tagsProperty": "tags", - "tagsStyle": "stringMap" + "tagsStyle": "stringMap", + "cfRef": { + "property": "Arn" + } }, "aws-native:mwaa:Environment": { "cf": "AWS::MWAA::Environment", @@ -69492,7 +70507,10 @@ "vpcId" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "FirewallArn" + } }, "aws-native:networkfirewall:FirewallPolicy": { "cf": "AWS::NetworkFirewall::FirewallPolicy", @@ -69569,7 +70587,10 @@ "firewallPolicyName" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "FirewallPolicyArn" + } }, "aws-native:networkfirewall:LoggingConfiguration": { "cf": "AWS::NetworkFirewall::LoggingConfiguration", @@ -69620,7 +70641,10 @@ "createOnly": [ "firewallArn", "firewallName" - ] + ], + "cfRef": { + "property": "FirewallArn" + } }, "aws-native:networkfirewall:RuleGroup": { "cf": "AWS::NetworkFirewall::RuleGroup", @@ -69718,7 +70742,10 @@ "type" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "RuleGroupArn" + } }, "aws-native:networkfirewall:TlsInspectionConfiguration": { "cf": "AWS::NetworkFirewall::TLSInspectionConfiguration", @@ -70155,7 +71182,10 @@ "globalNetworkId" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "CoreNetworkId" + } }, "aws-native:networkmanager:CustomerGatewayAssociation": { "cf": "AWS::NetworkManager::CustomerGatewayAssociation", @@ -70330,7 +71360,10 @@ "awsLocation": "AWSLocation" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "DeviceId" + } }, "aws-native:networkmanager:GlobalNetwork": { "cf": "AWS::NetworkManager::GlobalNetwork", @@ -70388,7 +71421,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:networkmanager:Link": { "cf": "AWS::NetworkManager::Link", @@ -70486,7 +71522,10 @@ "siteId" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "LinkId" + } }, "aws-native:networkmanager:LinkAssociation": { "cf": "AWS::NetworkManager::LinkAssociation", @@ -70600,7 +71639,14 @@ "globalNetworkId" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "properties": [ + "GlobalNetworkId", + "SiteId" + ], + "delimiter": "|" + } }, "aws-native:networkmanager:SiteToSiteVpnAttachment": { "cf": "AWS::NetworkManager::SiteToSiteVpnAttachment", @@ -70956,7 +72002,10 @@ "transitGatewayRouteTableArn" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "AttachmentId" + } }, "aws-native:networkmanager:VpcAttachment": { "cf": "AWS::NetworkManager::VpcAttachment", @@ -71622,7 +72671,10 @@ "labelTemplate" ], "tagsProperty": "tags", - "tagsStyle": "stringMap" + "tagsStyle": "stringMap", + "cfRef": { + "property": "Arn" + } }, "aws-native:oam:Sink": { "cf": "AWS::Oam::Sink", @@ -71674,7 +72726,10 @@ "name" ], "tagsProperty": "tags", - "tagsStyle": "stringMap" + "tagsStyle": "stringMap", + "cfRef": { + "property": "Arn" + } }, "aws-native:omics:AnnotationStore": { "cf": "AWS::Omics::AnnotationStore", @@ -72335,7 +73390,10 @@ "createOnly": [ "name", "type" - ] + ], + "cfRef": { + "property": "Name" + } }, "aws-native:opensearchserverless:Collection": { "cf": "AWS::OpenSearchServerless::Collection", @@ -72425,7 +73483,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArrayCreateOnly" + "tagsStyle": "keyValueArrayCreateOnly", + "cfRef": { + "property": "Id" + } }, "aws-native:opensearchserverless:LifecyclePolicy": { "cf": "AWS::OpenSearchServerless::LifecyclePolicy", @@ -72546,6 +73607,9 @@ ], "irreversibleNames": { "awsId": "Id" + }, + "cfRef": { + "property": "Name" } }, "aws-native:opensearchserverless:SecurityPolicy": { @@ -72600,7 +73664,10 @@ "createOnly": [ "name", "type" - ] + ], + "cfRef": { + "property": "Name" + } }, "aws-native:opensearchserverless:VpcEndpoint": { "cf": "AWS::OpenSearchServerless::VpcEndpoint", @@ -72673,6 +73740,9 @@ ], "irreversibleNames": { "awsId": "Id" + }, + "cfRef": { + "property": "Id" } }, "aws-native:opensearchservice:Application": { @@ -73459,7 +74529,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:organizations:Policy": { "cf": "AWS::Organizations::Policy", @@ -74586,7 +75659,10 @@ "datasetType", "name", "schemaArn" - ] + ], + "cfRef": { + "property": "Name" + } }, "aws-native:personalize:DatasetGroup": { "cf": "AWS::Personalize::DatasetGroup", @@ -74644,7 +75720,10 @@ "kmsKeyArn", "name", "roleArn" - ] + ], + "cfRef": { + "property": "Name" + } }, "aws-native:personalize:Schema": { "cf": "AWS::Personalize::Schema", @@ -74705,7 +75784,10 @@ "domain", "name", "schema" - ] + ], + "cfRef": { + "property": "Name" + } }, "aws-native:personalize:Solution": { "cf": "AWS::Personalize::Solution", @@ -74800,6 +75882,9 @@ "irreversibleNames": { "performAutoMl": "PerformAutoML", "performHpo": "PerformHPO" + }, + "cfRef": { + "property": "Name" } }, "aws-native:pinpoint:InAppTemplate": { @@ -75046,7 +76131,10 @@ "targetParameters" ], "tagsProperty": "tags", - "tagsStyle": "stringMap" + "tagsStyle": "stringMap", + "cfRef": { + "property": "Name" + } }, "aws-native:proton:EnvironmentAccountConnection": { "cf": "AWS::Proton::EnvironmentAccountConnection", @@ -75132,7 +76220,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:proton:EnvironmentTemplate": { "cf": "AWS::Proton::EnvironmentTemplate", @@ -75212,7 +76303,10 @@ "provisioning" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:proton:ServiceTemplate": { "cf": "AWS::Proton::ServiceTemplate", @@ -75292,7 +76386,10 @@ "pipelineProvisioning" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:qbusiness:Application": { "cf": "AWS::QBusiness::Application", @@ -77698,7 +78795,10 @@ "resourceType" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:rbin:Rule": { "cf": "AWS::Rbin::Rule", @@ -78615,7 +79715,10 @@ "dbClusterParameterGroupName": "DBClusterParameterGroupName" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "DBClusterParameterGroupName" + } }, "aws-native:rds:DbInstance": { "cf": "AWS::RDS::DBInstance", @@ -79363,7 +80466,10 @@ "vpcSecurityGroups": "VPCSecurityGroups" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "DBInstanceIdentifier" + } }, "aws-native:rds:DbParameterGroup": { "cf": "AWS::RDS::DBParameterGroup", @@ -79436,7 +80542,10 @@ "dbParameterGroupName": "DBParameterGroupName" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "DBParameterGroupName" + } }, "aws-native:rds:DbProxy": { "cf": "AWS::RDS::DBProxy", @@ -79584,7 +80693,10 @@ "requireTls": "RequireTLS" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "DBProxyName" + } }, "aws-native:rds:DbProxyEndpoint": { "cf": "AWS::RDS::DBProxyEndpoint", @@ -79696,7 +80808,10 @@ "dbProxyName": "DBProxyName" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "DBProxyEndpointName" + } }, "aws-native:rds:DbProxyTargetGroup": { "cf": "AWS::RDS::DBProxyTargetGroup", @@ -79774,6 +80889,9 @@ "dbClusterIdentifiers": "DBClusterIdentifiers", "dbInstanceIdentifiers": "DBInstanceIdentifiers", "dbProxyName": "DBProxyName" + }, + "cfRef": { + "property": "TargetGroupArn" } }, "aws-native:rds:DbShardGroup": { @@ -79943,7 +81061,10 @@ "dbSubnetGroupName": "DBSubnetGroupName" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "DBSubnetGroupName" + } }, "aws-native:rds:EventSubscription": { "cf": "AWS::RDS::EventSubscription", @@ -80341,7 +81462,10 @@ "optionGroupName" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "OptionGroupName" + } }, "aws-native:redshift:Cluster": { "cf": "AWS::Redshift::Cluster", @@ -80836,7 +81960,10 @@ "multiAz": "MultiAZ" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "ClusterIdentifier" + } }, "aws-native:redshift:ClusterParameterGroup": { "cf": "AWS::Redshift::ClusterParameterGroup", @@ -80976,7 +82103,10 @@ "tags/*/Value" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "ClusterSubnetGroupName" + } }, "aws-native:redshift:EndpointAccess": { "cf": "AWS::Redshift::EndpointAccess", @@ -81490,7 +82620,10 @@ }, "createOnly": [ "scheduledActionName" - ] + ], + "cfRef": { + "property": "ScheduledActionName" + } }, "aws-native:redshiftserverless:Namespace": { "cf": "AWS::RedshiftServerless::Namespace", @@ -82305,7 +83438,10 @@ "collectionId" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "CollectionId" + } }, "aws-native:rekognition:Project": { "cf": "AWS::Rekognition::Project", @@ -82331,7 +83467,10 @@ }, "createOnly": [ "projectName" - ] + ], + "cfRef": { + "property": "ProjectName" + } }, "aws-native:rekognition:StreamProcessor": { "cf": "AWS::Rekognition::StreamProcessor", @@ -82518,7 +83657,10 @@ "s3Destination": "S3Destination" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:resiliencehub:App": { "cf": "AWS::ResilienceHub::App", @@ -82710,7 +83852,10 @@ "tier" ], "tagsProperty": "tags", - "tagsStyle": "stringMap" + "tagsStyle": "stringMap", + "cfRef": { + "property": "PolicyArn" + } }, "aws-native:resourceexplorer2:DefaultViewAssociation": { "cf": "AWS::ResourceExplorer2::DefaultViewAssociation", @@ -82774,7 +83919,10 @@ "type" ], "tagsProperty": "tags", - "tagsStyle": "stringMap" + "tagsStyle": "stringMap", + "cfRef": { + "property": "Arn" + } }, "aws-native:resourceexplorer2:View": { "cf": "AWS::ResourceExplorer2::View", @@ -82848,7 +83996,10 @@ "viewName" ], "tagsProperty": "tags", - "tagsStyle": "stringMap" + "tagsStyle": "stringMap", + "cfRef": { + "property": "ViewArn" + } }, "aws-native:resourcegroups:Group": { "cf": "AWS::ResourceGroups::Group", @@ -83050,7 +84201,10 @@ "name" ], "tagsProperty": "tags", - "tagsStyle": "stringMap" + "tagsStyle": "stringMap", + "cfRef": { + "property": "Arn" + } }, "aws-native:robomaker:Robot": { "cf": "AWS::RoboMaker::Robot", @@ -83128,7 +84282,10 @@ "name" ], "tagsProperty": "tags", - "tagsStyle": "stringMap" + "tagsStyle": "stringMap", + "cfRef": { + "property": "Arn" + } }, "aws-native:robomaker:RobotApplication": { "cf": "AWS::RoboMaker::RobotApplication", @@ -83217,7 +84374,10 @@ "sources" ], "tagsProperty": "tags", - "tagsStyle": "stringMap" + "tagsStyle": "stringMap", + "cfRef": { + "property": "Arn" + } }, "aws-native:robomaker:RobotApplicationVersion": { "cf": "AWS::RoboMaker::RobotApplicationVersion", @@ -83257,7 +84417,10 @@ "createOnly": [ "application", "currentRevisionId" - ] + ], + "cfRef": { + "property": "Arn" + } }, "aws-native:robomaker:SimulationApplication": { "cf": "AWS::RoboMaker::SimulationApplication", @@ -83365,7 +84528,10 @@ "sources" ], "tagsProperty": "tags", - "tagsStyle": "stringMap" + "tagsStyle": "stringMap", + "cfRef": { + "property": "Arn" + } }, "aws-native:robomaker:SimulationApplicationVersion": { "cf": "AWS::RoboMaker::SimulationApplicationVersion", @@ -83405,7 +84571,10 @@ "createOnly": [ "application", "currentRevisionId" - ] + ], + "cfRef": { + "property": "Arn" + } }, "aws-native:rolesanywhere:Crl": { "cf": "AWS::RolesAnywhere::CRL", @@ -83721,6 +84890,9 @@ ], "irreversibleNames": { "awsId": "Id" + }, + "cfRef": { + "property": "Id" } }, "aws-native:route53:Dnssec": { @@ -83743,7 +84915,10 @@ ], "createOnly": [ "hostedZoneId" - ] + ], + "cfRef": { + "property": "HostedZoneId" + } }, "aws-native:route53:HealthCheck": { "cf": "AWS::Route53::HealthCheck", @@ -83784,7 +84959,10 @@ "healthCheckConfig/MeasureLatency", "healthCheckConfig/RequestInterval", "healthCheckConfig/Type" - ] + ], + "cfRef": { + "property": "HealthCheckId" + } }, "aws-native:route53:HostedZone": { "cf": "AWS::Route53::HostedZone", @@ -83868,7 +85046,10 @@ "vpcs": "VPCs" }, "tagsProperty": "hostedZoneTags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:route53:KeySigningKey": { "cf": "AWS::Route53::KeySigningKey", @@ -84299,7 +85480,10 @@ ], "writeOnly": [ "clusterArn" - ] + ], + "cfRef": { + "property": "RoutingControlArn" + } }, "aws-native:route53recoverycontrol:SafetyRule": { "cf": "AWS::Route53RecoveryControl::SafetyRule", @@ -84617,7 +85801,10 @@ "resourceSetType" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "ResourceSetName" + } }, "aws-native:route53resolver:FirewallDomainList": { "cf": "AWS::Route53Resolver::FirewallDomainList", @@ -84932,7 +86119,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:route53resolver:OutpostResolver": { "cf": "AWS::Route53Resolver::OutpostResolver", @@ -85079,6 +86269,9 @@ ], "irreversibleNames": { "awsId": "Id" + }, + "cfRef": { + "property": "Id" } }, "aws-native:route53resolver:ResolverDnssecConfig": { @@ -85113,6 +86306,9 @@ ], "irreversibleNames": { "awsId": "Id" + }, + "cfRef": { + "property": "Id" } }, "aws-native:route53resolver:ResolverQueryLoggingConfig": { @@ -85182,6 +86378,9 @@ ], "irreversibleNames": { "awsId": "Id" + }, + "cfRef": { + "property": "Id" } }, "aws-native:route53resolver:ResolverQueryLoggingConfigAssociation": { @@ -85234,6 +86433,9 @@ ], "irreversibleNames": { "awsId": "Id" + }, + "cfRef": { + "property": "Id" } }, "aws-native:route53resolver:ResolverRule": { @@ -85457,7 +86659,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:s3:AccessGrant": { "cf": "AWS::S3::AccessGrant", @@ -85739,7 +86944,10 @@ "bucketAccountId", "name", "vpcConfiguration" - ] + ], + "cfRef": { + "property": "Name" + } }, "aws-native:s3:Bucket": { "cf": "AWS::S3::Bucket", @@ -85976,7 +87184,10 @@ "websiteUrl": "WebsiteURL" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "BucketName" + } }, "aws-native:s3:BucketPolicy": { "cf": "AWS::S3::BucketPolicy", @@ -86068,7 +87279,10 @@ "name", "publicAccessBlockConfiguration", "regions" - ] + ], + "cfRef": { + "property": "Name" + } }, "aws-native:s3:MultiRegionAccessPointPolicy": { "cf": "AWS::S3::MultiRegionAccessPointPolicy", @@ -86103,7 +87317,10 @@ ], "createOnly": [ "mrapName" - ] + ], + "cfRef": { + "property": "MrapName" + } }, "aws-native:s3:StorageLens": { "cf": "AWS::S3::StorageLens", @@ -86439,7 +87656,10 @@ "bucket", "name", "vpcConfiguration" - ] + ], + "cfRef": { + "property": "Arn" + } }, "aws-native:s3outposts:Bucket": { "cf": "AWS::S3Outposts::Bucket", @@ -86637,6 +87857,9 @@ ], "irreversibleNames": { "awsId": "Id" + }, + "cfRef": { + "property": "Arn" } }, "aws-native:sagemaker:App": { @@ -86731,7 +87954,10 @@ "tags" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArrayCreateOnly" + "tagsStyle": "keyValueArrayCreateOnly", + "cfRef": { + "property": "AppName" + } }, "aws-native:sagemaker:AppImageConfig": { "cf": "AWS::SageMaker::AppImageConfig", @@ -86804,7 +88030,10 @@ "tags" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArrayCreateOnly" + "tagsStyle": "keyValueArrayCreateOnly", + "cfRef": { + "property": "AppImageConfigName" + } }, "aws-native:sagemaker:Cluster": { "cf": "AWS::SageMaker::Cluster", @@ -87353,7 +88582,10 @@ "tags" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArrayCreateOnly" + "tagsStyle": "keyValueArrayCreateOnly", + "cfRef": { + "property": "DomainId" + } }, "aws-native:sagemaker:Endpoint": { "cf": "AWS::SageMaker::Endpoint", @@ -87449,7 +88681,10 @@ "retainDeploymentConfig" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "EndpointArn" + } }, "aws-native:sagemaker:FeatureGroup": { "cf": "AWS::SageMaker::FeatureGroup", @@ -87772,6 +89007,9 @@ ], "irreversibleNames": { "mlFramework": "MLFramework" + }, + "cfRef": { + "property": "ImageVersionArn" } }, "aws-native:sagemaker:InferenceComponent": { @@ -88386,7 +89624,10 @@ "securityConfig" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "ModelCardName" + } }, "aws-native:sagemaker:ModelExplainabilityJobDefinition": { "cf": "AWS::SageMaker::ModelExplainabilityJobDefinition", @@ -89133,7 +90374,10 @@ "monitoringScheduleName" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "MonitoringScheduleArn" + } }, "aws-native:sagemaker:Pipeline": { "cf": "AWS::SageMaker::Pipeline", @@ -89580,7 +90824,10 @@ "tags" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArrayCreateOnly" + "tagsStyle": "keyValueArrayCreateOnly", + "cfRef": { + "property": "UserProfileName" + } }, "aws-native:scheduler:Schedule": { "cf": "AWS::Scheduler::Schedule", @@ -89693,7 +90940,10 @@ ], "createOnly": [ "name" - ] + ], + "cfRef": { + "property": "Name" + } }, "aws-native:scheduler:ScheduleGroup": { "cf": "AWS::Scheduler::ScheduleGroup", @@ -89980,7 +91230,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:secretsmanager:SecretTargetAttachment": { "cf": "AWS::SecretsManager::SecretTargetAttachment", @@ -90358,7 +91611,10 @@ "arn": "ARN" }, "tagsProperty": "tags", - "tagsStyle": "stringMap" + "tagsStyle": "stringMap", + "cfRef": { + "property": "ARN" + } }, "aws-native:securityhub:Insight": { "cf": "AWS::SecurityHub::Insight", @@ -90634,7 +91890,10 @@ "createOnly": [ "standardsArn" ], - "tagsProperty": "tags" + "tagsProperty": "tags", + "cfRef": { + "property": "StandardsSubscriptionArn" + } }, "aws-native:securitylake:AwsLogSource": { "cf": "AWS::SecurityLake::AwsLogSource", @@ -91485,7 +92744,10 @@ }, "createOnly": [ "name" - ] + ], + "cfRef": { + "property": "Name" + } }, "aws-native:ses:ConfigurationSetEventDestination": { "cf": "AWS::SES::ConfigurationSetEventDestination", @@ -91582,7 +92844,10 @@ "contactListName" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "ContactListName" + } }, "aws-native:ses:DedicatedIpPool": { "cf": "AWS::SES::DedicatedIpPool", @@ -92445,7 +93710,10 @@ "resourceArn" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "ProtectionArn" + } }, "aws-native:shield:ProtectionGroup": { "cf": "AWS::Shield::ProtectionGroup", @@ -92527,7 +93795,10 @@ "protectionGroupId" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "ProtectionGroupArn" + } }, "aws-native:signer:ProfilePermission": { "cf": "AWS::Signer::ProfilePermission", @@ -92740,6 +94011,9 @@ "irreversibleNames": { "schemaS3Location": "SchemaS3Location", "snapshotS3Location": "SnapshotS3Location" + }, + "cfRef": { + "property": "Name" } }, "aws-native:sns:Subscription": { @@ -92990,7 +94264,10 @@ "topicName" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "TopicArn" + } }, "aws-native:sns:TopicInlinePolicy": { "cf": "AWS::SNS::TopicInlinePolicy", @@ -93235,7 +94512,10 @@ "queueName" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "QueueUrl" + } }, "aws-native:sqs:QueueInlinePolicy": { "cf": "AWS::SQS::QueueInlinePolicy", @@ -93566,7 +94846,10 @@ "updateMethod" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:ssm:Parameter": { "cf": "AWS::SSM::Parameter", @@ -93671,7 +94954,10 @@ "tier" ], "tagsProperty": "tags", - "tagsStyle": "stringMap" + "tagsStyle": "stringMap", + "cfRef": { + "property": "Name" + } }, "aws-native:ssm:PatchBaseline": { "cf": "AWS::SSM::PatchBaseline", @@ -93838,7 +95124,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Id" + } }, "aws-native:ssm:ResourceDataSync": { "cf": "AWS::SSM::ResourceDataSync", @@ -94046,7 +95335,10 @@ ], "writeOnly": [ "plan" - ] + ], + "cfRef": { + "property": "Arn" + } }, "aws-native:ssmcontacts:ContactChannel": { "cf": "AWS::SSMContacts::ContactChannel", @@ -94111,7 +95403,10 @@ ], "writeOnly": [ "deferActivation" - ] + ], + "cfRef": { + "property": "Arn" + } }, "aws-native:ssmcontacts:Plan": { "cf": "AWS::SSMContacts::Plan", @@ -94704,7 +95999,18 @@ "principalType", "targetId", "targetType" - ] + ], + "cfRef": { + "properties": [ + "InstanceArn", + "TargetId", + "TargetType", + "PermissionSetArn", + "PrincipalType", + "PrincipalId" + ], + "delimiter": "|" + } }, "aws-native:sso:Instance": { "cf": "AWS::SSO::Instance", @@ -95152,7 +96458,10 @@ "definitionS3Location": "DefinitionS3Location" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:stepfunctions:StateMachineAlias": { "cf": "AWS::StepFunctions::StateMachineAlias", @@ -95408,7 +96717,10 @@ ], "writeOnly": [ "versionId" - ] + ], + "cfRef": { + "property": "TeamId" + } }, "aws-native:synthetics:Canary": { "cf": "AWS::Synthetics::Canary", @@ -95603,7 +96915,10 @@ "vpcConfig": "VPCConfig" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:synthetics:Group": { "cf": "AWS::Synthetics::Group", @@ -95662,7 +96977,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Name" + } }, "aws-native:systemsmanagersap:Application": { "cf": "AWS::SystemsManagerSAP::Application", @@ -95830,7 +97148,10 @@ "databaseName" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "DatabaseName" + } }, "aws-native:timestream:InfluxDbInstance": { "cf": "AWS::Timestream::InfluxDBInstance", @@ -96216,7 +97537,10 @@ "sqTargetConfiguration": "SQTargetConfiguration" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:timestream:Table": { "cf": "AWS::Timestream::Table", @@ -96870,7 +98194,10 @@ "s3StorageOptions": "S3StorageOptions" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:transfer:User": { "cf": "AWS::Transfer::User", @@ -97410,7 +98737,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:vpclattice:AuthPolicy": { "cf": "AWS::VpcLattice::AuthPolicy", @@ -97549,7 +98879,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:vpclattice:ResourcePolicy": { "cf": "AWS::VpcLattice::ResourcePolicy", @@ -97580,7 +98913,10 @@ ], "createOnly": [ "resourceArn" - ] + ], + "cfRef": { + "property": "ResourceArn" + } }, "aws-native:vpclattice:Rule": { "cf": "AWS::VpcLattice::Rule", @@ -97684,7 +99020,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:vpclattice:Service": { "cf": "AWS::VpcLattice::Service", @@ -97781,7 +99120,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:vpclattice:ServiceNetwork": { "cf": "AWS::VpcLattice::ServiceNetwork", @@ -97854,7 +99196,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:vpclattice:ServiceNetworkServiceAssociation": { "cf": "AWS::VpcLattice::ServiceNetworkServiceAssociation", @@ -97954,7 +99299,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:vpclattice:ServiceNetworkVpcAssociation": { "cf": "AWS::VpcLattice::ServiceNetworkVpcAssociation", @@ -98052,7 +99400,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:vpclattice:TargetGroup": { "cf": "AWS::VpcLattice::TargetGroup", @@ -98156,7 +99507,10 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "Arn" + } }, "aws-native:wafv2:IpSet": { "cf": "AWS::WAFv2::IPSet", @@ -98251,7 +99605,15 @@ "ipAddressVersion": "IPAddressVersion" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "properties": [ + "Name", + "Id", + "Scope" + ], + "delimiter": "|" + } }, "aws-native:wafv2:LoggingConfiguration": { "cf": "AWS::WAFv2::LoggingConfiguration", @@ -98314,7 +99676,10 @@ ], "createOnly": [ "resourceArn" - ] + ], + "cfRef": { + "property": "ResourceArn" + } }, "aws-native:wafv2:RegexPatternSet": { "cf": "AWS::WAFv2::RegexPatternSet", @@ -98399,7 +99764,15 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "properties": [ + "Name", + "Id", + "Scope" + ], + "delimiter": "|" + } }, "aws-native:wafv2:RuleGroup": { "cf": "AWS::WAFv2::RuleGroup", @@ -98709,7 +100082,15 @@ "awsId": "Id" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "properties": [ + "Name", + "Id", + "Scope" + ], + "delimiter": "|" + } }, "aws-native:wafv2:WebAclAssociation": { "cf": "AWS::WAFv2::WebACLAssociation", @@ -99192,7 +100573,10 @@ "type" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArrayCreateOnly" + "tagsStyle": "keyValueArrayCreateOnly", + "cfRef": { + "property": "AssistantId" + } }, "aws-native:wisdom:AssistantAssociation": { "cf": "AWS::Wisdom::AssistantAssociation", @@ -99266,7 +100650,10 @@ "tags" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArrayCreateOnly" + "tagsStyle": "keyValueArrayCreateOnly", + "cfRef": { + "property": "AssistantAssociationId" + } }, "aws-native:wisdom:KnowledgeBase": { "cf": "AWS::Wisdom::KnowledgeBase", @@ -99367,7 +100754,10 @@ "tags" ], "tagsProperty": "tags", - "tagsStyle": "keyValueArrayCreateOnly" + "tagsStyle": "keyValueArrayCreateOnly", + "cfRef": { + "property": "KnowledgeBaseId" + } }, "aws-native:wisdom:MessageTemplate": { "cf": "AWS::Wisdom::MessageTemplate", @@ -100694,7 +102084,10 @@ "groupArn": "GroupARN" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "GroupARN" + } }, "aws-native:xray:ResourcePolicy": { "cf": "AWS::XRay::ResourcePolicy", @@ -100812,7 +102205,10 @@ "ruleArn": "RuleARN" }, "tagsProperty": "tags", - "tagsStyle": "keyValueArray" + "tagsStyle": "keyValueArray", + "cfRef": { + "property": "RuleARN" + } } }, "types": { diff --git a/provider/pkg/metadata/metadata.go b/provider/pkg/metadata/metadata.go index f63f4aeead..339a725bcf 100644 --- a/provider/pkg/metadata/metadata.go +++ b/provider/pkg/metadata/metadata.go @@ -26,6 +26,9 @@ type CloudAPIResource struct { IrreversibleNames map[string]string `json:"irreversibleNames,omitempty"` TagsProperty string `json:"tagsProperty,omitempty"` TagsStyle default_tags.TagsStyle `json:"tagsStyle,omitempty"` + + // Describes the behavior of the CF Ref intrinsic for this resource. + CfRef *CfRefBehavior `json:"cfRef,omitempty"` } type AutoNamingSpec struct { @@ -54,3 +57,28 @@ const ExtensionResourceToken = "aws-native:index:ExtensionResource" // CfnCustomResourceToken is a Pulumi token for the resource to deploy // CloudFormation custom resources. const CfnCustomResourceToken = "aws-native:cloudformation:CustomResourceEmulator" + +// Describes the behavior of CloudFormation Ref intrinsic for a given resource. +// +// One and only one of [Property], [Properties], [NotSupported], [NotSupportedYet] must be set. +type CfRefBehavior struct { + // If set, indicates that Ref will return the value of the given Resource property directly. + Property string `json:"property,omitempty"` + + // If set, indicates that Ref will return a string value obtained by joining several Resource properties with a + // delimiter, typically "|". + // + // Usually these properties are strings, but they can also be objects, in which case their values are + // JSON-encoded. See AWS::LakeFormation::PrincipalPermissions for an example of this. + Properties []string `json:"properties,omitempty"` + + // Delimiter, typically "|". See [Properties]. + Delimiter string `json:"delimiter,omitempty"` + + // If set, Ref is not supported for this resource in CF. + NotSupported bool `json:"notSupported,omitempty"` + + // If set, Ref is supported in CF but this metadata is not yet available in the Pulumi provider but might be + // added in a later version. + NotSupportedYet bool `json:"notSupportedYet,omitempty"` +} diff --git a/provider/pkg/refdb/package.go b/provider/pkg/refdb/package.go new file mode 100644 index 0000000000..1726cb442e --- /dev/null +++ b/provider/pkg/refdb/package.go @@ -0,0 +1,8 @@ +// Copyright 2016-2024, Pulumi Corporation. + +// Package refdb is used internally to manage metadata about CloudFormation Ref. +// +// The definitions from this package are used at build time only. +// +// Check the metadata package for accessing the results. +package refdb diff --git a/provider/pkg/refdb/refdb.go b/provider/pkg/refdb/refdb.go new file mode 100644 index 0000000000..4db2f0f176 --- /dev/null +++ b/provider/pkg/refdb/refdb.go @@ -0,0 +1,58 @@ +// Copyright 2016-2024, Pulumi Corporation. + +package refdb + +import ( + "encoding/json" + "os" + + "github.com/pulumi/pulumi-aws-native/provider/pkg/metadata" +) + +// Collected metadata about the Ref intrinsic function. +// +// In particular, the values that Ref intrinsic function returns are not consistent across resources. Documentation has +// some information about what this function would return for a particular resource but it is not easily +// machine-readable. +// +// See: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html +type RefDB struct { + // Indexed by CloudFormation Resource ID + Resources map[string]RefDBResource `json:"resources"` +} + +// See [RefDB]. +type RefDBResource struct { + RefReturns RefDBRecord `json:"refReturns"` +} + +// See [RefDB]. +type RefDBRecord struct { + metadata.CfRefBehavior + + // If set, indicates the data point was assigned by a heuristic rule. This annotation can be removed once it is + // confirmed the metadata correctly describes the behavior. + Heuristic string `json:"heuristic,omitempty"` +} + +func (data *RefDB) StoreJSONFile(file string) error { + bytes, err := json.MarshalIndent(data, "", " ") + if err != nil { + return err + } + return os.WriteFile(file, bytes, 0600) +} + +func (data *RefDB) LoadJSONFile(file string) error { + bytes, err := os.ReadFile(file) + if err != nil { + return err + } + if err := json.Unmarshal(bytes, data); err != nil { + return err + } + if data.Resources == nil { + data.Resources = map[string]RefDBResource{} + } + return nil +} diff --git a/provider/pkg/schema/gen.go b/provider/pkg/schema/gen.go index d19a2792f8..099f1f839e 100644 --- a/provider/pkg/schema/gen.go +++ b/provider/pkg/schema/gen.go @@ -16,6 +16,7 @@ import ( "github.com/pulumi/pulumi-aws-native/provider/pkg/default_tags" "github.com/pulumi/pulumi-aws-native/provider/pkg/metadata" "github.com/pulumi/pulumi-aws-native/provider/pkg/naming" + "github.com/pulumi/pulumi-aws-native/provider/pkg/refdb" "github.com/pulumi/pulumi-aws-native/provider/pkg/resources" "github.com/pulumi/pulumi-aws-native/provider/pkg/schema/docs" "github.com/pulumi/pulumi/pkg/v3/codegen" @@ -44,8 +45,15 @@ type RegionInfo struct { } // GatherPackage builds a package spec based on the provided CF JSON schemas. -func GatherPackage(supportedResourceTypes []string, jsonSchemas []*jsschema.Schema, - genAll bool, semanticsDocument *metadata.SemanticsSpecDocument, docsSchema *Docs, regionInfo []RegionInfo) (*pschema.PackageSpec, *metadata.CloudAPIMetadata, *Reports, error) { +func GatherPackage( + supportedResourceTypes []string, + jsonSchemas []*jsschema.Schema, + genAll bool, + semanticsDocument *metadata.SemanticsSpecDocument, + docsSchema *Docs, + regionInfo []RegionInfo, + refDB *refdb.RefDB, +) (*pschema.PackageSpec, *metadata.CloudAPIMetadata, *Reports, error) { globalTagType := pschema.ObjectTypeSpec{ Type: "object", Description: "A set of tags to apply to the resource.", @@ -435,7 +443,7 @@ func GatherPackage(supportedResourceTypes []string, jsonSchemas []*jsschema.Sche }, }) - metadata := metadata.CloudAPIMetadata{ + mdata := metadata.CloudAPIMetadata{ Resources: map[string]metadata.CloudAPIResource{}, Types: map[string]metadata.CloudAPIType{ globalTagToken: { @@ -464,7 +472,7 @@ func GatherPackage(supportedResourceTypes []string, jsonSchemas []*jsschema.Sche mod := strings.ToLower(fullMod) ctx := &cfSchemaContext{ pkg: &p, - metadata: &metadata, + metadata: &mdata, cfTypeName: cfTypeName, mod: mod, resourceName: resourceName, @@ -635,7 +643,17 @@ func GatherPackage(supportedResourceTypes []string, jsonSchemas []*jsschema.Sche }, } - return &p, &metadata, reports, nil + // Enrich with metadata about CF Ref Intrinsic function behavior. + if refDB != nil { + for resKey, res := range mdata.Resources { + if r, ok := refDB.Resources[res.CfType]; ok { + res.CfRef = &r.RefReturns.CfRefBehavior + mdata.Resources[resKey] = res + } + } + } + + return &p, &mdata, reports, nil } // cfSchemaContext holds shared information for a single CF JSON schema. diff --git a/provider/pkg/schema/gen_test.go b/provider/pkg/schema/gen_test.go index fa341a5ab4..bb074b2d9b 100644 --- a/provider/pkg/schema/gen_test.go +++ b/provider/pkg/schema/gen_test.go @@ -36,7 +36,15 @@ func runTestWithRegions(t *testing.T, spec map[string]interface{}, docs Docs, re if err != nil { t.Fatalf("Error gathering semantics: %v", err) } - packageSpec, _, reports, err := GatherPackage([]string{s.Extras["typeName"].(string)}, []*jsschema.Schema{s}, false, &semanticsDocument, &docs, regions) + packageSpec, _, reports, err := GatherPackage( + []string{s.Extras["typeName"].(string)}, + []*jsschema.Schema{s}, + false, + &semanticsDocument, + &docs, + regions, + nil, /*refdb*/ + ) if err != nil { t.Fatalf("GatherPackage failed: %v", err) } diff --git a/provider/tools/ref-parser/README.md b/provider/tools/ref-parser/README.md new file mode 100644 index 0000000000..3cc1cd09d0 --- /dev/null +++ b/provider/tools/ref-parser/README.md @@ -0,0 +1,5 @@ +# ref-parser + +This is a quick tool to assist with data cleaning tasks of building out the `ref-db.json` reference metadata on the +behavior of the Cloud Formation Ref intrinsic. This code itself is not used by the provider in production scenarios, +only the generated data is. diff --git a/provider/tools/ref-parser/autolabel.go b/provider/tools/ref-parser/autolabel.go new file mode 100644 index 0000000000..dd52d65f65 --- /dev/null +++ b/provider/tools/ref-parser/autolabel.go @@ -0,0 +1,109 @@ +package main + +import ( + "strings" + + metadata "github.com/pulumi/pulumi-aws-native/provider/pkg/refdb" +) + +// Instead of humans playing the game, let the computer assign labels based on heuristics that seem to be fairly robust. +// This should add a label in the data indicating that it was assigned by a heuristic, in case this data point ends up +// being erroneous and need correction later. +func autoLabel(schemaAbsPath, dbFile string, allResources map[string]resourceFile) error { + db := new(metadata.RefDB) + if err := db.LoadJSONFile(dbFile); err != nil { + return err + } + gs := &gameState{ + db: db, + allResources: allResources, + dbFile: dbFile, + } + for r, res := range allResources { + + if _, seen := db.Resources[r]; seen { + continue + } + + sch, err := findSchema(schemaAbsPath, r) + if err != nil { + continue + } + + switch { + // primaryIdentifier is "arn" and docs indicate Ref returns the ARN. + case Categorize(res.RefSection).Name() == RefReturnsArn.Name() && + len(sch.PrimaryIdentifier) == 1 && + strings.Contains(strings.ToLower(sch.PrimaryIdentifier[0]), "arn"): + + if err := gs.edit(r, "heuristic", func(ri *metadata.RefDBResource) { + ri.RefReturns.Property = strings.TrimPrefix(sch.PrimaryIdentifier[0], "/properties/") + ri.RefReturns.Heuristic = RefReturnsArn.Name() + }); err != nil { + return err + } + // there is only one property called "ARN" or "FooARN" and docs indicate Ref returns the ARN. + case Categorize(res.RefSection).Name() == RefReturnsArn.Name(): + if nameProp, ok := findUniqueProperty(sch, r, "ARN"); ok { + if err := gs.edit(r, "heuristic", func(ri *metadata.RefDBResource) { + ri.RefReturns.Property = nameProp + ri.RefReturns.Heuristic = RefReturnsArn.Name() + }); err != nil { + return err + } + } + // there is only one property called "Name" or "FooName" and docs indicate Ref returns the Name. + case Categorize(res.RefSection).Name() == RefReturnsName.Name(): + if nameProp, ok := findUniqueProperty(sch, r, "Name"); ok { + if err := gs.edit(r, "heuristic", func(ri *metadata.RefDBResource) { + ri.RefReturns.Property = nameProp + ri.RefReturns.Heuristic = RefReturnsName.Name() + }); err != nil { + return err + } + } + // there is a property called "Id" or "FooId" and docs indicate Ref returns the ID. + case Categorize(res.RefSection).Name() == RefReturnsID.Name(): + idProp := "Id" + _, hasID := sch.Properties[idProp] + if !hasID { + idProp = simpleResName(r) + "Id" + _, hasID = sch.Properties[idProp] + } + + if hasID { + if err := gs.edit(r, "heuristic", func(ri *metadata.RefDBResource) { + ri.RefReturns.Property = idProp + ri.RefReturns.Heuristic = RefReturnsID.Name() + }); err != nil { + return err + } + } + } + } + return nil +} + +func simpleResName(r string) string { + parts := strings.Split(r, "::") + return parts[len(parts)-1] +} + +func findUniqueProperty(s *schema, resourceName, propertyName string) (string, bool) { + count := 0 + found := "" + for p := range s.Properties { + if p == propertyName { + found = p + count++ + } + if p == simpleResName(resourceName)+propertyName { + found = p + count++ + } + } + if count == 1 { + return found, true + } + return "", false +} diff --git a/provider/tools/ref-parser/cat.go b/provider/tools/ref-parser/cat.go new file mode 100644 index 0000000000..ae7fedeb73 --- /dev/null +++ b/provider/tools/ref-parser/cat.go @@ -0,0 +1,100 @@ +package main + +import ( + "regexp" + "strings" +) + +type Category interface { + isCategory() + Name() string +} + +type simpleCategory string + +func (s simpleCategory) isCategory() {} + +func (s simpleCategory) Name() string { + return string(s) +} + +var Uncategorized Category = simpleCategory("Uncategorized") +var Undocumented Category = simpleCategory("Undocumented") +var RefReturnsArn Category = simpleCategory("RefReturnsArn") +var RefReturnsName Category = simpleCategory("RefReturnsName") +var RefReturnsID Category = simpleCategory("RefReturnsID") +var ShouldNotBeUsed Category = simpleCategory("ShouldNotBeUsed") + +type categorizationRule struct { + Category Category + Pattern *regexp.Regexp +} + +var categorizationRules = []categorizationRule{ + { + Category: RefReturnsArn, + Pattern: regexp.MustCompile(`^The Amazon Resource Name ..ARN.. of the certificate authority.?.?$`), + }, + { + Category: RefReturnsArn, + Pattern: regexp.MustCompile("When you pass the logical ID of this resource to the intrinsic .Ref..?function, .Ref.?.?returns the ARN"), + }, + { + Category: ShouldNotBeUsed, + Pattern: regexp.MustCompile("^This reference should not be used in CloudFormation templates"), + }, + { + Category: RefReturnsArn, + Pattern: regexp.MustCompile("^When you pass the logical ID of this resource to the intrinsic .Ref.?.?function, .Ref.?.?returns the Arn of the .* that is created by the"), + }, + { + Category: RefReturnsArn, + Pattern: regexp.MustCompile("^When you pass the logical ID of this resource to the intrinsic .Ref.?.?function, .Ref.?.?returns the .* ARN"), + }, + { + Category: RefReturnsArn, + Pattern: regexp.MustCompile("^When you pass the logical ID of this resource to the intrinsic .Ref.?.?function, .Ref.?.?returns the resource ARN"), + }, + { + Category: RefReturnsArn, + Pattern: regexp.MustCompile("^When you pass the logical ID of this resource to the intrinsic .Ref.?.?function, .Ref.?.?returns the Amazon Resource Name"), + }, + { + Category: RefReturnsArn, + Pattern: regexp.MustCompile("^When you pass the logical ID of .* resource to the intrinsic .Ref.?.?function, the function returns the Amazon Resource Name"), + }, + { + Category: RefReturnsName, + Pattern: regexp.MustCompile("^When you pass the logical ID of this resource to the intrinsic .Ref.?.?function, .Ref.?.?returns the value of [`][^`]*Name[`]"), + }, + { + Category: RefReturnsName, + Pattern: regexp.MustCompile("When the logical ID of this resource is provided to the Ref intrinsic function, .Ref. returns the .* name"), + }, + { + Category: RefReturnsName, + Pattern: regexp.MustCompile("^When you pass the logical ID of this resource to the intrinsic .Ref.?.?function, .Ref.?.?returns the name"), + }, + { + Category: RefReturnsName, + Pattern: regexp.MustCompile("^When you pass the logical ID of this resource to the intrinsic .Ref.?.?function, .Ref.?.?returns the .* name"), + }, + { + Category: RefReturnsID, + Pattern: regexp.MustCompile("^When you pass the logical ID of this resource to the intrinsic .Ref.?.?function, .Ref.?.?returns the.*ID"), + }, + { + Category: RefReturnsID, + Pattern: regexp.MustCompile("When you pass the logical ID of this resource to the intrinsic .Ref.?.?function, .Ref.?.?returns a .* ID"), + }, +} + +func Categorize(rawRefSection string) Category { + clean := strings.TrimSpace(rawRefSection) + for _, rule := range categorizationRules { + if mm := rule.Pattern.FindStringSubmatch(clean); mm != nil { + return rule.Category + } + } + return Uncategorized +} diff --git a/provider/tools/ref-parser/cat_test.go b/provider/tools/ref-parser/cat_test.go new file mode 100644 index 0000000000..c88c640b79 --- /dev/null +++ b/provider/tools/ref-parser/cat_test.go @@ -0,0 +1,64 @@ +package main + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func TestCategorize(t *testing.T) { + assert.Equal(t, + RefReturnsArn, + Categorize("\nThe Amazon Resource Name \\(ARN\\) of the certificate authority\\.\n\n")) + + assert.Equal(t, + RefReturnsArn, + Categorize("When you pass the logical ID of this resource to the intrinsic `Ref`function, `Ref`returns the ARN of the analyzer created\\.\n\nFor more information about using the `Ref`function, see [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html")) + + assert.Equal(t, + ShouldNotBeUsed, + Categorize("\nThis reference should not be used in CloudFormation templates\\. Instead, use `AWS::ACMPCA::Certificate.Arn` to identify a certificate, and use `AWS::ACMPCA::Certificate.CertificateAuthorityArn` to identify a certificate authority\\.\n\n")) + + assert.Equal(t, + RefReturnsArn, + Categorize("When you pass the logical ID of this resource to the intrinsic `Ref`function, `Ref`returns the Arn of the Cost Category that is created by the template\\.")) + + assert.Equal(t, + RefReturnsArn, + Categorize("When you pass the logical ID of this resource to the intrinsic `Ref`function, `Ref`returns the resource ARN\\. For example:")) + + assert.Equal(t, + RefReturnsName, + Categorize("When you pass the logical ID of this resource to the intrinsic `Ref`function, `Ref`returns the value of `DashboardName`\\.")) + + assert.Equal(t, + RefReturnsName, + Categorize("When you pass the logical ID of this resource to the intrinsic `Ref`function, `Ref`returns the name of the resource\\.")) + + assert.Equal(t, + RefReturnsName, + Categorize("When you pass the logical ID of this resource to the intrinsic `Ref`function, `Ref`returns the DB instance name\\.")) + + assert.Equal(t, + RefReturnsArn, + Categorize("When you pass the logical ID of this resource to the intrinsic `Ref`function, `Ref`returns the scheduling policy ARN, such as `arn:aws:batch:us-east-1:111122223333:scheduling-policy/HighPriority`\\.")) + + assert.Equal(t, + RefReturnsID, + Categorize("When you pass the logical ID of this resource to the intrinsic `Ref`function, `Ref`returns the wireless device ID\\.")) + + assert.Equal(t, + RefReturnsID, + Categorize("When you pass the logical ID of this resource to the intrinsic `Ref`function, `Ref`returns a generated ID, such as `us-east-2_zgaEXAMPLE`\\.")) + + assert.Equal(t, + RefReturnsArn, + Categorize("When you pass the logical ID of this resource to the intrinsic `Ref`function, `Ref`returns the Amazon Resource Name \\(ARN\\) of the endpoint configuration, such as `arn:aws:sagemaker:us-west-2:012345678901:notebook-instance-lifecycle-config/mylifecycleconfig`")) + + assert.Equal(t, + RefReturnsName, + Categorize("When the logical ID of this resource is provided to the Ref intrinsic function, .Ref. returns the resource name")) + + assert.Equal(t, + RefReturnsArn, + Categorize("When you pass the logical ID of an `AWS::RoboMaker::SimulationApplication` resource to the intrinsic `Ref` function, the function returns the Amazon Resource Name \\(ARN\\) of the simulation application, such as `arn:aws:robomaker:us-west-2:123456789012:simulation-application/MySimulationApplication/1546541201334`\\. ")) +} diff --git a/provider/tools/ref-parser/game.go b/provider/tools/ref-parser/game.go new file mode 100644 index 0000000000..93ac1acebc --- /dev/null +++ b/provider/tools/ref-parser/game.go @@ -0,0 +1,173 @@ +package main + +import ( + "fmt" + "sort" + "strings" + + metadata "github.com/pulumi/pulumi-aws-native/provider/pkg/refdb" +) + +// Run the game loop where the user is trying to guess what CloudFormation Ref intrinsic function will return and record +// this guess in a database. +func game(schemaAbsPath, dbFile string, allResources map[string]resourceFile) error { + db := new(metadata.RefDB) + if err := db.LoadJSONFile(dbFile); err != nil { + return err + } + gs := &gameState{ + db: db, + allResources: allResources, + dbFile: dbFile, + } + for step := 1; true; step++ { + r, ok := gs.nextResource() + if !ok { + fmt.Println("No resources left to map") + return nil + } + + fmt.Printf("Step %d: %d/%d resources done\n", step, gs.labelledResourceCount(), gs.totalResourceCount()) + + res, ok := allResources[r] + if !ok { + return fmt.Errorf("Resource not found: %s", res) + } + + props, err := findProperties(schemaAbsPath, r) + if err != nil { + return err + } + + sch, err := findSchema(schemaAbsPath, r) + if err != nil { + return err + } + + primaryIdentifierIndex := func(prop string, notFound int) int { + for i, p := range sch.PrimaryIdentifier { + if strings.TrimPrefix(p, "/properties/") == prop { + return i + } + } + return notFound + } + + // Going to reorder properties so that properties that are part of the PrimaryIdentifier come first. + // This makes it easier for the player to select these as the answer, as they are very commonly the + // answer. + sort.Slice(props, func(i, j int) bool { + if primaryIdentifierIndex(props[i], 1000) < primaryIdentifierIndex(props[j], 1000) { + return true + } + return props[i] < props[j] + }) + + fmt.Println("ResourceID: ", r) + fmt.Println("PrimaryID : ", strings.Join(sch.PrimaryIdentifier, " ")) + fmt.Println("Category: ", Categorize(res.RefSection).Name()) + fmt.Println("RefSection: ", res.RefSection) + fmt.Println("Enter one of the following: ") + + fmt.Printf("%3d: It is unclear what Ref would return\n", 0) + + for i, p := range props { + fmt.Printf("%3d: Ref returns the %q property\n", i+1, p) + } + + notSupported := 999 + primaryPipeDelimited := 111 + + var pkProps []string + for _, pi := range sch.PrimaryIdentifier { + pkProps = append(pkProps, strings.TrimPrefix(pi, "/properties/")) + } + + fmt.Printf("%3d: Ref is obtained by joining the PrimaryID on `|`: %s\n", + primaryPipeDelimited, strings.Join(pkProps, "|")) + fmt.Printf("%3d: Ref is not supported for this resource\n", notSupported) + + fmt.Println("Your choice:") + + var choice int + _, err = fmt.Scanf("%d", &choice) + if err != nil { + return err + } + + if choice == primaryPipeDelimited { + if err := gs.edit(r, "PrimaryPipeDeilmited", func(ri *metadata.RefDBResource) { + ri.RefReturns.Delimiter = "|" + ri.RefReturns.Properties = pkProps + }); err != nil { + return err + } + continue + } + + if choice == notSupported { + if err := gs.edit(r, "NotSupported", func(ri *metadata.RefDBResource) { + ri.RefReturns.NotSupported = true + }); err != nil { + return err + } + continue + } + + if choice == 0 { + continue + } + + prop, ok := props[choice-1], ok + if !ok { + continue + } + + if err := gs.edit(r, prop, func(ri *metadata.RefDBResource) { + ri.RefReturns.Property = prop + }); err != nil { + return err + } + } + + return nil +} + +type gameState struct { + dbFile string + db *metadata.RefDB + allResources map[string]resourceFile +} + +func (gs *gameState) edit(r, desc string, f func(*metadata.RefDBResource)) error { + rInfo := gs.db.Resources[r] + f(&rInfo) + gs.db.Resources[r] = rInfo + if err := gs.db.StoreJSONFile(gs.dbFile); err != nil { + return err + } + fmt.Println("Stored your choice in the database: ", desc) + return nil +} + +func (gs *gameState) nextResource() (string, bool) { + // Non-deterministic here to make it more fun. + for r := range gs.allResources { + if _, seen := gs.db.Resources[r]; seen { + continue + } + if strings.TrimSpace(gs.allResources[r].RefSection) == "" { + continue + } + return r, true + } + return "", false +} + +func (gs *gameState) totalResourceCount() int { + return len(gs.allResources) +} + +func (gs *gameState) labelledResourceCount() int { + return len(gs.db.Resources) +} diff --git a/provider/tools/ref-parser/main.go b/provider/tools/ref-parser/main.go new file mode 100644 index 0000000000..0349d4537b --- /dev/null +++ b/provider/tools/ref-parser/main.go @@ -0,0 +1,166 @@ +package main + +import ( + "flag" + "fmt" + "log" + "os" + "path/filepath" + "regexp" + "strings" +) + +func main() { + guide := flag.String("guide", "", "path to a folder with Cloud Formation user guide") + schema := flag.String("schema", "", "path to a folder with Cloud Formation schema JSON files") + dbFile := flag.String("db", "", "path to a database to play a guessing game") + auto := flag.Bool("auto", false, "let the computer play the guessing game") + specific := flag.String("specific", "", "specific CF resource name to target") + report := flag.Bool("report", false, "run data reporting") + flag.Parse() + + if guide == nil || *guide == "" { + log.Fatal("-guide is required") + } + + if schema == nil || *schema == "" { + log.Fatal("-schema is required") + } + + guideAbsPath, err := filepath.Abs(*guide) + if err != nil { + log.Fatal(err) + } + + schemaAbsPath, err := filepath.Abs(*schema) + if err != nil { + log.Fatal(err) + } + + rFiles, err := resourceFiles(guideAbsPath) + if err != nil { + log.Fatal(err) + } + + refCategoryCounts := map[string]int{} + + parsedFiles := []resourceFile{} + + for _, rfLoc := range rFiles { + rf, err := parseResourceFile(rfLoc) + if err != nil { + log.Fatal(err) + } + cn := rf.Category.Name() + refCategoryCounts[cn] = refCategoryCounts[cn] + 1 + parsedFiles = append(parsedFiles, rf) + } + + allResources := map[string]resourceFile{} + for _, rf := range parsedFiles { + if specific != nil && *specific != "" && rf.ResourceID != *specific { + continue + } + allResources[rf.ResourceID] = rf + } + + if report != nil && *report { + if err := reportOnRefAsPrimaryIdentifier(*dbFile, schemaAbsPath); err != nil { + log.Fatal(err) + } + return + } + + if dbFile != nil && auto != nil && *auto { + if err := autoLabel(schemaAbsPath, *dbFile, allResources); err != nil { + log.Fatal(err) + } + return + } + + if dbFile != nil { + if err := game(schemaAbsPath, *dbFile, allResources); err != nil { + log.Fatal(err) + } + return + } + + fmt.Println("Ref sections by category:") + for sec, n := range refCategoryCounts { + name := sec + if sec == "" { + name = "Uncategorized" + } + fmt.Println(name, n) + } + + fmt.Println("Sampling of un-categorized files") + for _, x := range parsedFiles { + if x.Category.Name() != Uncategorized.Name() { + continue + } + + props, err := findProperties(schemaAbsPath, x.ResourceID) + if err != nil { + log.Fatal(err) + } + + fmt.Printf("ResourceID: %s\n", x.ResourceID) + fmt.Printf("Properties: %s\n", strings.Join(props, ", ")) + fmt.Printf("RefSection: %s\n\n", x.RefSection) + } + + fmt.Println(len(rFiles)) +} + +type resourceFile struct { + ResourceID string // e.g. AWS::EC2::VPC + RefSection string // optional + Category Category +} + +var resourceIdPattern = regexp.MustCompile(`^[#]\s*([^<\n]+)`) +var refPattern = regexp.MustCompile(`(?m)^[#]+[ ]*Ref[^\n]*[\n]([^#]+)`) + +func parseResourceFile(file string) (resourceFile, error) { + fbytes, err := os.ReadFile(file) + if err != nil { + return resourceFile{}, err + } + rf := resourceFile{} + + if m := resourceIdPattern.FindSubmatch(fbytes); m != nil { + rf.ResourceID = string(m[1]) + } + if rf.ResourceID == "" { + return resourceFile{}, fmt.Errorf("Could not parse ResourceID from %q", file) + } + + if m := refPattern.FindSubmatch(fbytes); m != nil { + rf.RefSection = string(m[1]) + rf.Category = Categorize(rf.RefSection) + } else { + rf.Category = Undocumented + } + + return rf, nil +} + +func resourceFiles(guide string) ([]string, error) { + var result []string + d := filepath.Join(guide, "doc_source") + entries, err := os.ReadDir(d) + if err != nil { + return nil, err + } + for _, file := range entries { + if file.IsDir() { + continue + } + if !strings.HasPrefix(file.Name(), "aws-resource") { + continue + } + result = append(result, filepath.Join(d, file.Name())) + } + return result, nil +} diff --git a/provider/tools/ref-parser/reports.go b/provider/tools/ref-parser/reports.go new file mode 100644 index 0000000000..13117f1cb4 --- /dev/null +++ b/provider/tools/ref-parser/reports.go @@ -0,0 +1,65 @@ +package main + +import ( + "strings" + + "fmt" + metadata "github.com/pulumi/pulumi-aws-native/provider/pkg/refdb" +) + +func reportOnRefAsPrimaryIdentifier(dbFile, schemaAbsPath string) error { + + db := new(metadata.RefDB) + if err := db.LoadJSONFile(dbFile); err != nil { + return err + } + + refAsPID := map[string]struct{}{} + + for resID, res := range db.Resources { + sch, err := findSchema(schemaAbsPath, resID) + if err != nil { + return err + } + + switch { + case res.RefReturns.Property != "": + if len(sch.PrimaryIdentifier) == 1 { + if strings.TrimPrefix(sch.PrimaryIdentifier[0], "/properties/") == res.RefReturns.Property { + refAsPID[resID] = struct{}{} + } + } + case len(res.RefReturns.Properties) == len(sch.PrimaryIdentifier): + for i, p := range res.RefReturns.Properties { + if strings.TrimPrefix(sch.PrimaryIdentifier[i], "/properties/") == p { + refAsPID[resID] = struct{}{} + } + } + } + } + + fmt.Printf("Total resources with schematized Ref behavior: %d\n", len(db.Resources)) + fmt.Printf("Resources where Ref returns the primary identifier: %d\n", len(refAsPID)) + + for refID, sr := range db.Resources { + if _, ok := refAsPID[refID]; ok { + continue + } + + sch, err := findSchema(schemaAbsPath, refID) + if err != nil { + return err + } + + if sr.RefReturns.CfRefBehavior.Property != "" { + fmt.Printf("Strange resource: %s --> %q (pid=#%v)\n", refID, + sr.RefReturns.CfRefBehavior.Property, + strings.Join(sch.PrimaryIdentifier, "|")) + } else { + fmt.Printf("Strange resource: %s --> %#v\n", refID, sr.RefReturns.CfRefBehavior) + + } + } + + return nil +} diff --git a/provider/tools/ref-parser/schema.go b/provider/tools/ref-parser/schema.go new file mode 100644 index 0000000000..96297d0cd3 --- /dev/null +++ b/provider/tools/ref-parser/schema.go @@ -0,0 +1,46 @@ +package main + +import ( + "encoding/json" + "fmt" + "os" + "path/filepath" + "sort" + "strings" +) + +type schema struct { + TypeName string `json:"typeName"` + Properties map[string]any `json:"properties"` + PrimaryIdentifier []string `json:"primaryIdentifier"` +} + +// Read CF schema and find which properties are available for a resource. +func findSchema(schemaAbsPath, resourceID string) (*schema, error) { + fn := strings.ToLower(strings.ReplaceAll(resourceID, "::", "-") + ".json") + fn = strings.ReplaceAll(fn, "`", "") + file := filepath.Join(schemaAbsPath, fn) + fbytes, err := os.ReadFile(file) + if err != nil { + return nil, fmt.Errorf("No schema file for %q: %w", resourceID, err) + } + var s schema + if err := json.Unmarshal(fbytes, &s); err != nil { + return nil, err + } + return &s, nil +} + +// Read CF schema and find which properties are available for a resource. +func findProperties(schemaAbsPath, resourceID string) ([]string, error) { + s, err := findSchema(schemaAbsPath, resourceID) + if err != nil { + return nil, err + } + var res []string + for x := range s.Properties { + res = append(res, x) + } + sort.Strings(res) + return res, nil +}