cdk-factory 0.16.12__tar.gz → 0.16.13__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of cdk-factory might be problematic. Click here for more details.

Files changed (166) hide show
  1. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/PKG-INFO +1 -1
  2. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/pyproject.toml +1 -1
  3. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/cdk_config.py +5 -3
  4. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/ecs_cluster.py +14 -0
  5. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/ecs/ecs_cluster_stack.py +104 -98
  6. cdk_factory-0.16.13/src/cdk_factory/version.py +1 -0
  7. cdk_factory-0.16.12/src/cdk_factory/version.py +0 -1
  8. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/.gitignore +0 -0
  9. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/.windsurfrules +0 -0
  10. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/LICENSE +0 -0
  11. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/README.md +0 -0
  12. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/REFACTORING_PLAN.md +0 -0
  13. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/archive/README.md +0 -0
  14. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/archive/migrate_to_enhanced_ssm.py +0 -0
  15. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/examples/json-imports/README.md +0 -0
  16. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/examples/separate-api-gateway/README.md +0 -0
  17. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/examples/separate-api-gateway/api-gateway-stack.json +0 -0
  18. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/examples/separate-api-gateway/config.json +0 -0
  19. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/examples/separate-api-gateway/lambda-stack.json +0 -0
  20. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/mypy.ini +0 -0
  21. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/publish_to_pypi.py +0 -0
  22. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/publish_to_pypi.sh +0 -0
  23. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/pysetup.py +0 -0
  24. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/pysetup.sh +0 -0
  25. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/requirements.dev.txt +0 -0
  26. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/requirements.tests.txt +0 -0
  27. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/requirements.txt +0 -0
  28. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/run-checks.sh +0 -0
  29. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/run-tests-clean-venv.sh +0 -0
  30. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/run-tests.sh +0 -0
  31. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/scripts/cloudfront-cleanup.sh +0 -0
  32. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/__init__.py +0 -0
  33. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/app.py +0 -0
  34. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/builds/README.md +0 -0
  35. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/cdk.json +0 -0
  36. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/cli.py +0 -0
  37. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/commands/command_loader.py +0 -0
  38. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/base_config.py +0 -0
  39. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/deployment.py +0 -0
  40. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/deployment_wave.py +0 -0
  41. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/devops.py +0 -0
  42. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/enhanced_base_config.py +0 -0
  43. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/enhanced_ssm_config.py +0 -0
  44. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/management.py +0 -0
  45. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/pipeline.py +0 -0
  46. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/pipeline_stage.py +0 -0
  47. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/_resources.py +0 -0
  48. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/acm.py +0 -0
  49. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/api_gateway.py +0 -0
  50. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/apigateway_route_config.py +0 -0
  51. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/auto_scaling.py +0 -0
  52. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/cloudfront.py +0 -0
  53. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/cloudwatch_widget.py +0 -0
  54. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/code_artifact.py +0 -0
  55. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/code_artifact_login.py +0 -0
  56. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/code_repository.py +0 -0
  57. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/cognito.py +0 -0
  58. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/docker.py +0 -0
  59. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/dynamodb.py +0 -0
  60. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/ecr.py +0 -0
  61. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/ecs_service.py +0 -0
  62. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/exisiting.py +0 -0
  63. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/lambda_edge.py +0 -0
  64. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/lambda_function.py +0 -0
  65. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/lambda_layers.py +0 -0
  66. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/lambda_triggers.py +0 -0
  67. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/load_balancer.py +0 -0
  68. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/monitoring.py +0 -0
  69. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/rds.py +0 -0
  70. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/resource_mapping.py +0 -0
  71. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/resource_naming.py +0 -0
  72. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/resource_types.py +0 -0
  73. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/route53.py +0 -0
  74. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/route53_hosted_zone.py +0 -0
  75. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/rum.py +0 -0
  76. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/s3.py +0 -0
  77. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/security_group.py +0 -0
  78. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/security_group_full_stack.py +0 -0
  79. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/sqs.py +0 -0
  80. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/resources/vpc.py +0 -0
  81. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/stack.py +0 -0
  82. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/configurations/workload.py +0 -0
  83. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/constructs/cloudfront/cloudfront_distribution_construct.py +0 -0
  84. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/constructs/ecr/ecr_construct.py +0 -0
  85. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/constructs/lambdas/lambda_function_construct.py +0 -0
  86. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/constructs/lambdas/lambda_function_docker_construct.py +0 -0
  87. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/constructs/lambdas/lambda_function_role_construct.py +0 -0
  88. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/constructs/lambdas/policies/policy_docs.py +0 -0
  89. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/constructs/lambdas/policies/policy_statements.py +0 -0
  90. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/constructs/s3_buckets/s3_bucket_construct.py +0 -0
  91. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/constructs/s3_buckets/s3_bucket_replication_destination_construct.py +0 -0
  92. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/constructs/s3_buckets/s3_bucket_replication_source_construct.py +0 -0
  93. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/constructs/sqs/policies/sqs_policies.py +0 -0
  94. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/interfaces/enhanced_ssm_parameter_mixin.py +0 -0
  95. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/interfaces/istack.py +0 -0
  96. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/interfaces/live_ssm_resolver.py +0 -0
  97. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/interfaces/networked_stack_mixin.py +0 -0
  98. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/interfaces/ssm_parameter_mixin.py +0 -0
  99. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/interfaces/vpc_provider_mixin.py +0 -0
  100. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/lambdas/edge/ip_gate/handler.py +0 -0
  101. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/lambdas/health_handler.py +0 -0
  102. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/pipeline/path_utils.py +0 -0
  103. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/pipeline/pipeline_factory.py +0 -0
  104. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/pipeline/security/policies.py +0 -0
  105. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/pipeline/security/roles.py +0 -0
  106. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/pipeline/stage.py +0 -0
  107. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack/istack.py +0 -0
  108. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack/stack_factory.py +0 -0
  109. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack/stack_module_loader.py +0 -0
  110. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack/stack_module_registry.py +0 -0
  111. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack/stack_modules.py +0 -0
  112. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/__init__.py +0 -0
  113. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/acm/__init__.py +0 -0
  114. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/acm/acm_stack.py +0 -0
  115. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/api_gateway/api_gateway_stack.py +0 -0
  116. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/auto_scaling/__init__.py +0 -0
  117. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/auto_scaling/auto_scaling_stack.py +0 -0
  118. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/aws_lambdas/lambda_stack.py +0 -0
  119. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/buckets/README.md +0 -0
  120. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/buckets/bucket_stack.py +0 -0
  121. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/cloudfront/__init__.py +0 -0
  122. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/cloudfront/cloudfront_stack.py +0 -0
  123. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/code_artifact/code_artifact_stack.py +0 -0
  124. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/cognito/cognito_stack.py +0 -0
  125. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/dynamodb/dynamodb_stack.py +0 -0
  126. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/ecr/README.md +0 -0
  127. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/ecr/ecr_stack.py +0 -0
  128. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/ecs/__init__.py +0 -0
  129. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/ecs/ecs_service_stack.py +0 -0
  130. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/lambda_edge/__init__.py +0 -0
  131. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/lambda_edge/lambda_edge_stack.py +0 -0
  132. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/load_balancer/__init__.py +0 -0
  133. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/load_balancer/load_balancer_stack.py +0 -0
  134. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/monitoring/__init__.py +0 -0
  135. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/monitoring/monitoring_stack.py +0 -0
  136. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/rds/__init__.py +0 -0
  137. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/rds/rds_stack.py +0 -0
  138. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/route53/__init__.py +0 -0
  139. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/route53/route53_stack.py +0 -0
  140. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/rum/__init__.py +0 -0
  141. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/rum/rum_stack.py +0 -0
  142. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/security_group/__init__.py +0 -0
  143. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/security_group/security_group_full_stack.py +0 -0
  144. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/security_group/security_group_stack.py +0 -0
  145. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/simple_queue_service/sqs_stack.py +0 -0
  146. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/stack_base.py +0 -0
  147. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/vpc/__init__.py +0 -0
  148. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/vpc/vpc_stack.py +0 -0
  149. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stack_library/websites/static_website_stack.py +0 -0
  150. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/stages/websites/static_website_stage.py +0 -0
  151. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/templates/README.md +0 -0
  152. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/templates/app.py.template +0 -0
  153. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/templates/cdk.json.template +0 -0
  154. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/utilities/api_gateway_integration_utility.py +0 -0
  155. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/utilities/commandline_args.py +0 -0
  156. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/utilities/configuration_loader.py +0 -0
  157. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/utilities/docker_utilities.py +0 -0
  158. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/utilities/environment_services.py +0 -0
  159. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/utilities/file_operations.py +0 -0
  160. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/utilities/git_utilities.py +0 -0
  161. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/utilities/json_loading_utility.py +0 -0
  162. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/utilities/lambda_function_utilities.py +0 -0
  163. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/utilities/os_execute.py +0 -0
  164. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/utils/api_gateway_utilities.py +0 -0
  165. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/cdk_factory/workload/workload_factory.py +0 -0
  166. {cdk_factory-0.16.12 → cdk_factory-0.16.13}/src/handlers/test/handler.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cdk_factory
3
- Version: 0.16.12
3
+ Version: 0.16.13
4
4
  Summary: CDK Factory. A QuickStarter and best practices setup for CDK projects
5
5
  Author-email: Eric Wilson <eric.wilson@geekcafe.com>
6
6
  License: MIT License
@@ -33,7 +33,7 @@ markers = [
33
33
  [project]
34
34
 
35
35
  name = "cdk_factory"
36
- version = "0.16.12"
36
+ version = "0.16.13"
37
37
  authors = [
38
38
  { name="Eric Wilson", email="eric.wilson@geekcafe.com" }
39
39
  ]
@@ -183,9 +183,11 @@ class CdkConfig:
183
183
  if self._resolved_config_file_path is None:
184
184
  raise ValueError("Config file path is not set")
185
185
 
186
- file_name = f".dynamic_{os.path.basename(self._resolved_config_file_path)}"
186
+ file_name = os.path.join(".dynamic", os.path.basename(self._resolved_config_file_path))
187
187
  path = os.path.join(Path(self._resolved_config_file_path).parent, file_name)
188
-
188
+
189
+ if not os.path.exists(Path(path).parent):
190
+ os.makedirs(Path(path).parent)
189
191
  cdk = config.get("cdk", {})
190
192
  if replacements and len(replacements) > 0:
191
193
  config = JsonLoadingUtility.recursive_replace(config, replacements)
@@ -214,7 +216,7 @@ class CdkConfig:
214
216
  value = static_value
215
217
  elif environment_variable_name is not None and not value:
216
218
  value = os.environ.get(environment_variable_name, None)
217
- if value is None and required:
219
+ if (value is None or str(value).strip() == "") and required:
218
220
  raise ValueError(
219
221
  f"Failed to get value for environment variable {environment_variable_name}"
220
222
  )
@@ -85,3 +85,17 @@ class EcsClusterConfig:
85
85
  def export_ssm_parameters(self) -> bool:
86
86
  """Whether to export cluster information to SSM parameters"""
87
87
  return self._config.get("export_ssm_parameters", True)
88
+
89
+
90
+ @property
91
+ def ssm_exports(self) -> Dict[str, str]:
92
+ """SSM parameter exports"""
93
+ return self._config.get("ssm_exports", {})
94
+
95
+ @property
96
+ def ssm_imports(self) -> Dict[str, Any]:
97
+ """SSM parameter imports"""
98
+ # Check both nested and flat structures for backwards compatibility
99
+ if "ssm" in self._config and "imports" in self._config["ssm"]:
100
+ return self._config["ssm"]["imports"]
101
+ return self._config.get("ssm_imports", {})
@@ -6,33 +6,31 @@ with proper configurability and explicit resource management.
6
6
  """
7
7
 
8
8
  import logging
9
- from typing import Optional, Dict, Any, List
9
+ from typing import Optional, Dict, Any
10
10
 
11
11
  from aws_cdk import (
12
12
  aws_ecs as ecs,
13
- aws_ec2 as ec2,
14
13
  aws_iam as iam,
15
- aws_ssm as ssm,
16
- RemovalPolicy,
17
- Stack,
18
- CfnOutput
14
+ CfnOutput,
19
15
  )
20
16
  from constructs import Construct
21
17
 
22
18
  from cdk_factory.configurations.stack import StackConfig
23
19
  from cdk_factory.configurations.deployment import DeploymentConfig
24
20
  from cdk_factory.configurations.workload import WorkloadConfig
25
- from cdk_factory.interfaces.ssm_parameter_mixin import SsmParameterMixin
21
+ from cdk_factory.interfaces.vpc_provider_mixin import VPCProviderMixin
26
22
  from cdk_factory.configurations.resources.ecs_cluster import EcsClusterConfig
27
-
23
+ from cdk_factory.stack.stack_module_registry import register_stack
24
+ from cdk_factory.interfaces.istack import IStack
28
25
 
29
26
  logger = logging.getLogger(__name__)
30
27
 
31
28
 
32
- class EcsClusterStack(Stack, SsmParameterMixin):
29
+ @register_stack("ecs_cluster_stack")
30
+ class EcsClusterStack(IStack, VPCProviderMixin):
33
31
  """
34
32
  A dedicated stack for creating and managing ECS clusters.
35
-
33
+
36
34
  This stack provides explicit configuration of ECS clusters including:
37
35
  - Cluster naming
38
36
  - Container insights
@@ -40,38 +38,64 @@ class EcsClusterStack(Stack, SsmParameterMixin):
40
38
  - SSM parameter exports
41
39
  - IAM role configurations
42
40
  """
43
-
44
- def __init__(
45
- self,
46
- scope: Construct,
47
- construct_id: str,
48
- stack_config: StackConfig,
49
- deployment: DeploymentConfig,
50
- workload: WorkloadConfig,
51
- **kwargs
52
- ):
41
+
42
+ def __init__(self, scope: Construct, id: str, **kwargs) -> None:
53
43
  """
54
44
  Initialize the ECS Cluster stack.
55
45
 
56
46
  Args:
57
47
  scope: The CDK construct scope
58
- construct_id: The construct ID
59
- stack_config: Stack configuration
60
- deployment: Deployment configuration
61
- workload: Workload configuration
48
+ id: The construct ID
62
49
  """
63
- super().__init__(scope, construct_id, **kwargs)
50
+ super().__init__(scope, id, **kwargs)
51
+
52
+ self._initialize_vpc_cache()
53
+
54
+ self.ecs_config: Optional[EcsClusterConfig] = None
55
+ self.stack_config: Optional[StackConfig] = None
56
+ self.deployment: Optional[DeploymentConfig] = None
57
+ self.workload: Optional[WorkloadConfig] = None
58
+ self.ecs_cluster: Optional[ecs.Cluster] = None
59
+ self.instance_role: Optional[iam.Role] = None
60
+ self.instance_profile: Optional[iam.CfnInstanceProfile] = None
64
61
 
62
+ # SSM imported values
63
+ self.ssm_imported_values: Dict[str, Any] = {}
64
+
65
+
66
+
67
+ def build(
68
+ self,
69
+ stack_config: StackConfig,
70
+ deployment: DeploymentConfig,
71
+ workload: WorkloadConfig,
72
+ ) -> None:
73
+ """Build the ECS Cluster stack"""
74
+ self._build(stack_config, deployment, workload)
75
+
76
+ def _build(
77
+ self,
78
+ stack_config: StackConfig,
79
+ deployment: DeploymentConfig,
80
+ workload: WorkloadConfig,
81
+ ) -> None:
82
+ """Internal build method for the ECS Cluster stack"""
65
83
  self.stack_config = stack_config
66
84
  self.deployment = deployment
67
85
  self.workload = workload
68
86
 
87
+ # Initialize VPC cache from mixin
88
+ self._initialize_vpc_cache()
89
+
69
90
  # Load ECS cluster configuration
70
91
  self.ecs_config: EcsClusterConfig = EcsClusterConfig(
71
92
  stack_config.dictionary.get("ecs_cluster", {})
72
93
  )
73
94
 
74
- logger.info(f"Creating ECS Cluster stack: {construct_id}")
95
+ logger.info(f"Creating ECS Cluster stack: {self.stack_name}")
96
+
97
+ # Process SSM imports first
98
+ self.process_ssm_imports(self.ecs_config, deployment, "ECS Cluster")
75
99
 
76
100
  # Create the ECS cluster
77
101
  self._create_ecs_cluster()
@@ -82,159 +106,141 @@ class EcsClusterStack(Stack, SsmParameterMixin):
82
106
  # Export cluster information
83
107
  self._export_cluster_info()
84
108
 
85
- logger.info(f"ECS Cluster stack created: {construct_id}")
86
-
109
+ logger.info(f"ECS Cluster stack created: {self.stack_name}")
110
+
87
111
  def _create_ecs_cluster(self):
88
112
  """Create the ECS cluster with explicit configuration."""
89
113
  logger.info(f"Creating ECS cluster: {self.ecs_config.name}")
90
-
114
+
91
115
  # Build cluster settings
92
116
  cluster_settings = []
93
-
117
+
94
118
  # Add container insights if enabled
95
119
  if self.ecs_config.container_insights:
96
- cluster_settings.append({
97
- "name": "containerInsights",
98
- "value": "enabled"
99
- })
100
-
120
+ cluster_settings.append({"name": "containerInsights", "value": "enabled"})
121
+
101
122
  # Add custom cluster settings
102
123
  if self.ecs_config.cluster_settings:
103
124
  cluster_settings.extend(self.ecs_config.cluster_settings)
104
-
125
+
105
126
  # Create the ECS cluster
127
+ self.vpc = self.resolve_vpc(
128
+ config=self.ecs_config,
129
+ deployment=self.deployment,
130
+ workload=self.workload
131
+ )
132
+
106
133
  self.ecs_cluster = ecs.Cluster(
107
134
  self,
108
135
  "ECSCluster",
109
136
  cluster_name=self.ecs_config.name,
110
- vpc=self._get_vpc(),
137
+ vpc=self.vpc,
111
138
  container_insights=self.ecs_config.container_insights,
112
139
  default_cloud_map_namespace=(
113
- self.ecs_config.cloud_map_namespace
114
- if self.ecs_config.cloud_map_namespace else None
140
+ self.ecs_config.cloud_map_namespace
141
+ if self.ecs_config.cloud_map_namespace
142
+ else None
115
143
  ),
116
144
  execute_command_configuration=(
117
- self.ecs_config.execute_command_configuration
118
- if self.ecs_config.execute_command_configuration else None
119
- )
145
+ self.ecs_config.execute_command_configuration
146
+ if self.ecs_config.execute_command_configuration
147
+ else None
148
+ ),
120
149
  )
121
-
150
+
122
151
  logger.info(f"Created ECS cluster: {self.ecs_config.name}")
123
-
152
+
124
153
  def _create_iam_roles(self):
125
154
  """Create IAM roles for the ECS cluster if configured."""
126
155
  if not self.ecs_config.create_instance_role:
127
156
  return
128
-
157
+
129
158
  logger.info("Creating ECS instance role")
130
-
159
+
131
160
  # Create the instance role
132
161
  self.instance_role = iam.Role(
133
162
  self,
134
163
  "ECSInstanceRole",
135
164
  assumed_by=iam.ServicePrincipal("ec2.amazonaws.com"),
136
- role_name=self.ecs_config.instance_role_name or f"{self.ecs_config.name}-instance-role"
165
+ role_name=self.ecs_config.instance_role_name
166
+ or f"{self.ecs_config.name}-instance-role",
137
167
  )
138
-
168
+
139
169
  # Add managed policies
140
170
  for policy in self.ecs_config.managed_policies:
141
171
  self.instance_role.add_managed_policy(
142
172
  iam.ManagedPolicy.from_aws_managed_policy_name(policy)
143
173
  )
144
-
174
+
145
175
  # Add inline policies if provided
146
176
  if self.ecs_config.inline_policies:
147
177
  for policy_name, policy_document in self.ecs_config.inline_policies.items():
148
178
  self.instance_role.add_to_policy(
149
179
  iam.PolicyStatement.from_json(policy_document)
150
180
  )
151
-
181
+
152
182
  # Create instance profile
153
183
  self.instance_profile = iam.CfnInstanceProfile(
154
184
  self,
155
185
  "ECSInstanceProfile",
156
186
  roles=[self.instance_role.role_name],
157
- instance_profile_name=self.ecs_config.instance_profile_name or f"{self.ecs_config.name}-instance-profile"
187
+ instance_profile_name=self.ecs_config.instance_profile_name
188
+ or f"{self.ecs_config.name}-instance-profile",
158
189
  )
159
-
190
+
160
191
  logger.info("Created ECS instance role and profile")
161
-
162
- def _get_vpc(self):
163
- """Get the VPC for the ECS cluster."""
164
- if self.ecs_config.vpc_id:
165
- # Import VPC by ID
166
- return ec2.Vpc.from_lookup(
167
- self,
168
- "VPC",
169
- vpc_id=self.ecs_config.vpc_id
170
- )
171
- elif self.ecs_config.ssm_vpc_id:
172
- # Import VPC from SSM
173
- vpc_id = self._import_ssm_parameter_value(
174
- self.ecs_config.ssm_vpc_id,
175
- required=True
176
- )
177
- return ec2.Vpc.from_lookup(
178
- self,
179
- "VPC",
180
- vpc_id=vpc_id
181
- )
182
- else:
183
- # Use default VPC
184
- return ec2.Vpc.from_lookup(
185
- self,
186
- "VPC",
187
- is_default=True
188
- )
189
-
192
+
190
193
  def _export_cluster_info(self):
191
194
  """Export cluster information via SSM parameters and CloudFormation outputs."""
192
195
  logger.info("Exporting ECS cluster information")
193
-
196
+
194
197
  # Export cluster name
195
198
  self.export_ssm_parameter(
196
- f"/{self.deployment.name}/{self.workload.name}/ecs/cluster/name",
199
+ self, "ClusterNameParameter",
197
200
  self.ecs_config.name,
198
- "ECS Cluster Name"
201
+ f"/{self.deployment.name}/{self.workload.name}/ecs/cluster/name",
202
+ "ECS Cluster Name",
199
203
  )
200
-
204
+
201
205
  # Export cluster ARN
202
206
  self.export_ssm_parameter(
203
- f"/{self.deployment.name}/{self.workload.name}/ecs/cluster/arn",
207
+ self, "ClusterArnParameter",
204
208
  self.ecs_cluster.cluster_arn,
205
- "ECS Cluster ARN"
209
+ f"/{self.deployment.name}/{self.workload.name}/ecs/cluster/arn",
210
+ "ECS Cluster ARN",
206
211
  )
207
-
212
+
208
213
  # Export instance role ARN if created
209
- if hasattr(self, 'instance_role'):
214
+ if hasattr(self, "instance_role"):
210
215
  self.export_ssm_parameter(
211
- f"/{self.deployment.name}/{self.workload.name}/ecs/instance-role/arn",
216
+ self, "InstanceRoleArnParameter",
212
217
  self.instance_role.role_arn,
213
- "ECS Instance Role ARN"
218
+ f"/{self.deployment.name}/{self.workload.name}/ecs/instance-role/arn",
219
+ "ECS Instance Role ARN",
214
220
  )
215
-
221
+
216
222
  # CloudFormation outputs
217
223
  CfnOutput(
218
224
  self,
219
225
  "cluster-name",
220
226
  value=self.ecs_config.name,
221
227
  description=f"Name of the ECS cluster: {self.ecs_config.name}",
222
- export_name=f"{self.deployment.name}-ecs-cluster-name"
228
+ export_name=f"{self.deployment.name}-ecs-cluster-name",
223
229
  )
224
-
230
+
225
231
  CfnOutput(
226
232
  self,
227
233
  "cluster-arn",
228
234
  value=self.ecs_cluster.cluster_arn,
229
235
  description=f"ARN of the ECS cluster: {self.ecs_config.name}",
230
- export_name=f"{self.deployment.name}-ecs-cluster-arn"
236
+ export_name=f"{self.deployment.name}-ecs-cluster-arn",
231
237
  )
232
-
233
- if hasattr(self, 'instance_role'):
238
+
239
+ if hasattr(self, "instance_role"):
234
240
  CfnOutput(
235
241
  self,
236
242
  "instance-role-arn",
237
243
  value=self.instance_role.role_arn,
238
244
  description=f"ARN of the ECS instance role: {self.ecs_config.name}",
239
- export_name=f"{self.deployment.name}-ecs-instance-role-arn"
245
+ export_name=f"{self.deployment.name}-ecs-instance-role-arn",
240
246
  )
@@ -0,0 +1 @@
1
+ __version__ = "0.16.13"
@@ -1 +0,0 @@
1
- __version__ = "0.16.12"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes