diff --git a/reconcile/external_resources/aws.py b/reconcile/external_resources/aws.py index 63887ee8c0..afb3cdc9a6 100644 --- a/reconcile/external_resources/aws.py +++ b/reconcile/external_resources/aws.py @@ -319,3 +319,19 @@ def validate( raise ValueError( f"MSK user '{user}' secret must contain only 'username' and 'password' keys!" ) + + +class AWSSQSFactory(AWSDefaultResourceFactory): + def resolve( + self, + spec: ExternalResourceSpec, + module_conf: ExternalResourceModuleConfiguration, + ) -> dict[str, Any]: + rvr = ResourceValueResolver(spec=spec, identifier_as_value=True) + data = rvr.resolve() + all_queues = { + queue.pop("key"): queue | {"defaults": spec.get("defaults")} + for spec in data.get("specs", []) + for queue in spec.pop("queues") + } + return {"identifier": data["identifier"], "queues": all_queues} diff --git a/reconcile/external_resources/factories.py b/reconcile/external_resources/factories.py index 0811a1f5e1..385d572835 100644 --- a/reconcile/external_resources/factories.py +++ b/reconcile/external_resources/factories.py @@ -10,6 +10,7 @@ AWSMskFactory, AWSRdsFactory, AWSResourceFactory, + AWSSQSFactory, ) from reconcile.external_resources.meta import QONTRACT_INTEGRATION from reconcile.external_resources.model import ( @@ -102,6 +103,7 @@ def setup_aws_resource_factories( "elasticache": AWSElasticacheFactory(er_inventory, secret_reader), "rds": AWSRdsFactory(er_inventory, secret_reader), "msk": AWSMskFactory(er_inventory, secret_reader), + "sqs": AWSSQSFactory(er_inventory, secret_reader), }, default_factory=AWSDefaultResourceFactory(er_inventory, secret_reader), ) diff --git a/reconcile/external_resources/model.py b/reconcile/external_resources/model.py index af4a3cd2eb..bc39f07113 100644 --- a/reconcile/external_resources/model.py +++ b/reconcile/external_resources/model.py @@ -23,6 +23,7 @@ NamespaceTerraformResourceKMSV1, NamespaceTerraformResourceMskV1, NamespaceTerraformResourceRDSV1, + NamespaceTerraformResourceSQSV1, NamespaceV1, ) from reconcile.gql_definitions.external_resources.external_resources_settings import ( @@ -102,6 +103,7 @@ def state_path(self) -> str: | NamespaceTerraformResourceElastiCacheV1 | NamespaceTerraformResourceKMSV1 | NamespaceTerraformResourceCloudWatchV1 + | NamespaceTerraformResourceSQSV1 ) diff --git a/reconcile/gql_definitions/external_resources/external_resources_namespaces.gql b/reconcile/gql_definitions/external_resources/external_resources_namespaces.gql index 7f0ef54336..3dfc4854c9 100644 --- a/reconcile/gql_definitions/external_resources/external_resources_namespaces.gql +++ b/reconcile/gql_definitions/external_resources/external_resources_namespaces.gql @@ -156,6 +156,11 @@ query ExternalResourcesNamespaces { output_resource_name annotations tags + managed_by_erv2 + delete + module_overrides { + ...ExternalResourcesModuleOverrides + } specs { defaults queues { diff --git a/reconcile/gql_definitions/external_resources/external_resources_namespaces.py b/reconcile/gql_definitions/external_resources/external_resources_namespaces.py index f8a3e24959..1a2643635c 100644 --- a/reconcile/gql_definitions/external_resources/external_resources_namespaces.py +++ b/reconcile/gql_definitions/external_resources/external_resources_namespaces.py @@ -238,6 +238,11 @@ output_resource_name annotations tags + managed_by_erv2 + delete + module_overrides { + ...ExternalResourcesModuleOverrides + } specs { defaults queues { @@ -780,6 +785,9 @@ class NamespaceTerraformResourceSQSV1(NamespaceTerraformResourceAWSV1): output_resource_name: Optional[str] = Field(..., alias="output_resource_name") annotations: Optional[str] = Field(..., alias="annotations") tags: Optional[str] = Field(..., alias="tags") + managed_by_erv2: Optional[bool] = Field(..., alias="managed_by_erv2") + delete: Optional[bool] = Field(..., alias="delete") + module_overrides: Optional[ExternalResourcesModuleOverrides] = Field(..., alias="module_overrides") specs: list[SQSQueuesSpecsV1] = Field(..., alias="specs") @@ -1140,7 +1148,7 @@ class NamespaceTerraformResourceMskV1(NamespaceTerraformResourceAWSV1): class NamespaceTerraformProviderResourceAWSV1(NamespaceExternalResourceV1): provisioner: AWSAccountV1 = Field(..., alias="provisioner") - resources: list[Union[NamespaceTerraformResourceRDSV1, NamespaceTerraformResourceRosaAuthenticatorV1, NamespaceTerraformResourceALBV1, NamespaceTerraformResourceS3V1, NamespaceTerraformResourceElastiCacheV1, NamespaceTerraformResourceCloudWatchV1, NamespaceTerraformResourceASGV1, NamespaceTerraformResourceRoleV1, NamespaceTerraformResourceKMSV1, NamespaceTerraformResourceMskV1, NamespaceTerraformResourceSNSTopicV1, NamespaceTerraformResourceServiceAccountV1, NamespaceTerraformResourceS3SQSV1, NamespaceTerraformResourceRosaAuthenticatorVPCEV1, NamespaceTerraformResourceS3CloudFrontV1, NamespaceTerraformResourceElasticSearchV1, NamespaceTerraformResourceACMV1, NamespaceTerraformResourceKinesisV1, NamespaceTerraformResourceRoute53ZoneV1, NamespaceTerraformResourceSQSV1, NamespaceTerraformResourceDynamoDBV1, NamespaceTerraformResourceECRV1, NamespaceTerraformResourceS3CloudFrontPublicKeyV1, NamespaceTerraformResourceSecretsManagerV1, NamespaceTerraformResourceSecretsManagerServiceAccountV1, NamespaceTerraformResourceAWSV1]] = Field(..., alias="resources") + resources: list[Union[NamespaceTerraformResourceRDSV1, NamespaceTerraformResourceRosaAuthenticatorV1, NamespaceTerraformResourceALBV1, NamespaceTerraformResourceS3V1, NamespaceTerraformResourceElastiCacheV1, NamespaceTerraformResourceCloudWatchV1, NamespaceTerraformResourceASGV1, NamespaceTerraformResourceRoleV1, NamespaceTerraformResourceKMSV1, NamespaceTerraformResourceMskV1, NamespaceTerraformResourceSQSV1, NamespaceTerraformResourceSNSTopicV1, NamespaceTerraformResourceServiceAccountV1, NamespaceTerraformResourceS3SQSV1, NamespaceTerraformResourceRosaAuthenticatorVPCEV1, NamespaceTerraformResourceS3CloudFrontV1, NamespaceTerraformResourceElasticSearchV1, NamespaceTerraformResourceACMV1, NamespaceTerraformResourceKinesisV1, NamespaceTerraformResourceRoute53ZoneV1, NamespaceTerraformResourceDynamoDBV1, NamespaceTerraformResourceECRV1, NamespaceTerraformResourceS3CloudFrontPublicKeyV1, NamespaceTerraformResourceSecretsManagerV1, NamespaceTerraformResourceSecretsManagerServiceAccountV1, NamespaceTerraformResourceAWSV1]] = Field(..., alias="resources") class EnvironmentV1(ConfiguredBaseModel): diff --git a/reconcile/gql_definitions/introspection.json b/reconcile/gql_definitions/introspection.json index b9a528ad4e..508f10d6b2 100644 --- a/reconcile/gql_definitions/introspection.json +++ b/reconcile/gql_definitions/introspection.json @@ -46779,6 +46779,42 @@ }, "isDeprecated": false, "deprecationReason": null + }, + { + "name": "managed_by_erv2", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "delete", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "module_overrides", + "description": null, + "args": [], + "type": { + "kind": "OBJECT", + "name": "ExternalResourcesModuleOverrides_v1", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null } ], "inputFields": null,