|
3 | 3 | import logging
|
4 | 4 | from collections import defaultdict
|
5 | 5 | from datetime import UTC, datetime
|
6 |
| -from typing import Any |
7 | 6 |
|
8 | 7 | from localstack import config
|
9 | 8 | from localstack.aws.api import RequestContext, handler
|
@@ -426,17 +425,7 @@ def create_change_set(
|
426 | 425 | # is needed for the update graph building, or only looked up in downstream tasks (metadata).
|
427 | 426 | request_parameters = request.get("Parameters", list())
|
428 | 427 | # TODO: handle parameter defaults and resolution
|
429 |
| - after_parameters = {} |
430 |
| - for parameter in request_parameters: |
431 |
| - key = parameter["ParameterKey"] |
432 |
| - if parameter.get("UsePreviousValue", False): |
433 |
| - # todo: what if the parameter does not exist in the before parameters |
434 |
| - after_parameters[key] = before_parameters[key] |
435 |
| - continue |
436 |
| - |
437 |
| - if "ParameterValue" in parameter: |
438 |
| - after_parameters[key] = parameter["ParameterValue"] |
439 |
| - continue |
| 428 | + after_parameters = self._extract_after_parameters(request_parameters, before_parameters) |
440 | 429 |
|
441 | 430 | # TODO: update this logic to always pass the clean template object if one exists. The
|
442 | 431 | # current issue with relaying on stack.template_original is that this appears to have
|
@@ -720,10 +709,7 @@ def create_stack(self, context: RequestContext, request: CreateStackInput) -> Cr
|
720 | 709 | # is needed for the update graph building, or only looked up in downstream tasks (metadata).
|
721 | 710 | request_parameters = request.get("Parameters", list())
|
722 | 711 | # TODO: handle parameter defaults and resolution
|
723 |
| - after_parameters: dict[str, Any] = { |
724 |
| - parameter["ParameterKey"]: parameter["ParameterValue"] |
725 |
| - for parameter in request_parameters |
726 |
| - } |
| 712 | + after_parameters = self._extract_after_parameters(request_parameters) |
727 | 713 | after_template = structured_template
|
728 | 714 |
|
729 | 715 | # Create internal change set to execute
|
@@ -1344,10 +1330,8 @@ def update_stack(
|
1344 | 1330 | # is needed for the update graph building, or only looked up in downstream tasks (metadata).
|
1345 | 1331 | request_parameters = request.get("Parameters", list())
|
1346 | 1332 | # TODO: handle parameter defaults and resolution
|
1347 |
| - after_parameters: dict[str, Any] = { |
1348 |
| - parameter["ParameterKey"]: parameter["ParameterValue"] |
1349 |
| - for parameter in request_parameters |
1350 |
| - } |
| 1333 | + after_parameters = self._extract_after_parameters(request_parameters, before_parameters) |
| 1334 | + |
1351 | 1335 | before_template = stack.template
|
1352 | 1336 | after_template = structured_template
|
1353 | 1337 |
|
@@ -1405,9 +1389,26 @@ def _run(*args):
|
1405 | 1389 |
|
1406 | 1390 | start_worker_thread(_run)
|
1407 | 1391 |
|
1408 |
| - # TODO: stack id |
1409 | 1392 | return UpdateStackOutput(StackId=stack.stack_id)
|
1410 | 1393 |
|
| 1394 | + @staticmethod |
| 1395 | + def _extract_after_parameters( |
| 1396 | + request_parameters, before_parameters: dict[str, str] | None = None |
| 1397 | + ) -> dict[str, str]: |
| 1398 | + before_parameters = before_parameters or {} |
| 1399 | + after_parameters = {} |
| 1400 | + for parameter in request_parameters: |
| 1401 | + key = parameter["ParameterKey"] |
| 1402 | + if parameter.get("UsePreviousValue", False): |
| 1403 | + # todo: what if the parameter does not exist in the before parameters |
| 1404 | + after_parameters[key] = before_parameters[key] |
| 1405 | + continue |
| 1406 | + |
| 1407 | + if "ParameterValue" in parameter: |
| 1408 | + after_parameters[key] = parameter["ParameterValue"] |
| 1409 | + continue |
| 1410 | + return after_parameters |
| 1411 | + |
1411 | 1412 | @handler("DeleteStack")
|
1412 | 1413 | def delete_stack(
|
1413 | 1414 | self,
|
|
0 commit comments