cdk-factory 0.16.7__py3-none-any.whl → 0.16.10__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 +71 -56
- cdk_factory/version.py +1 -1
- {cdk_factory-0.16.7.dist-info → cdk_factory-0.16.10.dist-info}/METADATA +1 -1
- {cdk_factory-0.16.7.dist-info → cdk_factory-0.16.10.dist-info}/RECORD +8 -8
- {cdk_factory-0.16.7.dist-info → cdk_factory-0.16.10.dist-info}/WHEEL +0 -0
- {cdk_factory-0.16.7.dist-info → cdk_factory-0.16.10.dist-info}/entry_points.txt +0 -0
- {cdk_factory-0.16.7.dist-info → cdk_factory-0.16.10.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,9 +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
59
|
|
|
55
60
|
# SSM imports storage is now handled by the enhanced SsmParameterMixin via IStack
|
|
61
|
+
# VPC caching is now handled by VPCProviderMixin
|
|
56
62
|
|
|
57
63
|
def build(
|
|
58
64
|
self,
|
|
@@ -91,12 +97,13 @@ class AutoScalingStack(IStack):
|
|
|
91
97
|
# Create user data
|
|
92
98
|
self.user_data = self._create_user_data()
|
|
93
99
|
|
|
94
|
-
# Create launch template
|
|
95
|
-
self.launch_template = self._create_launch_template(asg_name)
|
|
96
|
-
|
|
97
100
|
# Create ECS cluster if ECS configuration is detected
|
|
101
|
+
# This must happen before launch template creation so user data can be updated
|
|
98
102
|
self._create_ecs_cluster_if_needed(asg_name)
|
|
99
103
|
|
|
104
|
+
# Create launch template
|
|
105
|
+
self.launch_template = self._create_launch_template(asg_name)
|
|
106
|
+
|
|
100
107
|
# Create Auto Scaling Group
|
|
101
108
|
self.auto_scaling_group = self._create_auto_scaling_group(asg_name)
|
|
102
109
|
|
|
@@ -111,50 +118,16 @@ class AutoScalingStack(IStack):
|
|
|
111
118
|
|
|
112
119
|
@property
|
|
113
120
|
def vpc(self) -> ec2.IVpc:
|
|
114
|
-
"""Get the VPC for the Auto Scaling Group using
|
|
121
|
+
"""Get the VPC for the Auto Scaling Group using VPCProviderMixin"""
|
|
115
122
|
if not self.asg_config:
|
|
116
123
|
raise AttributeError("AutoScalingStack not properly initialized. Call build() first.")
|
|
117
124
|
|
|
118
|
-
#
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
if self.has_ssm_import("subnet_ids"):
|
|
125
|
-
imported_subnets = self.get_ssm_imported_value("subnet_ids", [])
|
|
126
|
-
if isinstance(imported_subnets, str):
|
|
127
|
-
# Split comma-separated subnet IDs
|
|
128
|
-
subnet_ids = [s.strip() for s in imported_subnets.split(",") if s.strip()]
|
|
129
|
-
elif isinstance(imported_subnets, list):
|
|
130
|
-
subnet_ids = imported_subnets
|
|
131
|
-
|
|
132
|
-
# Build VPC attributes with matching AZ count
|
|
133
|
-
vpc_attrs = {
|
|
134
|
-
"vpc_id": vpc_id,
|
|
135
|
-
"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"],
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
# Use the actual subnet IDs from SSM
|
|
139
|
-
if subnet_ids:
|
|
140
|
-
vpc_attrs["public_subnet_ids"] = subnet_ids
|
|
141
|
-
else:
|
|
142
|
-
# Fallback to dummy subnets if no valid subnet IDs
|
|
143
|
-
vpc_attrs["public_subnet_ids"] = ["subnet-dummy1", "subnet-dummy2"]
|
|
144
|
-
|
|
145
|
-
# Use from_vpc_attributes() for SSM tokens
|
|
146
|
-
return ec2.Vpc.from_vpc_attributes(self, "VPC", **vpc_attrs)
|
|
147
|
-
elif self.asg_config.vpc_id:
|
|
148
|
-
return ec2.Vpc.from_lookup(self, "VPC", vpc_id=self.asg_config.vpc_id)
|
|
149
|
-
elif self.workload.vpc_id:
|
|
150
|
-
return ec2.Vpc.from_lookup(self, "VPC", vpc_id=self.workload.vpc_id)
|
|
151
|
-
else:
|
|
152
|
-
# Use default VPC if not provided
|
|
153
|
-
raise ValueError(
|
|
154
|
-
"VPC is not defined in the configuration. "
|
|
155
|
-
"You can provide it a the auto_scaling.vpc_id in the configuration "
|
|
156
|
-
"or a top level workload.vpc_id in the workload configuration."
|
|
157
|
-
)
|
|
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
|
+
)
|
|
158
131
|
|
|
159
132
|
def _get_target_group_arns(self) -> List[str]:
|
|
160
133
|
"""Get target group ARNs from SSM imports using enhanced SsmParameterMixin"""
|
|
@@ -269,12 +242,16 @@ class AutoScalingStack(IStack):
|
|
|
269
242
|
"""Create user data for EC2 instances"""
|
|
270
243
|
user_data = ec2.UserData.for_linux()
|
|
271
244
|
|
|
245
|
+
# Store raw commands for ECS cluster detection
|
|
246
|
+
self.user_data_commands = ["set -euxo pipefail"]
|
|
247
|
+
|
|
272
248
|
# Add base commands
|
|
273
249
|
user_data.add_commands("set -euxo pipefail")
|
|
274
250
|
|
|
275
251
|
# Add custom commands from config
|
|
276
252
|
for command in self.asg_config.user_data_commands:
|
|
277
253
|
user_data.add_commands(command)
|
|
254
|
+
self.user_data_commands.append(command)
|
|
278
255
|
|
|
279
256
|
# Add user data scripts from files (with variable substitution)
|
|
280
257
|
if self.asg_config.user_data_scripts:
|
|
@@ -614,8 +591,6 @@ class AutoScalingStack(IStack):
|
|
|
614
591
|
"""Create ECS cluster if ECS configuration is detected"""
|
|
615
592
|
# Check if this is an ECS configuration by looking for ECS-related patterns
|
|
616
593
|
is_ecs_config = (
|
|
617
|
-
# Check if ECS cluster name is in user data
|
|
618
|
-
(self.user_data and "ECS_CLUSTER=" in str(self.user_data)) or
|
|
619
594
|
# Check if ECS managed policy is attached
|
|
620
595
|
any("AmazonEC2ContainerServiceforEC2Role" in policy for policy in self.asg_config.managed_policies) or
|
|
621
596
|
# Check for explicit ECS configuration
|
|
@@ -626,17 +601,9 @@ class AutoScalingStack(IStack):
|
|
|
626
601
|
logger.debug("No ECS configuration detected, skipping cluster creation")
|
|
627
602
|
return
|
|
628
603
|
|
|
629
|
-
#
|
|
604
|
+
# Generate cluster name from stack configuration
|
|
630
605
|
cluster_name = f"{self.deployment.build_resource_name('cluster')}"
|
|
631
606
|
|
|
632
|
-
# Try to extract cluster name from user data if available
|
|
633
|
-
if self.user_data:
|
|
634
|
-
user_data_str = str(self.user_data)
|
|
635
|
-
for line in user_data_str.split('\n'):
|
|
636
|
-
if 'ECS_CLUSTER=' in line:
|
|
637
|
-
cluster_name = line.split('ECS_CLUSTER=')[1].strip()
|
|
638
|
-
break
|
|
639
|
-
|
|
640
607
|
logger.info(f"Creating ECS cluster: {cluster_name}")
|
|
641
608
|
|
|
642
609
|
# Create ECS cluster
|
|
@@ -648,6 +615,10 @@ class AutoScalingStack(IStack):
|
|
|
648
615
|
container_insights=True
|
|
649
616
|
)
|
|
650
617
|
|
|
618
|
+
# Inject the cluster name into user data if user data exists
|
|
619
|
+
if self.user_data and self.user_data_commands:
|
|
620
|
+
self._inject_cluster_name_into_user_data(cluster_name)
|
|
621
|
+
|
|
651
622
|
# Export cluster name
|
|
652
623
|
cdk.CfnOutput(
|
|
653
624
|
self,
|
|
@@ -664,6 +635,50 @@ class AutoScalingStack(IStack):
|
|
|
664
635
|
export_name=f"{self.deployment.build_resource_name(cluster_name)}-arn",
|
|
665
636
|
)
|
|
666
637
|
|
|
638
|
+
def _inject_cluster_name_into_user_data(self, cluster_name: str) -> None:
|
|
639
|
+
"""Inject the ECS cluster name into user data commands"""
|
|
640
|
+
injected_commands = []
|
|
641
|
+
cluster_name_injected = False
|
|
642
|
+
|
|
643
|
+
for command in self.user_data_commands:
|
|
644
|
+
# If this command already sets ECS_CLUSTER, replace it
|
|
645
|
+
if 'ECS_CLUSTER=' in command:
|
|
646
|
+
# Replace existing ECS_CLUSTER setting with our cluster name
|
|
647
|
+
parts = command.split('ECS_CLUSTER=')
|
|
648
|
+
if len(parts) > 1:
|
|
649
|
+
# Keep everything before ECS_CLUSTER=, add our cluster name, then add the rest
|
|
650
|
+
before = parts[0]
|
|
651
|
+
after_parts = parts[1].split(None, 1) # Split on first whitespace
|
|
652
|
+
after = after_parts[1] if len(after_parts) > 1 else ''
|
|
653
|
+
new_command = f"{before}ECS_CLUSTER={cluster_name} {after}".strip()
|
|
654
|
+
injected_commands.append(new_command)
|
|
655
|
+
cluster_name_injected = True
|
|
656
|
+
else:
|
|
657
|
+
injected_commands.append(f"{command}ECS_CLUSTER={cluster_name}")
|
|
658
|
+
cluster_name_injected = True
|
|
659
|
+
else:
|
|
660
|
+
injected_commands.append(command)
|
|
661
|
+
|
|
662
|
+
# If no ECS_CLUSTER was found in existing commands, add it
|
|
663
|
+
if not cluster_name_injected:
|
|
664
|
+
injected_commands.append(f"echo ECS_CLUSTER={cluster_name} >> /etc/ecs/ecs.config")
|
|
665
|
+
|
|
666
|
+
# Update the user data with the injected commands
|
|
667
|
+
self.user_data_commands = injected_commands
|
|
668
|
+
|
|
669
|
+
# If user data object exists, we need to recreate it with the updated commands
|
|
670
|
+
if hasattr(self, 'user_data') and self.user_data:
|
|
671
|
+
self.user_data = self._recreate_user_data_with_commands(injected_commands)
|
|
672
|
+
|
|
673
|
+
def _recreate_user_data_with_commands(self, commands: List[str]) -> ec2.UserData:
|
|
674
|
+
"""Recreate user data with updated commands"""
|
|
675
|
+
user_data = ec2.UserData.for_linux()
|
|
676
|
+
|
|
677
|
+
for command in commands:
|
|
678
|
+
user_data.add_commands(command)
|
|
679
|
+
|
|
680
|
+
return user_data
|
|
681
|
+
|
|
667
682
|
def _export_resources(self, asg_name: str) -> None:
|
|
668
683
|
"""Export stack resources to SSM and CloudFormation outputs"""
|
|
669
684
|
# Export ASG name
|
cdk_factory/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "0.16.
|
|
1
|
+
__version__ = "0.16.10"
|
|
@@ -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=NknKyizQ35lXpGfEv9yE_DF67rv9Zh7Bl_r8O0gDezg,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=B1pzkdYj__ZrUo1ZytKt_DPMTePjAF4ixOylrIg6mTA,29042
|
|
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.10.dist-info/METADATA,sha256=usURSWXfZdPgEms-jeLvWUxripGPPYWZQRWPBAVBkdw,2452
|
|
138
|
+
cdk_factory-0.16.10.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
139
|
+
cdk_factory-0.16.10.dist-info/entry_points.txt,sha256=S1DPe0ORcdiwEALMN_WIo3UQrW_g4YdQCLEsc_b0Swg,53
|
|
140
|
+
cdk_factory-0.16.10.dist-info/licenses/LICENSE,sha256=NOtdOeLwg2il_XBJdXUPFPX8JlV4dqTdDGAd2-khxT8,1066
|
|
141
|
+
cdk_factory-0.16.10.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|