Skip to content

Conversation

@aaron-dernley
Copy link
Contributor

This PR:

  • Adds CloudFormationOnly boolean prop to domain/extra for 202 AWS assets that lack CloudControl support
  • Prop has defaultValue: "true" and hidden: true so it doesn't appear in the UI
  • Only present on CF-only assets; CloudControl-capable assets don't have this prop

Screenshots:

CloudFormation asset:
Screenshot 2026-01-15 at 20 29 59

CloudControl asset:
Screenshot 2026-01-15 at 20 30 48

How was it tested?

  • Integration tests pass
  • Manual test: new functionality works in UI
  • Manual test: (regression check) creating a component still works

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 15, 2026

Dependency Review

✅ No vulnerabilities or OpenSSF Scorecard issues found.

Scanned Files

None

@aaron-dernley aaron-dernley marked this pull request as ready for review January 15, 2026 20:51
@aaron-dernley aaron-dernley force-pushed the feat/clover/eng-3337-id-aws-cloudformation-assets branch from c14592b to 6403fe8 Compare January 15, 2026 21:16
@systeminit systeminit deleted a comment from github-actions bot Jan 15, 2026
@github-actions
Copy link

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

AWS - 0 new, 203 changed asset(s)
[AWS::AmazonMQ::ConfigurationAssociation]: props ➕1, other schema contents ➖1 🔀2
[AWS::ApiGatewayV2::ApiGatewayManagedOverrides]: props ➕1
[AWS::ApiGatewayV2::Stage]: props ➕1
[AWS::AppMesh::GatewayRoute]: props ➕1
[AWS::AppMesh::Mesh]: props ➕1
[AWS::AppMesh::Route]: props ➕1
[AWS::AppMesh::VirtualGateway]: props ➕1
[AWS::AppMesh::VirtualNode]: props ➕1
[AWS::AppMesh::VirtualRouter]: props ➕1
[AWS::AppMesh::VirtualService]: props ➕1
[AWS::AppStream::Fleet]: props ➕1
[AWS::AppStream::StackFleetAssociation]: props ➕1
[AWS::AppStream::StackUserAssociation]: props ➕1
[AWS::AppStream::Stack]: props ➕1
[AWS::AppStream::User]: props ➕1
[AWS::AppSync::ApiCache]: props ➕1
[AWS::AppSync::ApiKey]: props ➕1
[AWS::AppSync::GraphQLSchema]: props ➕1
[AWS::AutoScalingPlans::ScalingPlan]: props ➕1
[AWS::Budgets::Budget]: props ➕1
[AWS::CertificateManager::Certificate]: props ➕1, other schema contents 🔀1
[AWS::Cloud9::EnvironmentEC2]: props ➕1
[AWS::CloudFormation::CustomResource]: props ➕1
[AWS::CloudFormation::Macro]: props ➕1
[AWS::CloudFormation::WaitConditionHandle]: props ➕1
[AWS::CloudFormation::WaitCondition]: props ➕1
[AWS::CloudFront::StreamingDistribution]: props ➕1
[AWS::CloudWatch::AnomalyDetector]: props ➕1
[AWS::CloudWatch::InsightRule]: props ➕1
[AWS::CodeBuild::Project]: props ➕1
[AWS::CodeBuild::ReportGroup]: props ➕1
[AWS::CodeBuild::SourceCredential]: props ➕1
[AWS::CodeCommit::Repository]: props ➕1
[AWS::CodeDeploy::DeploymentGroup]: props ➕1
[AWS::CodeStar::GitHubRepository]: props ➕1
[AWS::Config::ConfigurationRecorder]: props ➕1
[AWS::Config::DeliveryChannel]: props ➕1
[AWS::Config::OrganizationConfigRule]: props ➕1
[AWS::Config::RemediationConfiguration]: props ➕1
[AWS::DAX::Cluster]: props ➕1
[AWS::DAX::ParameterGroup]: props ➕1
[AWS::DAX::SubnetGroup]: props ➕1
[AWS::DLM::LifecyclePolicy]: props ➕1
[AWS::DMS::Certificate]: props ➕1
[AWS::DMS::Endpoint]: props ➕1
[AWS::DMS::EventSubscription]: props ➕1
[AWS::DMS::ReplicationInstance]: props ➕1
[AWS::DMS::ReplicationSubnetGroup]: props ➕1
[AWS::DMS::ReplicationTask]: props ➕1
[AWS::DirectoryService::MicrosoftAD]: props ➕1
[AWS::DocDB::DBClusterParameterGroup]: props ➕1
[AWS::DocDB::DBCluster]: props ➕1
[AWS::DocDB::DBInstance]: props ➕1
[AWS::DocDB::DBSubnetGroup]: props ➕1
[AWS::DocDB::EventSubscription]: props ➕1
[AWS::EC2::ClientVpnAuthorizationRule]: props ➕1
[AWS::EC2::ClientVpnEndpoint]: props ➕1
[AWS::EC2::ClientVpnRoute]: props ➕1
[AWS::EC2::ClientVpnTargetNetworkAssociation]: props ➕1
[AWS::EC2::NetworkAclEntry]: props ➕1, other schema contents ➖1 🔀2
[AWS::EC2::NetworkInterfacePermission]: props ➕1
[AWS::EC2::VPNGatewayRoutePropagation]: props ➕1, other schema contents ➖1 🔀2
[AWS::EMR::Cluster]: props ➕1
[AWS::EMR::InstanceFleetConfig]: props ➕1
[AWS::EMR::InstanceGroupConfig]: props ➕1
[AWS::ElastiCache::CacheCluster]: props ➕1
[AWS::ElastiCache::ReplicationGroup]: props ➕1
[AWS::ElastiCache::SecurityGroupIngress]: props ➕1
[AWS::ElastiCache::SecurityGroup]: props ➕1
[AWS::ElasticLoadBalancing::LoadBalancer]: props ➕1
[AWS::ElasticLoadBalancingV2::ListenerCertificate]: props ➕1
[AWS::Elasticsearch::Domain]: props ➕1
[AWS::FSx::FileSystem]: props ➕1
[AWS::FSx::Snapshot]: props ➕1
[AWS::FSx::StorageVirtualMachine]: props ➕1
[AWS::FSx::Volume]: props ➕1
[AWS::Glue::Classifier]: props ➕1
[AWS::Glue::Connection]: props ➕1
[AWS::Glue::CustomEntityType]: props ➕1
[AWS::Glue::DataCatalogEncryptionSettings]: props ➕1
[AWS::Glue::DataQualityRuleset]: props ➕1
[AWS::Glue::DevEndpoint]: props ➕1
[AWS::Glue::MLTransform]: props ➕1
[AWS::Glue::Partition]: props ➕1
[AWS::Glue::SecurityConfiguration]: props ➕1
[AWS::Glue::TableOptimizer]: props ➕1
[AWS::Glue::Table]: props ➕1
[AWS::Glue::Workflow]: props ➕1
[AWS::Greengrass::ConnectorDefinitionVersion]: props ➕1
[AWS::Greengrass::ConnectorDefinition]: props ➕1
[AWS::Greengrass::CoreDefinitionVersion]: props ➕1
[AWS::Greengrass::CoreDefinition]: props ➕1
[AWS::Greengrass::DeviceDefinitionVersion]: props ➕1
[AWS::Greengrass::DeviceDefinition]: props ➕1
[AWS::Greengrass::FunctionDefinitionVersion]: props ➕1
[AWS::Greengrass::FunctionDefinition]: props ➕1
[AWS::Greengrass::GroupVersion]: props ➕1
[AWS::Greengrass::Group]: props ➕1
[AWS::Greengrass::LoggerDefinitionVersion]: props ➕1
[AWS::Greengrass::LoggerDefinition]: props ➕1
[AWS::Greengrass::ResourceDefinitionVersion]: props ➕1
[AWS::Greengrass::ResourceDefinition]: props ➕1
[AWS::Greengrass::SubscriptionDefinitionVersion]: props ➕1
[AWS::Greengrass::SubscriptionDefinition]: props ➕1
[AWS::IoT::PolicyPrincipalAttachment]: props ➕1
[AWS::IoT::ThingPrincipalAttachment]: props ➕1
[AWS::IoTThingsGraph::FlowTemplate]: props ➕1
[AWS::KinesisAnalytics::ApplicationOutput]: props ➕1
[AWS::KinesisAnalytics::ApplicationReferenceDataSource]: props ➕1
[AWS::KinesisAnalytics::Application]: props ➕1
[AWS::KinesisAnalyticsV2::ApplicationCloudWatchLoggingOption]: props ➕1
[AWS::KinesisAnalyticsV2::ApplicationOutput]: props ➕1
[AWS::KinesisAnalyticsV2::ApplicationReferenceDataSource]: props ➕1
[AWS::LakeFormation::DataLakeSettings]: props ➕1
[AWS::LakeFormation::Permissions]: props ➕1
[AWS::LakeFormation::Resource]: props ➕1
[AWS::ManagedBlockchain::Member]: props ➕1
[AWS::ManagedBlockchain::Node]: props ➕1
[AWS::MediaConvert::JobTemplate]: props ➕1
[AWS::MediaConvert::Preset]: props ➕1
[AWS::MediaConvert::Queue]: props ➕1
[AWS::MediaLive::Channel]: props ➕1
[AWS::MediaLive::InputSecurityGroup]: props ➕1
[AWS::MediaLive::Input]: props ➕1
[AWS::MediaStore::Container]: props ➕1
[AWS::OpsWorks::App]: props ➕1
[AWS::OpsWorks::ElasticLoadBalancerAttachment]: props ➕1
[AWS::OpsWorks::Instance]: props ➕1
[AWS::OpsWorks::Layer]: props ➕1
[AWS::OpsWorks::Stack]: props ➕1
[AWS::OpsWorks::UserProfile]: props ➕1
[AWS::OpsWorks::Volume]: props ➕1
[AWS::Pinpoint::ADMChannel]: props ➕1
[AWS::Pinpoint::APNSChannel]: props ➕1
[AWS::Pinpoint::APNSSandboxChannel]: props ➕1
[AWS::Pinpoint::APNSVoipChannel]: props ➕1
[AWS::Pinpoint::APNSVoipSandboxChannel]: props ➕1
[AWS::Pinpoint::App]: props ➕1
[AWS::Pinpoint::ApplicationSettings]: props ➕1
[AWS::Pinpoint::BaiduChannel]: props ➕1
[AWS::Pinpoint::Campaign]: props ➕1
[AWS::Pinpoint::EmailChannel]: props ➕1
[AWS::Pinpoint::EmailTemplate]: props ➕1
[AWS::Pinpoint::EventStream]: props ➕1
[AWS::Pinpoint::GCMChannel]: props ➕1
[AWS::Pinpoint::PushTemplate]: props ➕1
[AWS::Pinpoint::SMSChannel]: props ➕1
[AWS::Pinpoint::Segment]: props ➕1
[AWS::Pinpoint::SmsTemplate]: props ➕1
[AWS::Pinpoint::VoiceChannel]: props ➕1
[AWS::PinpointEmail::ConfigurationSetEventDestination]: props ➕1
[AWS::PinpointEmail::ConfigurationSet]: props ➕1
[AWS::PinpointEmail::DedicatedIpPool]: props ➕1
[AWS::PinpointEmail::Identity]: props ➕1
[AWS::QLDB::Ledger]: props ➕1
[AWS::RDS::DBSecurityGroupIngress]: props ➕1
[AWS::RDS::DBSecurityGroup]: props ➕1
[AWS::Redshift::ClusterSecurityGroupIngress]: props ➕1
[AWS::Redshift::ClusterSecurityGroup]: props ➕1
[AWS::Route53::RecordSetGroup]: props ➕1
[AWS::Route53::RecordSet]: props ➕1, other schema contents 🔀2
[AWS::SDB::Domain]: props ➕1
[AWS::SES::ReceiptFilter]: props ➕1
[AWS::SES::ReceiptRuleSet]: props ➕1
[AWS::SES::ReceiptRule]: props ➕1
[AWS::SNS::TopicPolicy]: props ➕1, other schema contents ➖1 🔀2
[AWS::SQS::QueuePolicy]: props ➕1, other schema contents ➖1 🔀2
[AWS::SSM::MaintenanceWindow]: props ➕1
[AWS::SageMaker::CodeRepository]: props ➕1
[AWS::SageMaker::EndpointConfig]: props ➕1
[AWS::SageMaker::Model]: props ➕1
[AWS::SageMaker::NotebookInstanceLifecycleConfig]: props ➕1
[AWS::SageMaker::NotebookInstance]: props ➕1
[AWS::SageMaker::Workteam]: props ➕1
[AWS::ServiceCatalog::AcceptedPortfolioShare]: props ➕1
[AWS::ServiceCatalog::CloudFormationProduct]: props ➕1
[AWS::ServiceCatalog::LaunchRoleConstraint]: props ➕1
[AWS::ServiceCatalog::Portfolio]: props ➕1
[AWS::ServiceCatalog::StackSetConstraint]: props ➕1
[AWS::ServiceDiscovery::HttpNamespace]: props ➕1
[AWS::ServiceDiscovery::Instance]: props ➕1
[AWS::ServiceDiscovery::PrivateDnsNamespace]: props ➕1
[AWS::ServiceDiscovery::PublicDnsNamespace]: props ➕1
[AWS::ServiceDiscovery::Service]: props ➕1
[AWS::WAF::ByteMatchSet]: props ➕1
[AWS::WAF::IPSet]: props ➕1
[AWS::WAF::Rule]: props ➕1
[AWS::WAF::SizeConstraintSet]: props ➕1
[AWS::WAF::SqlInjectionMatchSet]: props ➕1
[AWS::WAF::WebACL]: props ➕1
[AWS::WAF::XssMatchSet]: props ➕1
[AWS::WAFRegional::ByteMatchSet]: props ➕1
[AWS::WAFRegional::GeoMatchSet]: props ➕1
[AWS::WAFRegional::IPSet]: props ➕1
[AWS::WAFRegional::RateBasedRule]: props ➕1
[AWS::WAFRegional::RegexPatternSet]: props ➕1
[AWS::WAFRegional::Rule]: props ➕1
[AWS::WAFRegional::SizeConstraintSet]: props ➕1
[AWS::WAFRegional::SqlInjectionMatchSet]: props ➕1
[AWS::WAFRegional::WebACLAssociation]: props ➕1
[AWS::WAFRegional::WebACL]: props ➕1
[AWS::WAFRegional::XssMatchSet]: props ➕1
[AWS::WorkSpaces::Workspace]: props ➕1

@sprutton1
Copy link
Contributor

/diff AWS::SNS::TopicPolicy

@github-actions
Copy link

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

Diffed AWS::SNS::TopicPolicy with the module index:

Added function Set attributes for building assets in CloudFormation:

{
  "name": "Set attributes for building assets in CloudFormation",
  "uniqueId": "",
  "data": {
    "name": "Set attributes for building assets in CloudFormation",
    "displayName": null,
    "description": null,
    "handler": "main",
    "codeBase64": "YXN5bmMgZnVuY3Rpb24gbWFpbihpbnB1dDogSW5wdXQpOiBQcm9taXNlPE91dHB1dD4gewogIGNvbnN0IHByb3BlcnRpZXMgPSBfLmNsb25lRGVlcChpbnB1dC5jZm5Qcm9wZXJ0aWVzKTsKICBkZWxldGUgcHJvcGVydGllc1siZXh0cmEiXTsKICBjb25zdCByZXN1bHQgPSB7CiAgICAiTG9naWNhbFJlc291cmNlTmFtZSI6IGlucHV0LmNmbkxvZ2ljYWxSZXNvdXJjZU5hbWUsCiAgICAiVHlwZSI6IGlucHV0LmNmblR5cGUsCiAgICAiUHJvcGVydGllcyI6IHByb3BlcnRpZXMsCiAgfTsKICByZXR1cm4gcmVzdWx0Owp9Cg",
    "backendKind": "jsAttribute",
    "responseType": "json",
    "hidden": false,
    "link": null,
    "isTransformation": false,
    "lastUpdatedAt": null
  },
  "deleted": false,
  "isFromBuiltin": null,
  "arguments": [
    {
      "name": "cfnType",
      "kind": "string",
      "elementKind": null,
      "uniqueId": null,
      "deleted": false
    },
    {
      "name": "cfnProperties",
      "kind": "object",
      "elementKind": null,
      "uniqueId": null,
      "deleted": false
    },
    {
      "name": "cfnLogicalResourceName",
      "kind": "string",
      "elementKind": null,
      "uniqueId": null,
      "deleted": false
    }
  ]
}

Added prop /root/domain/extra/CloudFormationOnly:

{
  "kind": "boolean",
  "name": "CloudFormationOnly",
  "data": {
    "name": "CloudFormationOnly",
    "validationFormat": null,
    "defaultValue": "true",
    "funcUniqueId": null,
    "inputs": [],
    "widgetKind": "Checkbox",
    "widgetOptions": null,
    "hidden": true,
    "docLink": null,
    "documentation": null,
    "uiOptionals": null
  },
  "uniqueId": null
}

Replaced value within leafFunctions binding:

"fdef639540613ce1639df4153f9bb5a8929e9815477eb57beb3616af48a74335"

Removed leafFunctions binding
Removed leafFunctions binding

const [variant] = schema.variants;

if (!spec.name.includes("::") || variant.superSchema.handlers) {
if (!spec.name.includes("::") || variant.superSchema.handlers?.read) {
Copy link
Contributor

Choose a reason for hiding this comment

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

I am not sure about this. Why should we change this?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

It adds the prop to the assets that aren't supported by cloudcontrol and also lack the read 'handler' - so if I remove this part, the prop isn't added to 5 assets. If we don't want this I could add overrides to those 5 assets instead?

Copy link
Contributor

@sprutton1 sprutton1 Jan 16, 2026

Choose a reason for hiding this comment

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

I think we had this way originally as no handlers meant no support, but I suppose read only could mean the same thing
I guess we've always had these wrong then?

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