Skip to content

Conversation

@aaron-dernley
Copy link
Contributor

@aaron-dernley aaron-dernley commented Jan 23, 2026

This PR restructures how CloudFormation-only AWS assets (those without a Cloud Control read handler) are generated in Clover. Instead of directly exposing CloudFormation properties at the domain root, they are now nested under a properties object, with a computed CloudFormationResourceBody output that generates the full CF resource structure.

Changes

New Files:

  • funcs/attribute/awsCfOnlyAttr.ts - Attribute function that combines properties and extra into a CloudFormation resource body JSON
  • funcs/code-gen/awsCfOnlyCodeGen.ts - Codegen function that wraps the resource body in a full CF template
  • funcs/qualifications/awsCfOnlyLint.ts - Qualification function that validates CF structure and optionally runs cfn-lint

Modified Files:

  • funcs.ts - Added awsCfOnlyCodeGen to CODE_GENERATION_FUNC_SPECS and new QUALIFICATION_FUNC_SPECS with awsCfOnlyLint
  • pruneCfAssets.ts - Complete overhaul to:
    • Restructure domain props: wrap CF props under properties, keep extra as sibling
    • Add CloudFormationResourceBody JSON prop with attribute function binding
    • Add AwsResourceType hidden prop to extra with the schema name
    • Replace leaf functions with new CF-only codegen and qualification functions
  • overrides.ts - Updated Route53::RecordSet function hashes

Route53::RecordSet Overrides (updated for new domain structure):

  • actions/create.ts - Read from domain.properties
  • actions/refresh.ts - Read from domain.properties, return payload with nested properties
  • management/import.ts - Output domain: { properties: {...} }
  • management/discover.ts - Output domain: { properties: {...} }

Domain Structure (Before → After)

Before:

  domain/
    Name
    Type
    TTL
    ...
    extra/
      Region

After:

  domain/
    properties/
      Name
      Type
      TTL
      ...
    extra/
      Region
      AwsResourceType (hidden)
      CloudFormationOnly (hidden)
    CloudFormationResourceBody (computed)

Impact

Affects ~200 CloudFormation-only AWS assets. Route53::RecordSet has custom overrides that were updated to work with the new structure.

How was it tested?

  • Integration tests pass
  • Manual test: new functionality works in UI
  • Manual test: (regression check) creating a component still works
  • Imported some assets manually and verified the shape, attribute func, codgen and qualification funcs.

Does it require a docs change?

  • No
  • Yes, and this PR includes it
  • Yes, and this PR does not include it (reasoning below)

In short: 🔗

@github-actions
Copy link

github-actions bot commented Jan 23, 2026

Dependency Review

✅ No vulnerabilities or OpenSSF Scorecard issues found.

Scanned Files

None

@aaron-dernley aaron-dernley force-pushed the fix/clover/aws-cloudformation-asset-updates branch from dccdb35 to f202397 Compare January 23, 2026 13:43
@systeminit systeminit deleted a comment from github-actions bot Jan 23, 2026
@github-actions
Copy link

Working with Module Index at: https://module-index.systeminit.com
Total: 2 new asset(s), 230 changed asset(s)

AWS - 2 new, 219 changed asset(s)
[AWS::Backup::TieringConfiguration]: new module
[AWS::MWAAServerless::Workflow]: new module
[AWS::ARCRegionSwitch::Plan]: props 🔀1, other schema contents 🔀3
[AWS::AmazonMQ::ConfigurationAssociation]: props ➕2 ➖2, other schema contents ➕1 🔀2
[AWS::ApiGatewayV2::ApiGatewayManagedOverrides]: props ➕2 ➖4, other schema contents ➕1 🔀1
[AWS::ApiGatewayV2::Stage]: props ➕2 ➖12, other schema contents ➕1 🔀1
[AWS::AppMesh::GatewayRoute]: props ➕2 ➖6, other schema contents ➕1 🔀1
[AWS::AppMesh::Mesh]: props ➕2 ➖3, other schema contents ➕1 🔀1
[AWS::AppMesh::Route]: props ➕2 ➖6, other schema contents ➕1 🔀1
[AWS::AppMesh::VirtualGateway]: props ➕2 ➖5, other schema contents ➕1 🔀1
[AWS::AppMesh::VirtualNode]: props ➕2 ➖5, other schema contents ➕1 🔀1
[AWS::AppMesh::VirtualRouter]: props ➕2 ➖5, other schema contents ➕1 🔀1
[AWS::AppMesh::VirtualService]: props ➕2 ➖5, other schema contents ➕1 🔀1
[AWS::AppStream::Fleet]: props ➕2 ➖22, other schema contents ➕1 🔀1
[AWS::AppStream::StackFleetAssociation]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::AppStream::StackUserAssociation]: props ➕2 ➖4, other schema contents ➕1 🔀1
[AWS::AppStream::Stack]: props ➕2 ➖14, other schema contents ➕1 🔀1
[AWS::AppStream::User]: props ➕2 ➖5, other schema contents ➕1 🔀1
[AWS::AppSync::ApiCache]: props ➕2 ➖7, other schema contents ➕1 🔀1
[AWS::AppSync::ApiKey]: props ➕2 ➖3, other schema contents ➕1 🔀1
[AWS::AppSync::GraphQLSchema]: props ➕2 ➖3, other schema contents ➕1 🔀1
[AWS::AutoScaling::AutoScalingGroup]: props 🔀7, other schema contents 🔀3
[AWS::AutoScalingPlans::ScalingPlan]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::Backup::BackupPlan]: props ➕1 🔀3, other schema contents 🔀3
[AWS::BedrockAgentCore::GatewayTarget]: props 🔀1, other schema contents 🔀3
[AWS::Budgets::Budget]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::CertificateManager::Certificate]: props ➕2 ➖9, other schema contents ➕1 🔀2
[AWS::Chatbot::MicrosoftTeamsChannelConfiguration]: props 🔀1, other schema contents 🔀3
[AWS::CleanRooms::AnalysisTemplate]: props 🔀1, other schema contents 🔀3
[AWS::CleanRooms::Collaboration]: props 🔀1, other schema contents 🔀3
[AWS::Cloud9::EnvironmentEC2]: props ➕2 ➖10, other schema contents ➕1 🔀1
[AWS::CloudFormation::CustomResource]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::CloudFormation::Macro]: props ➕2 ➖5, other schema contents ➕1 🔀1
[AWS::CloudFormation::WaitConditionHandle]: props ➕2, other schema contents ➕1 🔀1
[AWS::CloudFormation::WaitCondition]: props ➕2 ➖3, other schema contents ➕1 🔀1
[AWS::CloudFront::StreamingDistribution]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::CloudWatch::AnomalyDetector]: props ➕2 ➖8, other schema contents ➕1 🔀1
[AWS::CloudWatch::InsightRule]: props ➕2 ➖5, other schema contents ➕1 🔀1
[AWS::CodeBuild::Project]: props ➕2 ➖25, other schema contents ➕1 🔀1
[AWS::CodeBuild::ReportGroup]: props ➕2 ➖5, other schema contents ➕1 🔀1
[AWS::CodeBuild::SourceCredential]: props ➕2 ➖4, other schema contents ➕1 🔀1
[AWS::CodeCommit::Repository]: props ➕2 ➖6, other schema contents ➕1 🔀1
[AWS::CodeDeploy::DeploymentGroup]: props ➕2 ➖20, other schema contents ➕1 🔀1
[AWS::CodeStar::GitHubRepository]: props ➕2 ➖8, other schema contents ➕1 🔀1
[AWS::Config::ConfigurationRecorder]: props ➕2 ➖4, other schema contents ➕1 🔀1
[AWS::Config::DeliveryChannel]: props ➕2 ➖6, other schema contents ➕1 🔀1
[AWS::Config::OrganizationConfigRule]: props ➕2 ➖5, other schema contents ➕1 🔀1
[AWS::Config::OrganizationConformancePack]: other schema contents 🔀4
[AWS::Config::RemediationConfiguration]: props ➕2 ➖10, other schema contents ➕1 🔀1
[AWS::DAX::Cluster]: props ➕2 ➖15, other schema contents ➕1 🔀1
[AWS::DAX::ParameterGroup]: props ➕2 ➖3, other schema contents ➕1 🔀1
[AWS::DAX::SubnetGroup]: props ➕2 ➖3, other schema contents ➕1 🔀1
[AWS::DLM::LifecyclePolicy]: props ➕2 ➖12, other schema contents ➕1 🔀1
[AWS::DMS::Certificate]: props ➕2 ➖3, other schema contents ➕1 🔀1
[AWS::DMS::Endpoint]: props ➕2 ➖31, other schema contents ➕1 🔀1
[AWS::DMS::EventSubscription]: props ➕2 ➖7, other schema contents ➕1 🔀1
[AWS::DMS::ReplicationInstance]: props ➕2 ➖17, other schema contents ➕1 🔀1
[AWS::DMS::ReplicationSubnetGroup]: props ➕2 ➖4, other schema contents ➕1 🔀1
[AWS::DMS::ReplicationTask]: props ➕2 ➖13, other schema contents ➕1 🔀1
[AWS::DirectoryService::MicrosoftAD]: props ➕2 ➖7, other schema contents ➕1 🔀1
[AWS::DocDB::DBClusterParameterGroup]: props ➕2 ➖5, other schema contents ➕1 🔀1
[AWS::DocDB::DBCluster]: props ➕2 ➖30, other schema contents ➕1 🔀1
[AWS::DocDB::DBInstance]: props ➕2 ➖10, other schema contents ➕1 🔀1
[AWS::DocDB::DBSubnetGroup]: props ➕2 ➖4, other schema contents ➕1 🔀1
[AWS::DocDB::EventSubscription]: props ➕2 ➖6, other schema contents ➕1 🔀1
[AWS::EC2::ClientVpnAuthorizationRule]: props ➕2 ➖5, other schema contents ➕1 🔀1
[AWS::EC2::ClientVpnEndpoint]: props ➕2 ➖20, other schema contents ➕1 🔀1
[AWS::EC2::ClientVpnRoute]: props ➕2 ➖4, other schema contents ➕1 🔀1
[AWS::EC2::ClientVpnTargetNetworkAssociation]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::EC2::NetworkAclEntry]: props ➕2 ➖9, other schema contents ➕1 🔀2
[AWS::EC2::NetworkInterfacePermission]: props ➕2 ➖3, other schema contents ➕1 🔀1
[AWS::EC2::VPNGatewayRoutePropagation]: props ➕2 ➖2, other schema contents ➕1 🔀2
[AWS::EMR::Cluster]: props ➕2 ➖26, other schema contents ➕1 🔀1
[AWS::EMR::InstanceFleetConfig]: props ➕2 ➖8, other schema contents ➕1 🔀1
[AWS::EMR::InstanceGroupConfig]: props ➕2 ➖11, other schema contents ➕1 🔀1
[AWS::ElastiCache::CacheCluster]: props ➕2 ➖29, other schema contents ➕1 🔀1
[AWS::ElastiCache::ReplicationGroup]: props ➕2 ➖48, other schema contents ➕1 🔀1
[AWS::ElastiCache::SecurityGroupIngress]: props ➕2 ➖3, other schema contents ➕1 🔀1
[AWS::ElastiCache::SecurityGroup]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::ElasticLoadBalancing::LoadBalancer]: props ➕2 ➖18, other schema contents ➕1 🔀1
[AWS::ElasticLoadBalancingV2::ListenerCertificate]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::Elasticsearch::Domain]: props ➕2 ➖15, other schema contents ➕1 🔀1
[AWS::FSx::FileSystem]: props ➕2 ➖14, other schema contents ➕1 🔀1
[AWS::FSx::Snapshot]: props ➕2 ➖3, other schema contents ➕1 🔀1
[AWS::FSx::StorageVirtualMachine]: props ➕2 ➖6, other schema contents ➕1 🔀1
[AWS::FSx::Volume]: props ➕2 ➖6, other schema contents ➕1 🔀1
[AWS::Glue::Classifier]: props ➕2 ➖4, other schema contents ➕1 🔀1
[AWS::Glue::Connection]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::Glue::CustomEntityType]: props ➕2 ➖4, other schema contents ➕1 🔀1
[AWS::Glue::DataCatalogEncryptionSettings]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::Glue::DataQualityRuleset]: props ➕2 ➖6, other schema contents ➕1 🔀1
[AWS::Glue::DevEndpoint]: props ➕2 ➖15, other schema contents ➕1 🔀1
[AWS::Glue::MLTransform]: props ➕2 ➖13, other schema contents ➕1 🔀1
[AWS::Glue::Partition]: props ➕2 ➖4, other schema contents ➕1 🔀1
[AWS::Glue::SecurityConfiguration]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::Glue::TableOptimizer]: props ➕2 ➖5, other schema contents ➕1 🔀1
[AWS::Glue::Table]: props ➕2 ➖4, other schema contents ➕1 🔀1
[AWS::Glue::Workflow]: props ➕2 ➖5, other schema contents ➕1 🔀1
[AWS::Greengrass::ConnectorDefinitionVersion]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::Greengrass::ConnectorDefinition]: props ➕2 ➖3, other schema contents ➕1 🔀1
[AWS::Greengrass::CoreDefinitionVersion]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::Greengrass::CoreDefinition]: props ➕2 ➖3, other schema contents ➕1 🔀1
[AWS::Greengrass::DeviceDefinitionVersion]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::Greengrass::DeviceDefinition]: props ➕2 ➖3, other schema contents ➕1 🔀1
[AWS::Greengrass::FunctionDefinitionVersion]: props ➕2 ➖3, other schema contents ➕1 🔀1
[AWS::Greengrass::FunctionDefinition]: props ➕2 ➖3, other schema contents ➕1 🔀1
[AWS::Greengrass::GroupVersion]: props ➕2 ➖8, other schema contents ➕1 🔀1
[AWS::Greengrass::Group]: props ➕2 ➖4, other schema contents ➕1 🔀1
[AWS::Greengrass::LoggerDefinitionVersion]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::Greengrass::LoggerDefinition]: props ➕2 ➖3, other schema contents ➕1 🔀1
[AWS::Greengrass::ResourceDefinitionVersion]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::Greengrass::ResourceDefinition]: props ➕2 ➖3, other schema contents ➕1 🔀1
[AWS::Greengrass::SubscriptionDefinitionVersion]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::Greengrass::SubscriptionDefinition]: props ➕2 ➖3, other schema contents ➕1 🔀1
[AWS::ImageBuilder::ImagePipeline]: props 🔀1, other schema contents 🔀3
[AWS::ImageBuilder::Image]: props 🔀1, other schema contents 🔀3
[AWS::IoT::Logging]: props ➕1 🔀1, other schema contents 🔀3
[AWS::IoT::PolicyPrincipalAttachment]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::IoT::ThingPrincipalAttachment]: props ➕2 ➖3, other schema contents ➕1 🔀1
[AWS::IoTThingsGraph::FlowTemplate]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::KinesisAnalytics::ApplicationOutput]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::KinesisAnalytics::ApplicationReferenceDataSource]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::KinesisAnalytics::Application]: props ➕2 ➖4, other schema contents ➕1 🔀1
[AWS::KinesisAnalyticsV2::ApplicationCloudWatchLoggingOption]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::KinesisAnalyticsV2::ApplicationOutput]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::KinesisAnalyticsV2::ApplicationReferenceDataSource]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::LakeFormation::DataLakeSettings]: props ➕2 ➖11, other schema contents ➕1 🔀1
[AWS::LakeFormation::Permissions]: props ➕2 ➖4, other schema contents ➕1 🔀1
[AWS::LakeFormation::Resource]: props ➕2 ➖5, other schema contents ➕1 🔀1
[AWS::ManagedBlockchain::Member]: props ➕2 ➖4, other schema contents ➕1 🔀1
[AWS::ManagedBlockchain::Node]: props ➕2 ➖3, other schema contents ➕1 🔀1
[AWS::MediaConvert::JobTemplate]: props ➕2 ➖10, other schema contents ➕1 🔀1
[AWS::MediaConvert::Preset]: props ➕2 ➖5, other schema contents ➕1 🔀1
[AWS::MediaConvert::Queue]: props ➕2 ➖6, other schema contents ➕1 🔀1
[AWS::MediaLive::Channel]: props ➕2 ➖15, other schema contents ➕1 🔀1
[AWS::MediaLive::InputSecurityGroup]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::MediaLive::Input]: props ➕2 ➖16, other schema contents ➕1 🔀1
[AWS::MediaStore::Container]: props ➕2 ➖7, other schema contents ➕1 🔀1
[AWS::OpenSearchServerless::Collection]: props ➕3 🔀3, other schema contents 🔀3
[AWS::OpsWorks::App]: props ➕2 ➖12, other schema contents ➕1 🔀1
[AWS::OpsWorks::ElasticLoadBalancerAttachment]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::OpsWorks::Instance]: props ➕2 ➖21, other schema contents ➕1 🔀1
[AWS::OpsWorks::Layer]: props ➕2 ➖19, other schema contents ➕1 🔀1
[AWS::OpsWorks::Stack]: props ➕2 ➖25, other schema contents ➕1 🔀1
[AWS::OpsWorks::UserProfile]: props ➕2 ➖4, other schema contents ➕1 🔀1
[AWS::OpsWorks::Volume]: props ➕2 ➖4, other schema contents ➕1 🔀1
[AWS::Organizations::Policy]: props 🔀2, other schema contents 🔀3
[AWS::Pinpoint::ADMChannel]: props ➕2 ➖4, other schema contents ➕1 🔀1
[AWS::Pinpoint::APNSChannel]: props ➕2 ➖9, other schema contents ➕1 🔀1
[AWS::Pinpoint::APNSSandboxChannel]: props ➕2 ➖9, other schema contents ➕1 🔀1
[AWS::Pinpoint::APNSVoipChannel]: props ➕2 ➖9, other schema contents ➕1 🔀1
[AWS::Pinpoint::APNSVoipSandboxChannel]: props ➕2 ➖9, other schema contents ➕1 🔀1
[AWS::Pinpoint::App]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::Pinpoint::ApplicationSettings]: props ➕2 ➖5, other schema contents ➕1 🔀1
[AWS::Pinpoint::BaiduChannel]: props ➕2 ➖4, other schema contents ➕1 🔀1
[AWS::Pinpoint::Campaign]: props ➕2 ➖18, other schema contents ➕1 🔀1
[AWS::Pinpoint::EmailChannel]: props ➕2 ➖7, other schema contents ➕1 🔀1
[AWS::Pinpoint::EmailTemplate]: props ➕2 ➖7, other schema contents ➕1 🔀1
[AWS::Pinpoint::EventStream]: props ➕2 ➖3, other schema contents ➕1 🔀1
[AWS::Pinpoint::GCMChannel]: props ➕2 ➖5, other schema contents ➕1 🔀1
[AWS::Pinpoint::PushTemplate]: props ➕2 ➖9, other schema contents ➕1 🔀1
[AWS::Pinpoint::SMSChannel]: props ➕2 ➖4, other schema contents ➕1 🔀1
[AWS::Pinpoint::Segment]: props ➕2 ➖5, other schema contents ➕1 🔀1
[AWS::Pinpoint::SmsTemplate]: props ➕2 ➖5, other schema contents ➕1 🔀1
[AWS::Pinpoint::VoiceChannel]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::PinpointEmail::ConfigurationSetEventDestination]: props ➕2 ➖3, other schema contents ➕1 🔀1
[AWS::PinpointEmail::ConfigurationSet]: props ➕2 ➖6, other schema contents ➕1 🔀1
[AWS::PinpointEmail::DedicatedIpPool]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::PinpointEmail::Identity]: props ➕2 ➖5, other schema contents ➕1 🔀1
[AWS::QLDB::Ledger]: props ➕2 ➖5, other schema contents ➕1 🔀1
[AWS::RAM::ResourceShare]: props 🔀2, other schema contents 🔀3
[AWS::RDS::DBSecurityGroupIngress]: props ➕2 ➖5, other schema contents ➕1 🔀1
[AWS::RDS::DBSecurityGroup]: props ➕2 ➖4, other schema contents ➕1 🔀1
[AWS::Redshift::ClusterSecurityGroupIngress]: props ➕2 ➖4, other schema contents ➕1 🔀1
[AWS::Redshift::ClusterSecurityGroup]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::Route53::RecordSetGroup]: props ➕2 ➖4, other schema contents ➕1 🔀1
[AWS::Route53::RecordSet]: props ➕2 ➖17, other schema contents ➕1 🔀3
[AWS::SDB::Domain]: props ➕2 ➖1, other schema contents ➕1 🔀1
[AWS::SES::ReceiptFilter]: props ➕2 ➖1, other schema contents ➕1 🔀1
[AWS::SES::ReceiptRuleSet]: props ➕2 ➖1, other schema contents ➕1 🔀1
[AWS::SES::ReceiptRule]: props ➕2 ➖3, other schema contents ➕1 🔀1
[AWS::SNS::TopicPolicy]: props ➕2 ➖2, other schema contents ➕1 🔀2
[AWS::SQS::QueuePolicy]: props ➕2 ➖2, other schema contents ➕1 🔀2
[AWS::SSM::MaintenanceWindow]: props ➕2 ➖11, other schema contents ➕1 🔀1
[AWS::SageMaker::CodeRepository]: props ➕2 ➖3, other schema contents ➕1 🔀1
[AWS::SageMaker::EndpointConfig]: props ➕2 ➖11, other schema contents ➕1 🔀1
[AWS::SageMaker::Model]: props ➕2 ➖8, other schema contents ➕1 🔀1
[AWS::SageMaker::NotebookInstanceLifecycleConfig]: props ➕2 ➖3, other schema contents ➕1 🔀1
[AWS::SageMaker::NotebookInstance]: props ➕2 ➖16, other schema contents ➕1 🔀1
[AWS::SageMaker::Workteam]: props ➕2 ➖6, other schema contents ➕1 🔀1
[AWS::SecurityHub::AutomationRule]: props 🔀1, other schema contents 🔀3
[AWS::ServiceCatalog::AcceptedPortfolioShare]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::ServiceCatalog::CloudFormationProduct]: props ➕2 ➖13, other schema contents ➕1 🔀1
[AWS::ServiceCatalog::LaunchRoleConstraint]: props ➕2 ➖6, other schema contents ➕1 🔀1
[AWS::ServiceCatalog::Portfolio]: props ➕2 ➖5, other schema contents ➕1 🔀1
[AWS::ServiceCatalog::StackSetConstraint]: props ➕2 ➖9, other schema contents ➕1 🔀1
[AWS::ServiceDiscovery::HttpNamespace]: props ➕2 ➖3, other schema contents ➕1 🔀1
[AWS::ServiceDiscovery::Instance]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::ServiceDiscovery::PrivateDnsNamespace]: props ➕2 ➖5, other schema contents ➕1 🔀1
[AWS::ServiceDiscovery::PublicDnsNamespace]: props ➕2 ➖4, other schema contents ➕1 🔀1
[AWS::ServiceDiscovery::Service]: props ➕2 ➖9, other schema contents ➕1 🔀1
[AWS::WAF::ByteMatchSet]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::WAF::IPSet]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::WAF::Rule]: props ➕2 ➖3, other schema contents ➕1 🔀1
[AWS::WAF::SizeConstraintSet]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::WAF::SqlInjectionMatchSet]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::WAF::WebACL]: props ➕2 ➖4, other schema contents ➕1 🔀1
[AWS::WAF::XssMatchSet]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::WAFRegional::ByteMatchSet]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::WAFRegional::GeoMatchSet]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::WAFRegional::IPSet]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::WAFRegional::RateBasedRule]: props ➕2 ➖5, other schema contents ➕1 🔀1
[AWS::WAFRegional::RegexPatternSet]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::WAFRegional::Rule]: props ➕2 ➖3, other schema contents ➕1 🔀1
[AWS::WAFRegional::SizeConstraintSet]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::WAFRegional::SqlInjectionMatchSet]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::WAFRegional::WebACLAssociation]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::WAFRegional::WebACL]: props ➕2 ➖4, other schema contents ➕1 🔀1
[AWS::WAFRegional::XssMatchSet]: props ➕2 ➖2, other schema contents ➕1 🔀1
[AWS::WAFv2::WebACLAssociation]: props 🔀1, other schema contents 🔀2
[AWS::WorkSpaces::Workspace]: props ➕2 ➖8, other schema contents ➕1 🔀1
Hetzner - 0 new, 11 changed asset(s)
[Hetzner::Cloud::Certificates]: props 🔀3, other schema contents 🔀2
[Hetzner::Cloud::Firewalls]: props 🔀8, other schema contents 🔀2
[Hetzner::Cloud::FloatingIps]: props 🔀16, other schema contents 🔀2
[Hetzner::Cloud::LoadBalancers]: props 🔀12, other schema contents 🔀2
[Hetzner::Cloud::Networks]: props 🔀15, other schema contents 🔀2
[Hetzner::Cloud::PlacementGroups]: props 🔀3, other schema contents 🔀2
[Hetzner::Cloud::PrimaryIps]: props 🔀40, other schema contents 🔀2
[Hetzner::Cloud::Servers]: props 🔀38, other schema contents 🔀2
[Hetzner::Cloud::SshKeys]: props 🔀3, other schema contents 🔀2
[Hetzner::Cloud::Volumes]: props 🔀11, other schema contents 🔀2
[Hetzner::Cloud::Zones]: props 🔀16, other schema contents 🔀3

@aaron-dernley aaron-dernley marked this pull request as ready for review January 23, 2026 14:21
@aaron-dernley
Copy link
Contributor Author

#8336 (comment)

Seems to have picked up the same changes as the nightly run for some reason, that PR was merged a few hours ago.

@aaron-dernley
Copy link
Contributor Author

/diff AWS::Route53::RecordSet

@aaron-dernley
Copy link
Contributor Author

/diff AWS::EC2::NetworkAclEntry

@github-actions
Copy link

Working with Module Index at: https://module-index.systeminit.com

Diffed AWS::Route53::RecordSet with the module index:

Added function CloudFormation Lint Validation:

{
  "name": "CloudFormation Lint Validation",
  "uniqueId": "",
  "data": {
    "name": "CloudFormation Lint Validation",
    "displayName": null,
    "description": null,
    "handler": "main",
    "codeBase64": "YXN5bmMgZnVuY3Rpb24gbWFpbihjb21wb25lbnQ6IElucHV0KTogUHJvbWlzZTxPdXRwdXQ+IHsKICBjb25zdCByZXNvdXJjZUJvZHkgPSBjb21wb25lbnQuZG9tYWluPy5DbG91ZEZvcm1hdGlvblJlc291cmNlQm9keTsKCiAgaWYgKCFyZXNvdXJjZUJvZHkpIHsKICAgIHJldHVybiB7CiAgICAgIHJlc3VsdDogIndhcm5pbmciLAogICAgICBtZXNzYWdlOiAiTm8gQ2xvdWRGb3JtYXRpb25SZXNvdXJjZUJvZHkgZm91bmQgLSBub3RoaW5nIHRvIHZhbGlkYXRlIiwKICAgIH07CiAgfQoKICAvLyBQYXJzZSB0aGUgcmVzb3VyY2UgYm9keQogIGxldCByZXNvdXJjZTsKICB0cnkgewogICAgcmVzb3VyY2UgPSBKU09OLnBhcnNlKHJlc291cmNlQm9keSk7CiAgfSBjYXRjaCAoZSkgewogICAgcmV0dXJuIHsKICAgICAgcmVzdWx0OiAiZmFpbHVyZSIsCiAgICAgIG1lc3NhZ2U6IGBJbnZhbGlkIEpTT04gaW4gQ2xvdWRGb3JtYXRpb25SZXNvdXJjZUJvZHk6ICR7ZS5tZXNzYWdlfWAsCiAgICB9OwogIH0KCiAgLy8gVmFsaWRhdGUgYmFzaWMgc3RydWN0dXJlCiAgaWYgKCFyZXNvdXJjZS5UeXBlKSB7CiAgICByZXR1cm4gewogICAgICByZXN1bHQ6ICJmYWlsdXJlIiwKICAgICAgbWVzc2FnZTogIkNsb3VkRm9ybWF0aW9uIHJlc291cmNlIGlzIG1pc3NpbmcgJ1R5cGUnIGZpZWxkIiwKICAgIH07CiAgfQoKICBpZiAoIXJlc291cmNlLlByb3BlcnRpZXMpIHsKICAgIHJldHVybiB7CiAgICAgIHJlc3VsdDogIndhcm5pbmciLAogICAgICBtZXNzYWdlOiAiQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UgaGFzIG5vICdQcm9wZXJ0aWVzJyAtIHRoaXMgbWF5IGJlIGludGVudGlvbmFsIiwKICAgIH07CiAgfQoKICAvLyBCdWlsZCBhIGZ1bGwgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgZm9yIHZhbGlkYXRpb24KICBjb25zdCBjbG91ZEZvcm1hdGlvblRlbXBsYXRlID0gewogICAgQVdTVGVtcGxhdGVGb3JtYXRWZXJzaW9uOiAiMjAxMC0wOS0wOSIsCiAgICBSZXNvdXJjZXM6IHsKICAgICAgQ2ZuUmVzb3VyY2U6IHJlc291cmNlLAogICAgfSwKICB9OwoKICBjb25zdCB0ZW1wbGF0ZUpzb24gPSBKU09OLnN0cmluZ2lmeShjbG91ZEZvcm1hdGlvblRlbXBsYXRlLCBudWxsLCAyKTsKCiAgLy8gVHJ5IHRvIHJ1biBjZm4tbGludCBpZiBhdmFpbGFibGUKICBjb25zdCBsaW50UmVzdWx0ID0gYXdhaXQgc2lFeGVjLndhaXRVbnRpbEVuZCgiY2ZuLWxpbnQiLCBbCiAgICAiLS10ZW1wbGF0ZSIsCiAgICAiL2Rldi9zdGRpbiIsCiAgICAiLS1mb3JtYXQiLAogICAgImpzb24iLAogIF0sIHsKICAgIGlucHV0OiB0ZW1wbGF0ZUpzb24sCiAgfSk7CgogIGlmIChsaW50UmVzdWx0LmV4aXRDb2RlID09PSAxMjcpIHsKICAgIC8vIGNmbi1saW50IG5vdCBpbnN0YWxsZWQgLSBkbyBiYXNpYyB2YWxpZGF0aW9uIG9ubHkKICAgIGNvbnNvbGUubG9nKCJjZm4tbGludCBub3QgYXZhaWxhYmxlLCBwZXJmb3JtaW5nIGJhc2ljIHZhbGlkYXRpb24gb25seSIpOwogICAgcmV0dXJuIHsKICAgICAgcmVzdWx0OiAic3VjY2VzcyIsCiAgICAgIG1lc3NhZ2U6IGBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZSBzdHJ1Y3R1cmUgaXMgdmFsaWQgKFR5cGU6ICR7cmVzb3VyY2UuVHlwZX0pLiBJbnN0YWxsIGNmbi1saW50IGZvciBkZWVwZXIgdmFsaWRhdGlvbi5gLAogICAgfTsKICB9CgogIGlmIChsaW50UmVzdWx0LmV4aXRDb2RlID09PSAwICYmICghbGludFJlc3VsdC5zdGRvdXQgfHwgbGludFJlc3VsdC5zdGRvdXQudHJpbSgpID09PSAiW10iKSkgewogICAgcmV0dXJuIHsKICAgICAgcmVzdWx0OiAic3VjY2VzcyIsCiAgICAgIG1lc3NhZ2U6IGBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZSBwYXNzZWQgY2ZuLWxpbnQgdmFsaWRhdGlvbiAoVHlwZTogJHtyZXNvdXJjZS5UeXBlfSlgLAogICAgfTsKICB9CgogIC8vIFBhcnNlIGxpbnQgcmVzdWx0cwogIHRyeSB7CiAgICBjb25zdCBsaW50RXJyb3JzID0gSlNPTi5wYXJzZShsaW50UmVzdWx0LnN0ZG91dCB8fCAiW10iKTsKCiAgICBpZiAobGludEVycm9ycy5sZW5ndGggPT09IDApIHsKICAgICAgcmV0dXJuIHsKICAgICAgICByZXN1bHQ6ICJzdWNjZXNzIiwKICAgICAgICBtZXNzYWdlOiBgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgcGFzc2VkIGNmbi1saW50IHZhbGlkYXRpb24gKFR5cGU6ICR7cmVzb3VyY2UuVHlwZX0pYCwKICAgICAgfTsKICAgIH0KCiAgICAvLyBDYXRlZ29yaXplIGVycm9ycyB2cyB3YXJuaW5ncwogICAgY29uc3QgZXJyb3JzID0gbGludEVycm9ycy5maWx0ZXIoKGU6IGFueSkgPT4gZS5MZXZlbCA9PT0gIkVycm9yIik7CiAgICBjb25zdCB3YXJuaW5ncyA9IGxpbnRFcnJvcnMuZmlsdGVyKChlOiBhbnkpID0+IGUuTGV2ZWwgPT09ICJXYXJuaW5nIik7CgogICAgY29uc3QgbWVzc2FnZXMgPSBsaW50RXJyb3JzLm1hcCgoZTogYW55KSA9PgogICAgICBgWyR7ZS5MZXZlbH1dICR7ZS5SdWxlLklkfTogJHtlLk1lc3NhZ2V9YAogICAgKTsKCiAgICBjb25zb2xlLmxvZygiY2ZuLWxpbnQgcmVzdWx0czoiKTsKICAgIG1lc3NhZ2VzLmZvckVhY2goKG06IHN0cmluZykgPT4gY29uc29sZS5sb2cobSkpOwoKICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkgewogICAgICByZXR1cm4gewogICAgICAgIHJlc3VsdDogImZhaWx1cmUiLAogICAgICAgIG1lc3NhZ2U6IGBDbG91ZEZvcm1hdGlvbiB2YWxpZGF0aW9uIGZhaWxlZDogJHtlcnJvcnMubGVuZ3RofSBlcnJvcihzKSwgJHt3YXJuaW5ncy5sZW5ndGh9IHdhcm5pbmcocykuIEZpcnN0IGVycm9yOiAke2Vycm9yc1swXS5NZXNzYWdlfWAsCiAgICAgIH07CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgcmVzdWx0OiAid2FybmluZyIsCiAgICAgIG1lc3NhZ2U6IGBDbG91ZEZvcm1hdGlvbiB2YWxpZGF0aW9uIHBhc3NlZCB3aXRoICR7d2FybmluZ3MubGVuZ3RofSB3YXJuaW5nKHMpOiAke3dhcm5pbmdzWzBdPy5NZXNzYWdlIHx8ICJTZWUgbG9ncyBmb3IgZGV0YWlscyJ9YCwKICAgIH07CiAgfSBjYXRjaCAoZSkgewogICAgLy8gSWYgd2UgY2FuJ3QgcGFyc2UgdGhlIG91dHB1dCwgY2hlY2sgaWYgdGhlcmUgd2FzIHN0ZGVycgogICAgaWYgKGxpbnRSZXN1bHQuc3RkZXJyKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgcmVzdWx0OiAiZmFpbHVyZSIsCiAgICAgICAgbWVzc2FnZTogYGNmbi1saW50IGVycm9yOiAke2xpbnRSZXN1bHQuc3RkZXJyfWAsCiAgICAgIH07CiAgICB9CiAgICByZXR1cm4gewogICAgICByZXN1bHQ6ICJ3YXJuaW5nIiwKICAgICAgbWVzc2FnZTogYENvdWxkIG5vdCBwYXJzZSBjZm4tbGludCBvdXRwdXQuIEV4aXQgY29kZTogJHtsaW50UmVzdWx0LmV4aXRDb2RlfWAsCiAgICB9OwogIH0KfQo",
    "backendKind": "jsAttribute",
    "responseType": "qualification",
    "hidden": false,
    "link": null,
    "isTransformation": false,
    "lastUpdatedAt": null
  },
  "deleted": false,
  "isFromBuiltin": null,
  "arguments": []
}

Added function Code Gen for CloudFormation-only assets:

{
  "name": "Code Gen for CloudFormation-only assets",
  "uniqueId": "",
  "data": {
    "name": "Code Gen for CloudFormation-only assets",
    "displayName": null,
    "description": null,
    "handler": "main",
    "codeBase64": "YXN5bmMgZnVuY3Rpb24gbWFpbihjb21wb25lbnQ6IElucHV0KTogUHJvbWlzZTxPdXRwdXQ+IHsKICBjb25zdCByZXNvdXJjZUJvZHkgPSBjb21wb25lbnQuZG9tYWluPy5DbG91ZEZvcm1hdGlvblJlc291cmNlQm9keTsKCiAgaWYgKCFyZXNvdXJjZUJvZHkpIHsKICAgIHJldHVybiB7CiAgICAgIGZvcm1hdDogImpzb24iLAogICAgICBjb2RlOiBKU09OLnN0cmluZ2lmeSgKICAgICAgICB7CiAgICAgICAgICBBV1NUZW1wbGF0ZUZvcm1hdFZlcnNpb246ICIyMDEwLTA5LTA5IiwKICAgICAgICAgIFJlc291cmNlczoge30sCiAgICAgICAgfSwKICAgICAgICBudWxsLAogICAgICAgIDIsCiAgICAgICksCiAgICB9OwogIH0KCiAgLy8gQ2xvdWRGb3JtYXRpb25SZXNvdXJjZUJvZHkgaXMgYWxyZWFkeSBhIEpTT04gc3RyaW5nIGZyb20gdGhlIGF0dHJpYnV0ZSBmdW5jdGlvbgogIGNvbnN0IHJlc291cmNlID0gSlNPTi5wYXJzZShyZXNvdXJjZUJvZHkpOwoKICBjb25zdCBjbG91ZEZvcm1hdGlvblRlbXBsYXRlID0gewogICAgQVdTVGVtcGxhdGVGb3JtYXRWZXJzaW9uOiAiMjAxMC0wOS0wOSIsCiAgICBSZXNvdXJjZXM6IHsKICAgICAgY2ZuUmVzb3VyY2U6IHJlc291cmNlLAogICAgfSwKICB9OwoKICByZXR1cm4gewogICAgZm9ybWF0OiAianNvbiIsCiAgICBjb2RlOiBKU09OLnN0cmluZ2lmeShjbG91ZEZvcm1hdGlvblRlbXBsYXRlLCBudWxsLCAyKSwKICB9Owp9Cg",
    "backendKind": "jsAttribute",
    "responseType": "codeGeneration",
    "hidden": false,
    "link": null,
    "isTransformation": false,
    "lastUpdatedAt": null
  },
  "deleted": false,
  "isFromBuiltin": null,
  "arguments": []
}

Added leafFunctions binding:

{
  "funcUniqueId": "dba872348ce39bfa8c15002037263b2528d81833c6c1f24fef5c9bc4115145b4",
  "leafKind": "qualification",
  "uniqueId": null,
  "deleted": false,
  "inputs": [
    "domain"
  ]
}

Added prop /root/domain/CloudFormationResourceBody:

{
  "kind": "json",
  "name": "CloudFormationResourceBody",
  "data": {
    "name": "CloudFormationResourceBody",
    "validationFormat": null,
    "defaultValue": null,
    "funcUniqueId": "a2b5a6a39ce093738e0e19a55ecfaeca5bd99716519163c8c15f3674d95d096e",
    "inputs": [
      {
        "kind": "prop",
        "name": "properties",
        "prop_path": "/root/domain/properties",
        "unique_id": null,
        "deleted": false
      },
      {
        "kind": "prop",
        "name": "extra",
        "prop_path": "/root/domain/extra",
        "unique_id": null,
        "deleted": false
      }
    ],
    "widgetKind": "CodeEditor",
    "widgetOptions": null,
    "hidden": false,
    "docLink": null,
    "documentation": null,
    "uiOptionals": null
  },
  "uniqueId": null
}

Added prop /root/domain/properties:

{
  "kind": "object",
  "name": "properties",
  "data": {
    "name": "properties",
    "validationFormat": null,
    "defaultValue": null,
    "funcUniqueId": null,
    "inputs": [],
    "widgetKind": "Header",
    "widgetOptions": [],
    "hidden": false,
    "docLink": null,
    "documentation": null,
    "uiOptionals": null
  },
  "uniqueId": null,
  "entries": {
    "HostedZoneName": {
      "kind": "string",
      "name": "HostedZoneName",
      "data": {
        "name": "HostedZoneName",
        "validationFormat": null,
        "defaultValue": null,
        "funcUniqueId": null,
        "inputs": [],
        "widgetKind": "Text",
        "widgetOptions": [
          {
            "label": "si_create_only_prop",
            "value": "true"
          }
        ],
        "hidden": false,
        "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-recordset.html#cfn-route53-recordset-hostedzonename",
        "documentation": null,
        "uiOptionals": null
      },
      "uniqueId": null
    },
    "Weight": {
      "kind": "number",
      "name": "Weight",
      "data": {
        "name": "Weight",
        "validationFormat": "{\"type\":\"number\",\"rules\":[{\"name\":\"integer\"}]}",
        "defaultValue": null,
        "funcUniqueId": null,
        "inputs": [],
        "widgetKind": "Text",
        "widgetOptions": [],
        "hidden": false,
        "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-recordset.html#cfn-route53-recordset-weight",
        "documentation": null,
        "uiOptionals": null
      },
      "uniqueId": null
    },
    "TTL": {
      "kind": "string",
      "name": "TTL",
      "data": {
        "name": "TTL",
        "validationFormat": null,
        "defaultValue": null,
        "funcUniqueId": null,
        "inputs": [],
        "widgetKind": "Text",
        "widgetOptions": [],
        "hidden": false,
        "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-recordset.html#cfn-route53-recordset-ttl",
        "documentation": null,
        "uiOptionals": null
      },
      "uniqueId": null
    },
    "Failover": {
      "kind": "string",
      "name": "Failover",
      "data": {
        "name": "Failover",
        "validationFormat": null,
        "defaultValue": null,
        "funcUniqueId": null,
        "inputs": [],
        "widgetKind": "Text",
        "widgetOptions": [],
        "hidden": false,
        "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-recordset.html#cfn-route53-recordset-failover",
        "documentation": null,
        "uiOptionals": null
      },
      "uniqueId": null
    },
    "MultiValueAnswer": {
      "kind": "boolean",
      "name": "MultiValueAnswer",
      "data": {
        "name": "MultiValueAnswer",
        "validationFormat": null,
        "defaultValue": null,
        "funcUniqueId": null,
        "inputs": [],
        "widgetKind": "Checkbox",
        "widgetOptions": [],
        "hidden": false,
        "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-recordset.html#cfn-route53-recordset-multivalueanswer",
        "documentation": null,
        "uiOptionals": null
      },
      "uniqueId": null
    },
    "AliasTarget": {
      "kind": "object",
      "name": "AliasTarget",
      "data": {
        "name": "AliasTarget",
        "validationFormat": null,
        "defaultValue": null,
        "funcUniqueId": null,
        "inputs": [],
        "widgetKind": "Header",
        "widgetOptions": [],
        "hidden": false,
        "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset-aliastarget.html#cfn-route53-recordset-aliastarget-aliastarget",
        "documentation": null,
        "uiOptionals": null
      },
      "uniqueId": null,
      "entries": {
        "HostedZoneId": {
          "kind": "string",
          "name": "HostedZoneId",
          "data": {
            "name": "HostedZoneId",
            "validationFormat": null,
            "defaultValue": null,
            "funcUniqueId": null,
            "inputs": [],
            "widgetKind": "Text",
            "widgetOptions": [
              {
                "label": "si_create_only_prop",
                "value": "true"
              }
            ],
            "hidden": false,
            "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset-aliastarget.html#cfn-route53-recordset-aliastarget-hostedzoneid",
            "documentation": null,
            "uiOptionals": {
              "suggestSources": [
                {
                  "schema": "AWS::Route53::HostedZone",
                  "prop": "/resource_value/Id"
                }
              ]
            }
          },
          "uniqueId": null
        },
        "EvaluateTargetHealth": {
          "kind": "boolean",
          "name": "EvaluateTargetHealth",
          "data": {
            "name": "EvaluateTargetHealth",
            "validationFormat": null,
            "defaultValue": null,
            "funcUniqueId": null,
            "inputs": [],
            "widgetKind": "Checkbox",
            "widgetOptions": [],
            "hidden": false,
            "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset-aliastarget.html#cfn-route53-recordset-aliastarget-evaluatetargethealth",
            "documentation": null,
            "uiOptionals": null
          },
          "uniqueId": null
        },
        "DNSName": {
          "kind": "string",
          "name": "DNSName",
          "data": {
            "name": "DNSName",
            "validationFormat": null,
            "defaultValue": null,
            "funcUniqueId": null,
            "inputs": [],
            "widgetKind": "Text",
            "widgetOptions": [],
            "hidden": false,
            "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset-aliastarget.html#cfn-route53-recordset-aliastarget-dnsname",
            "documentation": null,
            "uiOptionals": null
          },
          "uniqueId": null
        }
      }
    },
    "ResourceRecords": {
      "kind": "array",
      "name": "ResourceRecords",
      "data": {
        "name": "ResourceRecords",
        "validationFormat": null,
        "defaultValue": null,
        "funcUniqueId": null,
        "inputs": [],
        "widgetKind": "Array",
        "widgetOptions": [],
        "hidden": false,
        "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-recordset.html#cfn-route53-recordset-resourcerecords",
        "documentation": null,
        "uiOptionals": null
      },
      "uniqueId": null,
      "typeProp": {
        "kind": "string",
        "name": "ResourceRecordsItem",
        "data": {
          "name": "ResourceRecordsItem",
          "validationFormat": "{\"type\":\"string\",\"flags\":{\"presence\":\"required\"}}",
          "defaultValue": null,
          "funcUniqueId": null,
          "inputs": [],
          "widgetKind": "Text",
          "widgetOptions": [],
          "hidden": false,
          "docLink": null,
          "documentation": null,
          "uiOptionals": null
        },
        "uniqueId": null
      }
    },
    "Type": {
      "kind": "string",
      "name": "Type",
      "data": {
        "name": "Type",
        "validationFormat": "{\"type\":\"string\",\"flags\":{\"presence\":\"required\"}}",
        "defaultValue": null,
        "funcUniqueId": null,
        "inputs": [],
        "widgetKind": "Text",
        "widgetOptions": [],
        "hidden": false,
        "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-recordset.html#cfn-route53-recordset-type",
        "documentation": null,
        "uiOptionals": null
      },
      "uniqueId": null
    },
    "HostedZoneId": {
      "kind": "string",
      "name": "HostedZoneId",
      "data": {
        "name": "HostedZoneId",
        "validationFormat": null,
        "defaultValue": null,
        "funcUniqueId": null,
        "inputs": [],
        "widgetKind": "Text",
        "widgetOptions": [
          {
            "label": "si_create_only_prop",
            "value": "true"
          }
        ],
        "hidden": false,
        "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-recordset.html#cfn-route53-recordset-hostedzoneid",
        "documentation": null,
        "uiOptionals": {
          "suggestSources": [
            {
              "schema": "AWS::Route53::HostedZone",
              "prop": "/resource_value/Id"
            }
          ]
        }
      },
      "uniqueId": null
    },
    "HealthCheckId": {
      "kind": "string",
      "name": "HealthCheckId",
      "data": {
        "name": "HealthCheckId",
        "validationFormat": null,
        "defaultValue": null,
        "funcUniqueId": null,
        "inputs": [],
        "widgetKind": "Text",
        "widgetOptions": [],
        "hidden": false,
        "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-recordset.html#cfn-route53-recordset-healthcheckid",
        "documentation": null,
        "uiOptionals": {
          "suggestSources": [
            {
              "schema": "AWS::Route53::HealthCheck",
              "prop": "/resource_value/HealthCheckId"
            }
          ]
        }
      },
      "uniqueId": null
    },
    "CidrRoutingConfig": {
      "kind": "object",
      "name": "CidrRoutingConfig",
      "data": {
        "name": "CidrRoutingConfig",
        "validationFormat": null,
        "defaultValue": null,
        "funcUniqueId": null,
        "inputs": [],
        "widgetKind": "Header",
        "widgetOptions": [],
        "hidden": false,
        "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset-cidrroutingconfig.html#cfn-route53-recordset-cidrroutingconfig-cidrroutingconfig",
        "documentation": null,
        "uiOptionals": null
      },
      "uniqueId": null,
      "entries": {
        "CollectionId": {
          "kind": "string",
          "name": "CollectionId",
          "data": {
            "name": "CollectionId",
            "validationFormat": null,
            "defaultValue": null,
            "funcUniqueId": null,
            "inputs": [],
            "widgetKind": "Text",
            "widgetOptions": [],
            "hidden": false,
            "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset-cidrroutingconfig.html#cfn-route53-recordset-cidrroutingconfig-collectionid",
            "documentation": null,
            "uiOptionals": {
              "suggestSources": [
                {
                  "schema": "AWS::OpenSearchServerless::Collection",
                  "prop": "/resource_value/Id"
                }
              ]
            }
          },
          "uniqueId": null
        },
        "LocationName": {
          "kind": "string",
          "name": "LocationName",
          "data": {
            "name": "LocationName",
            "validationFormat": null,
            "defaultValue": null,
            "funcUniqueId": null,
            "inputs": [],
            "widgetKind": "Text",
            "widgetOptions": [],
            "hidden": false,
            "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset-cidrroutingconfig.html#cfn-route53-recordset-cidrroutingconfig-locationname",
            "documentation": null,
            "uiOptionals": null
          },
          "uniqueId": null
        }
      }
    },
    "GeoProximityLocation": {
      "kind": "object",
      "name": "GeoProximityLocation",
      "data": {
        "name": "GeoProximityLocation",
        "validationFormat": null,
        "defaultValue": null,
        "funcUniqueId": null,
        "inputs": [],
        "widgetKind": "Header",
        "widgetOptions": [],
        "hidden": false,
        "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset-geoproximitylocation.html#cfn-route53-recordset-geoproximitylocation-geoproximitylocation",
        "documentation": null,
        "uiOptionals": null
      },
      "uniqueId": null,
      "entries": {
        "Coordinates": {
          "kind": "object",
          "name": "Coordinates",
          "data": {
            "name": "Coordinates",
            "validationFormat": null,
            "defaultValue": null,
            "funcUniqueId": null,
            "inputs": [],
            "widgetKind": "Header",
            "widgetOptions": [],
            "hidden": false,
            "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset-geoproximitylocation.html#cfn-route53-recordset-geoproximitylocation-coordinates",
            "documentation": null,
            "uiOptionals": null
          },
          "uniqueId": null,
          "entries": {
            "Latitude": {
              "kind": "string",
              "name": "Latitude",
              "data": {
                "name": "Latitude",
                "validationFormat": null,
                "defaultValue": null,
                "funcUniqueId": null,
                "inputs": [],
                "widgetKind": "Text",
                "widgetOptions": [],
                "hidden": false,
                "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset-coordinates.html#cfn-route53-recordset-coordinates-latitude",
                "documentation": null,
                "uiOptionals": null
              },
              "uniqueId": null
            },
            "Longitude": {
              "kind": "string",
              "name": "Longitude",
              "data": {
                "name": "Longitude",
                "validationFormat": null,
                "defaultValue": null,
                "funcUniqueId": null,
                "inputs": [],
                "widgetKind": "Text",
                "widgetOptions": [],
                "hidden": false,
                "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset-coordinates.html#cfn-route53-recordset-coordinates-longitude",
                "documentation": null,
                "uiOptionals": null
              },
              "uniqueId": null
            }
          }
        },
        "LocalZoneGroup": {
          "kind": "string",
          "name": "LocalZoneGroup",
          "data": {
            "name": "LocalZoneGroup",
            "validationFormat": null,
            "defaultValue": null,
            "funcUniqueId": null,
            "inputs": [],
            "widgetKind": "Text",
            "widgetOptions": [],
            "hidden": false,
            "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset-geoproximitylocation.html#cfn-route53-recordset-geoproximitylocation-localzonegroup",
            "documentation": null,
            "uiOptionals": null
          },
          "uniqueId": null
        },
        "AWSRegion": {
          "kind": "string",
          "name": "AWSRegion",
          "data": {
            "name": "AWSRegion",
            "validationFormat": null,
            "defaultValue": null,
            "funcUniqueId": null,
            "inputs": [],
            "widgetKind": "Text",
            "widgetOptions": [],
            "hidden": false,
            "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset-geoproximitylocation.html#cfn-route53-recordset-geoproximitylocation-awsregion",
            "documentation": null,
            "uiOptionals": null
          },
          "uniqueId": null
        },
        "Bias": {
          "kind": "number",
          "name": "Bias",
          "data": {
            "name": "Bias",
            "validationFormat": "{\"type\":\"number\",\"rules\":[{\"name\":\"integer\"}]}",
            "defaultValue": null,
            "funcUniqueId": null,
            "inputs": [],
            "widgetKind": "Text",
            "widgetOptions": [],
            "hidden": false,
            "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset-geoproximitylocation.html#cfn-route53-recordset-geoproximitylocation-bias",
            "documentation": null,
            "uiOptionals": null
          },
          "uniqueId": null
        }
      }
    },
    "Region": {
      "kind": "string",
      "name": "Region",
      "data": {
        "name": "Region",
        "validationFormat": null,
        "defaultValue": null,
        "funcUniqueId": null,
        "inputs": [],
        "widgetKind": "Text",
        "widgetOptions": [],
        "hidden": false,
        "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-recordset.html#cfn-route53-recordset-region",
        "documentation": null,
        "uiOptionals": null
      },
      "uniqueId": null
    },
    "Comment": {
      "kind": "string",
      "name": "Comment",
      "data": {
        "name": "Comment",
        "validationFormat": null,
        "defaultValue": null,
        "funcUniqueId": null,
        "inputs": [],
        "widgetKind": "Text",
        "widgetOptions": [],
        "hidden": false,
        "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-recordset.html#cfn-route53-recordset-comment",
        "documentation": null,
        "uiOptionals": null
      },
      "uniqueId": null
    },
    "Name": {
      "kind": "string",
      "name": "Name",
      "data": {
        "name": "Name",
        "validationFormat": "{\"type\":\"string\",\"flags\":{\"presence\":\"required\"}}",
        "defaultValue": null,
        "funcUniqueId": null,
        "inputs": [],
        "widgetKind": "Text",
        "widgetOptions": [
          {
            "label": "si_create_only_prop",
            "value": "true"
          }
        ],
        "hidden": false,
        "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-recordset.html#cfn-route53-recordset-name",
        "documentation": null,
        "uiOptionals": null
      },
      "uniqueId": null
    },
    "SetIdentifier": {
      "kind": "string",
      "name": "SetIdentifier",
      "data": {
        "name": "SetIdentifier",
        "validationFormat": null,
        "defaultValue": null,
        "funcUniqueId": null,
        "inputs": [],
        "widgetKind": "Text",
        "widgetOptions": [],
        "hidden": false,
        "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-recordset.html#cfn-route53-recordset-setidentifier",
        "documentation": null,
        "uiOptionals": null
      },
      "uniqueId": null
    },
    "GeoLocation": {
      "kind": "object",
      "name": "GeoLocation",
      "data": {
        "name": "GeoLocation",
        "validationFormat": null,
        "defaultValue": null,
        "funcUniqueId": null,
        "inputs": [],
        "widgetKind": "Header",
        "widgetOptions": [],
        "hidden": false,
        "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset-geolocation.html#cfn-route53-recordset-geolocation-geolocation",
        "documentation": null,
        "uiOptionals": null
      },
      "uniqueId": null,
      "entries": {
        "CountryCode": {
          "kind": "string",
          "name": "CountryCode",
          "data": {
            "name": "CountryCode",
            "validationFormat": null,
            "defaultValue": null,
            "funcUniqueId": null,
            "inputs": [],
            "widgetKind": "Text",
            "widgetOptions": [],
            "hidden": false,
            "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset-geolocation.html#cfn-route53-recordset-geolocation-countrycode",
            "documentation": null,
            "uiOptionals": null
          },
          "uniqueId": null
        },
        "SubdivisionCode": {
          "kind": "string",
          "name": "SubdivisionCode",
          "data": {
            "name": "SubdivisionCode",
            "validationFormat": null,
            "defaultValue": null,
            "funcUniqueId": null,
            "inputs": [],
            "widgetKind": "Text",
            "widgetOptions": [],
            "hidden": false,
            "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset-geolocation.html#cfn-route53-recordset-geolocation-subdivisioncode",
            "documentation": null,
            "uiOptionals": null
          },
          "uniqueId": null
        },
        "ContinentCode": {
          "kind": "string",
          "name": "ContinentCode",
          "data": {
            "name": "ContinentCode",
            "validationFormat": null,
            "defaultValue": null,
            "funcUniqueId": null,
            "inputs": [],
            "widgetKind": "Text",
            "widgetOptions": [],
            "hidden": false,
            "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset-geolocation.html#cfn-route53-recordset-geolocation-continentcode",
            "documentation": null,
            "uiOptionals": null
          },
          "uniqueId": null
        }
      }
    }
  }
}

Replaced value within actionFuncs binding:

"14f1667fbfa7d7deb97da604684835bca07f77208cbff340987f35790675ddf2"

Replaced value within actionFuncs binding:

"690eba8ded9aa72319ee5a2c16da6d80808afb8a0b7187a73289c6ebc02f6b48"

Replaced value within function Create Route53 RecordSet:

"YXN5bmMgZnVuY3Rpb24gbWFpbihjb21wb25lbnQ6IElucHV0KTogUHJvbWlzZTxPdXRwdXQ+IHsKICBpZiAoY29tcG9uZW50LnByb3BlcnRpZXMucmVzb3VyY2U/LnBheWxvYWQpIHsKICAgIHJldHVybiB7CiAgICAgIHN0YXR1czogImVycm9yIiwKICAgICAgbWVzc2FnZTogIlJlc291cmNlIGFscmVhZHkgZXhpc3RzIiwKICAgICAgcGF5bG9hZDogY29tcG9uZW50LnByb3BlcnRpZXMucmVzb3VyY2UucGF5bG9hZCwKICAgIH07CiAgfQoKICAvLyBDaGFuZ2VkOiBhY2Nlc3MgdmlhIGRvbWFpbi5wcm9wZXJ0aWVzCiAgY29uc3QgcHJvcGVydGllcyA9IGNvbXBvbmVudC5wcm9wZXJ0aWVzPy5kb21haW4/LnByb3BlcnRpZXM7CiAgY29uc3QgaG9zdGVkWm9uZUlkID0gcHJvcGVydGllcz8uSG9zdGVkWm9uZUlkOwogIGNvbnN0IG5hbWUgPSBwcm9wZXJ0aWVzPy5OYW1lOwogIGNvbnN0IHR5cGUgPSBwcm9wZXJ0aWVzPy5UeXBlOwoKICBpZiAoIWhvc3RlZFpvbmVJZCkgewogICAgcmV0dXJuIHsKICAgICAgc3RhdHVzOiAiZXJyb3IiLAogICAgICBtZXNzYWdlOiAiSG9zdGVkWm9uZUlkIGlzIHJlcXVpcmVkIiwKICAgIH07CiAgfQoKICBpZiAoIW5hbWUpIHsKICAgIHJldHVybiB7CiAgICAgIHN0YXR1czogImVycm9yIiwKICAgICAgbWVzc2FnZTogIk5hbWUgaXMgcmVxdWlyZWQiLAogICAgfTsKICB9CgogIGlmICghdHlwZSkgewogICAgcmV0dXJuIHsKICAgICAgc3RhdHVzOiAiZXJyb3IiLAogICAgICBtZXNzYWdlOiAiVHlwZSBpcyByZXF1aXJlZCIsCiAgICB9OwogIH0KCiAgY29uc3QgY2hhbmdlQmF0Y2ggPSB7CiAgICBDaGFuZ2VzOiBbCiAgICAgIHsKICAgICAgICBBY3Rpb246ICJDUkVBVEUiLAogICAgICAgIFJlc291cmNlUmVjb3JkU2V0OiB7CiAgICAgICAgICBOYW1lOiBuYW1lLAogICAgICAgICAgVHlwZTogdHlwZSwKICAgICAgICAgIFRUTDogcHJvcGVydGllcz8uVFRMID8gcGFyc2VJbnQocHJvcGVydGllcy5UVEwpIDogdW5kZWZpbmVkLAogICAgICAgICAgUmVzb3VyY2VSZWNvcmRzOiBwcm9wZXJ0aWVzPy5SZXNvdXJjZVJlY29yZHM/Lm1hcCgKICAgICAgICAgICAgKHJlY29yZDogc3RyaW5nKSA9PiAoewogICAgICAgICAgICAgIFZhbHVlOiByZWNvcmQsCiAgICAgICAgICAgIH0pLAogICAgICAgICAgKSwKICAgICAgICAgIEFsaWFzVGFyZ2V0OiBwcm9wZXJ0aWVzPy5BbGlhc1RhcmdldAogICAgICAgICAgICA/IHsKICAgICAgICAgICAgICAgIEROU05hbWU6IHByb3BlcnRpZXMuQWxpYXNUYXJnZXQuRE5TTmFtZSwKICAgICAgICAgICAgICAgIEV2YWx1YXRlVGFyZ2V0SGVhbHRoOiBwcm9wZXJ0aWVzLkFsaWFzVGFyZ2V0LkV2YWx1YXRlVGFyZ2V0SGVhbHRoLAogICAgICAgICAgICAgICAgSG9zdGVkWm9uZUlkOiBwcm9wZXJ0aWVzLkFsaWFzVGFyZ2V0Lkhvc3RlZFpvbmVJZCwKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIDogdW5kZWZpbmVkLAogICAgICAgICAgU2V0SWRlbnRpZmllcjogcHJvcGVydGllcz8uU2V0SWRlbnRpZmllciwKICAgICAgICAgIFdlaWdodDogcHJvcGVydGllcz8uV2VpZ2h0LAogICAgICAgICAgUmVnaW9uOiBwcm9wZXJ0aWVzPy5SZWdpb24sCiAgICAgICAgICBHZW9Mb2NhdGlvbjogcHJvcGVydGllcz8uR2VvTG9jYXRpb24sCiAgICAgICAgICBGYWlsb3ZlcjogcHJvcGVydGllcz8uRmFpbG92ZXIsCiAgICAgICAgICBNdWx0aVZhbHVlQW5zd2VyOiBwcm9wZXJ0aWVzPy5NdWx0aVZhbHVlQW5zd2VyLAogICAgICAgICAgSGVhbHRoQ2hlY2tJZDogcHJvcGVydGllcz8uSGVhbHRoQ2hlY2tJZCwKICAgICAgICB9LAogICAgICB9LAogICAgXSwKICB9OwoKICBjb25zdCBjaGlsZCA9IGF3YWl0IHNpRXhlYy53YWl0VW50aWxFbmQoImF3cyIsIFsKICAgICJyb3V0ZTUzIiwKICAgICJjaGFuZ2UtcmVzb3VyY2UtcmVjb3JkLXNldHMiLAogICAgIi0taG9zdGVkLXpvbmUtaWQiLAogICAgaG9zdGVkWm9uZUlkLAogICAgIi0tY2hhbmdlLWJhdGNoIiwKICAgIEpTT04uc3RyaW5naWZ5KGNoYW5nZUJhdGNoKSwKICBdKTsKCiAgaWYgKGNoaWxkLmV4aXRDb2RlICE9PSAwKSB7CiAgICBjb25zb2xlLmVycm9yKGNoaWxkLnN0ZGVycik7CiAgICByZXR1cm4gewogICAgICBzdGF0dXM6ICJlcnJvciIsCiAgICAgIG1lc3NhZ2U6IGBVbmFibGUgdG8gY3JlYXRlOyBBV1MgQ0xJIGV4aXRlZCB3aXRoIG5vbiB6ZXJvIGNvZGU6ICR7Y2hpbGQuZXhpdENvZGV9YCwKICAgIH07CiAgfQoKICBjb25zdCByZXNwb25zZSA9IEpTT04ucGFyc2UoY2hpbGQuc3Rkb3V0KTsKICBjb25zb2xlLmxvZygiQ2hhbmdlIEluZm86IiwgcmVzcG9uc2UuQ2hhbmdlSW5mbyk7CgogIHJldHVybiB7CiAgICByZXNvdXJjZUlkOiBgJHtob3N0ZWRab25lSWR9OiR7bmFtZX06JHt0eXBlfWAsCiAgICBzdGF0dXM6ICJvayIsCiAgfTsKfQo"

Replaced value within function Discover on AWS:

"YXN5bmMgZnVuY3Rpb24gbWFpbih7CiAgdGhpc0NvbXBvbmVudCwKfTogSW5wdXQpOiBQcm9taXNlPE91dHB1dD4gewogIC8vIENoYW5nZWQ6IGFjY2VzcyB2aWEgZG9tYWluLnByb3BlcnRpZXMKICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpc0NvbXBvbmVudC5wcm9wZXJ0aWVzLmRvbWFpbi5wcm9wZXJ0aWVzOwogIGNvbnN0IHJlZ2lvbiA9IF8uZ2V0KHRoaXNDb21wb25lbnQsIFsKICAgICJwcm9wZXJ0aWVzIiwKICAgICJkb21haW4iLAogICAgImV4dHJhIiwKICAgICJSZWdpb24iLAogIF0pOwoKICBjb25zb2xlLmxvZygiPT09IFJPVVRFNTMgRElTQ09WRVIgUkVDT1JEIFNFVFMgPT09Iik7CiAgY29uc29sZS5sb2coIlN0YXJ0aW5nIFJvdXRlNTMgcmVjb3JkIGRpc2NvdmVyeSIpOwogIGNvbnNvbGUubG9nKCJEb21haW4gcHJvcGVydGllczoiLCBKU09OLnN0cmluZ2lmeShwcm9wZXJ0aWVzLCBudWxsLCAyKSk7CiAgY29uc29sZS5sb2coIlJlZ2lvbjoiLCByZWdpb24pOwoKICBpZiAoIXJlZ2lvbikgewogICAgdGhyb3cgbmV3IEVycm9yKCJSZWdpb24gaXMgcmVxdWlyZWQgZm9yIEFXUyBDTEkgb3BlcmF0aW9ucyIpOwogIH0KCiAgLy8gR2V0IGhvc3RlZCB6b25lIElEIC0gZWl0aGVyIGRpcmVjdGx5IG9yIGJ5IGxvb2tpbmcgdXAgdGhlIG5hbWUKICBsZXQgaG9zdGVkWm9uZUlkID0gcHJvcGVydGllcz8uSG9zdGVkWm9uZUlkOwogIGNvbnN0IGhvc3RlZFpvbmVOYW1lID0gcHJvcGVydGllcz8uSG9zdGVkWm9uZU5hbWU7CgogIC8vIElmIHdlIGRvbid0IGhhdmUgYSBob3N0ZWQgem9uZSBJRCBidXQgaGF2ZSBhIG5hbWUsIGxvb2sgaXQgdXAKICBpZiAoIWhvc3RlZFpvbmVJZCAmJiBob3N0ZWRab25lTmFtZSkgewogICAgY29uc29sZS5sb2coIkxvb2tpbmcgdXAgaG9zdGVkIHpvbmUgYnkgbmFtZToiLCBob3N0ZWRab25lTmFtZSk7CiAgICBjb25zdCBsaXN0Wm9uZXNDaGlsZCA9IGF3YWl0IHNpRXhlYy53YWl0VW50aWxFbmQoImF3cyIsIFsKICAgICAgInJvdXRlNTMiLAogICAgICAibGlzdC1ob3N0ZWQtem9uZXMiLAogICAgICAiLS1yZWdpb24iLAogICAgICByZWdpb24sCiAgICBdKTsKCiAgICBpZiAobGlzdFpvbmVzQ2hpbGQuZXhpdENvZGUgIT09IDApIHsKICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGxpc3QgaG9zdGVkIHpvbmVzOiIsIGxpc3Rab25lc0NoaWxkLnN0ZGVycik7CiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxpc3QgaG9zdGVkIHpvbmVzOiAke2xpc3Rab25lc0NoaWxkLnN0ZGVycn1gKTsKICAgIH0KCiAgICBjb25zdCB6b25lc1Jlc3BvbnNlID0gSlNPTi5wYXJzZShsaXN0Wm9uZXNDaGlsZC5zdGRvdXQpOwogICAgY29uc29sZS5sb2coIkZvdW5kIGhvc3RlZCB6b25lczoiLCB6b25lc1Jlc3BvbnNlLkhvc3RlZFpvbmVzPy5sZW5ndGggfHwgMCk7CgogICAgLy8gRmluZCB0aGUgaG9zdGVkIHpvbmUgdGhhdCBtYXRjaGVzIHRoZSBuYW1lCiAgICBmb3IgKGNvbnN0IHpvbmUgb2Ygem9uZXNSZXNwb25zZS5Ib3N0ZWRab25lcyB8fCBbXSkgewogICAgICBpZiAoem9uZS5OYW1lID09PSBob3N0ZWRab25lTmFtZSkgewogICAgICAgIGhvc3RlZFpvbmVJZCA9IHpvbmUuSWQucmVwbGFjZSgiL2hvc3RlZHpvbmUvIiwgIiIpOwogICAgICAgIGNvbnNvbGUubG9nKCJGb3VuZCBob3N0ZWQgem9uZSBJRDoiLCBob3N0ZWRab25lSWQpOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CgogICAgaWYgKCFob3N0ZWRab25lSWQpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAgIGBDb3VsZCBub3QgZmluZCBob3N0ZWQgem9uZSB3aXRoIG5hbWU6ICR7aG9zdGVkWm9uZU5hbWV9YCwKICAgICAgKTsKICAgIH0KICB9CgogIGlmICghaG9zdGVkWm9uZUlkKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICJFaXRoZXIgSG9zdGVkWm9uZUlkIG9yIEhvc3RlZFpvbmVOYW1lIG11c3QgYmUgcHJvdmlkZWQgZm9yIGRpc2NvdmVyeSIsCiAgICApOwogIH0KCiAgY29uc29sZS5sb2coIkRpc2NvdmVyaW5nIHJlY29yZCBzZXRzIGluIGhvc3RlZCB6b25lOiIsIGhvc3RlZFpvbmVJZCk7CgogIC8vIExpc3QgYWxsIHJlY29yZCBzZXRzIGluIHRoZSBob3N0ZWQgem9uZQogIGNvbnN0IGxpc3RSZWNvcmRzQ2hpbGQgPSBhd2FpdCBzaUV4ZWMud2FpdFVudGlsRW5kKCJhd3MiLCBbCiAgICAicm91dGU1MyIsCiAgICAibGlzdC1yZXNvdXJjZS1yZWNvcmQtc2V0cyIsCiAgICAiLS1ob3N0ZWQtem9uZS1pZCIsCiAgICBob3N0ZWRab25lSWQsCiAgICAiLS1yZWdpb24iLAogICAgcmVnaW9uLAogIF0pOwoKICBpZiAobGlzdFJlY29yZHNDaGlsZC5leGl0Q29kZSAhPT0gMCkgewogICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGxpc3QgcmVjb3JkczoiLCBsaXN0UmVjb3Jkc0NoaWxkLnN0ZGVycik7CiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsaXN0IHJlY29yZHM6ICR7bGlzdFJlY29yZHNDaGlsZC5zdGRlcnJ9YCk7CiAgfQoKICBjb25zdCByZWNvcmRzUmVzcG9uc2UgPSBKU09OLnBhcnNlKGxpc3RSZWNvcmRzQ2hpbGQuc3Rkb3V0KTsKICBjb25zdCByZWNvcmRTZXRzID0gcmVjb3Jkc1Jlc3BvbnNlLlJlc291cmNlUmVjb3JkU2V0cyB8fCBbXTsKICBjb25zb2xlLmxvZygiVG90YWwgcmVjb3JkIHNldHMgZm91bmQ6IiwgcmVjb3JkU2V0cy5sZW5ndGgpOwoKICAvLyBCdWlsZCBjb21wb25lbnQgc3BlY3MgZm9yIGVhY2ggcmVjb3JkIHNldAogIGNvbnN0IHNwZWNzOiBPdXRwdXRbIm9wcyJdWyJjcmVhdGUiXSA9IHt9OwoKICBmb3IgKGNvbnN0IHJlY29yZCBvZiByZWNvcmRTZXRzKSB7CiAgICBjb25zb2xlLmxvZyhgUHJvY2Vzc2luZyByZWNvcmQ6ICR7cmVjb3JkLk5hbWV9ICgke3JlY29yZC5UeXBlfSlgKTsKCiAgICAvLyBDcmVhdGUgYSB1bmlxdWUgY29tcG9uZW50IG5hbWUKICAgIC8vIFJlbW92ZSB0cmFpbGluZyBkb3QgZnJvbSBuYW1lIGFuZCByZXBsYWNlIGRvdHMgd2l0aCBkYXNoZXMKICAgIGNvbnN0IGJhc2VOYW1lID0gcmVjb3JkLk5hbWUucmVwbGFjZSgvXC4kLywgIiIpLnJlcGxhY2UoL1wuL2csICItIik7CiAgICBjb25zdCBjb21wb25lbnROYW1lID0gYCR7YmFzZU5hbWV9LSR7cmVjb3JkLlR5cGV9YDsKCiAgICAvLyBDaGFuZ2VkOiBuZXN0IGRvbWFpblByb3BzIHVuZGVyIHByb3BlcnRpZXMKICAgIGNvbnN0IGRvbWFpblByb3BzOiBhbnkgPSB7CiAgICAgIE5hbWU6IHJlY29yZC5OYW1lLAogICAgICBUeXBlOiByZWNvcmQuVHlwZSwKICAgICAgSG9zdGVkWm9uZUlkOiBob3N0ZWRab25lSWQsCiAgICB9OwoKICAgIC8vIEFkZCBvcHRpb25hbCBwcm9wZXJ0aWVzIGlmIHRoZXkgZXhpc3QKICAgIGlmIChyZWNvcmQuVFRMICE9PSB1bmRlZmluZWQpIHsKICAgICAgZG9tYWluUHJvcHMuVFRMID0gcmVjb3JkLlRUTC50b1N0cmluZygpOwogICAgfQoKICAgIGlmIChyZWNvcmQuUmVzb3VyY2VSZWNvcmRzICYmIHJlY29yZC5SZXNvdXJjZVJlY29yZHMubGVuZ3RoID4gMCkgewogICAgICBkb21haW5Qcm9wcy5SZXNvdXJjZVJlY29yZHMgPSByZWNvcmQuUmVzb3VyY2VSZWNvcmRzLm1hcCgocnIpID0+CiAgICAgICAgcnIuVmFsdWUKICAgICAgKTsKICAgIH0KCiAgICBpZiAocmVjb3JkLkFsaWFzVGFyZ2V0KSB7CiAgICAgIGRvbWFpblByb3BzLkFsaWFzVGFyZ2V0ID0gewogICAgICAgIEROU05hbWU6IHJlY29yZC5BbGlhc1RhcmdldC5ETlNOYW1lLAogICAgICAgIEhvc3RlZFpvbmVJZDogcmVjb3JkLkFsaWFzVGFyZ2V0Lkhvc3RlZFpvbmVJZCwKICAgICAgICBFdmFsdWF0ZVRhcmdldEhlYWx0aDogcmVjb3JkLkFsaWFzVGFyZ2V0LkV2YWx1YXRlVGFyZ2V0SGVhbHRoLAogICAgICB9OwogICAgfQoKICAgIGlmIChyZWNvcmQuU2V0SWRlbnRpZmllcikgewogICAgICBkb21haW5Qcm9wcy5TZXRJZGVudGlmaWVyID0gcmVjb3JkLlNldElkZW50aWZpZXI7CiAgICB9CgogICAgaWYgKHJlY29yZC5XZWlnaHQgIT09IHVuZGVmaW5lZCkgewogICAgICBkb21haW5Qcm9wcy5XZWlnaHQgPSByZWNvcmQuV2VpZ2h0OwogICAgfQoKICAgIGlmIChyZWNvcmQuUmVnaW9uKSB7CiAgICAgIGRvbWFpblByb3BzLlJlZ2lvbiA9IHJlY29yZC5SZWdpb247CiAgICB9CgogICAgaWYgKHJlY29yZC5HZW9Mb2NhdGlvbikgewogICAgICBkb21haW5Qcm9wcy5HZW9Mb2NhdGlvbiA9IHJlY29yZC5HZW9Mb2NhdGlvbjsKICAgIH0KCiAgICBpZiAocmVjb3JkLkZhaWxvdmVyKSB7CiAgICAgIGRvbWFpblByb3BzLkZhaWxvdmVyID0gcmVjb3JkLkZhaWxvdmVyOwogICAgfQoKICAgIGlmIChyZWNvcmQuTXVsdGlWYWx1ZUFuc3dlciAhPT0gdW5kZWZpbmVkKSB7CiAgICAgIGRvbWFpblByb3BzLk11bHRpVmFsdWVBbnN3ZXIgPSByZWNvcmQuTXVsdGlWYWx1ZUFuc3dlcjsKICAgIH0KCiAgICBpZiAocmVjb3JkLkhlYWx0aENoZWNrSWQpIHsKICAgICAgZG9tYWluUHJvcHMuSGVhbHRoQ2hlY2tJZCA9IHJlY29yZC5IZWFsdGhDaGVja0lkOwogICAgfQoKICAgIGlmIChyZWNvcmQuQ2lkclJvdXRpbmdDb25maWcpIHsKICAgICAgZG9tYWluUHJvcHMuQ2lkclJvdXRpbmdDb25maWcgPSByZWNvcmQuQ2lkclJvdXRpbmdDb25maWc7CiAgICB9CgogICAgaWYgKHJlY29yZC5HZW9Qcm94aW1pdHlMb2NhdGlvbikgewogICAgICBkb21haW5Qcm9wcy5HZW9Qcm94aW1pdHlMb2NhdGlvbiA9IHJlY29yZC5HZW9Qcm94aW1pdHlMb2NhdGlvbjsKICAgIH0KCiAgICAvLyBCdWlsZCB0aGUgY29tcG9uZW50IHNwZWMgd2l0aCBuZXN0ZWQgcHJvcGVydGllcwogICAgc3BlY3NbY29tcG9uZW50TmFtZV0gPSB7CiAgICAgIGtpbmQ6ICJBV1M6OlJvdXRlNTM6OlJlY29yZFNldCIsCiAgICAgIHByb3BlcnRpZXM6IHsKICAgICAgICBzaTogewogICAgICAgICAgbmFtZTogY29tcG9uZW50TmFtZSwKICAgICAgICB9LAogICAgICAgIGRvbWFpbjogewogICAgICAgICAgcHJvcGVydGllczogZG9tYWluUHJvcHMsCiAgICAgICAgfSwKICAgICAgICByZXNvdXJjZTogcmVjb3JkLAogICAgICB9LAogICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgIi9kb21haW4vZXh0cmEvUmVnaW9uIjogewogICAgICAgICAgJHNvdXJjZTogdGhpc0NvbXBvbmVudC5zb3VyY2VzWyIvZG9tYWluL2V4dHJhL1JlZ2lvbiJdLAogICAgICAgIH0sCiAgICAgICAgIi9zZWNyZXRzL0FXUyBDcmVkZW50aWFsIjogewogICAgICAgICAgJHNvdXJjZTogdGhpc0NvbXBvbmVudC5zb3VyY2VzWyIvc2VjcmV0cy9BV1MgQ3JlZGVudGlhbCJdLAogICAgICAgIH0sCiAgICAgIH0sCiAgICB9OwoKICAgIGNvbnNvbGUubG9nKGBDcmVhdGVkIHNwZWMgZm9yOiAke2NvbXBvbmVudE5hbWV9YCk7CiAgfQoKICBjb25zb2xlLmxvZyhgQ3JlYXRlZCAke09iamVjdC5rZXlzKHNwZWNzKS5sZW5ndGh9IGNvbXBvbmVudCBzcGVjc2ApOwogIGNvbnNvbGUubG9nKCI9PT0gUk9VVEU1MyBESVNDT1ZFUiBFTkQgPT09Iik7CgogIHJldHVybiB7CiAgICBzdGF0dXM6ICJvayIsCiAgICBvcHM6IHsKICAgICAgY3JlYXRlOiBzcGVjcywKICAgIH0sCiAgfTsKfQo"

Replaced value within function Import from AWS:

"YXN5bmMgZnVuY3Rpb24gbWFpbih7CiAgdGhpc0NvbXBvbmVudCwKfTogSW5wdXQpOiBQcm9taXNlPE91dHB1dD4gewogIC8vIENoYW5nZWQ6IGFjY2VzcyB2aWEgZG9tYWluLnByb3BlcnRpZXMKICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpc0NvbXBvbmVudC5wcm9wZXJ0aWVzLmRvbWFpbi5wcm9wZXJ0aWVzOwogIGNvbnN0IHJlZ2lvbiA9IF8uZ2V0KHRoaXNDb21wb25lbnQsIFsKICAgICJwcm9wZXJ0aWVzIiwKICAgICJkb21haW4iLAogICAgImV4dHJhIiwKICAgICJSZWdpb24iLAogIF0pOwogIGNvbnN0IHJlc291cmNlSWQgPSBfLmdldCh0aGlzQ29tcG9uZW50LCBbInByb3BlcnRpZXMiLCAic2kiLCAicmVzb3VyY2VJZCJdKTsKCiAgY29uc29sZS5sb2coIj09PSBST1VURTUzIElNUE9SVCBXSVRIICdvcHMnIEtFWSA9PT0iKTsKICBjb25zb2xlLmxvZygKICAgICJTdGFydGluZyBSb3V0ZTUzIHJlY29yZCBpbXBvcnQgZm9yOiIsCiAgICBKU09OLnN0cmluZ2lmeShwcm9wZXJ0aWVzLCBudWxsLCAyKSwKICApOwogIGNvbnNvbGUubG9nKCJSZXNvdXJjZSBJRDoiLCByZXNvdXJjZUlkKTsKICBjb25zb2xlLmxvZygiUmVnaW9uOiIsIHJlZ2lvbik7CgogIGlmICghcmVzb3VyY2VJZCkgewogICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAiUmVzb3VyY2UgSUQgaXMgcmVxdWlyZWQgZm9yIGltcG9ydC4gRm9ybWF0IHNob3VsZCBiZSBsaWtlOiB0b255cy1jaGlwcy5sb2NhbC46U09BIiwKICAgICk7CiAgfQoKICBpZiAoIXJlZ2lvbikgewogICAgdGhyb3cgbmV3IEVycm9yKCJSZWdpb24gaXMgcmVxdWlyZWQgZm9yIEFXUyBDTEkgb3BlcmF0aW9ucyIpOwogIH0KCiAgLy8gUGFyc2UgcmVzb3VyY2UgSUQgdG8gZ2V0IGhvc3RlZCB6b25lIElELCBuYW1lIGFuZCB0eXBlCiAgY29uc3QgcGFydHMgPSByZXNvdXJjZUlkLnNwbGl0KCI6Iik7CiAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMikgewogICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAiSW52YWxpZCByZXNvdXJjZSBJRCBmb3JtYXQuIEV4cGVjdGVkIGZvcm1hdDogcmVjb3JkbmFtZTp0eXBlIChlLmcuLCB0b255cy1jaGlwcy5sb2NhbC46U09BKSIsCiAgICApOwogIH0KCiAgY29uc3QgcmVjb3JkTmFtZSA9IHBhcnRzWzBdOwogIGNvbnN0IHJlY29yZFR5cGUgPSBwYXJ0c1sxXTsKCiAgY29uc29sZS5sb2coIlBhcnNlZCAtIFJlY29yZCBOYW1lOiIsIHJlY29yZE5hbWUsICJUeXBlOiIsIHJlY29yZFR5cGUpOwoKICAvLyBGaXJzdCwgZmluZCB0aGUgaG9zdGVkIHpvbmUgZm9yIHRoaXMgZG9tYWluCiAgY29uc3QgbGlzdFpvbmVzQ2hpbGQgPSBhd2FpdCBzaUV4ZWMud2FpdFVudGlsRW5kKCJhd3MiLCBbCiAgICAicm91dGU1MyIsCiAgICAibGlzdC1ob3N0ZWQtem9uZXMiLAogICAgIi0tcmVnaW9uIiwKICAgIHJlZ2lvbiwKICBdKTsKCiAgaWYgKGxpc3Rab25lc0NoaWxkLmV4aXRDb2RlICE9PSAwKSB7CiAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gbGlzdCBob3N0ZWQgem9uZXM6IiwgbGlzdFpvbmVzQ2hpbGQuc3RkZXJyKTsKICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxpc3QgaG9zdGVkIHpvbmVzOiAke2xpc3Rab25lc0NoaWxkLnN0ZGVycn1gKTsKICB9CgogIGNvbnN0IHpvbmVzUmVzcG9uc2UgPSBKU09OLnBhcnNlKGxpc3Rab25lc0NoaWxkLnN0ZG91dCk7CiAgY29uc29sZS5sb2coIkZvdW5kIGhvc3RlZCB6b25lczoiLCB6b25lc1Jlc3BvbnNlLkhvc3RlZFpvbmVzPy5sZW5ndGggfHwgMCk7CgogIC8vIEZpbmQgdGhlIGhvc3RlZCB6b25lIHRoYXQgbWF0Y2hlcyB0aGlzIHJlY29yZAogIGxldCBob3N0ZWRab25lSWQgPSBudWxsOwogIGZvciAoY29uc3Qgem9uZSBvZiB6b25lc1Jlc3BvbnNlLkhvc3RlZFpvbmVzIHx8IFtdKSB7CiAgICBjb25zb2xlLmxvZygiQ2hlY2tpbmcgem9uZToiLCB6b25lLk5hbWUsICJhZ2FpbnN0IHJlY29yZDoiLCByZWNvcmROYW1lKTsKICAgIGlmIChyZWNvcmROYW1lID09PSB6b25lLk5hbWUpIHsKICAgICAgaG9zdGVkWm9uZUlkID0gem9uZS5JZC5yZXBsYWNlKCIvaG9zdGVkem9uZS8iLCAiIik7CiAgICAgIGNvbnNvbGUubG9nKCJGb3VuZCBtYXRjaGluZyBob3N0ZWQgem9uZToiLCBob3N0ZWRab25lSWQpOwogICAgICBicmVhazsKICAgIH0KICB9CgogIGlmICghaG9zdGVkWm9uZUlkKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGhvc3RlZCB6b25lIGZvciByZWNvcmQ6ICR7cmVjb3JkTmFtZX1gKTsKICB9CgogIC8vIEdldCB0aGUgc3BlY2lmaWMgcmVjb3JkCiAgY29uc3QgbGlzdFJlY29yZHNDaGlsZCA9IGF3YWl0IHNpRXhlYy53YWl0VW50aWxFbmQoImF3cyIsIFsKICAgICJyb3V0ZTUzIiwKICAgICJsaXN0LXJlc291cmNlLXJlY29yZC1zZXRzIiwKICAgICItLWhvc3RlZC16b25lLWlkIiwKICAgIGhvc3RlZFpvbmVJZCwKICAgICItLXJlZ2lvbiIsCiAgICByZWdpb24sCiAgXSk7CgogIGlmIChsaXN0UmVjb3Jkc0NoaWxkLmV4aXRDb2RlICE9PSAwKSB7CiAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gbGlzdCByZWNvcmRzOiIsIGxpc3RSZWNvcmRzQ2hpbGQuc3RkZXJyKTsKICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxpc3QgcmVjb3JkczogJHtsaXN0UmVjb3Jkc0NoaWxkLnN0ZGVycn1gKTsKICB9CgogIGNvbnN0IHJlY29yZHNSZXNwb25zZSA9IEpTT04ucGFyc2UobGlzdFJlY29yZHNDaGlsZC5zdGRvdXQpOwogIGNvbnNvbGUubG9nKAogICAgIlRvdGFsIHJlY29yZHMgZm91bmQ6IiwKICAgIHJlY29yZHNSZXNwb25zZS5SZXNvdXJjZVJlY29yZFNldHM/Lmxlbmd0aCB8fCAwLAogICk7CgogIC8vIEZpbmQgdGhlIHNwZWNpZmljIHJlY29yZCB3ZSB3YW50IHRvIGltcG9ydAogIGNvbnN0IHRhcmdldFJlY29yZCA9IHJlY29yZHNSZXNwb25zZS5SZXNvdXJjZVJlY29yZFNldHM/LmZpbmQoKHJlY29yZCkgPT4gewogICAgY29uc3QgbmFtZU1hdGNoID0gcmVjb3JkLk5hbWUgPT09IHJlY29yZE5hbWU7CiAgICBjb25zdCB0eXBlTWF0Y2ggPSByZWNvcmQuVHlwZSA9PT0gcmVjb3JkVHlwZTsKICAgIGNvbnNvbGUubG9nKAogICAgICBgQ2hlY2tpbmcgcmVjb3JkOiAke3JlY29yZC5OYW1lfSAoJHtyZWNvcmQuVHlwZX0pIC0gTmFtZSBtYXRjaDogJHtuYW1lTWF0Y2h9LCBUeXBlIG1hdGNoOiAke3R5cGVNYXRjaH1gLAogICAgKTsKICAgIHJldHVybiBuYW1lTWF0Y2ggJiYgdHlwZU1hdGNoOwogIH0pOwoKICBpZiAoIXRhcmdldFJlY29yZCkgewogICAgY29uc29sZS5sb2coIkF2YWlsYWJsZSByZWNvcmRzOiIpOwogICAgcmVjb3Jkc1Jlc3BvbnNlLlJlc291cmNlUmVjb3JkU2V0cz8uZm9yRWFjaCgocmVjb3JkKSA9PiB7CiAgICAgIGNvbnNvbGUubG9nKGAgIC0gJHtyZWNvcmQuTmFtZX0gKCR7cmVjb3JkLlR5cGV9KWApOwogICAgfSk7CiAgICB0aHJvdyBuZXcgRXJyb3IoYFJlY29yZCBub3QgZm91bmQ6ICR7cmVjb3JkTmFtZX0gKCR7cmVjb3JkVHlwZX0pYCk7CiAgfQoKICBjb25zb2xlLmxvZygiRm91bmQgdGFyZ2V0IHJlY29yZDoiLCBKU09OLnN0cmluZ2lmeSh0YXJnZXRSZWNvcmQsIG51bGwsIDIpKTsKCiAgLy8gQ2hhbmdlZDogbmVzdCBkb21haW5Qcm9wcyB1bmRlciBwcm9wZXJ0aWVzCiAgY29uc3QgZG9tYWluUHJvcHMgPSB7CiAgICBwcm9wZXJ0aWVzOiB7CiAgICAgIE5hbWU6IHRhcmdldFJlY29yZC5OYW1lLAogICAgICBUeXBlOiB0YXJnZXRSZWNvcmQuVHlwZSwKICAgICAgSG9zdGVkWm9uZUlkOiBob3N0ZWRab25lSWQsCiAgICAgIFRUTDogdGFyZ2V0UmVjb3JkLlRUTD8udG9TdHJpbmcoKSwKICAgICAgUmVzb3VyY2VSZWNvcmRzOgogICAgICAgIHRhcmdldFJlY29yZC5SZXNvdXJjZVJlY29yZHM/Lm1hcCgocnIpID0+IHJyLlZhbHVlKSB8fCBbXSwKICAgIH0sCiAgfTsKCiAgY29uc29sZS5sb2coIkJ1aWx0IGRvbWFpbiBwcm9wZXJ0aWVzOiIsIEpTT04uc3RyaW5naWZ5KGRvbWFpblByb3BzLCBudWxsLCAyKSk7CgogIC8vIEJ1aWxkIHRoZSBvcHMgc3RydWN0dXJlIChub3Qgb3BlcmF0aW9ucyEpCiAgY29uc3Qgb3BzU3RydWN0dXJlID0gewogICAgYWN0aW9uczogewogICAgICBzZWxmOiB7CiAgICAgICAgYWRkOiBbXSwKICAgICAgICByZW1vdmU6IFsiY3JlYXRlIiwgInJlZnJlc2giXSwKICAgICAgfSwKICAgIH0sCiAgICB1cGRhdGU6IHsKICAgICAgc2VsZjogewogICAgICAgIHByb3BlcnRpZXM6IHsKICAgICAgICAgIGRvbWFpbjogZG9tYWluUHJvcHMsCiAgICAgICAgICByZXNvdXJjZTogdGFyZ2V0UmVjb3JkLAogICAgICAgIH0sCiAgICAgIH0sCiAgICB9LAogIH07CgogIGNvbnNvbGUubG9nKCJCdWlsdCBvcHMgc3RydWN0dXJlOiIsIEpTT04uc3RyaW5naWZ5KG9wc1N0cnVjdHVyZSwgbnVsbCwgMikpOwoKICAvLyBCdWlsZCB0aGUgZmluYWwgcmV0dXJuIG9iamVjdCB3aXRoICdvcHMnIG5vdCAnb3BlcmF0aW9ucycKICBjb25zdCByZXR1cm5PYmplY3QgPSB7CiAgICBzdGF0dXM6ICJvayIsCiAgICBtZXNzYWdlOiAiSW1wb3J0ZWQgUmVzb3VyY2UiLAogICAgb3BzOiBvcHNTdHJ1Y3R1cmUsCiAgfTsKCiAgY29uc29sZS5sb2coCiAgICAiRmluYWwgcmV0dXJuIG9iamVjdCB3aXRoICdvcHMnOiIsCiAgICBKU09OLnN0cmluZ2lmeShyZXR1cm5PYmplY3QsIG51bGwsIDIpLAogICk7CiAgY29uc29sZS5sb2coIj09PSBST1VURTUzIElNUE9SVCBFTkQgPT09Iik7CgogIHJldHVybiByZXR1cm5PYmplY3Q7Cn0K"

Replaced value within function Refresh Route53 RecordSet:

"YXN5bmMgZnVuY3Rpb24gbWFpbihjb21wb25lbnQ6IElucHV0KTogUHJvbWlzZTxPdXRwdXQ+IHsKICAvLyBDaGFuZ2VkOiBhY2Nlc3MgdmlhIGRvbWFpbi5wcm9wZXJ0aWVzCiAgY29uc3QgcHJvcGVydGllcyA9IGNvbXBvbmVudC5wcm9wZXJ0aWVzPy5kb21haW4/LnByb3BlcnRpZXM7CiAgY29uc3QgaG9zdGVkWm9uZUlkID0gcHJvcGVydGllcz8uSG9zdGVkWm9uZUlkOwogIGNvbnN0IG5hbWUgPSBwcm9wZXJ0aWVzPy5OYW1lOwogIGNvbnN0IHR5cGUgPSBwcm9wZXJ0aWVzPy5UeXBlOwoKICBpZiAoIWhvc3RlZFpvbmVJZCkgewogICAgcmV0dXJuIHsKICAgICAgc3RhdHVzOiAiZXJyb3IiLAogICAgICBtZXNzYWdlOiAiSG9zdGVkWm9uZUlkIGlzIHJlcXVpcmVkIGZvciByZWZyZXNoIiwKICAgIH07CiAgfQoKICBpZiAoIW5hbWUpIHsKICAgIHJldHVybiB7CiAgICAgIHN0YXR1czogImVycm9yIiwKICAgICAgbWVzc2FnZTogIk5hbWUgaXMgcmVxdWlyZWQgZm9yIHJlZnJlc2giLAogICAgfTsKICB9CgogIGlmICghdHlwZSkgewogICAgcmV0dXJuIHsKICAgICAgc3RhdHVzOiAiZXJyb3IiLAogICAgICBtZXNzYWdlOiAiVHlwZSBpcyByZXF1aXJlZCBmb3IgcmVmcmVzaCIsCiAgICB9OwogIH0KCiAgY29uc3QgY2hpbGQgPSBhd2FpdCBzaUV4ZWMud2FpdFVudGlsRW5kKCJhd3MiLCBbCiAgICAicm91dGU1MyIsCiAgICAibGlzdC1yZXNvdXJjZS1yZWNvcmQtc2V0cyIsCiAgICAiLS1ob3N0ZWQtem9uZS1pZCIsCiAgICBob3N0ZWRab25lSWQsCiAgICAiLS1xdWVyeSIsCiAgICBgUmVzb3VyY2VSZWNvcmRTZXRzWz9OYW1lPT0nJHtuYW1lfScgJiYgVHlwZT09JyR7dHlwZX0nXWAsCiAgXSk7CgogIGlmIChjaGlsZC5leGl0Q29kZSAhPT0gMCkgewogICAgY29uc29sZS5lcnJvcihjaGlsZC5zdGRlcnIpOwogICAgcmV0dXJuIHsKICAgICAgc3RhdHVzOiAiZXJyb3IiLAogICAgICBtZXNzYWdlOiBgUmVmcmVzaCBlcnJvcjsgZXhpdCBjb2RlICR7Y2hpbGQuZXhpdENvZGV9YCwKICAgIH07CiAgfQoKICBjb25zdCByZWNvcmRTZXRzID0gSlNPTi5wYXJzZShjaGlsZC5zdGRvdXQpOwoKICBpZiAoIXJlY29yZFNldHMgfHwgcmVjb3JkU2V0cy5sZW5ndGggPT09IDApIHsKICAgIGNvbnNvbGUubG9nKCJSZWNvcmQgc2V0IG5vdCBmb3VuZCB1cHN0cmVhbSwgcmVtb3ZpbmcgcmVzb3VyY2UiKTsKICAgIHJldHVybiB7CiAgICAgIHN0YXR1czogIm9rIiwKICAgICAgcGF5bG9hZDogbnVsbCwKICAgIH07CiAgfQoKICBjb25zdCByZWNvcmRTZXQgPSByZWNvcmRTZXRzWzBdOwoKICAvLyBDaGFuZ2VkOiBuZXN0IHBheWxvYWQgdW5kZXIgcHJvcGVydGllcwogIGNvbnN0IHBheWxvYWQgPSB7CiAgICBwcm9wZXJ0aWVzOiB7CiAgICAgIE5hbWU6IHJlY29yZFNldC5OYW1lLAogICAgICBUeXBlOiByZWNvcmRTZXQuVHlwZSwKICAgICAgVFRMOiByZWNvcmRTZXQuVFRMLAogICAgICBSZXNvdXJjZVJlY29yZHM6IHJlY29yZFNldC5SZXNvdXJjZVJlY29yZHM/Lm1hcCgocnI6IGFueSkgPT4gcnIuVmFsdWUpLAogICAgICBBbGlhc1RhcmdldDogcmVjb3JkU2V0LkFsaWFzVGFyZ2V0LAogICAgICBTZXRJZGVudGlmaWVyOiByZWNvcmRTZXQuU2V0SWRlbnRpZmllciwKICAgICAgV2VpZ2h0OiByZWNvcmRTZXQuV2VpZ2h0LAogICAgICBSZWdpb246IHJlY29yZFNldC5SZWdpb24sCiAgICAgIEdlb0xvY2F0aW9uOiByZWNvcmRTZXQuR2VvTG9jYXRpb24sCiAgICAgIEZhaWxvdmVyOiByZWNvcmRTZXQuRmFpbG92ZXIsCiAgICAgIE11bHRpVmFsdWVBbnN3ZXI6IHJlY29yZFNldC5NdWx0aVZhbHVlQW5zd2VyLAogICAgICBIZWFsdGhDaGVja0lkOiByZWNvcmRTZXQuSGVhbHRoQ2hlY2tJZCwKICAgICAgSG9zdGVkWm9uZUlkOiBob3N0ZWRab25lSWQsCiAgICB9LAogIH07CgogIHJldHVybiB7CiAgICBwYXlsb2FkLAogICAgc3RhdHVzOiAib2siLAogIH07Cn0K"

Replaced value within function Set attributes for building assets in CloudFormation:

"YXN5bmMgZnVuY3Rpb24gbWFpbih7CiAgICBwcm9wZXJ0aWVzLAogICAgZXh0cmEKfTogSW5wdXQpOiBQcm9taXNlPE91dHB1dD4gewogICAgaWYgKCFwcm9wZXJ0aWVzKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoewogICAgICAgIFR5cGU6IGV4dHJhPy5Bd3NSZXNvdXJjZVR5cGUsCiAgICAgICAgUHJvcGVydGllczogcHJvcGVydGllcwogICAgfSwgbnVsbCwgMik7Cn0K"

Replaced value within function Set attributes for building assets in CloudFormation:

"extra"

Replaced value within function Set attributes for building assets in CloudFormation:

"object"

Replaced value within function Set attributes for building assets in CloudFormation:

"properties"

Replaced value within leafFunctions binding:

"f66e1afc8ff0f43f3b8a15c87f0a916243904de894e33322beb7f84dc792305a"

Replaced value within managementFuncs binding:

"3596627c92df6aa894e9b7643e03bfc80c24f98b0e2fdddb180c5d203919a233"

Replaced value within managementFuncs binding:

"4995a7ec45cd41197507676772814cfddfbc07fc8ba398d1bc2edd52763edb23"

Removed function Set attributes for building assets in CloudFormation
Removed prop /root/domain/AliasTarget
Removed prop /root/domain/CidrRoutingConfig
Removed prop /root/domain/Comment
Removed prop /root/domain/Failover
Removed prop /root/domain/GeoLocation
Removed prop /root/domain/GeoProximityLocation
Removed prop /root/domain/HealthCheckId
Removed prop /root/domain/HostedZoneId
Removed prop /root/domain/HostedZoneName
Removed prop /root/domain/MultiValueAnswer
Removed prop /root/domain/Name
Removed prop /root/domain/Region
Removed prop /root/domain/ResourceRecords
Removed prop /root/domain/SetIdentifier
Removed prop /root/domain/TTL
Removed prop /root/domain/Type
Removed prop /root/domain/Weight

@github-actions
Copy link

Working with Module Index at: https://module-index.systeminit.com

Diffed AWS::EC2::NetworkAclEntry with the module index:

Added function CloudFormation Lint Validation:

{
  "name": "CloudFormation Lint Validation",
  "uniqueId": "",
  "data": {
    "name": "CloudFormation Lint Validation",
    "displayName": null,
    "description": null,
    "handler": "main",
    "codeBase64": "YXN5bmMgZnVuY3Rpb24gbWFpbihjb21wb25lbnQ6IElucHV0KTogUHJvbWlzZTxPdXRwdXQ+IHsKICBjb25zdCByZXNvdXJjZUJvZHkgPSBjb21wb25lbnQuZG9tYWluPy5DbG91ZEZvcm1hdGlvblJlc291cmNlQm9keTsKCiAgaWYgKCFyZXNvdXJjZUJvZHkpIHsKICAgIHJldHVybiB7CiAgICAgIHJlc3VsdDogIndhcm5pbmciLAogICAgICBtZXNzYWdlOiAiTm8gQ2xvdWRGb3JtYXRpb25SZXNvdXJjZUJvZHkgZm91bmQgLSBub3RoaW5nIHRvIHZhbGlkYXRlIiwKICAgIH07CiAgfQoKICAvLyBQYXJzZSB0aGUgcmVzb3VyY2UgYm9keQogIGxldCByZXNvdXJjZTsKICB0cnkgewogICAgcmVzb3VyY2UgPSBKU09OLnBhcnNlKHJlc291cmNlQm9keSk7CiAgfSBjYXRjaCAoZSkgewogICAgcmV0dXJuIHsKICAgICAgcmVzdWx0OiAiZmFpbHVyZSIsCiAgICAgIG1lc3NhZ2U6IGBJbnZhbGlkIEpTT04gaW4gQ2xvdWRGb3JtYXRpb25SZXNvdXJjZUJvZHk6ICR7ZS5tZXNzYWdlfWAsCiAgICB9OwogIH0KCiAgLy8gVmFsaWRhdGUgYmFzaWMgc3RydWN0dXJlCiAgaWYgKCFyZXNvdXJjZS5UeXBlKSB7CiAgICByZXR1cm4gewogICAgICByZXN1bHQ6ICJmYWlsdXJlIiwKICAgICAgbWVzc2FnZTogIkNsb3VkRm9ybWF0aW9uIHJlc291cmNlIGlzIG1pc3NpbmcgJ1R5cGUnIGZpZWxkIiwKICAgIH07CiAgfQoKICBpZiAoIXJlc291cmNlLlByb3BlcnRpZXMpIHsKICAgIHJldHVybiB7CiAgICAgIHJlc3VsdDogIndhcm5pbmciLAogICAgICBtZXNzYWdlOiAiQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UgaGFzIG5vICdQcm9wZXJ0aWVzJyAtIHRoaXMgbWF5IGJlIGludGVudGlvbmFsIiwKICAgIH07CiAgfQoKICAvLyBCdWlsZCBhIGZ1bGwgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgZm9yIHZhbGlkYXRpb24KICBjb25zdCBjbG91ZEZvcm1hdGlvblRlbXBsYXRlID0gewogICAgQVdTVGVtcGxhdGVGb3JtYXRWZXJzaW9uOiAiMjAxMC0wOS0wOSIsCiAgICBSZXNvdXJjZXM6IHsKICAgICAgQ2ZuUmVzb3VyY2U6IHJlc291cmNlLAogICAgfSwKICB9OwoKICBjb25zdCB0ZW1wbGF0ZUpzb24gPSBKU09OLnN0cmluZ2lmeShjbG91ZEZvcm1hdGlvblRlbXBsYXRlLCBudWxsLCAyKTsKCiAgLy8gVHJ5IHRvIHJ1biBjZm4tbGludCBpZiBhdmFpbGFibGUKICBjb25zdCBsaW50UmVzdWx0ID0gYXdhaXQgc2lFeGVjLndhaXRVbnRpbEVuZCgiY2ZuLWxpbnQiLCBbCiAgICAiLS10ZW1wbGF0ZSIsCiAgICAiL2Rldi9zdGRpbiIsCiAgICAiLS1mb3JtYXQiLAogICAgImpzb24iLAogIF0sIHsKICAgIGlucHV0OiB0ZW1wbGF0ZUpzb24sCiAgfSk7CgogIGlmIChsaW50UmVzdWx0LmV4aXRDb2RlID09PSAxMjcpIHsKICAgIC8vIGNmbi1saW50IG5vdCBpbnN0YWxsZWQgLSBkbyBiYXNpYyB2YWxpZGF0aW9uIG9ubHkKICAgIGNvbnNvbGUubG9nKCJjZm4tbGludCBub3QgYXZhaWxhYmxlLCBwZXJmb3JtaW5nIGJhc2ljIHZhbGlkYXRpb24gb25seSIpOwogICAgcmV0dXJuIHsKICAgICAgcmVzdWx0OiAic3VjY2VzcyIsCiAgICAgIG1lc3NhZ2U6IGBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZSBzdHJ1Y3R1cmUgaXMgdmFsaWQgKFR5cGU6ICR7cmVzb3VyY2UuVHlwZX0pLiBJbnN0YWxsIGNmbi1saW50IGZvciBkZWVwZXIgdmFsaWRhdGlvbi5gLAogICAgfTsKICB9CgogIGlmIChsaW50UmVzdWx0LmV4aXRDb2RlID09PSAwICYmICghbGludFJlc3VsdC5zdGRvdXQgfHwgbGludFJlc3VsdC5zdGRvdXQudHJpbSgpID09PSAiW10iKSkgewogICAgcmV0dXJuIHsKICAgICAgcmVzdWx0OiAic3VjY2VzcyIsCiAgICAgIG1lc3NhZ2U6IGBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZSBwYXNzZWQgY2ZuLWxpbnQgdmFsaWRhdGlvbiAoVHlwZTogJHtyZXNvdXJjZS5UeXBlfSlgLAogICAgfTsKICB9CgogIC8vIFBhcnNlIGxpbnQgcmVzdWx0cwogIHRyeSB7CiAgICBjb25zdCBsaW50RXJyb3JzID0gSlNPTi5wYXJzZShsaW50UmVzdWx0LnN0ZG91dCB8fCAiW10iKTsKCiAgICBpZiAobGludEVycm9ycy5sZW5ndGggPT09IDApIHsKICAgICAgcmV0dXJuIHsKICAgICAgICByZXN1bHQ6ICJzdWNjZXNzIiwKICAgICAgICBtZXNzYWdlOiBgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgcGFzc2VkIGNmbi1saW50IHZhbGlkYXRpb24gKFR5cGU6ICR7cmVzb3VyY2UuVHlwZX0pYCwKICAgICAgfTsKICAgIH0KCiAgICAvLyBDYXRlZ29yaXplIGVycm9ycyB2cyB3YXJuaW5ncwogICAgY29uc3QgZXJyb3JzID0gbGludEVycm9ycy5maWx0ZXIoKGU6IGFueSkgPT4gZS5MZXZlbCA9PT0gIkVycm9yIik7CiAgICBjb25zdCB3YXJuaW5ncyA9IGxpbnRFcnJvcnMuZmlsdGVyKChlOiBhbnkpID0+IGUuTGV2ZWwgPT09ICJXYXJuaW5nIik7CgogICAgY29uc3QgbWVzc2FnZXMgPSBsaW50RXJyb3JzLm1hcCgoZTogYW55KSA9PgogICAgICBgWyR7ZS5MZXZlbH1dICR7ZS5SdWxlLklkfTogJHtlLk1lc3NhZ2V9YAogICAgKTsKCiAgICBjb25zb2xlLmxvZygiY2ZuLWxpbnQgcmVzdWx0czoiKTsKICAgIG1lc3NhZ2VzLmZvckVhY2goKG06IHN0cmluZykgPT4gY29uc29sZS5sb2cobSkpOwoKICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkgewogICAgICByZXR1cm4gewogICAgICAgIHJlc3VsdDogImZhaWx1cmUiLAogICAgICAgIG1lc3NhZ2U6IGBDbG91ZEZvcm1hdGlvbiB2YWxpZGF0aW9uIGZhaWxlZDogJHtlcnJvcnMubGVuZ3RofSBlcnJvcihzKSwgJHt3YXJuaW5ncy5sZW5ndGh9IHdhcm5pbmcocykuIEZpcnN0IGVycm9yOiAke2Vycm9yc1swXS5NZXNzYWdlfWAsCiAgICAgIH07CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgcmVzdWx0OiAid2FybmluZyIsCiAgICAgIG1lc3NhZ2U6IGBDbG91ZEZvcm1hdGlvbiB2YWxpZGF0aW9uIHBhc3NlZCB3aXRoICR7d2FybmluZ3MubGVuZ3RofSB3YXJuaW5nKHMpOiAke3dhcm5pbmdzWzBdPy5NZXNzYWdlIHx8ICJTZWUgbG9ncyBmb3IgZGV0YWlscyJ9YCwKICAgIH07CiAgfSBjYXRjaCAoZSkgewogICAgLy8gSWYgd2UgY2FuJ3QgcGFyc2UgdGhlIG91dHB1dCwgY2hlY2sgaWYgdGhlcmUgd2FzIHN0ZGVycgogICAgaWYgKGxpbnRSZXN1bHQuc3RkZXJyKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgcmVzdWx0OiAiZmFpbHVyZSIsCiAgICAgICAgbWVzc2FnZTogYGNmbi1saW50IGVycm9yOiAke2xpbnRSZXN1bHQuc3RkZXJyfWAsCiAgICAgIH07CiAgICB9CiAgICByZXR1cm4gewogICAgICByZXN1bHQ6ICJ3YXJuaW5nIiwKICAgICAgbWVzc2FnZTogYENvdWxkIG5vdCBwYXJzZSBjZm4tbGludCBvdXRwdXQuIEV4aXQgY29kZTogJHtsaW50UmVzdWx0LmV4aXRDb2RlfWAsCiAgICB9OwogIH0KfQo",
    "backendKind": "jsAttribute",
    "responseType": "qualification",
    "hidden": false,
    "link": null,
    "isTransformation": false,
    "lastUpdatedAt": null
  },
  "deleted": false,
  "isFromBuiltin": null,
  "arguments": []
}

Added function Code Gen for CloudFormation-only assets:

{
  "name": "Code Gen for CloudFormation-only assets",
  "uniqueId": "",
  "data": {
    "name": "Code Gen for CloudFormation-only assets",
    "displayName": null,
    "description": null,
    "handler": "main",
    "codeBase64": "YXN5bmMgZnVuY3Rpb24gbWFpbihjb21wb25lbnQ6IElucHV0KTogUHJvbWlzZTxPdXRwdXQ+IHsKICBjb25zdCByZXNvdXJjZUJvZHkgPSBjb21wb25lbnQuZG9tYWluPy5DbG91ZEZvcm1hdGlvblJlc291cmNlQm9keTsKCiAgaWYgKCFyZXNvdXJjZUJvZHkpIHsKICAgIHJldHVybiB7CiAgICAgIGZvcm1hdDogImpzb24iLAogICAgICBjb2RlOiBKU09OLnN0cmluZ2lmeSgKICAgICAgICB7CiAgICAgICAgICBBV1NUZW1wbGF0ZUZvcm1hdFZlcnNpb246ICIyMDEwLTA5LTA5IiwKICAgICAgICAgIFJlc291cmNlczoge30sCiAgICAgICAgfSwKICAgICAgICBudWxsLAogICAgICAgIDIsCiAgICAgICksCiAgICB9OwogIH0KCiAgLy8gQ2xvdWRGb3JtYXRpb25SZXNvdXJjZUJvZHkgaXMgYWxyZWFkeSBhIEpTT04gc3RyaW5nIGZyb20gdGhlIGF0dHJpYnV0ZSBmdW5jdGlvbgogIGNvbnN0IHJlc291cmNlID0gSlNPTi5wYXJzZShyZXNvdXJjZUJvZHkpOwoKICBjb25zdCBjbG91ZEZvcm1hdGlvblRlbXBsYXRlID0gewogICAgQVdTVGVtcGxhdGVGb3JtYXRWZXJzaW9uOiAiMjAxMC0wOS0wOSIsCiAgICBSZXNvdXJjZXM6IHsKICAgICAgY2ZuUmVzb3VyY2U6IHJlc291cmNlLAogICAgfSwKICB9OwoKICByZXR1cm4gewogICAgZm9ybWF0OiAianNvbiIsCiAgICBjb2RlOiBKU09OLnN0cmluZ2lmeShjbG91ZEZvcm1hdGlvblRlbXBsYXRlLCBudWxsLCAyKSwKICB9Owp9Cg",
    "backendKind": "jsAttribute",
    "responseType": "codeGeneration",
    "hidden": false,
    "link": null,
    "isTransformation": false,
    "lastUpdatedAt": null
  },
  "deleted": false,
  "isFromBuiltin": null,
  "arguments": []
}

Added leafFunctions binding:

{
  "funcUniqueId": "dba872348ce39bfa8c15002037263b2528d81833c6c1f24fef5c9bc4115145b4",
  "leafKind": "qualification",
  "uniqueId": null,
  "deleted": false,
  "inputs": [
    "domain"
  ]
}

Added prop /root/domain/CloudFormationResourceBody:

{
  "kind": "json",
  "name": "CloudFormationResourceBody",
  "data": {
    "name": "CloudFormationResourceBody",
    "validationFormat": null,
    "defaultValue": null,
    "funcUniqueId": "a2b5a6a39ce093738e0e19a55ecfaeca5bd99716519163c8c15f3674d95d096e",
    "inputs": [
      {
        "kind": "prop",
        "name": "properties",
        "prop_path": "/root/domain/properties",
        "unique_id": null,
        "deleted": false
      },
      {
        "kind": "prop",
        "name": "extra",
        "prop_path": "/root/domain/extra",
        "unique_id": null,
        "deleted": false
      }
    ],
    "widgetKind": "CodeEditor",
    "widgetOptions": null,
    "hidden": false,
    "docLink": null,
    "documentation": null,
    "uiOptionals": null
  },
  "uniqueId": null
}

Added prop /root/domain/properties:

{
  "kind": "object",
  "name": "properties",
  "data": {
    "name": "properties",
    "validationFormat": null,
    "defaultValue": null,
    "funcUniqueId": null,
    "inputs": [],
    "widgetKind": "Header",
    "widgetOptions": [],
    "hidden": false,
    "docLink": null,
    "documentation": null,
    "uiOptionals": null
  },
  "uniqueId": null,
  "entries": {
    "CidrBlock": {
      "kind": "string",
      "name": "CidrBlock",
      "data": {
        "name": "CidrBlock",
        "validationFormat": null,
        "defaultValue": null,
        "funcUniqueId": null,
        "inputs": [],
        "widgetKind": "Text",
        "widgetOptions": [],
        "hidden": false,
        "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkaclentry.html#cfn-ec2-networkaclentry-cidrblock",
        "documentation": "The IPv4 CIDR range to allow or deny, in CIDR notation (for example, 172.16.0.0/24). Requirement is conditional: You must specify the CidrBlock or Ipv6CidrBlock property",
        "uiOptionals": {
          "suggestSources": [
            {
              "schema": "AWS::EC2::Route",
              "prop": "/resource_value/CidrBlock"
            }
          ]
        }
      },
      "uniqueId": null
    },
    "RuleNumber": {
      "kind": "number",
      "name": "RuleNumber",
      "data": {
        "name": "RuleNumber",
        "validationFormat": "{\"type\":\"number\",\"flags\":{\"presence\":\"required\"},\"rules\":[{\"name\":\"integer\"}]}",
        "defaultValue": null,
        "funcUniqueId": null,
        "inputs": [],
        "widgetKind": "Text",
        "widgetOptions": [
          {
            "label": "si_create_only_prop",
            "value": "true"
          }
        ],
        "hidden": false,
        "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkaclentry.html#cfn-ec2-networkaclentry-rulenumber",
        "documentation": "Rule number to assign to the entry, such as 100. ACL entries are processed in ascending order by rule number. Entries can't use the same rule number unless one is an egress rule and the other is an ingress rule",
        "uiOptionals": null
      },
      "uniqueId": null
    },
    "Egress": {
      "kind": "boolean",
      "name": "Egress",
      "data": {
        "name": "Egress",
        "validationFormat": null,
        "defaultValue": null,
        "funcUniqueId": null,
        "inputs": [],
        "widgetKind": "Checkbox",
        "widgetOptions": [
          {
            "label": "si_create_only_prop",
            "value": "true"
          }
        ],
        "hidden": false,
        "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkaclentry.html#cfn-ec2-networkaclentry-egress",
        "documentation": "Indicates whether this is an egress rule (rule is applied to traffic leaving the subnet)",
        "uiOptionals": null
      },
      "uniqueId": null
    },
    "RuleAction": {
      "kind": "string",
      "name": "RuleAction",
      "data": {
        "name": "RuleAction",
        "validationFormat": "{\"type\":\"string\",\"flags\":{\"presence\":\"required\"}}",
        "defaultValue": null,
        "funcUniqueId": null,
        "inputs": [],
        "widgetKind": "ComboBox",
        "widgetOptions": [
          {
            "label": "allow",
            "value": "allow"
          },
          {
            "label": "deny",
            "value": "deny"
          }
        ],
        "hidden": false,
        "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkaclentry.html#cfn-ec2-networkaclentry-ruleaction",
        "documentation": "Indicates whether to allow or deny the traffic that matches the rule",
        "uiOptionals": null
      },
      "uniqueId": null
    },
    "Icmp": {
      "kind": "object",
      "name": "Icmp",
      "data": {
        "name": "Icmp",
        "validationFormat": null,
        "defaultValue": null,
        "funcUniqueId": null,
        "inputs": [],
        "widgetKind": "Header",
        "widgetOptions": [],
        "hidden": false,
        "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkaclentry-icmp.html#cfn-ec2-networkaclentry-icmp-icmp",
        "documentation": "The Internet Control Message Protocol (ICMP) code and type. Requirement is conditional: Required if specifying 1 (ICMP) for the protocol parameter",
        "uiOptionals": null
      },
      "uniqueId": null,
      "entries": {
        "Type": {
          "kind": "number",
          "name": "Type",
          "data": {
            "name": "Type",
            "validationFormat": "{\"type\":\"number\",\"rules\":[{\"name\":\"integer\"}]}",
            "defaultValue": null,
            "funcUniqueId": null,
            "inputs": [],
            "widgetKind": "Text",
            "widgetOptions": [],
            "hidden": false,
            "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkaclentry-icmp.html#cfn-ec2-networkaclentry-icmp-type",
            "documentation": null,
            "uiOptionals": null
          },
          "uniqueId": null
        },
        "Code": {
          "kind": "number",
          "name": "Code",
          "data": {
            "name": "Code",
            "validationFormat": "{\"type\":\"number\",\"rules\":[{\"name\":\"integer\"}]}",
            "defaultValue": null,
            "funcUniqueId": null,
            "inputs": [],
            "widgetKind": "Text",
            "widgetOptions": [],
            "hidden": false,
            "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkaclentry-icmp.html#cfn-ec2-networkaclentry-icmp-code",
            "documentation": null,
            "uiOptionals": null
          },
          "uniqueId": null
        }
      }
    },
    "PortRange": {
      "kind": "object",
      "name": "PortRange",
      "data": {
        "name": "PortRange",
        "validationFormat": null,
        "defaultValue": null,
        "funcUniqueId": null,
        "inputs": [],
        "widgetKind": "Header",
        "widgetOptions": [],
        "hidden": false,
        "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkaclentry-portrange.html#cfn-ec2-networkaclentry-portrange-portrange",
        "documentation": "The IPv4 network range to allow or deny, in CIDR notation (for example 172.16.0.0/24). We modify the specified CIDR block to its canonical form; for example, if you specify 100.68.0.18/18, we modify it to 100.68.0.0/18",
        "uiOptionals": null
      },
      "uniqueId": null,
      "entries": {
        "From": {
          "kind": "number",
          "name": "From",
          "data": {
            "name": "From",
            "validationFormat": "{\"type\":\"number\",\"rules\":[{\"name\":\"integer\"}]}",
            "defaultValue": null,
            "funcUniqueId": null,
            "inputs": [],
            "widgetKind": "Text",
            "widgetOptions": [],
            "hidden": false,
            "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkaclentry-portrange.html#cfn-ec2-networkaclentry-portrange-from",
            "documentation": null,
            "uiOptionals": null
          },
          "uniqueId": null
        },
        "To": {
          "kind": "number",
          "name": "To",
          "data": {
            "name": "To",
            "validationFormat": "{\"type\":\"number\",\"rules\":[{\"name\":\"integer\"}]}",
            "defaultValue": null,
            "funcUniqueId": null,
            "inputs": [],
            "widgetKind": "Text",
            "widgetOptions": [],
            "hidden": false,
            "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkaclentry-portrange.html#cfn-ec2-networkaclentry-portrange-to",
            "documentation": null,
            "uiOptionals": null
          },
          "uniqueId": null
        }
      }
    },
    "Ipv6CidrBlock": {
      "kind": "string",
      "name": "Ipv6CidrBlock",
      "data": {
        "name": "Ipv6CidrBlock",
        "validationFormat": null,
        "defaultValue": null,
        "funcUniqueId": null,
        "inputs": [],
        "widgetKind": "Text",
        "widgetOptions": [],
        "hidden": false,
        "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkaclentry.html#cfn-ec2-networkaclentry-ipv6cidrblock",
        "documentation": "The IPv6 network range to allow or deny, in CIDR notation (for example 2001:db8:1234:1a00::/64)",
        "uiOptionals": null
      },
      "uniqueId": null
    },
    "NetworkAclId": {
      "kind": "string",
      "name": "NetworkAclId",
      "data": {
        "name": "NetworkAclId",
        "validationFormat": "{\"type\":\"string\",\"flags\":{\"presence\":\"required\"}}",
        "defaultValue": null,
        "funcUniqueId": null,
        "inputs": [],
        "widgetKind": "Text",
        "widgetOptions": [
          {
            "label": "si_create_only_prop",
            "value": "true"
          }
        ],
        "hidden": false,
        "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkaclentry.html#cfn-ec2-networkaclentry-networkaclid",
        "documentation": "The ID of the network ACL",
        "uiOptionals": {
          "suggestSources": [
            {
              "schema": "AWS::EC2::NetworkAcl",
              "prop": "/resource_value/Id"
            }
          ]
        }
      },
      "uniqueId": null
    },
    "Protocol": {
      "kind": "number",
      "name": "Protocol",
      "data": {
        "name": "Protocol",
        "validationFormat": "{\"type\":\"number\",\"flags\":{\"presence\":\"required\"},\"rules\":[{\"name\":\"integer\"}]}",
        "defaultValue": null,
        "funcUniqueId": null,
        "inputs": [],
        "widgetKind": "Text",
        "widgetOptions": [],
        "hidden": false,
        "docLink": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkaclentry.html#cfn-ec2-networkaclentry-protocol",
        "documentation": "The protocol number. A value of \"-1\" means all protocols. If you specify \"-1\" or a protocol number other than \"6\" (TCP), \"17\" (UDP), or \"1\" (ICMP), traffic on all ports is allowed, regardless of any ports or ICMP types or codes that you specify. If you specify protocol \"58\" (ICMPv6) and specify an IPv4 CIDR block, traffic for all ICMP types and codes allowed, regardless of any that you specify. If you specify protocol \"58\" (ICMPv6) and specify an IPv6 CIDR block, you must specify an ICMP type and code",
        "uiOptionals": null
      },
      "uniqueId": null
    }
  }
}

Replaced value within function Set attributes for building assets in CloudFormation:

"YXN5bmMgZnVuY3Rpb24gbWFpbih7CiAgICBwcm9wZXJ0aWVzLAogICAgZXh0cmEKfTogSW5wdXQpOiBQcm9taXNlPE91dHB1dD4gewogICAgaWYgKCFwcm9wZXJ0aWVzKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoewogICAgICAgIFR5cGU6IGV4dHJhPy5Bd3NSZXNvdXJjZVR5cGUsCiAgICAgICAgUHJvcGVydGllczogcHJvcGVydGllcwogICAgfSwgbnVsbCwgMik7Cn0K"

Replaced value within function Set attributes for building assets in CloudFormation:

"extra"

Replaced value within function Set attributes for building assets in CloudFormation:

"object"

Replaced value within function Set attributes for building assets in CloudFormation:

"properties"

Replaced value within leafFunctions binding:

"f66e1afc8ff0f43f3b8a15c87f0a916243904de894e33322beb7f84dc792305a"

Removed function Set attributes for building assets in CloudFormation
Removed prop /root/domain/CidrBlock
Removed prop /root/domain/Egress
Removed prop /root/domain/Icmp
Removed prop /root/domain/Ipv6CidrBlock
Removed prop /root/domain/NetworkAclId
Removed prop /root/domain/PortRange
Removed prop /root/domain/Protocol
Removed prop /root/domain/RuleAction
Removed prop /root/domain/RuleNumber

Comment on lines +69 to +87
// CF-only specific funcs - NOT included in provider-wide specs
// These are only added to CF-only assets in pruneCfAssets.ts
export const CF_ONLY_FUNC_SPECS = {
awsCfOnlyCodeGen: {
id: "f66e1afc8ff0f43f3b8a15c87f0a916243904de894e33322beb7f84dc792305a",
backendKind: "jsAttribute",
responseType: "codeGeneration",
displayName: "Code Gen for CloudFormation-only assets",
path: "./src/pipelines/aws/funcs/code-gen/awsCfOnlyCodeGen.ts",
},
awsCfOnlyLint: {
id: "dba872348ce39bfa8c15002037263b2528d81833c6c1f24fef5c9bc4115145b4",
backendKind: "jsAttribute",
responseType: "qualification",
displayName: "CloudFormation Lint Validation",
path: "./src/pipelines/aws/funcs/qualifications/awsCfOnlyLint.ts",
},
} as const satisfies Record<string, FuncSpecInfo>;

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's weird to me that these are here but the attribute func is in the other file. They should all be in the same place, here or there.

Comment on lines +235 to +238
/**
* Creates a JSON prop with CodeEditor widget
*/
function createJsonProp(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would this be better alongside the other generic "create this kind of prop" methods we have?

Comment on lines +73 to +86
// Add CloudFormationOnly prop to extra (extra is always created by restructureDomainProps)
const extraProp = findPropByName(
variant.domain,
"extra",
) as ExpandedPropSpecFor["object"];
if (extraProp) {
const cfOnlyProp = createScalarProp(
"CloudFormationOnly",
"boolean",
extraProp.metadata.propPath,
false,
);
cfOnlyProp.data.defaultValue = "true";
cfOnlyProp.data.hidden = true;
extraProp.entries.push(cfOnlyProp);
}
const cfOnlyProp = createScalarProp(
"CloudFormationOnly",
"boolean",
extraProp.metadata.propPath,
false,
);
cfOnlyProp.data.defaultValue = "true";
cfOnlyProp.data.hidden = true;
extraProp.entries.push(cfOnlyProp);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe just do this inside of restructure since you already create it there. I think we have a getOrCreate() method somewhere. We should, at least

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants