cdk-factory 0.16.13__py3-none-any.whl → 0.16.15__py3-none-any.whl

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.

@@ -141,6 +141,16 @@ class EcsServiceConfig:
141
141
  """Deployment type: production, maintenance, or blue-green"""
142
142
  return self._config.get("deployment_type", "production")
143
143
 
144
+ @property
145
+ def deployment_circuit_breaker(self) -> Dict[str, Any]:
146
+ """Deployment circuit breaker configuration"""
147
+ return self._config.get("deployment_circuit_breaker", {})
148
+
149
+ @property
150
+ def deployment_configuration(self) -> Dict[str, Any]:
151
+ """Deployment configuration (maximum_percent, minimum_healthy_percent)"""
152
+ return self._config.get("deployment_configuration", {})
153
+
144
154
  @property
145
155
  def is_maintenance_mode(self) -> bool:
146
156
  """Whether this is a maintenance mode deployment"""
@@ -194,53 +194,39 @@ class EcsClusterStack(IStack, VPCProviderMixin):
194
194
  """Export cluster information via SSM parameters and CloudFormation outputs."""
195
195
  logger.info("Exporting ECS cluster information")
196
196
 
197
- # Export cluster name
198
- self.export_ssm_parameter(
199
- self, "ClusterNameParameter",
200
- self.ecs_config.name,
201
- f"/{self.deployment.name}/{self.workload.name}/ecs/cluster/name",
202
- "ECS Cluster Name",
203
- )
197
+ ssm_exports = self.ecs_config.ssm_exports
198
+
199
+ if not ssm_exports:
200
+ logger.info("No SSM exports configured for ECS Cluster")
201
+ return
204
202
 
205
- # Export cluster ARN
206
- self.export_ssm_parameter(
207
- self, "ClusterArnParameter",
208
- self.ecs_cluster.cluster_arn,
209
- f"/{self.deployment.name}/{self.workload.name}/ecs/cluster/arn",
210
- "ECS Cluster ARN",
211
- )
203
+ logger.info(f"Processing {len(ssm_exports)} SSM exports for ECS Cluster")
212
204
 
213
- # Export instance role ARN if created
214
- if hasattr(self, "instance_role"):
205
+ if "cluster_name" in ssm_exports:
215
206
  self.export_ssm_parameter(
216
- self, "InstanceRoleArnParameter",
217
- self.instance_role.role_arn,
218
- f"/{self.deployment.name}/{self.workload.name}/ecs/instance-role/arn",
219
- "ECS Instance Role ARN",
207
+ scope=self,
208
+ id="ClusterNameParam",
209
+ value=self.ecs_config.name,
210
+ parameter_name=ssm_exports["cluster_name"],
211
+ description=f"ECS Cluster Name: {self.ecs_config.name}",
220
212
  )
221
213
 
222
- # CloudFormation outputs
223
- CfnOutput(
224
- self,
225
- "cluster-name",
226
- value=self.ecs_config.name,
227
- description=f"Name of the ECS cluster: {self.ecs_config.name}",
228
- export_name=f"{self.deployment.name}-ecs-cluster-name",
229
- )
230
-
231
- CfnOutput(
232
- self,
233
- "cluster-arn",
234
- value=self.ecs_cluster.cluster_arn,
235
- description=f"ARN of the ECS cluster: {self.ecs_config.name}",
236
- export_name=f"{self.deployment.name}-ecs-cluster-arn",
237
- )
214
+ if "cluster_arn" in ssm_exports:
215
+ self.export_ssm_parameter(
216
+ scope=self,
217
+ id="ClusterArnParam",
218
+ value=self.ecs_cluster.cluster_arn,
219
+ parameter_name=ssm_exports["cluster_arn"],
220
+ description=f"ECS Cluster ARN: {self.ecs_cluster.cluster_arn}",
221
+ )
238
222
 
239
- if hasattr(self, "instance_role"):
240
- CfnOutput(
241
- self,
242
- "instance-role-arn",
223
+ if "instance_role_arn" in ssm_exports:
224
+ self.export_ssm_parameter(
225
+ scope=self,
226
+ id="InstanceRoleArnParam",
243
227
  value=self.instance_role.role_arn,
244
- description=f"ARN of the ECS instance role: {self.ecs_config.name}",
245
- export_name=f"{self.deployment.name}-ecs-instance-role-arn",
228
+ parameter_name=ssm_exports["instance_role_arn"],
229
+ description=f"ECS Instance Role ARN: {self.instance_role.role_arn}",
246
230
  )
231
+
232
+
@@ -47,7 +47,7 @@ class EcsServiceStack(IStack, EnhancedSsmParameterMixin):
47
47
  self.workload: Optional[WorkloadConfig] = None
48
48
  self.cluster: Optional[ecs.ICluster] = None
49
49
  self.service: Optional[ecs.FargateService] = None
50
- self.task_definition: Optional[ecs.FargateTaskDefinition] = None
50
+ self.task_definition: Optional[ecs.FargateTaskDefinition] | Optional[ecs.EcsTaskDefinition] = None
51
51
  self._vpc: Optional[ec2.IVpc] = None
52
52
  # SSM imported values
53
53
  self.ssm_imported_values: Dict[str, Any] = {}
@@ -450,7 +450,10 @@ class EcsServiceStack(IStack, EnhancedSsmParameterMixin):
450
450
  health_check_grace_period=cdk.Duration.seconds(
451
451
  self.ecs_config.health_check_grace_period
452
452
  ) if self.ecs_config.target_group_arns else None,
453
- circuit_breaker=ecs.DeploymentCircuitBreaker(rollback=True),
453
+ circuit_breaker=ecs.DeploymentCircuitBreaker(
454
+ enable=self.ecs_config.deployment_circuit_breaker.get("enable", True),
455
+ rollback=self.ecs_config.deployment_circuit_breaker.get("rollback", True)
456
+ ) if self.ecs_config.deployment_circuit_breaker else None,
454
457
  placement_strategies=self._get_placement_strategies(),
455
458
  placement_constraints=self._get_placement_constraints(),
456
459
  )
@@ -470,7 +473,10 @@ class EcsServiceStack(IStack, EnhancedSsmParameterMixin):
470
473
  health_check_grace_period=cdk.Duration.seconds(
471
474
  self.ecs_config.health_check_grace_period
472
475
  ) if self.ecs_config.target_group_arns else None,
473
- circuit_breaker=ecs.DeploymentCircuitBreaker(rollback=True),
476
+ circuit_breaker=ecs.DeploymentCircuitBreaker(
477
+ enable=self.ecs_config.deployment_circuit_breaker.get("enable", True),
478
+ rollback=self.ecs_config.deployment_circuit_breaker.get("rollback", True)
479
+ ) if self.ecs_config.deployment_circuit_breaker else None,
474
480
  )
475
481
 
476
482
  # Attach to load balancer target groups
@@ -662,15 +668,6 @@ class EcsServiceStack(IStack, EnhancedSsmParameterMixin):
662
668
  description=f"ECS Service ARN: {service_name}",
663
669
  )
664
670
 
665
- # Cluster name
666
- if "cluster_name" in ssm_exports:
667
- self.export_ssm_parameter(
668
- scope=self,
669
- id="ClusterNameParam",
670
- value=self.cluster.cluster_name,
671
- parameter_name=ssm_exports["cluster_name"],
672
- description=f"ECS Cluster Name for {service_name}",
673
- )
674
671
 
675
672
  # Task definition ARN
676
673
  if "task_definition_arn" in ssm_exports:
cdk_factory/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.16.13"
1
+ __version__ = "0.16.15"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cdk_factory
3
- Version: 0.16.13
3
+ Version: 0.16.15
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
@@ -2,7 +2,7 @@ cdk_factory/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  cdk_factory/app.py,sha256=RnX0-pwdTAPAdKJK_j13Zl8anf9zYKBwboR0KA8K8xM,10346
3
3
  cdk_factory/cdk.json,sha256=SKZKhJ2PBpFH78j-F8S3VDYW-lf76--Q2I3ON-ZIQfw,3106
4
4
  cdk_factory/cli.py,sha256=FGbCTS5dYCNsfp-etshzvFlGDCjC28r6rtzYbe7KoHI,6407
5
- cdk_factory/version.py,sha256=DRHGpx4GSQ3Kn3g7_X9lliE5ploF5wGkMt49I03ESBQ,24
5
+ cdk_factory/version.py,sha256=Azoo055kJozZURSVgiLattbf2Jz2HF7CxKYQAdjTAfw,24
6
6
  cdk_factory/builds/README.md,sha256=9BBWd7bXpyKdMU_g2UljhQwrC9i5O_Tvkb6oPvndoZk,90
7
7
  cdk_factory/commands/command_loader.py,sha256=QbLquuP_AdxtlxlDy-2IWCQ6D-7qa58aphnDPtp_uTs,3744
8
8
  cdk_factory/configurations/base_config.py,sha256=JKjhNsy0RCUZy1s8n5D_aXXI-upR9izaLtCTfKYiV9k,9624
@@ -32,7 +32,7 @@ cdk_factory/configurations/resources/docker.py,sha256=hUbuxkuhcQu9LnLX7I8_57eTmH
32
32
  cdk_factory/configurations/resources/dynamodb.py,sha256=HsZMOaRwfuNPwKIzokeeE3f5zAQLTB5hRb_GzYq2ibg,2903
33
33
  cdk_factory/configurations/resources/ecr.py,sha256=o9hHzEBVPoxUvWZGXGbRJ-98FmP6fMLY5a1-qg42jL0,8253
34
34
  cdk_factory/configurations/resources/ecs_cluster.py,sha256=oz8bXdW8dxYWQX0VIjvgAQA8quXJFF0NBTvtksS2vN4,3527
35
- cdk_factory/configurations/resources/ecs_service.py,sha256=fAW4EuBNhPrE7G0QcHXongKoAnFeGMRS6iP7OuGP5Fw,4926
35
+ cdk_factory/configurations/resources/ecs_service.py,sha256=dqckXUZmYaIXFxgqXCr8GxjJe8LgET1XycSXfZegkBI,5341
36
36
  cdk_factory/configurations/resources/exisiting.py,sha256=EVOLnkB-DGfTlmDgyQ5DD5k2zYfpFxqI3gugDR7mifI,478
37
37
  cdk_factory/configurations/resources/lambda_edge.py,sha256=MjmiwDkys4aoRvDQhH3MT6BgeShzJXNWL7761HJrLtQ,3404
38
38
  cdk_factory/configurations/resources/lambda_function.py,sha256=VENZ9-ABJ5mjcN8J8wdLH4KHDYr1kWO0iFDH0B2mJXA,14659
@@ -99,8 +99,8 @@ cdk_factory/stack_library/dynamodb/dynamodb_stack.py,sha256=TVyOrUhgaSuN8uymkpaQ
99
99
  cdk_factory/stack_library/ecr/README.md,sha256=xw2wPx9WN03Y4BBwqvbi9lAFGNyaD1FUNpqxVJX14Oo,179
100
100
  cdk_factory/stack_library/ecr/ecr_stack.py,sha256=1xA68sxFVyqreYjXrP_7U9I8RF9RtFeR6KeEfSWuC2U,2118
101
101
  cdk_factory/stack_library/ecs/__init__.py,sha256=ZZLBmuSt6z_cnFz6OkIFv_APmjqf706wWROruZGyFEI,289
102
- cdk_factory/stack_library/ecs/ecs_cluster_stack.py,sha256=zAsaQsIWa9cOHcMngdWUAOXZ2PybC3Oc0JADqRgO2dg,8326
103
- cdk_factory/stack_library/ecs/ecs_service_stack.py,sha256=c6K3BjlXyldr8ikvEhfC9C-LpKJILQQkwwU9DNlepH4,27747
102
+ cdk_factory/stack_library/ecs/ecs_cluster_stack.py,sha256=epDF28JlBMgq9UlOlv1PkwhTYuX2ghqe2Af6ruyMtnE,7863
103
+ cdk_factory/stack_library/ecs/ecs_service_stack.py,sha256=WYpHUFW_ruMWje-YgsSbPETG8Y4mrvj-KfIQrebuVfM,27909
104
104
  cdk_factory/stack_library/lambda_edge/__init__.py,sha256=ByBJ_CWdc4UtTmFBZH-6pzBMNkjkdtE65AmnB0Fs6lM,156
105
105
  cdk_factory/stack_library/lambda_edge/lambda_edge_stack.py,sha256=CdId_1kcZmYr1lLI9AD3-KqtE6voC3641PIloJmWiNI,16414
106
106
  cdk_factory/stack_library/load_balancer/__init__.py,sha256=wZpKw2OecLJGdF5mPayCYAEhu2H3c2gJFFIxwXftGDU,52
@@ -136,8 +136,8 @@ cdk_factory/utilities/lambda_function_utilities.py,sha256=S1GvBsY_q2cyUiaud3HORJ
136
136
  cdk_factory/utilities/os_execute.py,sha256=5Op0LY_8Y-pUm04y1k8MTpNrmQvcLmQHPQITEP7EuSU,1019
137
137
  cdk_factory/utils/api_gateway_utilities.py,sha256=If7Xu5s_UxmuV-kL3JkXxPLBdSVUKoLtohm0IUFoiV8,4378
138
138
  cdk_factory/workload/workload_factory.py,sha256=yDI3cRhVI5ELNDcJPLpk9UY54Uind1xQoV3spzT4z7E,6068
139
- cdk_factory-0.16.13.dist-info/METADATA,sha256=PDyT7iE3uveBVxNrEwsLMvpD0_J5yoVMh7L1DkoAjUE,2452
140
- cdk_factory-0.16.13.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
141
- cdk_factory-0.16.13.dist-info/entry_points.txt,sha256=S1DPe0ORcdiwEALMN_WIo3UQrW_g4YdQCLEsc_b0Swg,53
142
- cdk_factory-0.16.13.dist-info/licenses/LICENSE,sha256=NOtdOeLwg2il_XBJdXUPFPX8JlV4dqTdDGAd2-khxT8,1066
143
- cdk_factory-0.16.13.dist-info/RECORD,,
139
+ cdk_factory-0.16.15.dist-info/METADATA,sha256=wESUjHCbYS9Yh3uYZMcxEowPcMsTWfzAosK6FViRUyM,2452
140
+ cdk_factory-0.16.15.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
141
+ cdk_factory-0.16.15.dist-info/entry_points.txt,sha256=S1DPe0ORcdiwEALMN_WIo3UQrW_g4YdQCLEsc_b0Swg,53
142
+ cdk_factory-0.16.15.dist-info/licenses/LICENSE,sha256=NOtdOeLwg2il_XBJdXUPFPX8JlV4dqTdDGAd2-khxT8,1066
143
+ cdk_factory-0.16.15.dist-info/RECORD,,