Skip to content
This repository was archived by the owner on Feb 6, 2026. It is now read-only.

feat(clover): add cloudformationonly prop to cloudformation aws assets - #8283

Merged
aaron-dernley merged 1 commit into
mainfrom
feat/clover/eng-3337-id-aws-cloudformation-assets
Jan 16, 2026
Merged

aaron-dernley merged 1 commit into
mainfrom
feat/clover/eng-3337-id-aws-cloudformation-assets

Conversation

@aaron-dernley

Copy link
Copy Markdown
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

github-actions Bot commented Jan 15, 2026 •

Copy link
Copy Markdown

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
Comment thread bin/clover/src/pipelines/aws/pipeline-steps/pruneCfAssets.ts Outdated
@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
Copy Markdown

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
Copy Markdown
Contributor

/diff AWS::SNS::TopicPolicy

@github-actions

Copy link
Copy Markdown

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
Copy Markdown
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
Copy Markdown
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?

@sprutton1 sprutton1 Jan 16, 2026 •

Copy link
Copy Markdown
Contributor

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?

@aaron-dernley
aaron-dernley added this pull request to the merge queue Jan 16, 2026
Merged via the queue into main with commit 864c683 Jan 16, 2026
10 checks passed
@aaron-dernley
aaron-dernley deleted the feat/clover/eng-3337-id-aws-cloudformation-assets branch January 16, 2026 07:41
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants