cdk-factory 0.15.19__py3-none-any.whl → 0.15.22__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,19 @@ class LoadBalancerStack(IStack, EnhancedSsmParameterMixin):
141
141
  vpc_subnets=ec2.SubnetSelection(subnets=subnets) if subnets else None,
142
142
  )
143
143
 
144
+ # If subnets is None, check if we have SSM-imported subnet_ids as a token
145
+ # We need to use Fn.Split to convert the comma-separated string to an array
146
+ if subnets is None and "subnet_ids" in self.ssm_imported_values:
147
+ subnet_ids_value = self.ssm_imported_values["subnet_ids"]
148
+ if cdk.Token.is_unresolved(subnet_ids_value):
149
+ logger.info("Using Fn.Split to convert comma-separated subnet IDs token to array")
150
+ # Use CloudFormation escape hatch to set Subnets property with Fn.Split
151
+ cfn_lb = load_balancer.node.default_child
152
+ cfn_lb.add_property_override(
153
+ "Subnets",
154
+ cdk.Fn.split(",", subnet_ids_value)
155
+ )
156
+
144
157
  # Add tags
145
158
  for key, value in self.lb_config.tags.items():
146
159
  cdk.Tags.of(load_balancer).add(key, value)
@@ -255,15 +268,28 @@ class LoadBalancerStack(IStack, EnhancedSsmParameterMixin):
255
268
 
256
269
  # Check SSM imported values first
257
270
  if "subnet_ids" in self.ssm_imported_values:
258
- subnet_ids = self.ssm_imported_values["subnet_ids"]
259
- # SSM returns comma-separated string for StringList, need to split
260
- if isinstance(subnet_ids, str):
261
- subnet_ids = [s.strip() for s in subnet_ids.split(',')]
262
- elif not isinstance(subnet_ids, list):
263
- subnet_ids = [subnet_ids]
271
+ subnet_ids_value = self.ssm_imported_values["subnet_ids"]
272
+
273
+ # Check if this is a CDK token (unresolved SSM parameter)
274
+ if cdk.Token.is_unresolved(subnet_ids_value):
275
+ # For tokens, we can't split at synth time
276
+ # Return None to signal that subnets should be resolved via SubnetSelection
277
+ # The ALB construct will handle the token-based subnet IDs
278
+ logger.info("Subnet IDs are unresolved tokens, will use vpc_subnets with token resolution")
279
+ return None
280
+ elif isinstance(subnet_ids_value, str):
281
+ # If it's a resolved string, split it
282
+ subnet_ids = [s.strip() for s in subnet_ids_value.split(',')]
283
+ elif isinstance(subnet_ids_value, list):
284
+ subnet_ids = subnet_ids_value
285
+ else:
286
+ subnet_ids = [subnet_ids_value]
264
287
  else:
265
288
  subnet_ids = self.lb_config.subnets
266
289
 
290
+ if not subnet_ids:
291
+ return None
292
+
267
293
  for idx, subnet_id in enumerate(subnet_ids):
268
294
  subnets.append(
269
295
  ec2.Subnet.from_subnet_id(self, f"Subnet-{idx}", subnet_id)
@@ -171,9 +171,18 @@ class JsonLoadingUtility:
171
171
  def merge_sections(self, base: dict, new: dict):
172
172
  """Merge two configuration sections, with new section overriding base section."""
173
173
  for key, value in new.items():
174
- if key in base and isinstance(base[key], dict) and isinstance(value, dict):
175
- self.merge_sections(base[key], value)
174
+ if key in base:
175
+ if isinstance(base[key], dict) and isinstance(value, dict):
176
+ # Recursively merge nested dicts
177
+ self.merge_sections(base[key], value)
178
+ elif isinstance(base[key], list) and isinstance(value, list):
179
+ # Extend arrays instead of replacing them
180
+ base[key].extend(value)
181
+ else:
182
+ # Override for all other types (string, int, bool, etc.)
183
+ base[key] = value
176
184
  else:
185
+ # Key doesn't exist in base, add it
177
186
  base[key] = value
178
187
  return base
179
188
 
cdk_factory/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.15.19"
1
+ __version__ = "0.15.22"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cdk_factory
3
- Version: 0.15.19
3
+ Version: 0.15.22
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=Z3uMBj60vZ3EVuxU5wkKqelcN0y_zs1XVBGw7z_-3cw,24
5
+ cdk_factory/version.py,sha256=shv1DnYQStFbMP5tTfMYOU43hXngTdA0D45wB2TtIY4,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
@@ -97,7 +97,7 @@ cdk_factory/stack_library/ecs/ecs_service_stack.py,sha256=c6K3BjlXyldr8ikvEhfC9C
97
97
  cdk_factory/stack_library/lambda_edge/__init__.py,sha256=ByBJ_CWdc4UtTmFBZH-6pzBMNkjkdtE65AmnB0Fs6lM,156
98
98
  cdk_factory/stack_library/lambda_edge/lambda_edge_stack.py,sha256=CdId_1kcZmYr1lLI9AD3-KqtE6voC3641PIloJmWiNI,16414
99
99
  cdk_factory/stack_library/load_balancer/__init__.py,sha256=wZpKw2OecLJGdF5mPayCYAEhu2H3c2gJFFIxwXftGDU,52
100
- cdk_factory/stack_library/load_balancer/load_balancer_stack.py,sha256=SBB-Cknon7U317iR2chFNWjny-lp8BFmzFMCYLP-8Uo,28253
100
+ cdk_factory/stack_library/load_balancer/load_balancer_stack.py,sha256=fgp2s3DjP1fIRZT2PaxQVPrL4MGILML3ovcreEdmFlo,29651
101
101
  cdk_factory/stack_library/monitoring/__init__.py,sha256=k1G_KDx47Aw0UugaL99PN_TKlyLK4nkJVApCaAK7GJg,153
102
102
  cdk_factory/stack_library/monitoring/monitoring_stack.py,sha256=N_1YvEXE7fboH_S3kv_dSKZsufxMuPdFMjGzlNFpuSo,19283
103
103
  cdk_factory/stack_library/rds/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -124,13 +124,13 @@ cdk_factory/utilities/docker_utilities.py,sha256=6ee9KEGsaRJWo6FqvdPtE3_L2Emp3Lc
124
124
  cdk_factory/utilities/environment_services.py,sha256=cd2T0efJtFPMLa1Fm7MPL-sqUlhKXCB7_XHsR8sfymE,9696
125
125
  cdk_factory/utilities/file_operations.py,sha256=fxqT0iyYZkb46lQr_XXadhFTca_1neVW0VRVkbyMmhA,9462
126
126
  cdk_factory/utilities/git_utilities.py,sha256=7Xac8PaThc7Lmk5jtDBHaJOj-fWRT017cgZmgXkVizM,3155
127
- cdk_factory/utilities/json_loading_utility.py,sha256=YRgzA1I-B_HwZm1eWJTeQ1JLkebCL4C1gpHOqo6GkCA,10341
127
+ cdk_factory/utilities/json_loading_utility.py,sha256=Ko28g-Izh7tBnRtOSqzOXyfcZvQlthFj4kOXCFVF4oc,10787
128
128
  cdk_factory/utilities/lambda_function_utilities.py,sha256=S1GvBsY_q2cyUiaud3HORJMnLhI5cRi31fbeaktY-_Q,15826
129
129
  cdk_factory/utilities/os_execute.py,sha256=5Op0LY_8Y-pUm04y1k8MTpNrmQvcLmQHPQITEP7EuSU,1019
130
130
  cdk_factory/utils/api_gateway_utilities.py,sha256=If7Xu5s_UxmuV-kL3JkXxPLBdSVUKoLtohm0IUFoiV8,4378
131
131
  cdk_factory/workload/workload_factory.py,sha256=yDI3cRhVI5ELNDcJPLpk9UY54Uind1xQoV3spzT4z7E,6068
132
- cdk_factory-0.15.19.dist-info/METADATA,sha256=ODF22xVdpQsHyeJOF05R1r0sI66hkIWjADBT5x58eRY,2452
133
- cdk_factory-0.15.19.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
134
- cdk_factory-0.15.19.dist-info/entry_points.txt,sha256=S1DPe0ORcdiwEALMN_WIo3UQrW_g4YdQCLEsc_b0Swg,53
135
- cdk_factory-0.15.19.dist-info/licenses/LICENSE,sha256=NOtdOeLwg2il_XBJdXUPFPX8JlV4dqTdDGAd2-khxT8,1066
136
- cdk_factory-0.15.19.dist-info/RECORD,,
132
+ cdk_factory-0.15.22.dist-info/METADATA,sha256=MIXVvmQIOmO3HcrhZrF7Cj9c9t-og0x9Av89UN4qfWo,2452
133
+ cdk_factory-0.15.22.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
134
+ cdk_factory-0.15.22.dist-info/entry_points.txt,sha256=S1DPe0ORcdiwEALMN_WIo3UQrW_g4YdQCLEsc_b0Swg,53
135
+ cdk_factory-0.15.22.dist-info/licenses/LICENSE,sha256=NOtdOeLwg2il_XBJdXUPFPX8JlV4dqTdDGAd2-khxT8,1066
136
+ cdk_factory-0.15.22.dist-info/RECORD,,