|
| 1 | +import re |
| 2 | +from easyecs.model.ecs import EcsFileSecretModelV2 |
| 3 | + |
| 4 | + |
1 | 5 | def create_task_definition(
|
2 | 6 | stack, service_name, task_role, execution_role, log_group, ecs_data, run=False
|
3 | 7 | ):
|
@@ -116,11 +120,15 @@ def extract_container_config(stack, container_definition, log_configuration, run
|
116 | 120 | if tty and not run:
|
117 | 121 | command = ["sleep", "infinity"]
|
118 | 122 |
|
119 |
| - environment = { |
120 |
| - env_definition.name: env_definition.value |
121 |
| - for env_definition in container_definition.env |
122 |
| - if env_definition.active |
123 |
| - } |
| 123 | + environment = {} |
| 124 | + if isinstance(container_definition.env, List): |
| 125 | + environment = { |
| 126 | + env_definition.name: env_definition.value |
| 127 | + for env_definition in container_definition.env |
| 128 | + if env_definition.active |
| 129 | + } |
| 130 | + elif isinstance(container_definition.env, Dict): |
| 131 | + environment = container_definition.env |
124 | 132 |
|
125 | 133 | secrets = extract_secrets(stack, container_definition.secrets, name)
|
126 | 134 |
|
@@ -157,12 +165,27 @@ def extract_secrets(stack, secret_definitions, container_name):
|
157 | 165 | """Extract container secrets from its definition."""
|
158 | 166 | secrets = {}
|
159 | 167 | for secret_definition in secret_definitions:
|
160 |
| - secret_name = secret_definition.name |
161 |
| - secret = Secret.from_secret_complete_arn( |
162 |
| - stack, f"{secret_name}_{container_name}", secret_definition.arn |
163 |
| - ) |
164 |
| - ecs_secret = ECSSecret.from_secrets_manager(secret, secret_definition.field) |
165 |
| - secrets[secret_name] = ecs_secret |
| 168 | + if isinstance(secret_definition, EcsFileSecretModel): |
| 169 | + secret_name = secret_definition.name |
| 170 | + secret = Secret.from_secret_complete_arn( |
| 171 | + stack, f"{secret_name}_{container_name}", secret_definition.arn |
| 172 | + ) |
| 173 | + ecs_secret = ECSSecret.from_secrets_manager(secret, secret_definition.field) |
| 174 | + secrets[secret_name] = ecs_secret |
| 175 | + elif isinstance(secret_definition, EcsFileSecretModelV2): |
| 176 | + arn_fields = dict(re.finditer(r"^arn:aws:secretsmanager:(?P<region_name>[a-z0-9-]+):(?P<account_id>\d{12}):secret:(?P<secret_name>[^:]+)(?::(?P<field>[^:]*))?(?::([^:]*))?(?::([^:]*))?$", secret_definition.valueFrom)) |
| 177 | + if not arn_fields: |
| 178 | + raise ValueError(f"Invalid ARN format: {secret_definition.valueFrom}") |
| 179 | + field = arn_fields[0].group_dict()["field"] |
| 180 | + import pdb; pdb.set_trace() |
| 181 | + secret_name = secret_definition.name |
| 182 | + secret = Secret.from_secret_complete_arn( |
| 183 | + stack, f"{secret_name}_{container_name}", secret_definition.valueFrom |
| 184 | + ) |
| 185 | + ecs_secret = ECSSecret.from_secrets_manager(secret) |
| 186 | + secrets[secret_name] = ecs_secret |
| 187 | + else: |
| 188 | + raise Exception("Unsupported secret type") |
166 | 189 | return secrets
|
167 | 190 |
|
168 | 191 |
|
|
0 commit comments