cdk-factory 0.16.8__py3-none-any.whl → 0.16.11__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.
- cdk_factory/interfaces/vpc_provider_mixin.py +34 -9
- cdk_factory/stack_library/auto_scaling/auto_scaling_stack.py +119 -67
- cdk_factory/version.py +1 -1
- {cdk_factory-0.16.8.dist-info → cdk_factory-0.16.11.dist-info}/METADATA +1 -1
- {cdk_factory-0.16.8.dist-info → cdk_factory-0.16.11.dist-info}/RECORD +8 -8
- {cdk_factory-0.16.8.dist-info → cdk_factory-0.16.11.dist-info}/WHEEL +0 -0
- {cdk_factory-0.16.8.dist-info → cdk_factory-0.16.11.dist-info}/entry_points.txt +0 -0
- {cdk_factory-0.16.8.dist-info → cdk_factory-0.16.11.dist-info}/licenses/LICENSE +0 -0
|
@@ -71,15 +71,29 @@ class VPCProviderMixin:
|
|
|
71
71
|
# This works with the enhanced SsmParameterMixin
|
|
72
72
|
if hasattr(self, '_ssm_imported_values') and "vpc_id" in self._ssm_imported_values:
|
|
73
73
|
vpc_id = self._ssm_imported_values["vpc_id"]
|
|
74
|
+
|
|
75
|
+
# Get subnet IDs first to determine AZ count
|
|
76
|
+
subnet_ids = []
|
|
77
|
+
if hasattr(self, '_ssm_imported_values') and "subnet_ids" in self._ssm_imported_values:
|
|
78
|
+
imported_subnets = self._ssm_imported_values["subnet_ids"]
|
|
79
|
+
if isinstance(imported_subnets, str):
|
|
80
|
+
subnet_ids = [s.strip() for s in imported_subnets.split(",") if s.strip()]
|
|
81
|
+
elif isinstance(imported_subnets, list):
|
|
82
|
+
subnet_ids = imported_subnets
|
|
83
|
+
|
|
84
|
+
# Adjust availability zones to match subnet count
|
|
85
|
+
if subnet_ids and availability_zones:
|
|
86
|
+
availability_zones = [f"us-east-1{chr(97+i)}" for i in range(len(subnet_ids))]
|
|
87
|
+
|
|
74
88
|
return self._create_vpc_from_ssm(vpc_id, availability_zones)
|
|
75
89
|
|
|
76
90
|
# Check config-level VPC ID
|
|
77
91
|
if hasattr(config, 'vpc_id') and config.vpc_id:
|
|
78
|
-
return ec2.Vpc.from_lookup(self, "VPC", vpc_id=config.vpc_id)
|
|
92
|
+
return ec2.Vpc.from_lookup(self, f"{self.stack_name}-VPC", vpc_id=config.vpc_id)
|
|
79
93
|
|
|
80
94
|
# Check workload-level VPC ID
|
|
81
95
|
if hasattr(workload, 'vpc_id') and workload.vpc_id:
|
|
82
|
-
return ec2.Vpc.from_lookup(self, "VPC", vpc_id=workload.vpc_id)
|
|
96
|
+
return ec2.Vpc.from_lookup(self, f"{self.stack_name}-VPC", vpc_id=workload.vpc_id)
|
|
83
97
|
|
|
84
98
|
# No VPC found - raise descriptive error
|
|
85
99
|
raise self._create_vpc_not_found_error(config, workload)
|
|
@@ -105,15 +119,26 @@ class VPCProviderMixin:
|
|
|
105
119
|
"availability_zones": availability_zones,
|
|
106
120
|
}
|
|
107
121
|
|
|
108
|
-
# If we have subnet_ids from SSM,
|
|
109
|
-
# The actual subnets will be set via CloudFormation escape hatch
|
|
122
|
+
# If we have subnet_ids from SSM, use the actual subnet IDs
|
|
110
123
|
if hasattr(self, '_ssm_imported_values') and "subnet_ids" in self._ssm_imported_values:
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
124
|
+
imported_subnets = self._ssm_imported_values["subnet_ids"]
|
|
125
|
+
if isinstance(imported_subnets, str):
|
|
126
|
+
# Split comma-separated subnet IDs
|
|
127
|
+
subnet_ids = [s.strip() for s in imported_subnets.split(",") if s.strip()]
|
|
128
|
+
elif isinstance(imported_subnets, list):
|
|
129
|
+
subnet_ids = imported_subnets
|
|
130
|
+
else:
|
|
131
|
+
subnet_ids = []
|
|
132
|
+
|
|
133
|
+
# Use the actual subnet IDs from SSM
|
|
134
|
+
if subnet_ids:
|
|
135
|
+
vpc_attrs["public_subnet_ids"] = subnet_ids
|
|
136
|
+
else:
|
|
137
|
+
# Fallback to dummy subnets if no valid subnet IDs
|
|
138
|
+
vpc_attrs["public_subnet_ids"] = ["subnet-dummy1", "subnet-dummy2"]
|
|
114
139
|
|
|
115
|
-
# Use from_vpc_attributes() for SSM tokens
|
|
116
|
-
self._vpc = ec2.Vpc.from_vpc_attributes(self, "VPC", **vpc_attrs)
|
|
140
|
+
# Use from_vpc_attributes() for SSM tokens with unique construct name
|
|
141
|
+
self._vpc = ec2.Vpc.from_vpc_attributes(self, f"{self.stack_name}-VPC", **vpc_attrs)
|
|
117
142
|
return self._vpc
|
|
118
143
|
|
|
119
144
|
def _create_vpc_not_found_error(self, config: Any, workload: Any) -> ValueError:
|
|
@@ -21,6 +21,7 @@ from cdk_factory.configurations.deployment import DeploymentConfig
|
|
|
21
21
|
from cdk_factory.configurations.stack import StackConfig
|
|
22
22
|
from cdk_factory.configurations.resources.auto_scaling import AutoScalingConfig
|
|
23
23
|
from cdk_factory.interfaces.istack import IStack
|
|
24
|
+
from cdk_factory.interfaces.vpc_provider_mixin import VPCProviderMixin
|
|
24
25
|
from cdk_factory.stack.stack_module_registry import register_stack
|
|
25
26
|
from cdk_factory.workload.workload_factory import WorkloadConfig
|
|
26
27
|
|
|
@@ -29,7 +30,7 @@ logger = Logger(service="AutoScalingStack")
|
|
|
29
30
|
|
|
30
31
|
@register_stack("auto_scaling_library_module")
|
|
31
32
|
@register_stack("auto_scaling_stack")
|
|
32
|
-
class AutoScalingStack(IStack):
|
|
33
|
+
class AutoScalingStack(IStack, VPCProviderMixin):
|
|
33
34
|
"""
|
|
34
35
|
Reusable stack for AWS Auto Scaling Groups.
|
|
35
36
|
Supports creating EC2 Auto Scaling Groups with customizable configurations.
|
|
@@ -41,6 +42,9 @@ class AutoScalingStack(IStack):
|
|
|
41
42
|
# Initialize parent class properly - IStack inherits from enhanced SsmParameterMixin
|
|
42
43
|
super().__init__(scope, id, **kwargs)
|
|
43
44
|
|
|
45
|
+
# Initialize VPC cache from mixin
|
|
46
|
+
self._initialize_vpc_cache()
|
|
47
|
+
|
|
44
48
|
self.asg_config = None
|
|
45
49
|
self.stack_config = None
|
|
46
50
|
self.deployment = None
|
|
@@ -50,10 +54,11 @@ class AutoScalingStack(IStack):
|
|
|
50
54
|
self.launch_template = None
|
|
51
55
|
self.instance_role = None
|
|
52
56
|
self.user_data = None
|
|
57
|
+
self.user_data_commands = [] # Store raw commands for ECS cluster detection
|
|
53
58
|
self.ecs_cluster = None
|
|
54
|
-
self._vpc = None
|
|
55
59
|
|
|
56
60
|
# SSM imports storage is now handled by the enhanced SsmParameterMixin via IStack
|
|
61
|
+
# VPC caching is now handled by VPCProviderMixin
|
|
57
62
|
|
|
58
63
|
def build(
|
|
59
64
|
self,
|
|
@@ -92,12 +97,13 @@ class AutoScalingStack(IStack):
|
|
|
92
97
|
# Create user data
|
|
93
98
|
self.user_data = self._create_user_data()
|
|
94
99
|
|
|
95
|
-
# Create launch template
|
|
96
|
-
self.launch_template = self._create_launch_template(asg_name)
|
|
97
|
-
|
|
98
100
|
# Create ECS cluster if ECS configuration is detected
|
|
101
|
+
# This must happen before launch template creation so user data can be updated
|
|
99
102
|
self._create_ecs_cluster_if_needed(asg_name)
|
|
100
103
|
|
|
104
|
+
# Create launch template
|
|
105
|
+
self.launch_template = self._create_launch_template(asg_name)
|
|
106
|
+
|
|
101
107
|
# Create Auto Scaling Group
|
|
102
108
|
self.auto_scaling_group = self._create_auto_scaling_group(asg_name)
|
|
103
109
|
|
|
@@ -112,57 +118,16 @@ class AutoScalingStack(IStack):
|
|
|
112
118
|
|
|
113
119
|
@property
|
|
114
120
|
def vpc(self) -> ec2.IVpc:
|
|
115
|
-
"""Get the VPC for the Auto Scaling Group using
|
|
121
|
+
"""Get the VPC for the Auto Scaling Group using VPCProviderMixin"""
|
|
116
122
|
if not self.asg_config:
|
|
117
123
|
raise AttributeError("AutoScalingStack not properly initialized. Call build() first.")
|
|
118
124
|
|
|
119
|
-
#
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
vpc_id = self.get_ssm_imported_value("vpc_id")
|
|
126
|
-
|
|
127
|
-
# Get subnet IDs first to determine AZ count
|
|
128
|
-
subnet_ids = []
|
|
129
|
-
if self.has_ssm_import("subnet_ids"):
|
|
130
|
-
imported_subnets = self.get_ssm_imported_value("subnet_ids", [])
|
|
131
|
-
if isinstance(imported_subnets, str):
|
|
132
|
-
# Split comma-separated subnet IDs
|
|
133
|
-
subnet_ids = [s.strip() for s in imported_subnets.split(",") if s.strip()]
|
|
134
|
-
elif isinstance(imported_subnets, list):
|
|
135
|
-
subnet_ids = imported_subnets
|
|
136
|
-
|
|
137
|
-
# Build VPC attributes with matching AZ count
|
|
138
|
-
vpc_attrs = {
|
|
139
|
-
"vpc_id": vpc_id,
|
|
140
|
-
"availability_zones": [f"us-east-1{chr(97+i)}" for i in range(len(subnet_ids))] if subnet_ids else ["us-east-1a", "us-east-1b"],
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
# Use the actual subnet IDs from SSM
|
|
144
|
-
if subnet_ids:
|
|
145
|
-
vpc_attrs["public_subnet_ids"] = subnet_ids
|
|
146
|
-
else:
|
|
147
|
-
# Fallback to dummy subnets if no valid subnet IDs
|
|
148
|
-
vpc_attrs["public_subnet_ids"] = ["subnet-dummy1", "subnet-dummy2"]
|
|
149
|
-
|
|
150
|
-
# Use from_vpc_attributes() for SSM tokens
|
|
151
|
-
self._vpc = ec2.Vpc.from_vpc_attributes(self, f"{self.stack_name}-VPC", **vpc_attrs)
|
|
152
|
-
return self._vpc
|
|
153
|
-
elif self.asg_config.vpc_id:
|
|
154
|
-
self._vpc = ec2.Vpc.from_lookup(self, f"{self.stack_name}-VPC", vpc_id=self.asg_config.vpc_id)
|
|
155
|
-
return self._vpc
|
|
156
|
-
elif self.workload.vpc_id:
|
|
157
|
-
self._vpc = ec2.Vpc.from_lookup(self, f"{self.stack_name}-VPC", vpc_id=self.workload.vpc_id)
|
|
158
|
-
return self._vpc
|
|
159
|
-
else:
|
|
160
|
-
# Use default VPC if not provided
|
|
161
|
-
raise ValueError(
|
|
162
|
-
"VPC is not defined in the configuration. "
|
|
163
|
-
"You can provide it a the auto_scaling.vpc_id in the configuration "
|
|
164
|
-
"or a top level workload.vpc_id in the workload configuration."
|
|
165
|
-
)
|
|
125
|
+
# Use VPCProviderMixin to resolve VPC with proper subnet handling
|
|
126
|
+
return self.resolve_vpc(
|
|
127
|
+
config=self.asg_config,
|
|
128
|
+
deployment=self.deployment,
|
|
129
|
+
workload=self.workload
|
|
130
|
+
)
|
|
166
131
|
|
|
167
132
|
def _get_target_group_arns(self) -> List[str]:
|
|
168
133
|
"""Get target group ARNs from SSM imports using enhanced SsmParameterMixin"""
|
|
@@ -277,12 +242,18 @@ class AutoScalingStack(IStack):
|
|
|
277
242
|
"""Create user data for EC2 instances"""
|
|
278
243
|
user_data = ec2.UserData.for_linux()
|
|
279
244
|
|
|
245
|
+
# Store raw commands for ECS cluster detection
|
|
246
|
+
self.user_data_commands = ["set -euxo pipefail"]
|
|
247
|
+
|
|
280
248
|
# Add base commands
|
|
281
249
|
user_data.add_commands("set -euxo pipefail")
|
|
282
250
|
|
|
283
|
-
# Add custom commands from config
|
|
251
|
+
# Add custom commands from config (with variable substitution)
|
|
284
252
|
for command in self.asg_config.user_data_commands:
|
|
285
|
-
|
|
253
|
+
# Perform variable substitution on the command
|
|
254
|
+
substituted_command = self._substitute_variables(command)
|
|
255
|
+
user_data.add_commands(substituted_command)
|
|
256
|
+
self.user_data_commands.append(substituted_command)
|
|
286
257
|
|
|
287
258
|
# Add user data scripts from files (with variable substitution)
|
|
288
259
|
if self.asg_config.user_data_scripts:
|
|
@@ -355,6 +326,49 @@ class AutoScalingStack(IStack):
|
|
|
355
326
|
|
|
356
327
|
logger.info(f"Added user data script from {script_type}: {script_config.get('path', 'inline')}")
|
|
357
328
|
|
|
329
|
+
def _substitute_variables(self, command: str) -> str:
|
|
330
|
+
"""
|
|
331
|
+
Perform variable substitution on a user data command.
|
|
332
|
+
Uses workload and deployment configuration for substitution.
|
|
333
|
+
"""
|
|
334
|
+
if not command:
|
|
335
|
+
return command
|
|
336
|
+
|
|
337
|
+
# Start with the original command
|
|
338
|
+
substituted_command = command
|
|
339
|
+
|
|
340
|
+
# Define available variables for substitution
|
|
341
|
+
variables = {}
|
|
342
|
+
|
|
343
|
+
# Add workload variables
|
|
344
|
+
if self.workload:
|
|
345
|
+
variables.update({
|
|
346
|
+
"WORKLOAD_NAME": getattr(self.workload, 'name', ''),
|
|
347
|
+
"ENVIRONMENT": getattr(self.workload, 'environment', ''),
|
|
348
|
+
"WORKLOAD": getattr(self.workload, 'name', ''),
|
|
349
|
+
})
|
|
350
|
+
|
|
351
|
+
# Add deployment variables
|
|
352
|
+
if self.deployment:
|
|
353
|
+
variables.update({
|
|
354
|
+
"DEPLOYMENT_NAME": getattr(self.deployment, 'name', ''),
|
|
355
|
+
"REGION": getattr(self.deployment, 'region', ''),
|
|
356
|
+
"ACCOUNT": getattr(self.deployment, 'account', ''),
|
|
357
|
+
})
|
|
358
|
+
|
|
359
|
+
# Add stack-level variables
|
|
360
|
+
variables.update({
|
|
361
|
+
"STACK_NAME": self.stack_name,
|
|
362
|
+
})
|
|
363
|
+
|
|
364
|
+
# Perform substitution
|
|
365
|
+
for var_name, var_value in variables.items():
|
|
366
|
+
if var_value is not None:
|
|
367
|
+
placeholder = f"{{{{{var_name}}}}}" # {{VAR_NAME}}
|
|
368
|
+
substituted_command = substituted_command.replace(placeholder, str(var_value))
|
|
369
|
+
|
|
370
|
+
return substituted_command
|
|
371
|
+
|
|
358
372
|
def _add_container_user_data(
|
|
359
373
|
self, user_data: ec2.UserData, container_config: Dict[str, Any]
|
|
360
374
|
) -> None:
|
|
@@ -622,8 +636,6 @@ class AutoScalingStack(IStack):
|
|
|
622
636
|
"""Create ECS cluster if ECS configuration is detected"""
|
|
623
637
|
# Check if this is an ECS configuration by looking for ECS-related patterns
|
|
624
638
|
is_ecs_config = (
|
|
625
|
-
# Check if ECS cluster name is in user data
|
|
626
|
-
(self.user_data and "ECS_CLUSTER=" in str(self.user_data)) or
|
|
627
639
|
# Check if ECS managed policy is attached
|
|
628
640
|
any("AmazonEC2ContainerServiceforEC2Role" in policy for policy in self.asg_config.managed_policies) or
|
|
629
641
|
# Check for explicit ECS configuration
|
|
@@ -634,16 +646,8 @@ class AutoScalingStack(IStack):
|
|
|
634
646
|
logger.debug("No ECS configuration detected, skipping cluster creation")
|
|
635
647
|
return
|
|
636
648
|
|
|
637
|
-
#
|
|
638
|
-
cluster_name = f"{self.
|
|
639
|
-
|
|
640
|
-
# Try to extract cluster name from user data if available
|
|
641
|
-
if self.user_data:
|
|
642
|
-
user_data_str = str(self.user_data)
|
|
643
|
-
for line in user_data_str.split('\n'):
|
|
644
|
-
if 'ECS_CLUSTER=' in line:
|
|
645
|
-
cluster_name = line.split('ECS_CLUSTER=')[1].strip()
|
|
646
|
-
break
|
|
649
|
+
# Generate cluster name from stack configuration
|
|
650
|
+
cluster_name = f"{self.workload.name}-{self.workload.environment}-cluster"
|
|
647
651
|
|
|
648
652
|
logger.info(f"Creating ECS cluster: {cluster_name}")
|
|
649
653
|
|
|
@@ -656,6 +660,10 @@ class AutoScalingStack(IStack):
|
|
|
656
660
|
container_insights=True
|
|
657
661
|
)
|
|
658
662
|
|
|
663
|
+
# Inject the cluster name into user data if user data exists
|
|
664
|
+
if self.user_data and self.user_data_commands:
|
|
665
|
+
self._inject_cluster_name_into_user_data(cluster_name)
|
|
666
|
+
|
|
659
667
|
# Export cluster name
|
|
660
668
|
cdk.CfnOutput(
|
|
661
669
|
self,
|
|
@@ -672,6 +680,50 @@ class AutoScalingStack(IStack):
|
|
|
672
680
|
export_name=f"{self.deployment.build_resource_name(cluster_name)}-arn",
|
|
673
681
|
)
|
|
674
682
|
|
|
683
|
+
def _inject_cluster_name_into_user_data(self, cluster_name: str) -> None:
|
|
684
|
+
"""Inject the ECS cluster name into user data commands"""
|
|
685
|
+
injected_commands = []
|
|
686
|
+
cluster_name_injected = False
|
|
687
|
+
|
|
688
|
+
for command in self.user_data_commands:
|
|
689
|
+
# If this command already sets ECS_CLUSTER, replace it
|
|
690
|
+
if 'ECS_CLUSTER=' in command:
|
|
691
|
+
# Replace existing ECS_CLUSTER setting with our cluster name
|
|
692
|
+
parts = command.split('ECS_CLUSTER=')
|
|
693
|
+
if len(parts) > 1:
|
|
694
|
+
# Keep everything before ECS_CLUSTER=, add our cluster name, then add the rest
|
|
695
|
+
before = parts[0]
|
|
696
|
+
after_parts = parts[1].split(None, 1) # Split on first whitespace
|
|
697
|
+
after = after_parts[1] if len(after_parts) > 1 else ''
|
|
698
|
+
new_command = f"{before}ECS_CLUSTER={cluster_name} {after}".strip()
|
|
699
|
+
injected_commands.append(new_command)
|
|
700
|
+
cluster_name_injected = True
|
|
701
|
+
else:
|
|
702
|
+
injected_commands.append(f"{command}ECS_CLUSTER={cluster_name}")
|
|
703
|
+
cluster_name_injected = True
|
|
704
|
+
else:
|
|
705
|
+
injected_commands.append(command)
|
|
706
|
+
|
|
707
|
+
# If no ECS_CLUSTER was found in existing commands, add it
|
|
708
|
+
if not cluster_name_injected:
|
|
709
|
+
injected_commands.append(f"echo ECS_CLUSTER={cluster_name} >> /etc/ecs/ecs.config")
|
|
710
|
+
|
|
711
|
+
# Update the user data with the injected commands
|
|
712
|
+
self.user_data_commands = injected_commands
|
|
713
|
+
|
|
714
|
+
# If user data object exists, we need to recreate it with the updated commands
|
|
715
|
+
if hasattr(self, 'user_data') and self.user_data:
|
|
716
|
+
self.user_data = self._recreate_user_data_with_commands(injected_commands)
|
|
717
|
+
|
|
718
|
+
def _recreate_user_data_with_commands(self, commands: List[str]) -> ec2.UserData:
|
|
719
|
+
"""Recreate user data with updated commands"""
|
|
720
|
+
user_data = ec2.UserData.for_linux()
|
|
721
|
+
|
|
722
|
+
for command in commands:
|
|
723
|
+
user_data.add_commands(command)
|
|
724
|
+
|
|
725
|
+
return user_data
|
|
726
|
+
|
|
675
727
|
def _export_resources(self, asg_name: str) -> None:
|
|
676
728
|
"""Export stack resources to SSM and CloudFormation outputs"""
|
|
677
729
|
# Export ASG name
|
cdk_factory/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "0.16.
|
|
1
|
+
__version__ = "0.16.11"
|
|
@@ -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=
|
|
5
|
+
cdk_factory/version.py,sha256=EakrCPGyBoMWg8RWPZfDpree9gtV1Dzj_7yPvePXTLA,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
|
|
@@ -67,7 +67,7 @@ cdk_factory/interfaces/istack.py,sha256=4Bqls3Xbgwbnl9MjxsX8S2d5lMOMPdhlVu0DiAiT
|
|
|
67
67
|
cdk_factory/interfaces/live_ssm_resolver.py,sha256=3FIr9a02SXqZmbFs3RT0WxczWEQR_CF7QSt7kWbDrVE,8163
|
|
68
68
|
cdk_factory/interfaces/networked_stack_mixin.py,sha256=c_wDWPU4Y8HrTt2yGRwBJvVCfwHNy0SEeNMQjaUgcrI,2808
|
|
69
69
|
cdk_factory/interfaces/ssm_parameter_mixin.py,sha256=Z0KUbvDfvU-Kfpjtjm33Eo0ZonHQbnMlenR8FtG-0ls,17194
|
|
70
|
-
cdk_factory/interfaces/vpc_provider_mixin.py,sha256
|
|
70
|
+
cdk_factory/interfaces/vpc_provider_mixin.py,sha256=HPehSjYjCncYMNkmbwfDgfF4n91iazFVMd1NsF_U4fY,6860
|
|
71
71
|
cdk_factory/lambdas/health_handler.py,sha256=dd40ykKMxWCFEIyp2ZdQvAGNjw_ylI9CSm1N24Hp2ME,196
|
|
72
72
|
cdk_factory/lambdas/edge/ip_gate/handler.py,sha256=YrXO42gEhJoBTaH6jS7EWqjHe9t5Fpt4WLgY8vjtou0,10474
|
|
73
73
|
cdk_factory/pipeline/path_utils.py,sha256=fvWdrcb4onmpIu1APkHLhXg8zWfK74HcW3Ra2ynxfXM,2586
|
|
@@ -86,7 +86,7 @@ cdk_factory/stack_library/acm/__init__.py,sha256=4FNRLykblcKZvq_wieYwvv9N_jgrZnJ
|
|
|
86
86
|
cdk_factory/stack_library/acm/acm_stack.py,sha256=hflRXyOSjqGeJxBx87EV3Z3MJ5HEX2rnrjJ_E9wwhH8,5862
|
|
87
87
|
cdk_factory/stack_library/api_gateway/api_gateway_stack.py,sha256=l6J5uurBQqbhj9JuvQitV9PiIHS5kqa-dFWifCeA3GM,39347
|
|
88
88
|
cdk_factory/stack_library/auto_scaling/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
89
|
-
cdk_factory/stack_library/auto_scaling/auto_scaling_stack.py,sha256=
|
|
89
|
+
cdk_factory/stack_library/auto_scaling/auto_scaling_stack.py,sha256=5GeQDp0PNULaSI2FPEWLscbSZRK_QjRwk1cyaeD8STI,30787
|
|
90
90
|
cdk_factory/stack_library/aws_lambdas/lambda_stack.py,sha256=SFbBPvvCopbyiuYtq-O5sQkFCf94Wzua6aDUXiFDSB4,26161
|
|
91
91
|
cdk_factory/stack_library/buckets/README.md,sha256=XkK3UNVtRLE7NtUvbhCOBBYUYi8hlrrSaI1s3GJVrqI,78
|
|
92
92
|
cdk_factory/stack_library/buckets/bucket_stack.py,sha256=SLoZqSffAqmeBBEVUQg54D_8Ad5UKdkjEAmKAVgAqQo,1778
|
|
@@ -134,8 +134,8 @@ cdk_factory/utilities/lambda_function_utilities.py,sha256=S1GvBsY_q2cyUiaud3HORJ
|
|
|
134
134
|
cdk_factory/utilities/os_execute.py,sha256=5Op0LY_8Y-pUm04y1k8MTpNrmQvcLmQHPQITEP7EuSU,1019
|
|
135
135
|
cdk_factory/utils/api_gateway_utilities.py,sha256=If7Xu5s_UxmuV-kL3JkXxPLBdSVUKoLtohm0IUFoiV8,4378
|
|
136
136
|
cdk_factory/workload/workload_factory.py,sha256=yDI3cRhVI5ELNDcJPLpk9UY54Uind1xQoV3spzT4z7E,6068
|
|
137
|
-
cdk_factory-0.16.
|
|
138
|
-
cdk_factory-0.16.
|
|
139
|
-
cdk_factory-0.16.
|
|
140
|
-
cdk_factory-0.16.
|
|
141
|
-
cdk_factory-0.16.
|
|
137
|
+
cdk_factory-0.16.11.dist-info/METADATA,sha256=Z14DgOnRweXe38PJbLFn1ZdMUOl13d3nbqRSGyMyQU8,2452
|
|
138
|
+
cdk_factory-0.16.11.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
139
|
+
cdk_factory-0.16.11.dist-info/entry_points.txt,sha256=S1DPe0ORcdiwEALMN_WIo3UQrW_g4YdQCLEsc_b0Swg,53
|
|
140
|
+
cdk_factory-0.16.11.dist-info/licenses/LICENSE,sha256=NOtdOeLwg2il_XBJdXUPFPX8JlV4dqTdDGAd2-khxT8,1066
|
|
141
|
+
cdk_factory-0.16.11.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|