localstack-core 4.7.1.dev77__py3-none-any.whl → 4.7.1.dev81__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 localstack-core might be problematic. Click here for more details.
- localstack/services/cloudformation/engine/v2/change_set_model.py +45 -2
- localstack/services/cloudformation/engine/v2/change_set_model_executor.py +73 -19
- localstack/services/cloudformation/engine/v2/change_set_model_preproc.py +16 -5
- localstack/services/cloudformation/engine/v2/change_set_model_transform.py +10 -1
- localstack/services/cloudformation/engine/v2/change_set_model_validator.py +9 -0
- localstack/services/cloudformation/v2/entities.py +4 -3
- localstack/services/cloudformation/v2/provider.py +24 -18
- localstack/services/cloudformation/v2/types.py +4 -3
- localstack/testing/pytest/cloudformation/transformers.py +0 -0
- localstack/version.py +2 -2
- {localstack_core-4.7.1.dev77.dist-info → localstack_core-4.7.1.dev81.dist-info}/METADATA +1 -1
- {localstack_core-4.7.1.dev77.dist-info → localstack_core-4.7.1.dev81.dist-info}/RECORD +20 -19
- localstack_core-4.7.1.dev81.dist-info/plux.json +1 -0
- localstack_core-4.7.1.dev77.dist-info/plux.json +0 -1
- {localstack_core-4.7.1.dev77.data → localstack_core-4.7.1.dev81.data}/scripts/localstack +0 -0
- {localstack_core-4.7.1.dev77.data → localstack_core-4.7.1.dev81.data}/scripts/localstack-supervisor +0 -0
- {localstack_core-4.7.1.dev77.data → localstack_core-4.7.1.dev81.data}/scripts/localstack.bat +0 -0
- {localstack_core-4.7.1.dev77.dist-info → localstack_core-4.7.1.dev81.dist-info}/WHEEL +0 -0
- {localstack_core-4.7.1.dev77.dist-info → localstack_core-4.7.1.dev81.dist-info}/entry_points.txt +0 -0
- {localstack_core-4.7.1.dev77.dist-info → localstack_core-4.7.1.dev81.dist-info}/licenses/LICENSE.txt +0 -0
- {localstack_core-4.7.1.dev77.dist-info → localstack_core-4.7.1.dev81.dist-info}/top_level.txt +0 -0
|
@@ -372,17 +372,20 @@ class NodeTransform(ChangeSetNode):
|
|
|
372
372
|
class NodeResources(ChangeSetNode):
|
|
373
373
|
resources: Final[list[NodeResource]]
|
|
374
374
|
fn_transform: Final[Maybe[NodeIntrinsicFunctionFnTransform]]
|
|
375
|
+
fn_foreaches: Final[list[NodeForEach]]
|
|
375
376
|
|
|
376
377
|
def __init__(
|
|
377
378
|
self,
|
|
378
379
|
scope: Scope,
|
|
379
380
|
resources: list[NodeResource],
|
|
380
381
|
fn_transform: Maybe[NodeIntrinsicFunctionFnTransform],
|
|
382
|
+
fn_foreaches: list[NodeForEach],
|
|
381
383
|
):
|
|
382
|
-
change_type = parent_change_type_of(resources)
|
|
384
|
+
change_type = parent_change_type_of(resources + [fn_transform] + fn_foreaches)
|
|
383
385
|
super().__init__(scope=scope, change_type=change_type)
|
|
384
386
|
self.resources = resources
|
|
385
387
|
self.fn_transform = fn_transform
|
|
388
|
+
self.fn_foreaches = fn_foreaches
|
|
386
389
|
|
|
387
390
|
|
|
388
391
|
class NodeResource(ChangeSetNode):
|
|
@@ -492,6 +495,20 @@ class NodeIntrinsicFunctionFnTransform(NodeIntrinsicFunction):
|
|
|
492
495
|
self.after_siblings = after_siblings
|
|
493
496
|
|
|
494
497
|
|
|
498
|
+
class NodeForEach(ChangeSetNode):
|
|
499
|
+
def __init__(
|
|
500
|
+
self,
|
|
501
|
+
scope: Scope,
|
|
502
|
+
change_type: Final[ChangeType],
|
|
503
|
+
arguments: Final[ChangeSetEntity],
|
|
504
|
+
):
|
|
505
|
+
super().__init__(
|
|
506
|
+
scope=scope,
|
|
507
|
+
change_type=change_type,
|
|
508
|
+
)
|
|
509
|
+
self.arguments = arguments
|
|
510
|
+
|
|
511
|
+
|
|
495
512
|
class NodeObject(ChangeSetNode):
|
|
496
513
|
bindings: Final[dict[str, ChangeSetEntity]]
|
|
497
514
|
|
|
@@ -709,6 +726,18 @@ class ChangeSetModel:
|
|
|
709
726
|
self._visited_scopes[scope] = node_intrinsic_function
|
|
710
727
|
return node_intrinsic_function
|
|
711
728
|
|
|
729
|
+
def _visit_foreach(
|
|
730
|
+
self, scope: Scope, before_arguments: Maybe[list], after_arguments: Maybe[list]
|
|
731
|
+
) -> NodeForEach:
|
|
732
|
+
node_foreach = self._visited_scopes.get(scope)
|
|
733
|
+
if isinstance(node_foreach, NodeForEach):
|
|
734
|
+
return node_foreach
|
|
735
|
+
arguments_scope = scope.open_scope("args")
|
|
736
|
+
arguments = self._visit_array(
|
|
737
|
+
arguments_scope, before_array=before_arguments, after_array=after_arguments
|
|
738
|
+
)
|
|
739
|
+
return NodeForEach(scope=scope, change_type=arguments.change_type, arguments=arguments)
|
|
740
|
+
|
|
712
741
|
def _resolve_intrinsic_function_fn_sub(self, arguments: ChangeSetEntity) -> ChangeType:
|
|
713
742
|
# TODO: This routine should instead export the implicit Ref and GetAtt calls within the first
|
|
714
743
|
# string template parameter and compute the respective change set types. Currently,
|
|
@@ -1165,6 +1194,7 @@ class ChangeSetModel:
|
|
|
1165
1194
|
resources: list[NodeResource] = []
|
|
1166
1195
|
resource_names = self._safe_keys_of(before_resources, after_resources)
|
|
1167
1196
|
fn_transform = Nothing
|
|
1197
|
+
fn_foreaches = []
|
|
1168
1198
|
for resource_name in resource_names:
|
|
1169
1199
|
resource_scope, (before_resource, after_resource) = self._safe_access_in(
|
|
1170
1200
|
scope, resource_name, before_resources, after_resources
|
|
@@ -1177,6 +1207,14 @@ class ChangeSetModel:
|
|
|
1177
1207
|
after_arguments=after_resource,
|
|
1178
1208
|
)
|
|
1179
1209
|
continue
|
|
1210
|
+
elif resource_name.startswith("Fn::ForEach"):
|
|
1211
|
+
fn_for_each = self._visit_foreach(
|
|
1212
|
+
scope=resource_scope,
|
|
1213
|
+
before_arguments=before_resource,
|
|
1214
|
+
after_arguments=after_resource,
|
|
1215
|
+
)
|
|
1216
|
+
fn_foreaches.append(fn_for_each)
|
|
1217
|
+
continue
|
|
1180
1218
|
resource = self._visit_resource(
|
|
1181
1219
|
scope=resource_scope,
|
|
1182
1220
|
resource_name=resource_name,
|
|
@@ -1184,7 +1222,12 @@ class ChangeSetModel:
|
|
|
1184
1222
|
after_resource=after_resource,
|
|
1185
1223
|
)
|
|
1186
1224
|
resources.append(resource)
|
|
1187
|
-
return NodeResources(
|
|
1225
|
+
return NodeResources(
|
|
1226
|
+
scope=scope,
|
|
1227
|
+
resources=resources,
|
|
1228
|
+
fn_transform=fn_transform,
|
|
1229
|
+
fn_foreaches=fn_foreaches,
|
|
1230
|
+
)
|
|
1188
1231
|
|
|
1189
1232
|
def _visit_mapping(
|
|
1190
1233
|
self, scope: Scope, name: str, before_mapping: Maybe[dict], after_mapping: Maybe[dict]
|
|
@@ -53,6 +53,7 @@ EventOperationFromAction = {"Add": "CREATE", "Modify": "UPDATE", "Remove": "DELE
|
|
|
53
53
|
class ChangeSetModelExecutorResult:
|
|
54
54
|
resources: dict[str, ResolvedResource]
|
|
55
55
|
outputs: list[Output]
|
|
56
|
+
failure_message: str | None = None
|
|
56
57
|
|
|
57
58
|
|
|
58
59
|
class DeferredAction(Protocol):
|
|
@@ -65,6 +66,16 @@ class Deferred:
|
|
|
65
66
|
action: DeferredAction
|
|
66
67
|
|
|
67
68
|
|
|
69
|
+
class TriggerRollback(Exception):
|
|
70
|
+
"""
|
|
71
|
+
Sentinel exception to signal that the deployment should be stopped for a reason
|
|
72
|
+
"""
|
|
73
|
+
|
|
74
|
+
def __init__(self, logical_resource_id: str, reason: str | None):
|
|
75
|
+
self.logical_resource_id = logical_resource_id
|
|
76
|
+
self.reason = reason
|
|
77
|
+
|
|
78
|
+
|
|
68
79
|
class ChangeSetModelExecutor(ChangeSetModelPreproc):
|
|
69
80
|
# TODO: add typing for resolved resources and parameters.
|
|
70
81
|
resources: Final[dict[str, ResolvedResource]]
|
|
@@ -83,10 +94,23 @@ class ChangeSetModelExecutor(ChangeSetModelPreproc):
|
|
|
83
94
|
|
|
84
95
|
def execute(self) -> ChangeSetModelExecutorResult:
|
|
85
96
|
# constructive process
|
|
86
|
-
|
|
97
|
+
failure_message = None
|
|
98
|
+
try:
|
|
99
|
+
self.process()
|
|
100
|
+
except TriggerRollback as e:
|
|
101
|
+
failure_message = e.reason
|
|
102
|
+
except Exception as e:
|
|
103
|
+
failure_message = str(e)
|
|
87
104
|
|
|
88
105
|
if self._deferred_actions:
|
|
89
|
-
|
|
106
|
+
if failure_message:
|
|
107
|
+
# TODO: differentiate between update and create
|
|
108
|
+
self._change_set.stack.set_stack_status(StackStatus.ROLLBACK_IN_PROGRESS)
|
|
109
|
+
else:
|
|
110
|
+
# TODO: correct status
|
|
111
|
+
self._change_set.stack.set_stack_status(
|
|
112
|
+
StackStatus.UPDATE_COMPLETE_CLEANUP_IN_PROGRESS
|
|
113
|
+
)
|
|
90
114
|
|
|
91
115
|
# perform all deferred actions such as deletions. These must happen in reverse from their
|
|
92
116
|
# defined order so that resource dependencies are honoured
|
|
@@ -95,9 +119,12 @@ class ChangeSetModelExecutor(ChangeSetModelPreproc):
|
|
|
95
119
|
LOG.debug("executing deferred action: '%s'", deferred.name)
|
|
96
120
|
deferred.action()
|
|
97
121
|
|
|
122
|
+
if failure_message:
|
|
123
|
+
# TODO: differentiate between update and create
|
|
124
|
+
self._change_set.stack.set_stack_status(StackStatus.ROLLBACK_COMPLETE)
|
|
125
|
+
|
|
98
126
|
return ChangeSetModelExecutorResult(
|
|
99
|
-
resources=self.resources,
|
|
100
|
-
outputs=self.outputs,
|
|
127
|
+
resources=self.resources, outputs=self.outputs, failure_message=failure_message
|
|
101
128
|
)
|
|
102
129
|
|
|
103
130
|
def _defer_action(self, name: str, action: DeferredAction):
|
|
@@ -137,9 +164,10 @@ class ChangeSetModelExecutor(ChangeSetModelPreproc):
|
|
|
137
164
|
else:
|
|
138
165
|
status = f"{status_from_action}_{event_status.name}"
|
|
139
166
|
|
|
167
|
+
physical_resource_id = self._get_physical_id(logical_resource_id, False)
|
|
140
168
|
self._change_set.stack.set_resource_status(
|
|
141
169
|
logical_resource_id=logical_resource_id,
|
|
142
|
-
physical_resource_id=
|
|
170
|
+
physical_resource_id=physical_resource_id,
|
|
143
171
|
resource_type=resource_type,
|
|
144
172
|
status=ResourceStatus(status),
|
|
145
173
|
resource_status_reason=reason,
|
|
@@ -219,10 +247,24 @@ class ChangeSetModelExecutor(ChangeSetModelPreproc):
|
|
|
219
247
|
# Update the latest version of this resource for downstream references.
|
|
220
248
|
if not is_nothing(after):
|
|
221
249
|
after_logical_id = after.logical_id
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
250
|
+
resource = self.resources[after_logical_id]
|
|
251
|
+
resource_failed_to_deploy = resource["ResourceStatus"] in {
|
|
252
|
+
ResourceStatus.CREATE_FAILED,
|
|
253
|
+
ResourceStatus.UPDATE_FAILED,
|
|
254
|
+
}
|
|
255
|
+
if not resource_failed_to_deploy:
|
|
256
|
+
after_physical_id: str = self._after_resource_physical_id(
|
|
257
|
+
resource_logical_id=after_logical_id
|
|
258
|
+
)
|
|
259
|
+
after.physical_resource_id = after_physical_id
|
|
260
|
+
after.status = resource["ResourceStatus"]
|
|
261
|
+
|
|
262
|
+
# terminate the deployment process
|
|
263
|
+
if resource_failed_to_deploy:
|
|
264
|
+
raise TriggerRollback(
|
|
265
|
+
logical_resource_id=after_logical_id,
|
|
266
|
+
reason=resource.get("ResourceStatusReason"),
|
|
267
|
+
)
|
|
226
268
|
return delta
|
|
227
269
|
|
|
228
270
|
def visit_node_output(
|
|
@@ -291,6 +333,7 @@ class ChangeSetModelExecutor(ChangeSetModelPreproc):
|
|
|
291
333
|
resource_type=before.resource_type,
|
|
292
334
|
before_properties=before_properties,
|
|
293
335
|
after_properties=None,
|
|
336
|
+
part_of_replacement=True,
|
|
294
337
|
)
|
|
295
338
|
self._process_event(
|
|
296
339
|
action=ChangeAction.Remove,
|
|
@@ -425,6 +468,7 @@ class ChangeSetModelExecutor(ChangeSetModelPreproc):
|
|
|
425
468
|
resource_type: str,
|
|
426
469
|
before_properties: PreprocProperties | None,
|
|
427
470
|
after_properties: PreprocProperties | None,
|
|
471
|
+
part_of_replacement: bool = False,
|
|
428
472
|
) -> ProgressEvent:
|
|
429
473
|
LOG.debug("Executing resource action: %s for resource '%s'", action, logical_resource_id)
|
|
430
474
|
payload = self.create_resource_provider_payload(
|
|
@@ -481,6 +525,19 @@ class ChangeSetModelExecutor(ChangeSetModelPreproc):
|
|
|
481
525
|
message=f"Resource type {resource_type} not supported",
|
|
482
526
|
)
|
|
483
527
|
|
|
528
|
+
if part_of_replacement and action == ChangeAction.Remove:
|
|
529
|
+
# Early return as we don't want to update internal state of the executor if this is a
|
|
530
|
+
# cleanup of an old resource. The new resource has already been created and the state
|
|
531
|
+
# updated
|
|
532
|
+
return event
|
|
533
|
+
|
|
534
|
+
status_from_action = EventOperationFromAction[action.value]
|
|
535
|
+
resolved_resource = ResolvedResource(
|
|
536
|
+
Properties=event.resource_model,
|
|
537
|
+
LogicalResourceId=logical_resource_id,
|
|
538
|
+
Type=resource_type,
|
|
539
|
+
LastUpdatedTimestamp=datetime.now(UTC),
|
|
540
|
+
)
|
|
484
541
|
match event.status:
|
|
485
542
|
case OperationStatus.SUCCESS:
|
|
486
543
|
# merge the resources state with the external state
|
|
@@ -495,33 +552,30 @@ class ChangeSetModelExecutor(ChangeSetModelPreproc):
|
|
|
495
552
|
|
|
496
553
|
# Don't update the resolved resources if we have deleted that resource
|
|
497
554
|
if action != ChangeAction.Remove:
|
|
498
|
-
status_from_action = EventOperationFromAction[action.value]
|
|
499
555
|
physical_resource_id = (
|
|
500
556
|
extra_resource_properties["PhysicalResourceId"]
|
|
501
557
|
if resource_provider
|
|
502
558
|
else MOCKED_REFERENCE
|
|
503
559
|
)
|
|
504
|
-
resolved_resource =
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
Type=resource_type,
|
|
508
|
-
LastUpdatedTimestamp=datetime.now(UTC),
|
|
509
|
-
ResourceStatus=ResourceStatus(f"{status_from_action}_COMPLETE"),
|
|
510
|
-
PhysicalResourceId=physical_resource_id,
|
|
560
|
+
resolved_resource["PhysicalResourceId"] = physical_resource_id
|
|
561
|
+
resolved_resource["ResourceStatus"] = ResourceStatus(
|
|
562
|
+
f"{status_from_action}_COMPLETE"
|
|
511
563
|
)
|
|
512
564
|
# TODO: do we actually need this line?
|
|
513
565
|
resolved_resource.update(extra_resource_properties)
|
|
514
566
|
|
|
515
|
-
self.resources[logical_resource_id] = resolved_resource
|
|
516
|
-
|
|
517
567
|
case OperationStatus.FAILED:
|
|
518
568
|
reason = event.message
|
|
519
569
|
LOG.warning(
|
|
520
570
|
"Resource provider operation failed: '%s'",
|
|
521
571
|
reason,
|
|
522
572
|
)
|
|
573
|
+
resolved_resource["ResourceStatus"] = ResourceStatus(f"{status_from_action}_FAILED")
|
|
574
|
+
resolved_resource["ResourceStatusReason"] = reason
|
|
523
575
|
case other:
|
|
524
576
|
raise NotImplementedError(f"Event status '{other}' not handled")
|
|
577
|
+
|
|
578
|
+
self.resources[logical_resource_id] = resolved_resource
|
|
525
579
|
return event
|
|
526
580
|
|
|
527
581
|
def create_resource_provider_payload(
|
|
@@ -9,6 +9,7 @@ from typing import Any, Final, Generic, TypeVar
|
|
|
9
9
|
from botocore.exceptions import ClientError
|
|
10
10
|
|
|
11
11
|
from localstack import config
|
|
12
|
+
from localstack.aws.api.cloudformation import ResourceStatus
|
|
12
13
|
from localstack.aws.api.ec2 import AvailabilityZoneList, DescribeAvailabilityZonesResult
|
|
13
14
|
from localstack.aws.connect import connect_to
|
|
14
15
|
from localstack.services.cloudformation.engine.v2.change_set_model import (
|
|
@@ -52,6 +53,7 @@ from localstack.services.cloudformation.stores import (
|
|
|
52
53
|
exports_map,
|
|
53
54
|
)
|
|
54
55
|
from localstack.services.cloudformation.v2.entities import ChangeSet
|
|
56
|
+
from localstack.services.cloudformation.v2.types import ResolvedResource
|
|
55
57
|
from localstack.utils.aws.arns import get_partition
|
|
56
58
|
from localstack.utils.objects import get_value_from_path
|
|
57
59
|
from localstack.utils.run import to_str
|
|
@@ -113,6 +115,7 @@ class PreprocResource:
|
|
|
113
115
|
properties: PreprocProperties
|
|
114
116
|
depends_on: list[str] | None
|
|
115
117
|
requires_replacement: bool
|
|
118
|
+
status: ResourceStatus | None
|
|
116
119
|
|
|
117
120
|
def __init__(
|
|
118
121
|
self,
|
|
@@ -123,6 +126,7 @@ class PreprocResource:
|
|
|
123
126
|
properties: PreprocProperties,
|
|
124
127
|
depends_on: list[str] | None,
|
|
125
128
|
requires_replacement: bool,
|
|
129
|
+
status: ResourceStatus | None = None,
|
|
126
130
|
):
|
|
127
131
|
self.logical_id = logical_id
|
|
128
132
|
self.physical_resource_id = physical_resource_id
|
|
@@ -131,6 +135,7 @@ class PreprocResource:
|
|
|
131
135
|
self.properties = properties
|
|
132
136
|
self.depends_on = depends_on
|
|
133
137
|
self.requires_replacement = requires_replacement
|
|
138
|
+
self.status = status
|
|
134
139
|
|
|
135
140
|
@staticmethod
|
|
136
141
|
def _compare_conditions(c1: bool, c2: bool):
|
|
@@ -486,9 +491,9 @@ class ChangeSetModelPreproc(ChangeSetModelVisitor):
|
|
|
486
491
|
delta: PreprocEntityDelta = self.visit(change_set_entity=change_set_entity)
|
|
487
492
|
delta_before = delta.before
|
|
488
493
|
delta_after = delta.after
|
|
489
|
-
if not is_nothing(before) and not is_nothing(delta_before)
|
|
494
|
+
if not is_nothing(before) and not is_nothing(delta_before):
|
|
490
495
|
before[name] = delta_before
|
|
491
|
-
if not is_nothing(after) and not is_nothing(delta_after)
|
|
496
|
+
if not is_nothing(after) and not is_nothing(delta_after):
|
|
492
497
|
after[name] = delta_after
|
|
493
498
|
return PreprocEntityDelta(before=before, after=after)
|
|
494
499
|
|
|
@@ -946,11 +951,17 @@ class ChangeSetModelPreproc(ChangeSetModelVisitor):
|
|
|
946
951
|
return delta
|
|
947
952
|
|
|
948
953
|
def _resource_physical_resource_id_from(
|
|
949
|
-
self, logical_resource_id: str, resolved_resources: dict
|
|
950
|
-
) -> str:
|
|
954
|
+
self, logical_resource_id: str, resolved_resources: dict[str, ResolvedResource]
|
|
955
|
+
) -> str | None:
|
|
951
956
|
# TODO: typing around resolved resources is needed and should be reflected here.
|
|
952
957
|
resolved_resource = resolved_resources.get(logical_resource_id, {})
|
|
953
|
-
|
|
958
|
+
if resolved_resource.get("ResourceStatus") not in {
|
|
959
|
+
ResourceStatus.CREATE_COMPLETE,
|
|
960
|
+
ResourceStatus.UPDATE_COMPLETE,
|
|
961
|
+
}:
|
|
962
|
+
return None
|
|
963
|
+
|
|
964
|
+
physical_resource_id = resolved_resource.get("PhysicalResourceId")
|
|
954
965
|
if not isinstance(physical_resource_id, str):
|
|
955
966
|
raise RuntimeError(f"No PhysicalResourceId found for resource '{logical_resource_id}'")
|
|
956
967
|
return physical_resource_id
|
|
@@ -23,6 +23,7 @@ from localstack.services.cloudformation.engine.v2.change_set_model import (
|
|
|
23
23
|
ChangeType,
|
|
24
24
|
FnTransform,
|
|
25
25
|
Maybe,
|
|
26
|
+
NodeForEach,
|
|
26
27
|
NodeGlobalTransform,
|
|
27
28
|
NodeIntrinsicFunction,
|
|
28
29
|
NodeIntrinsicFunctionFnTransform,
|
|
@@ -356,6 +357,9 @@ class ChangeSetModelTransform(ChangeSetModelPreproc):
|
|
|
356
357
|
|
|
357
358
|
return result_template
|
|
358
359
|
|
|
360
|
+
def visit_node_for_each(self, node_foreach: NodeForEach) -> PreprocEntityDelta:
|
|
361
|
+
return PreprocEntityDelta()
|
|
362
|
+
|
|
359
363
|
def visit_node_intrinsic_function_fn_transform(
|
|
360
364
|
self, node_intrinsic_function: NodeIntrinsicFunctionFnTransform
|
|
361
365
|
) -> PreprocEntityDelta:
|
|
@@ -411,7 +415,12 @@ class ChangeSetModelTransform(ChangeSetModelPreproc):
|
|
|
411
415
|
node_intrinsic_function=node_resource.fn_transform
|
|
412
416
|
)
|
|
413
417
|
|
|
414
|
-
|
|
418
|
+
try:
|
|
419
|
+
if delta := super().visit_node_resource(node_resource):
|
|
420
|
+
return delta
|
|
421
|
+
return super().visit_node_properties(node_resource.properties)
|
|
422
|
+
except RuntimeError:
|
|
423
|
+
return super().visit_node_properties(node_resource.properties)
|
|
415
424
|
|
|
416
425
|
def visit_node_resources(self, node_resources: NodeResources) -> PreprocEntityDelta:
|
|
417
426
|
if not is_nothing(node_resources.fn_transform):
|
|
@@ -4,6 +4,7 @@ from typing import Any
|
|
|
4
4
|
from localstack.services.cloudformation.engine.v2.change_set_model import (
|
|
5
5
|
Maybe,
|
|
6
6
|
NodeIntrinsicFunction,
|
|
7
|
+
NodeResource,
|
|
7
8
|
NodeTemplate,
|
|
8
9
|
Nothing,
|
|
9
10
|
is_nothing,
|
|
@@ -165,3 +166,11 @@ class ChangeSetModelValidator(ChangeSetModelPreproc):
|
|
|
165
166
|
return super().visit_node_intrinsic_function_fn_select(node_intrinsic_function)
|
|
166
167
|
except RuntimeError:
|
|
167
168
|
return self.visit(node_intrinsic_function.arguments)
|
|
169
|
+
|
|
170
|
+
def visit_node_resource(self, node_resource: NodeResource) -> PreprocEntityDelta:
|
|
171
|
+
try:
|
|
172
|
+
if delta := super().visit_node_resource(node_resource):
|
|
173
|
+
return delta
|
|
174
|
+
return super().visit_node_properties(node_resource.properties)
|
|
175
|
+
except RuntimeError:
|
|
176
|
+
return super().visit_node_properties(node_resource.properties)
|
|
@@ -9,6 +9,7 @@ from localstack.aws.api.cloudformation import (
|
|
|
9
9
|
CreateStackInput,
|
|
10
10
|
CreateStackSetInput,
|
|
11
11
|
ExecutionStatus,
|
|
12
|
+
Output,
|
|
12
13
|
ResourceStatus,
|
|
13
14
|
StackEvent,
|
|
14
15
|
StackInstanceComprehensiveStatus,
|
|
@@ -51,9 +52,9 @@ class Stack:
|
|
|
51
52
|
template_body: str | None
|
|
52
53
|
|
|
53
54
|
# state after deploy
|
|
54
|
-
resolved_parameters: dict[str,
|
|
55
|
+
resolved_parameters: dict[str, EngineParameter]
|
|
55
56
|
resolved_resources: dict[str, ResolvedResource]
|
|
56
|
-
resolved_outputs:
|
|
57
|
+
resolved_outputs: list[Output]
|
|
57
58
|
resource_states: dict[str, StackResource]
|
|
58
59
|
resolved_exports: dict[str, str]
|
|
59
60
|
|
|
@@ -94,7 +95,7 @@ class Stack:
|
|
|
94
95
|
# state after deploy
|
|
95
96
|
self.resolved_parameters = {}
|
|
96
97
|
self.resolved_resources = {}
|
|
97
|
-
self.resolved_outputs =
|
|
98
|
+
self.resolved_outputs = []
|
|
98
99
|
self.resource_states = {}
|
|
99
100
|
self.events = []
|
|
100
101
|
self.resolved_exports = {}
|
|
@@ -52,6 +52,7 @@ from localstack.aws.api.cloudformation import (
|
|
|
52
52
|
NextToken,
|
|
53
53
|
Parameter,
|
|
54
54
|
PhysicalResourceId,
|
|
55
|
+
ResourceStatus,
|
|
55
56
|
RetainExceptOnCreate,
|
|
56
57
|
RetainResources,
|
|
57
58
|
RoleARN,
|
|
@@ -349,6 +350,7 @@ class CloudformationProviderV2(CloudformationProvider):
|
|
|
349
350
|
# the transformations.
|
|
350
351
|
update_model.before_runtime_cache.update(raw_update_model.before_runtime_cache)
|
|
351
352
|
update_model.after_runtime_cache.update(raw_update_model.after_runtime_cache)
|
|
353
|
+
change_set.set_update_model(update_model)
|
|
352
354
|
|
|
353
355
|
# perform validations
|
|
354
356
|
validator = ChangeSetModelValidator(
|
|
@@ -361,7 +363,6 @@ class CloudformationProviderV2(CloudformationProvider):
|
|
|
361
363
|
if transform.global_transforms:
|
|
362
364
|
# global transforms should always be considered "MODIFIED"
|
|
363
365
|
update_model.node_template.change_type = ChangeType.MODIFIED
|
|
364
|
-
change_set.set_update_model(update_model)
|
|
365
366
|
change_set.processed_template = transformed_after_template
|
|
366
367
|
|
|
367
368
|
@handler("CreateChangeSet", expand=False)
|
|
@@ -557,15 +558,15 @@ class CloudformationProviderV2(CloudformationProvider):
|
|
|
557
558
|
)
|
|
558
559
|
|
|
559
560
|
def _run(*args):
|
|
560
|
-
|
|
561
|
-
|
|
561
|
+
result = change_set_executor.execute()
|
|
562
|
+
change_set.stack.resolved_parameters = change_set.resolved_parameters
|
|
563
|
+
change_set.stack.resolved_resources = result.resources
|
|
564
|
+
if not result.failure_message:
|
|
562
565
|
new_stack_status = StackStatus.UPDATE_COMPLETE
|
|
563
566
|
if change_set.change_set_type == ChangeSetType.CREATE:
|
|
564
567
|
new_stack_status = StackStatus.CREATE_COMPLETE
|
|
565
568
|
change_set.stack.set_stack_status(new_stack_status)
|
|
566
569
|
change_set.set_execution_status(ExecutionStatus.EXECUTE_COMPLETE)
|
|
567
|
-
change_set.stack.resolved_resources = result.resources
|
|
568
|
-
change_set.stack.resolved_parameters = change_set.resolved_parameters
|
|
569
570
|
change_set.stack.resolved_outputs = result.outputs
|
|
570
571
|
|
|
571
572
|
change_set.stack.resolved_exports = {}
|
|
@@ -582,20 +583,15 @@ class CloudformationProviderV2(CloudformationProvider):
|
|
|
582
583
|
change_set.stack.description = change_set.template.get("Description")
|
|
583
584
|
change_set.stack.processed_template = change_set.processed_template
|
|
584
585
|
change_set.stack.template_body = change_set.template_body
|
|
585
|
-
|
|
586
|
+
else:
|
|
586
587
|
LOG.error(
|
|
587
588
|
"Execute change set failed: %s",
|
|
588
|
-
|
|
589
|
+
result.failure_message,
|
|
589
590
|
exc_info=LOG.isEnabledFor(logging.DEBUG) and config.CFN_VERBOSE_ERRORS,
|
|
590
591
|
)
|
|
591
|
-
|
|
592
|
-
if change_set.change_set_type == ChangeSetType.CREATE:
|
|
593
|
-
new_stack_status = StackStatus.CREATE_FAILED
|
|
594
|
-
|
|
595
|
-
change_set.stack.set_stack_status(new_stack_status)
|
|
592
|
+
# stack status is taken care of in the executor
|
|
596
593
|
change_set.set_execution_status(ExecutionStatus.EXECUTE_FAILED)
|
|
597
|
-
change_set.stack.
|
|
598
|
-
change_set.stack.change_set_ids.append(change_set.change_set_id)
|
|
594
|
+
change_set.stack.deletion_time = datetime.now(tz=UTC)
|
|
599
595
|
|
|
600
596
|
start_worker_thread(_run)
|
|
601
597
|
|
|
@@ -787,6 +783,8 @@ class CloudformationProviderV2(CloudformationProvider):
|
|
|
787
783
|
if change_set.status == ChangeSetStatus.FAILED:
|
|
788
784
|
return CreateStackOutput(StackId=stack.stack_id)
|
|
789
785
|
|
|
786
|
+
stack.processed_template = change_set.processed_template
|
|
787
|
+
|
|
790
788
|
# deployment process
|
|
791
789
|
stack.set_stack_status(StackStatus.CREATE_IN_PROGRESS)
|
|
792
790
|
change_set_executor = ChangeSetModelExecutor(change_set)
|
|
@@ -794,9 +792,16 @@ class CloudformationProviderV2(CloudformationProvider):
|
|
|
794
792
|
def _run(*args):
|
|
795
793
|
try:
|
|
796
794
|
result = change_set_executor.execute()
|
|
797
|
-
stack.set_stack_status(StackStatus.CREATE_COMPLETE)
|
|
798
795
|
stack.resolved_resources = result.resources
|
|
799
796
|
stack.resolved_outputs = result.outputs
|
|
797
|
+
if all(
|
|
798
|
+
resource["ResourceStatus"] == ResourceStatus.CREATE_COMPLETE
|
|
799
|
+
for resource in stack.resolved_resources.values()
|
|
800
|
+
):
|
|
801
|
+
stack.set_stack_status(StackStatus.CREATE_COMPLETE)
|
|
802
|
+
else:
|
|
803
|
+
stack.set_stack_status(StackStatus.CREATE_FAILED)
|
|
804
|
+
|
|
800
805
|
# if the deployment succeeded, update the stack's template representation to that
|
|
801
806
|
# which was just deployed
|
|
802
807
|
stack.template = change_set.template
|
|
@@ -807,7 +812,6 @@ class CloudformationProviderV2(CloudformationProvider):
|
|
|
807
812
|
for output in result.outputs:
|
|
808
813
|
if export_name := output.get("ExportName"):
|
|
809
814
|
stack.resolved_exports[export_name] = output["OutputValue"]
|
|
810
|
-
stack.processed_template = change_set.processed_template
|
|
811
815
|
except Exception as e:
|
|
812
816
|
LOG.error(
|
|
813
817
|
"Create Stack set failed: %s",
|
|
@@ -857,7 +861,6 @@ class CloudformationProviderV2(CloudformationProvider):
|
|
|
857
861
|
stack_description = ApiStack(
|
|
858
862
|
Description=stack.description,
|
|
859
863
|
CreationTime=stack.creation_time,
|
|
860
|
-
DeletionTime=stack.deletion_time,
|
|
861
864
|
StackId=stack.stack_id,
|
|
862
865
|
StackName=stack.stack_name,
|
|
863
866
|
StackStatus=stack.status,
|
|
@@ -873,6 +876,8 @@ class CloudformationProviderV2(CloudformationProvider):
|
|
|
873
876
|
if stack.status != StackStatus.REVIEW_IN_PROGRESS:
|
|
874
877
|
# TODO: actually track updated time
|
|
875
878
|
stack_description["LastUpdatedTime"] = stack.creation_time
|
|
879
|
+
if stack.deletion_time:
|
|
880
|
+
stack_description["DeletionTime"] = stack.deletion_time
|
|
876
881
|
if stack.capabilities:
|
|
877
882
|
stack_description["Capabilities"] = stack.capabilities
|
|
878
883
|
# TODO: confirm the logic for this
|
|
@@ -1489,6 +1494,8 @@ class CloudformationProviderV2(CloudformationProvider):
|
|
|
1489
1494
|
stack.deletion_time = datetime.now(tz=UTC)
|
|
1490
1495
|
return
|
|
1491
1496
|
|
|
1497
|
+
stack.set_stack_status(StackStatus.DELETE_IN_PROGRESS)
|
|
1498
|
+
|
|
1492
1499
|
previous_update_model = None
|
|
1493
1500
|
if stack.change_set_id:
|
|
1494
1501
|
if previous_change_set := find_change_set_v2(state, stack.change_set_id):
|
|
@@ -1511,7 +1518,6 @@ class CloudformationProviderV2(CloudformationProvider):
|
|
|
1511
1518
|
|
|
1512
1519
|
def _run(*args):
|
|
1513
1520
|
try:
|
|
1514
|
-
stack.set_stack_status(StackStatus.DELETE_IN_PROGRESS)
|
|
1515
1521
|
change_set_executor.execute()
|
|
1516
1522
|
stack.set_stack_status(StackStatus.DELETE_COMPLETE)
|
|
1517
1523
|
stack.deletion_time = datetime.now(tz=UTC)
|
|
@@ -28,6 +28,7 @@ class ResolvedResource(TypedDict):
|
|
|
28
28
|
LogicalResourceId: str
|
|
29
29
|
Type: str
|
|
30
30
|
Properties: dict
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
LastUpdatedTimestamp: datetime
|
|
32
|
+
ResourceStatus: NotRequired[ResourceStatus]
|
|
33
|
+
PhysicalResourceId: NotRequired[str]
|
|
34
|
+
ResourceStatusReason: NotRequired[str]
|
|
File without changes
|
localstack/version.py
CHANGED
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '4.7.1.
|
|
32
|
-
__version_tuple__ = version_tuple = (4, 7, 1, '
|
|
31
|
+
__version__ = version = '4.7.1.dev81'
|
|
32
|
+
__version_tuple__ = version_tuple = (4, 7, 1, 'dev81')
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
@@ -4,7 +4,7 @@ localstack/deprecations.py,sha256=78Sf99fgH3ckJ20a9SMqsu01r1cm5GgcomkuY4yDMDo,15
|
|
|
4
4
|
localstack/openapi.yaml,sha256=B803NmpwsxG8PHpHrdZYBrUYjnrRh7B_JX0XuNynuFs,30237
|
|
5
5
|
localstack/plugins.py,sha256=BIJC9dlo0WbP7lLKkCiGtd_2q5oeqiHZohvoRTcejXM,2457
|
|
6
6
|
localstack/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
|
-
localstack/version.py,sha256=
|
|
7
|
+
localstack/version.py,sha256=_fJzOd7yox6M96WcAW_efEAad0bVznYp4sMzcM1keog,719
|
|
8
8
|
localstack/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
9
|
localstack/aws/accounts.py,sha256=102zpGowOxo0S6UGMpfjw14QW7WCLVAGsnFK5xFMLoo,3043
|
|
10
10
|
localstack/aws/app.py,sha256=n9bJCfJRuMz_gLGAH430c3bIQXgUXeWO5NPfcdL2MV8,5145
|
|
@@ -311,12 +311,12 @@ localstack/services/cloudformation/engine/types.py,sha256=JQF2aM5DUtnJhvQ30RTaKv
|
|
|
311
311
|
localstack/services/cloudformation/engine/validations.py,sha256=brq7s8O8exA5kvnfzR9ulOtQ7i4konrWQs07-0h_ByE,2847
|
|
312
312
|
localstack/services/cloudformation/engine/yaml_parser.py,sha256=LQpAVq9Syze9jXUGen9Mz8SjosBuodpV5XvsCSn9bDg,2164
|
|
313
313
|
localstack/services/cloudformation/engine/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
314
|
-
localstack/services/cloudformation/engine/v2/change_set_model.py,sha256=
|
|
314
|
+
localstack/services/cloudformation/engine/v2/change_set_model.py,sha256=wjU1keXKFvIc-23xEXIioe7ejKFHcuIV5QyzKac7JMA,67286
|
|
315
315
|
localstack/services/cloudformation/engine/v2/change_set_model_describer.py,sha256=caQJ9reGmJ2EsJ2-bDVC30hLQQilXyBAsI7bJd2TYgI,11299
|
|
316
|
-
localstack/services/cloudformation/engine/v2/change_set_model_executor.py,sha256=
|
|
317
|
-
localstack/services/cloudformation/engine/v2/change_set_model_preproc.py,sha256=
|
|
318
|
-
localstack/services/cloudformation/engine/v2/change_set_model_transform.py,sha256=
|
|
319
|
-
localstack/services/cloudformation/engine/v2/change_set_model_validator.py,sha256=
|
|
316
|
+
localstack/services/cloudformation/engine/v2/change_set_model_executor.py,sha256=OTadK7kOtGdcqvlZNjZUz5LyQeOKmvDiWorUE9hoCCU,29328
|
|
317
|
+
localstack/services/cloudformation/engine/v2/change_set_model_preproc.py,sha256=U7reKuxX6Qzd57xrdUyXPa5QXrL0HqawyM1JM4GofNo,53366
|
|
318
|
+
localstack/services/cloudformation/engine/v2/change_set_model_transform.py,sha256=M8td7akrqBI-8nLHfvS3g6bA3hppiDEICBiX_Yg2il8,22769
|
|
319
|
+
localstack/services/cloudformation/engine/v2/change_set_model_validator.py,sha256=ZRQ_AaIPX_sE40Ggx-JmJW0V1mIe09cKEVDsZTr30J8,7952
|
|
320
320
|
localstack/services/cloudformation/engine/v2/change_set_model_visitor.py,sha256=ygUVPgM3b8SAXLLhLeGSD2k_Oo81ukFkug6bcmvRSJg,7843
|
|
321
321
|
localstack/services/cloudformation/engine/v2/resolving.py,sha256=ot76GycQsw6Y9SvxB8sAlK7tRntJb5CTrKYqyEnfiHc,4002
|
|
322
322
|
localstack/services/cloudformation/models/__init__.py,sha256=da1PTClDMl-IBkrSvq6JC1lnS-K_BASzCvxVhNxN5Ls,13
|
|
@@ -336,9 +336,9 @@ localstack/services/cloudformation/resource_providers/aws_cloudformation_waitcon
|
|
|
336
336
|
localstack/services/cloudformation/scaffolding/__main__.py,sha256=W4qA6eMNejKWLEhYL340DZEE2D9Bdkcl0Jmp0C7VnWc,30964
|
|
337
337
|
localstack/services/cloudformation/scaffolding/propgen.py,sha256=id7l43zsJsTgUyQ8F3jpfbpEoicc8GC6cB2ESEktDxc,7936
|
|
338
338
|
localstack/services/cloudformation/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
339
|
-
localstack/services/cloudformation/v2/entities.py,sha256=
|
|
340
|
-
localstack/services/cloudformation/v2/provider.py,sha256=
|
|
341
|
-
localstack/services/cloudformation/v2/types.py,sha256=
|
|
339
|
+
localstack/services/cloudformation/v2/entities.py,sha256=JLL9oX15cxzY_U23sa0zySyzx20rEXpIUl9CuQMnCGw,9023
|
|
340
|
+
localstack/services/cloudformation/v2/provider.py,sha256=WLhidQkP8awrDItcXtu3aw1Opeq8SCsrkSFjmP_FnR4,63825
|
|
341
|
+
localstack/services/cloudformation/v2/types.py,sha256=x_oDGQwxkViQ1fpcaSbBWiCODHZJAQgCej45EN-YZDs,957
|
|
342
342
|
localstack/services/cloudformation/v2/utils.py,sha256=xy4Lcp4X8XGJ0OKfnsE7pnfMcFrtIH0Chw35qwjhZuw,148
|
|
343
343
|
localstack/services/cloudwatch/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
344
344
|
localstack/services/cloudwatch/alarm_scheduler.py,sha256=HPzQgZvDVXIXaEkjJ39L-jBwlOi_-ZlAyJ3D_suWngk,15761
|
|
@@ -1185,6 +1185,7 @@ localstack/testing/pytest/util.py,sha256=TQAAb_Cj5gTSX0VkenAbSabvyCkl7THxEj70PrT
|
|
|
1185
1185
|
localstack/testing/pytest/validation_tracking.py,sha256=x19q7qCJWBOZRP5fuHTrljSce5DooZVznK93x-ULAHE,5619
|
|
1186
1186
|
localstack/testing/pytest/cloudformation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1187
1187
|
localstack/testing/pytest/cloudformation/fixtures.py,sha256=cXGN83wB-yP2mASQSYe8P7cebwdj9S8cONC3nIDBqOw,10534
|
|
1188
|
+
localstack/testing/pytest/cloudformation/transformers.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1188
1189
|
localstack/testing/pytest/stepfunctions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1189
1190
|
localstack/testing/pytest/stepfunctions/fixtures.py,sha256=sF3kLQ6EQP2r-ecZO2O2THoTt9BVQyyVidj-8sw7J7Q,32801
|
|
1190
1191
|
localstack/testing/pytest/stepfunctions/utils.py,sha256=jVyEilUC7sGONAR339ZWKaikteBxjbRKPDFNlPZ_8fg,32792
|
|
@@ -1287,13 +1288,13 @@ localstack/utils/server/tcp_proxy.py,sha256=rR6d5jR0ozDvIlpHiqW0cfyY9a2fRGdOzyA8
|
|
|
1287
1288
|
localstack/utils/xray/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1288
1289
|
localstack/utils/xray/trace_header.py,sha256=ahXk9eonq7LpeENwlqUEPj3jDOCiVRixhntQuxNor-Q,6209
|
|
1289
1290
|
localstack/utils/xray/traceid.py,sha256=SQSsMV2rhbTNK6ceIoozZYuGU7Fg687EXcgqxoDl1Fw,1106
|
|
1290
|
-
localstack_core-4.7.1.
|
|
1291
|
-
localstack_core-4.7.1.
|
|
1292
|
-
localstack_core-4.7.1.
|
|
1293
|
-
localstack_core-4.7.1.
|
|
1294
|
-
localstack_core-4.7.1.
|
|
1295
|
-
localstack_core-4.7.1.
|
|
1296
|
-
localstack_core-4.7.1.
|
|
1297
|
-
localstack_core-4.7.1.
|
|
1298
|
-
localstack_core-4.7.1.
|
|
1299
|
-
localstack_core-4.7.1.
|
|
1291
|
+
localstack_core-4.7.1.dev81.data/scripts/localstack,sha256=WyL11vp5CkuP79iIR-L8XT7Cj8nvmxX7XRAgxhbmXNE,529
|
|
1292
|
+
localstack_core-4.7.1.dev81.data/scripts/localstack-supervisor,sha256=nm1Il2d6ASyOB6Vo4CRHd90w7TK9FdRl9VPp0NN6hUk,6378
|
|
1293
|
+
localstack_core-4.7.1.dev81.data/scripts/localstack.bat,sha256=tlzZTXtveHkMX_s_fa7VDfvdNdS8iVpEz2ER3uk9B_c,29
|
|
1294
|
+
localstack_core-4.7.1.dev81.dist-info/licenses/LICENSE.txt,sha256=3PC-9Z69UsNARuQ980gNR_JsLx8uvMjdG6C7cc4LBYs,606
|
|
1295
|
+
localstack_core-4.7.1.dev81.dist-info/METADATA,sha256=D_NXMl5pYM3v6doHe7Yps-yahO4GnYkbyHXZMEXWXe0,5569
|
|
1296
|
+
localstack_core-4.7.1.dev81.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
1297
|
+
localstack_core-4.7.1.dev81.dist-info/entry_points.txt,sha256=QVR0SdbvA7isjrtgvO1C8_mZAnD7DIRNsjCtZ-ddbIs,20771
|
|
1298
|
+
localstack_core-4.7.1.dev81.dist-info/plux.json,sha256=4E8JzlVlBqBacOJJ3FUwU0nSfxXyBjlhwdKmgqOcGrQ,20995
|
|
1299
|
+
localstack_core-4.7.1.dev81.dist-info/top_level.txt,sha256=3sqmK2lGac8nCy8nwsbS5SpIY_izmtWtgaTFKHYVHbI,11
|
|
1300
|
+
localstack_core-4.7.1.dev81.dist-info/RECORD,,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"localstack.cloudformation.resource_providers": ["AWS::ApiGateway::UsagePlanKey=localstack.services.apigateway.resource_providers.aws_apigateway_usageplankey_plugin:ApiGatewayUsagePlanKeyProviderPlugin", "AWS::IAM::AccessKey=localstack.services.iam.resource_providers.aws_iam_accesskey_plugin:IAMAccessKeyProviderPlugin", "AWS::SecretsManager::SecretTargetAttachment=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secrettargetattachment_plugin:SecretsManagerSecretTargetAttachmentProviderPlugin", "AWS::Lambda::Alias=localstack.services.lambda_.resource_providers.lambda_alias_plugin:LambdaAliasProviderPlugin", "AWS::ApiGateway::Account=localstack.services.apigateway.resource_providers.aws_apigateway_account_plugin:ApiGatewayAccountProviderPlugin", "AWS::Elasticsearch::Domain=localstack.services.opensearch.resource_providers.aws_elasticsearch_domain_plugin:ElasticsearchDomainProviderPlugin", "AWS::OpenSearchService::Domain=localstack.services.opensearch.resource_providers.aws_opensearchservice_domain_plugin:OpenSearchServiceDomainProviderPlugin", "AWS::Lambda::EventSourceMapping=localstack.services.lambda_.resource_providers.aws_lambda_eventsourcemapping_plugin:LambdaEventSourceMappingProviderPlugin", "AWS::ApiGateway::Deployment=localstack.services.apigateway.resource_providers.aws_apigateway_deployment_plugin:ApiGatewayDeploymentProviderPlugin", "AWS::EC2::Route=localstack.services.ec2.resource_providers.aws_ec2_route_plugin:EC2RouteProviderPlugin", "AWS::CloudFormation::WaitConditionHandle=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitconditionhandle_plugin:CloudFormationWaitConditionHandleProviderPlugin", "AWS::Kinesis::Stream=localstack.services.kinesis.resource_providers.aws_kinesis_stream_plugin:KinesisStreamProviderPlugin", "AWS::SNS::Subscription=localstack.services.sns.resource_providers.aws_sns_subscription_plugin:SNSSubscriptionProviderPlugin", "AWS::CloudFormation::Stack=localstack.services.cloudformation.resource_providers.aws_cloudformation_stack_plugin:CloudFormationStackProviderPlugin", "AWS::EC2::Instance=localstack.services.ec2.resource_providers.aws_ec2_instance_plugin:EC2InstanceProviderPlugin", "AWS::ApiGateway::GatewayResponse=localstack.services.apigateway.resource_providers.aws_apigateway_gatewayresponse_plugin:ApiGatewayGatewayResponseProviderPlugin", "AWS::CloudWatch::CompositeAlarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_compositealarm_plugin:CloudWatchCompositeAlarmProviderPlugin", "AWS::Events::EventBusPolicy=localstack.services.events.resource_providers.aws_events_eventbuspolicy_plugin:EventsEventBusPolicyProviderPlugin", "AWS::Redshift::Cluster=localstack.services.redshift.resource_providers.aws_redshift_cluster_plugin:RedshiftClusterProviderPlugin", "AWS::EC2::KeyPair=localstack.services.ec2.resource_providers.aws_ec2_keypair_plugin:EC2KeyPairProviderPlugin", "AWS::EC2::PrefixList=localstack.services.ec2.resource_providers.aws_ec2_prefixlist_plugin:EC2PrefixListProviderPlugin", "AWS::SSM::MaintenanceWindowTask=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtask_plugin:SSMMaintenanceWindowTaskProviderPlugin", "AWS::Events::ApiDestination=localstack.services.events.resource_providers.aws_events_apidestination_plugin:EventsApiDestinationProviderPlugin", "AWS::Lambda::LayerVersion=localstack.services.lambda_.resource_providers.aws_lambda_layerversion_plugin:LambdaLayerVersionProviderPlugin", "AWS::ApiGateway::RestApi=localstack.services.apigateway.resource_providers.aws_apigateway_restapi_plugin:ApiGatewayRestApiProviderPlugin", "AWS::ApiGateway::DomainName=localstack.services.apigateway.resource_providers.aws_apigateway_domainname_plugin:ApiGatewayDomainNameProviderPlugin", "AWS::IAM::Policy=localstack.services.iam.resource_providers.aws_iam_policy_plugin:IAMPolicyProviderPlugin", "AWS::DynamoDB::Table=localstack.services.dynamodb.resource_providers.aws_dynamodb_table_plugin:DynamoDBTableProviderPlugin", "AWS::IAM::ManagedPolicy=localstack.services.iam.resource_providers.aws_iam_managedpolicy_plugin:IAMManagedPolicyProviderPlugin", "AWS::IAM::ServerCertificate=localstack.services.iam.resource_providers.aws_iam_servercertificate_plugin:IAMServerCertificateProviderPlugin", "AWS::Lambda::Permission=localstack.services.lambda_.resource_providers.aws_lambda_permission_plugin:LambdaPermissionProviderPlugin", "AWS::SNS::TopicPolicy=localstack.services.sns.resource_providers.aws_sns_topicpolicy_plugin:SNSTopicPolicyProviderPlugin", "AWS::EC2::VPC=localstack.services.ec2.resource_providers.aws_ec2_vpc_plugin:EC2VPCProviderPlugin", "AWS::ApiGateway::Model=localstack.services.apigateway.resource_providers.aws_apigateway_model_plugin:ApiGatewayModelProviderPlugin", "AWS::SES::EmailIdentity=localstack.services.ses.resource_providers.aws_ses_emailidentity_plugin:SESEmailIdentityProviderPlugin", "AWS::EC2::VPCGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_vpcgatewayattachment_plugin:EC2VPCGatewayAttachmentProviderPlugin", "AWS::SSM::Parameter=localstack.services.ssm.resource_providers.aws_ssm_parameter_plugin:SSMParameterProviderPlugin", "AWS::EC2::InternetGateway=localstack.services.ec2.resource_providers.aws_ec2_internetgateway_plugin:EC2InternetGatewayProviderPlugin", "AWS::KinesisFirehose::DeliveryStream=localstack.services.kinesisfirehose.resource_providers.aws_kinesisfirehose_deliverystream_plugin:KinesisFirehoseDeliveryStreamProviderPlugin", "AWS::Events::Connection=localstack.services.events.resource_providers.aws_events_connection_plugin:EventsConnectionProviderPlugin", "AWS::SSM::MaintenanceWindowTarget=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtarget_plugin:SSMMaintenanceWindowTargetProviderPlugin", "AWS::ApiGateway::Stage=localstack.services.apigateway.resource_providers.aws_apigateway_stage_plugin:ApiGatewayStageProviderPlugin", "AWS::Lambda::EventInvokeConfig=localstack.services.lambda_.resource_providers.aws_lambda_eventinvokeconfig_plugin:LambdaEventInvokeConfigProviderPlugin", "AWS::CDK::Metadata=localstack.services.cdk.resource_providers.cdk_metadata_plugin:LambdaAliasProviderPlugin", "AWS::Events::Rule=localstack.services.events.resource_providers.aws_events_rule_plugin:EventsRuleProviderPlugin", "AWS::ApiGateway::UsagePlan=localstack.services.apigateway.resource_providers.aws_apigateway_usageplan_plugin:ApiGatewayUsagePlanProviderPlugin", "AWS::ApiGateway::RequestValidator=localstack.services.apigateway.resource_providers.aws_apigateway_requestvalidator_plugin:ApiGatewayRequestValidatorProviderPlugin", "AWS::IAM::Group=localstack.services.iam.resource_providers.aws_iam_group_plugin:IAMGroupProviderPlugin", "AWS::Logs::LogGroup=localstack.services.logs.resource_providers.aws_logs_loggroup_plugin:LogsLogGroupProviderPlugin", "AWS::Route53::RecordSet=localstack.services.route53.resource_providers.aws_route53_recordset_plugin:Route53RecordSetProviderPlugin", "AWS::SSM::MaintenanceWindow=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindow_plugin:SSMMaintenanceWindowProviderPlugin", "AWS::ApiGateway::ApiKey=localstack.services.apigateway.resource_providers.aws_apigateway_apikey_plugin:ApiGatewayApiKeyProviderPlugin", "AWS::ApiGateway::Method=localstack.services.apigateway.resource_providers.aws_apigateway_method_plugin:ApiGatewayMethodProviderPlugin", "AWS::CloudFormation::Macro=localstack.services.cloudformation.resource_providers.aws_cloudformation_macro_plugin:CloudFormationMacroProviderPlugin", "AWS::KMS::Alias=localstack.services.kms.resource_providers.aws_kms_alias_plugin:KMSAliasProviderPlugin", "AWS::EC2::TransitGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_transitgatewayattachment_plugin:EC2TransitGatewayAttachmentProviderPlugin", "AWS::EC2::TransitGateway=localstack.services.ec2.resource_providers.aws_ec2_transitgateway_plugin:EC2TransitGatewayProviderPlugin", "AWS::Lambda::Function=localstack.services.lambda_.resource_providers.aws_lambda_function_plugin:LambdaFunctionProviderPlugin", "AWS::EC2::Subnet=localstack.services.ec2.resource_providers.aws_ec2_subnet_plugin:EC2SubnetProviderPlugin", "AWS::SNS::Topic=localstack.services.sns.resource_providers.aws_sns_topic_plugin:SNSTopicProviderPlugin", "AWS::IAM::ServiceLinkedRole=localstack.services.iam.resource_providers.aws_iam_servicelinkedrole_plugin:IAMServiceLinkedRoleProviderPlugin", "AWS::S3::BucketPolicy=localstack.services.s3.resource_providers.aws_s3_bucketpolicy_plugin:S3BucketPolicyProviderPlugin", "AWS::ECR::Repository=localstack.services.ecr.resource_providers.aws_ecr_repository_plugin:ECRRepositoryProviderPlugin", "AWS::KMS::Key=localstack.services.kms.resource_providers.aws_kms_key_plugin:KMSKeyProviderPlugin", "AWS::IAM::Role=localstack.services.iam.resource_providers.aws_iam_role_plugin:IAMRoleProviderPlugin", "AWS::Scheduler::ScheduleGroup=localstack.services.scheduler.resource_providers.aws_scheduler_schedulegroup_plugin:SchedulerScheduleGroupProviderPlugin", "AWS::EC2::NetworkAcl=localstack.services.ec2.resource_providers.aws_ec2_networkacl_plugin:EC2NetworkAclProviderPlugin", "AWS::StepFunctions::Activity=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_activity_plugin:StepFunctionsActivityProviderPlugin", "AWS::SQS::QueuePolicy=localstack.services.sqs.resource_providers.aws_sqs_queuepolicy_plugin:SQSQueuePolicyProviderPlugin", "AWS::Events::EventBus=localstack.services.events.resource_providers.aws_events_eventbus_plugin:EventsEventBusProviderPlugin", "AWS::Lambda::Version=localstack.services.lambda_.resource_providers.aws_lambda_version_plugin:LambdaVersionProviderPlugin", "AWS::EC2::SubnetRouteTableAssociation=localstack.services.ec2.resource_providers.aws_ec2_subnetroutetableassociation_plugin:EC2SubnetRouteTableAssociationProviderPlugin", "AWS::CloudFormation::WaitCondition=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitcondition_plugin:CloudFormationWaitConditionProviderPlugin", "AWS::Lambda::Url=localstack.services.lambda_.resource_providers.aws_lambda_url_plugin:LambdaUrlProviderPlugin", "AWS::Lambda::LayerVersionPermission=localstack.services.lambda_.resource_providers.aws_lambda_layerversionpermission_plugin:LambdaLayerVersionPermissionProviderPlugin", "AWS::EC2::SecurityGroup=localstack.services.ec2.resource_providers.aws_ec2_securitygroup_plugin:EC2SecurityGroupProviderPlugin", "AWS::StepFunctions::StateMachine=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_statemachine_plugin:StepFunctionsStateMachineProviderPlugin", "AWS::Kinesis::StreamConsumer=localstack.services.kinesis.resource_providers.aws_kinesis_streamconsumer_plugin:KinesisStreamConsumerProviderPlugin", "AWS::CloudWatch::Alarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_alarm_plugin:CloudWatchAlarmProviderPlugin", "AWS::S3::Bucket=localstack.services.s3.resource_providers.aws_s3_bucket_plugin:S3BucketProviderPlugin", "AWS::Logs::LogStream=localstack.services.logs.resource_providers.aws_logs_logstream_plugin:LogsLogStreamProviderPlugin", "AWS::Lambda::CodeSigningConfig=localstack.services.lambda_.resource_providers.aws_lambda_codesigningconfig_plugin:LambdaCodeSigningConfigProviderPlugin", "AWS::ResourceGroups::Group=localstack.services.resource_groups.resource_providers.aws_resourcegroups_group_plugin:ResourceGroupsGroupProviderPlugin", "AWS::ApiGateway::BasePathMapping=localstack.services.apigateway.resource_providers.aws_apigateway_basepathmapping_plugin:ApiGatewayBasePathMappingProviderPlugin", "AWS::EC2::NatGateway=localstack.services.ec2.resource_providers.aws_ec2_natgateway_plugin:EC2NatGatewayProviderPlugin", "AWS::CertificateManager::Certificate=localstack.services.certificatemanager.resource_providers.aws_certificatemanager_certificate_plugin:CertificateManagerCertificateProviderPlugin", "AWS::SecretsManager::ResourcePolicy=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_resourcepolicy_plugin:SecretsManagerResourcePolicyProviderPlugin", "AWS::IAM::User=localstack.services.iam.resource_providers.aws_iam_user_plugin:IAMUserProviderPlugin", "AWS::EC2::RouteTable=localstack.services.ec2.resource_providers.aws_ec2_routetable_plugin:EC2RouteTableProviderPlugin", "AWS::SSM::PatchBaseline=localstack.services.ssm.resource_providers.aws_ssm_patchbaseline_plugin:SSMPatchBaselineProviderPlugin", "AWS::EC2::DHCPOptions=localstack.services.ec2.resource_providers.aws_ec2_dhcpoptions_plugin:EC2DHCPOptionsProviderPlugin", "AWS::IAM::InstanceProfile=localstack.services.iam.resource_providers.aws_iam_instanceprofile_plugin:IAMInstanceProfileProviderPlugin", "AWS::ApiGateway::Resource=localstack.services.apigateway.resource_providers.aws_apigateway_resource_plugin:ApiGatewayResourceProviderPlugin", "AWS::Scheduler::Schedule=localstack.services.scheduler.resource_providers.aws_scheduler_schedule_plugin:SchedulerScheduleProviderPlugin", "AWS::Route53::HealthCheck=localstack.services.route53.resource_providers.aws_route53_healthcheck_plugin:Route53HealthCheckProviderPlugin", "AWS::Logs::SubscriptionFilter=localstack.services.logs.resource_providers.aws_logs_subscriptionfilter_plugin:LogsSubscriptionFilterProviderPlugin", "AWS::SQS::Queue=localstack.services.sqs.resource_providers.aws_sqs_queue_plugin:SQSQueueProviderPlugin", "AWS::SecretsManager::Secret=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secret_plugin:SecretsManagerSecretProviderPlugin", "AWS::EC2::VPCEndpoint=localstack.services.ec2.resource_providers.aws_ec2_vpcendpoint_plugin:EC2VPCEndpointProviderPlugin", "AWS::DynamoDB::GlobalTable=localstack.services.dynamodb.resource_providers.aws_dynamodb_globaltable_plugin:DynamoDBGlobalTableProviderPlugin", "AWS::SecretsManager::RotationSchedule=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_rotationschedule_plugin:SecretsManagerRotationScheduleProviderPlugin"], "localstack.hooks.on_infra_start": ["setup_dns_configuration_on_host=localstack.dns.plugins:setup_dns_configuration_on_host", "start_dns_server=localstack.dns.plugins:start_dns_server", "_run_init_scripts_on_start=localstack.runtime.init:_run_init_scripts_on_start", "register_custom_endpoints=localstack.services.lambda_.plugins:register_custom_endpoints", "validate_configuration=localstack.services.lambda_.plugins:validate_configuration", "_patch_botocore_endpoint_in_memory=localstack.aws.client:_patch_botocore_endpoint_in_memory", "_patch_botocore_json_parser=localstack.aws.client:_patch_botocore_json_parser", "_patch_cbor2=localstack.aws.client:_patch_cbor2", "eager_load_services=localstack.services.plugins:eager_load_services", "apply_aws_runtime_patches=localstack.aws.patches:apply_aws_runtime_patches", "init_response_mutation_handler=localstack.aws.handlers.response:init_response_mutation_handler", "delete_cached_certificate=localstack.plugins:delete_cached_certificate", "deprecation_warnings=localstack.plugins:deprecation_warnings", "conditionally_enable_debugger=localstack.dev.debugger.plugins:conditionally_enable_debugger", "register_swagger_endpoints=localstack.http.resources.swagger.plugins:register_swagger_endpoints", "_publish_config_as_analytics_event=localstack.runtime.analytics:_publish_config_as_analytics_event", "_publish_container_info=localstack.runtime.analytics:_publish_container_info", "apply_runtime_patches=localstack.runtime.patches:apply_runtime_patches", "register_cloudformation_deploy_ui=localstack.services.cloudformation.plugins:register_cloudformation_deploy_ui"], "localstack.hooks.on_infra_shutdown": ["stop_server=localstack.dns.plugins:stop_server", "_run_init_scripts_on_shutdown=localstack.runtime.init:_run_init_scripts_on_shutdown", "remove_custom_endpoints=localstack.services.lambda_.plugins:remove_custom_endpoints", "run_on_after_service_shutdown_handlers=localstack.runtime.shutdown:run_on_after_service_shutdown_handlers", "run_shutdown_handlers=localstack.runtime.shutdown:run_shutdown_handlers", "shutdown_services=localstack.runtime.shutdown:shutdown_services", "publish_metrics=localstack.utils.analytics.metrics.publisher:publish_metrics"], "localstack.hooks.configure_localstack_container": ["_mount_machine_file=localstack.utils.analytics.metadata:_mount_machine_file"], "localstack.hooks.prepare_host": ["prepare_host_machine_id=localstack.utils.analytics.metadata:prepare_host_machine_id"], "localstack.init.runner": ["py=localstack.runtime.init:PythonScriptRunner", "sh=localstack.runtime.init:ShellScriptRunner"], "localstack.hooks.on_infra_ready": ["_run_init_scripts_on_ready=localstack.runtime.init:_run_init_scripts_on_ready", "publish_provider_assignment=localstack.utils.analytics.service_providers:publish_provider_assignment"], "localstack.packages": ["ffmpeg/community=localstack.packages.plugins:ffmpeg_package", "java/community=localstack.packages.plugins:java_package", "terraform/community=localstack.packages.plugins:terraform_package", "lambda-java-libs/community=localstack.services.lambda_.plugins:lambda_java_libs", "lambda-runtime/community=localstack.services.lambda_.plugins:lambda_runtime_package", "dynamodb-local/community=localstack.services.dynamodb.plugins:dynamodb_local_package", "elasticsearch/community=localstack.services.es.plugins:elasticsearch_package", "opensearch/community=localstack.services.opensearch.plugins:opensearch_package", "jpype-jsonata/community=localstack.services.stepfunctions.plugins:jpype_jsonata_package", "kinesis-mock/community=localstack.services.kinesis.plugins:kinesismock_package", "vosk/community=localstack.services.transcribe.plugins:vosk_package"], "localstack.openapi.spec": ["localstack=localstack.plugins:CoreOASPlugin"], "localstack.runtime.components": ["aws=localstack.aws.components:AwsComponents"], "localstack.runtime.server": ["hypercorn=localstack.runtime.server.plugins:HypercornRuntimeServerPlugin", "twisted=localstack.runtime.server.plugins:TwistedRuntimeServerPlugin"], "localstack.lambda.runtime_executor": ["docker=localstack.services.lambda_.invocation.plugins:DockerRuntimeExecutorPlugin"], "localstack.aws.provider": ["acm:default=localstack.services.providers:acm", "apigateway:default=localstack.services.providers:apigateway", "apigateway:legacy=localstack.services.providers:apigateway_legacy", "apigateway:next_gen=localstack.services.providers:apigateway_next_gen", "config:default=localstack.services.providers:awsconfig", "cloudformation:default=localstack.services.providers:cloudformation", "cloudformation:engine-v2=localstack.services.providers:cloudformation_v2", "cloudwatch:default=localstack.services.providers:cloudwatch", "cloudwatch:v1=localstack.services.providers:cloudwatch_v1", "cloudwatch:v2=localstack.services.providers:cloudwatch_v2", "dynamodb:default=localstack.services.providers:dynamodb", "dynamodb:v2=localstack.services.providers:dynamodb_v2", "dynamodbstreams:default=localstack.services.providers:dynamodbstreams", "dynamodbstreams:v2=localstack.services.providers:dynamodbstreams_v2", "ec2:default=localstack.services.providers:ec2", "es:default=localstack.services.providers:es", "events:default=localstack.services.providers:events", "events:legacy=localstack.services.providers:events_legacy", "events:v1=localstack.services.providers:events_v1", "events:v2=localstack.services.providers:events_v2", "firehose:default=localstack.services.providers:firehose", "iam:default=localstack.services.providers:iam", "kinesis:default=localstack.services.providers:kinesis", "kms:default=localstack.services.providers:kms", "lambda:default=localstack.services.providers:lambda_", "lambda:asf=localstack.services.providers:lambda_asf", "lambda:v2=localstack.services.providers:lambda_v2", "logs:default=localstack.services.providers:logs", "opensearch:default=localstack.services.providers:opensearch", "redshift:default=localstack.services.providers:redshift", "resource-groups:default=localstack.services.providers:resource_groups", "resourcegroupstaggingapi:default=localstack.services.providers:resourcegroupstaggingapi", "route53:default=localstack.services.providers:route53", "route53resolver:default=localstack.services.providers:route53resolver", "s3:default=localstack.services.providers:s3", "s3control:default=localstack.services.providers:s3control", "scheduler:default=localstack.services.providers:scheduler", "secretsmanager:default=localstack.services.providers:secretsmanager", "ses:default=localstack.services.providers:ses", "sns:default=localstack.services.providers:sns", "sqs:default=localstack.services.providers:sqs", "ssm:default=localstack.services.providers:ssm", "stepfunctions:default=localstack.services.providers:stepfunctions", "stepfunctions:v2=localstack.services.providers:stepfunctions_v2", "sts:default=localstack.services.providers:sts", "support:default=localstack.services.providers:support", "swf:default=localstack.services.providers:swf", "transcribe:default=localstack.services.providers:transcribe"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"localstack.cloudformation.resource_providers": ["AWS::CloudWatch::Alarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_alarm_plugin:CloudWatchAlarmProviderPlugin", "AWS::Kinesis::StreamConsumer=localstack.services.kinesis.resource_providers.aws_kinesis_streamconsumer_plugin:KinesisStreamConsumerProviderPlugin", "AWS::Route53::HealthCheck=localstack.services.route53.resource_providers.aws_route53_healthcheck_plugin:Route53HealthCheckProviderPlugin", "AWS::Events::Rule=localstack.services.events.resource_providers.aws_events_rule_plugin:EventsRuleProviderPlugin", "AWS::Lambda::EventInvokeConfig=localstack.services.lambda_.resource_providers.aws_lambda_eventinvokeconfig_plugin:LambdaEventInvokeConfigProviderPlugin", "AWS::EC2::SecurityGroup=localstack.services.ec2.resource_providers.aws_ec2_securitygroup_plugin:EC2SecurityGroupProviderPlugin", "AWS::EC2::VPCGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_vpcgatewayattachment_plugin:EC2VPCGatewayAttachmentProviderPlugin", "AWS::ApiGateway::RestApi=localstack.services.apigateway.resource_providers.aws_apigateway_restapi_plugin:ApiGatewayRestApiProviderPlugin", "AWS::CloudFormation::WaitConditionHandle=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitconditionhandle_plugin:CloudFormationWaitConditionHandleProviderPlugin", "AWS::SSM::MaintenanceWindow=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindow_plugin:SSMMaintenanceWindowProviderPlugin", "AWS::ApiGateway::Account=localstack.services.apigateway.resource_providers.aws_apigateway_account_plugin:ApiGatewayAccountProviderPlugin", "AWS::CloudWatch::CompositeAlarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_compositealarm_plugin:CloudWatchCompositeAlarmProviderPlugin", "AWS::S3::BucketPolicy=localstack.services.s3.resource_providers.aws_s3_bucketpolicy_plugin:S3BucketPolicyProviderPlugin", "AWS::ApiGateway::RequestValidator=localstack.services.apigateway.resource_providers.aws_apigateway_requestvalidator_plugin:ApiGatewayRequestValidatorProviderPlugin", "AWS::CDK::Metadata=localstack.services.cdk.resource_providers.cdk_metadata_plugin:LambdaAliasProviderPlugin", "AWS::IAM::InstanceProfile=localstack.services.iam.resource_providers.aws_iam_instanceprofile_plugin:IAMInstanceProfileProviderPlugin", "AWS::Lambda::Alias=localstack.services.lambda_.resource_providers.lambda_alias_plugin:LambdaAliasProviderPlugin", "AWS::SQS::QueuePolicy=localstack.services.sqs.resource_providers.aws_sqs_queuepolicy_plugin:SQSQueuePolicyProviderPlugin", "AWS::Lambda::EventSourceMapping=localstack.services.lambda_.resource_providers.aws_lambda_eventsourcemapping_plugin:LambdaEventSourceMappingProviderPlugin", "AWS::SecretsManager::RotationSchedule=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_rotationschedule_plugin:SecretsManagerRotationScheduleProviderPlugin", "AWS::EC2::NetworkAcl=localstack.services.ec2.resource_providers.aws_ec2_networkacl_plugin:EC2NetworkAclProviderPlugin", "AWS::Kinesis::Stream=localstack.services.kinesis.resource_providers.aws_kinesis_stream_plugin:KinesisStreamProviderPlugin", "AWS::ApiGateway::DomainName=localstack.services.apigateway.resource_providers.aws_apigateway_domainname_plugin:ApiGatewayDomainNameProviderPlugin", "AWS::Scheduler::ScheduleGroup=localstack.services.scheduler.resource_providers.aws_scheduler_schedulegroup_plugin:SchedulerScheduleGroupProviderPlugin", "AWS::SSM::Parameter=localstack.services.ssm.resource_providers.aws_ssm_parameter_plugin:SSMParameterProviderPlugin", "AWS::SNS::TopicPolicy=localstack.services.sns.resource_providers.aws_sns_topicpolicy_plugin:SNSTopicPolicyProviderPlugin", "AWS::EC2::Route=localstack.services.ec2.resource_providers.aws_ec2_route_plugin:EC2RouteProviderPlugin", "AWS::ApiGateway::Stage=localstack.services.apigateway.resource_providers.aws_apigateway_stage_plugin:ApiGatewayStageProviderPlugin", "AWS::IAM::ServiceLinkedRole=localstack.services.iam.resource_providers.aws_iam_servicelinkedrole_plugin:IAMServiceLinkedRoleProviderPlugin", "AWS::ApiGateway::UsagePlanKey=localstack.services.apigateway.resource_providers.aws_apigateway_usageplankey_plugin:ApiGatewayUsagePlanKeyProviderPlugin", "AWS::SNS::Topic=localstack.services.sns.resource_providers.aws_sns_topic_plugin:SNSTopicProviderPlugin", "AWS::EC2::TransitGateway=localstack.services.ec2.resource_providers.aws_ec2_transitgateway_plugin:EC2TransitGatewayProviderPlugin", "AWS::Lambda::Permission=localstack.services.lambda_.resource_providers.aws_lambda_permission_plugin:LambdaPermissionProviderPlugin", "AWS::KinesisFirehose::DeliveryStream=localstack.services.kinesisfirehose.resource_providers.aws_kinesisfirehose_deliverystream_plugin:KinesisFirehoseDeliveryStreamProviderPlugin", "AWS::EC2::SubnetRouteTableAssociation=localstack.services.ec2.resource_providers.aws_ec2_subnetroutetableassociation_plugin:EC2SubnetRouteTableAssociationProviderPlugin", "AWS::ECR::Repository=localstack.services.ecr.resource_providers.aws_ecr_repository_plugin:ECRRepositoryProviderPlugin", "AWS::S3::Bucket=localstack.services.s3.resource_providers.aws_s3_bucket_plugin:S3BucketProviderPlugin", "AWS::Lambda::LayerVersion=localstack.services.lambda_.resource_providers.aws_lambda_layerversion_plugin:LambdaLayerVersionProviderPlugin", "AWS::Logs::LogStream=localstack.services.logs.resource_providers.aws_logs_logstream_plugin:LogsLogStreamProviderPlugin", "AWS::IAM::Policy=localstack.services.iam.resource_providers.aws_iam_policy_plugin:IAMPolicyProviderPlugin", "AWS::ApiGateway::ApiKey=localstack.services.apigateway.resource_providers.aws_apigateway_apikey_plugin:ApiGatewayApiKeyProviderPlugin", "AWS::Logs::SubscriptionFilter=localstack.services.logs.resource_providers.aws_logs_subscriptionfilter_plugin:LogsSubscriptionFilterProviderPlugin", "AWS::IAM::ManagedPolicy=localstack.services.iam.resource_providers.aws_iam_managedpolicy_plugin:IAMManagedPolicyProviderPlugin", "AWS::Redshift::Cluster=localstack.services.redshift.resource_providers.aws_redshift_cluster_plugin:RedshiftClusterProviderPlugin", "AWS::Events::EventBus=localstack.services.events.resource_providers.aws_events_eventbus_plugin:EventsEventBusProviderPlugin", "AWS::EC2::NatGateway=localstack.services.ec2.resource_providers.aws_ec2_natgateway_plugin:EC2NatGatewayProviderPlugin", "AWS::ApiGateway::GatewayResponse=localstack.services.apigateway.resource_providers.aws_apigateway_gatewayresponse_plugin:ApiGatewayGatewayResponseProviderPlugin", "AWS::EC2::RouteTable=localstack.services.ec2.resource_providers.aws_ec2_routetable_plugin:EC2RouteTableProviderPlugin", "AWS::SSM::PatchBaseline=localstack.services.ssm.resource_providers.aws_ssm_patchbaseline_plugin:SSMPatchBaselineProviderPlugin", "AWS::SecretsManager::SecretTargetAttachment=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secrettargetattachment_plugin:SecretsManagerSecretTargetAttachmentProviderPlugin", "AWS::Logs::LogGroup=localstack.services.logs.resource_providers.aws_logs_loggroup_plugin:LogsLogGroupProviderPlugin", "AWS::Lambda::Version=localstack.services.lambda_.resource_providers.aws_lambda_version_plugin:LambdaVersionProviderPlugin", "AWS::Lambda::LayerVersionPermission=localstack.services.lambda_.resource_providers.aws_lambda_layerversionpermission_plugin:LambdaLayerVersionPermissionProviderPlugin", "AWS::KMS::Key=localstack.services.kms.resource_providers.aws_kms_key_plugin:KMSKeyProviderPlugin", "AWS::ApiGateway::Model=localstack.services.apigateway.resource_providers.aws_apigateway_model_plugin:ApiGatewayModelProviderPlugin", "AWS::Events::ApiDestination=localstack.services.events.resource_providers.aws_events_apidestination_plugin:EventsApiDestinationProviderPlugin", "AWS::Route53::RecordSet=localstack.services.route53.resource_providers.aws_route53_recordset_plugin:Route53RecordSetProviderPlugin", "AWS::Scheduler::Schedule=localstack.services.scheduler.resource_providers.aws_scheduler_schedule_plugin:SchedulerScheduleProviderPlugin", "AWS::IAM::ServerCertificate=localstack.services.iam.resource_providers.aws_iam_servercertificate_plugin:IAMServerCertificateProviderPlugin", "AWS::IAM::AccessKey=localstack.services.iam.resource_providers.aws_iam_accesskey_plugin:IAMAccessKeyProviderPlugin", "AWS::IAM::User=localstack.services.iam.resource_providers.aws_iam_user_plugin:IAMUserProviderPlugin", "AWS::SecretsManager::ResourcePolicy=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_resourcepolicy_plugin:SecretsManagerResourcePolicyProviderPlugin", "AWS::SES::EmailIdentity=localstack.services.ses.resource_providers.aws_ses_emailidentity_plugin:SESEmailIdentityProviderPlugin", "AWS::ApiGateway::Deployment=localstack.services.apigateway.resource_providers.aws_apigateway_deployment_plugin:ApiGatewayDeploymentProviderPlugin", "AWS::EC2::InternetGateway=localstack.services.ec2.resource_providers.aws_ec2_internetgateway_plugin:EC2InternetGatewayProviderPlugin", "AWS::CloudFormation::Macro=localstack.services.cloudformation.resource_providers.aws_cloudformation_macro_plugin:CloudFormationMacroProviderPlugin", "AWS::EC2::VPCEndpoint=localstack.services.ec2.resource_providers.aws_ec2_vpcendpoint_plugin:EC2VPCEndpointProviderPlugin", "AWS::ResourceGroups::Group=localstack.services.resource_groups.resource_providers.aws_resourcegroups_group_plugin:ResourceGroupsGroupProviderPlugin", "AWS::EC2::Instance=localstack.services.ec2.resource_providers.aws_ec2_instance_plugin:EC2InstanceProviderPlugin", "AWS::EC2::VPC=localstack.services.ec2.resource_providers.aws_ec2_vpc_plugin:EC2VPCProviderPlugin", "AWS::EC2::Subnet=localstack.services.ec2.resource_providers.aws_ec2_subnet_plugin:EC2SubnetProviderPlugin", "AWS::SSM::MaintenanceWindowTask=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtask_plugin:SSMMaintenanceWindowTaskProviderPlugin", "AWS::ApiGateway::Resource=localstack.services.apigateway.resource_providers.aws_apigateway_resource_plugin:ApiGatewayResourceProviderPlugin", "AWS::SNS::Subscription=localstack.services.sns.resource_providers.aws_sns_subscription_plugin:SNSSubscriptionProviderPlugin", "AWS::CloudFormation::Stack=localstack.services.cloudformation.resource_providers.aws_cloudformation_stack_plugin:CloudFormationStackProviderPlugin", "AWS::DynamoDB::GlobalTable=localstack.services.dynamodb.resource_providers.aws_dynamodb_globaltable_plugin:DynamoDBGlobalTableProviderPlugin", "AWS::StepFunctions::StateMachine=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_statemachine_plugin:StepFunctionsStateMachineProviderPlugin", "AWS::OpenSearchService::Domain=localstack.services.opensearch.resource_providers.aws_opensearchservice_domain_plugin:OpenSearchServiceDomainProviderPlugin", "AWS::DynamoDB::Table=localstack.services.dynamodb.resource_providers.aws_dynamodb_table_plugin:DynamoDBTableProviderPlugin", "AWS::Lambda::Function=localstack.services.lambda_.resource_providers.aws_lambda_function_plugin:LambdaFunctionProviderPlugin", "AWS::SSM::MaintenanceWindowTarget=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtarget_plugin:SSMMaintenanceWindowTargetProviderPlugin", "AWS::SecretsManager::Secret=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secret_plugin:SecretsManagerSecretProviderPlugin", "AWS::Events::EventBusPolicy=localstack.services.events.resource_providers.aws_events_eventbuspolicy_plugin:EventsEventBusPolicyProviderPlugin", "AWS::EC2::DHCPOptions=localstack.services.ec2.resource_providers.aws_ec2_dhcpoptions_plugin:EC2DHCPOptionsProviderPlugin", "AWS::Lambda::Url=localstack.services.lambda_.resource_providers.aws_lambda_url_plugin:LambdaUrlProviderPlugin", "AWS::Elasticsearch::Domain=localstack.services.opensearch.resource_providers.aws_elasticsearch_domain_plugin:ElasticsearchDomainProviderPlugin", "AWS::Lambda::CodeSigningConfig=localstack.services.lambda_.resource_providers.aws_lambda_codesigningconfig_plugin:LambdaCodeSigningConfigProviderPlugin", "AWS::ApiGateway::UsagePlan=localstack.services.apigateway.resource_providers.aws_apigateway_usageplan_plugin:ApiGatewayUsagePlanProviderPlugin", "AWS::EC2::TransitGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_transitgatewayattachment_plugin:EC2TransitGatewayAttachmentProviderPlugin", "AWS::SQS::Queue=localstack.services.sqs.resource_providers.aws_sqs_queue_plugin:SQSQueueProviderPlugin", "AWS::StepFunctions::Activity=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_activity_plugin:StepFunctionsActivityProviderPlugin", "AWS::CertificateManager::Certificate=localstack.services.certificatemanager.resource_providers.aws_certificatemanager_certificate_plugin:CertificateManagerCertificateProviderPlugin", "AWS::CloudFormation::WaitCondition=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitcondition_plugin:CloudFormationWaitConditionProviderPlugin", "AWS::KMS::Alias=localstack.services.kms.resource_providers.aws_kms_alias_plugin:KMSAliasProviderPlugin", "AWS::Events::Connection=localstack.services.events.resource_providers.aws_events_connection_plugin:EventsConnectionProviderPlugin", "AWS::IAM::Role=localstack.services.iam.resource_providers.aws_iam_role_plugin:IAMRoleProviderPlugin", "AWS::EC2::KeyPair=localstack.services.ec2.resource_providers.aws_ec2_keypair_plugin:EC2KeyPairProviderPlugin", "AWS::ApiGateway::Method=localstack.services.apigateway.resource_providers.aws_apigateway_method_plugin:ApiGatewayMethodProviderPlugin", "AWS::IAM::Group=localstack.services.iam.resource_providers.aws_iam_group_plugin:IAMGroupProviderPlugin", "AWS::ApiGateway::BasePathMapping=localstack.services.apigateway.resource_providers.aws_apigateway_basepathmapping_plugin:ApiGatewayBasePathMappingProviderPlugin", "AWS::EC2::PrefixList=localstack.services.ec2.resource_providers.aws_ec2_prefixlist_plugin:EC2PrefixListProviderPlugin"], "localstack.openapi.spec": ["localstack=localstack.plugins:CoreOASPlugin"], "localstack.hooks.on_infra_start": ["delete_cached_certificate=localstack.plugins:delete_cached_certificate", "deprecation_warnings=localstack.plugins:deprecation_warnings", "register_cloudformation_deploy_ui=localstack.services.cloudformation.plugins:register_cloudformation_deploy_ui", "register_custom_endpoints=localstack.services.lambda_.plugins:register_custom_endpoints", "validate_configuration=localstack.services.lambda_.plugins:validate_configuration", "eager_load_services=localstack.services.plugins:eager_load_services", "setup_dns_configuration_on_host=localstack.dns.plugins:setup_dns_configuration_on_host", "start_dns_server=localstack.dns.plugins:start_dns_server", "_publish_config_as_analytics_event=localstack.runtime.analytics:_publish_config_as_analytics_event", "_publish_container_info=localstack.runtime.analytics:_publish_container_info", "conditionally_enable_debugger=localstack.dev.debugger.plugins:conditionally_enable_debugger", "apply_runtime_patches=localstack.runtime.patches:apply_runtime_patches", "init_response_mutation_handler=localstack.aws.handlers.response:init_response_mutation_handler", "register_swagger_endpoints=localstack.http.resources.swagger.plugins:register_swagger_endpoints", "_run_init_scripts_on_start=localstack.runtime.init:_run_init_scripts_on_start", "apply_aws_runtime_patches=localstack.aws.patches:apply_aws_runtime_patches", "_patch_botocore_endpoint_in_memory=localstack.aws.client:_patch_botocore_endpoint_in_memory", "_patch_botocore_json_parser=localstack.aws.client:_patch_botocore_json_parser", "_patch_cbor2=localstack.aws.client:_patch_cbor2"], "localstack.packages": ["elasticsearch/community=localstack.services.es.plugins:elasticsearch_package", "jpype-jsonata/community=localstack.services.stepfunctions.plugins:jpype_jsonata_package", "lambda-java-libs/community=localstack.services.lambda_.plugins:lambda_java_libs", "lambda-runtime/community=localstack.services.lambda_.plugins:lambda_runtime_package", "ffmpeg/community=localstack.packages.plugins:ffmpeg_package", "java/community=localstack.packages.plugins:java_package", "terraform/community=localstack.packages.plugins:terraform_package", "opensearch/community=localstack.services.opensearch.plugins:opensearch_package", "vosk/community=localstack.services.transcribe.plugins:vosk_package", "dynamodb-local/community=localstack.services.dynamodb.plugins:dynamodb_local_package", "kinesis-mock/community=localstack.services.kinesis.plugins:kinesismock_package"], "localstack.aws.provider": ["acm:default=localstack.services.providers:acm", "apigateway:default=localstack.services.providers:apigateway", "apigateway:legacy=localstack.services.providers:apigateway_legacy", "apigateway:next_gen=localstack.services.providers:apigateway_next_gen", "config:default=localstack.services.providers:awsconfig", "cloudformation:default=localstack.services.providers:cloudformation", "cloudformation:engine-v2=localstack.services.providers:cloudformation_v2", "cloudwatch:default=localstack.services.providers:cloudwatch", "cloudwatch:v1=localstack.services.providers:cloudwatch_v1", "cloudwatch:v2=localstack.services.providers:cloudwatch_v2", "dynamodb:default=localstack.services.providers:dynamodb", "dynamodb:v2=localstack.services.providers:dynamodb_v2", "dynamodbstreams:default=localstack.services.providers:dynamodbstreams", "dynamodbstreams:v2=localstack.services.providers:dynamodbstreams_v2", "ec2:default=localstack.services.providers:ec2", "es:default=localstack.services.providers:es", "events:default=localstack.services.providers:events", "events:legacy=localstack.services.providers:events_legacy", "events:v1=localstack.services.providers:events_v1", "events:v2=localstack.services.providers:events_v2", "firehose:default=localstack.services.providers:firehose", "iam:default=localstack.services.providers:iam", "kinesis:default=localstack.services.providers:kinesis", "kms:default=localstack.services.providers:kms", "lambda:default=localstack.services.providers:lambda_", "lambda:asf=localstack.services.providers:lambda_asf", "lambda:v2=localstack.services.providers:lambda_v2", "logs:default=localstack.services.providers:logs", "opensearch:default=localstack.services.providers:opensearch", "redshift:default=localstack.services.providers:redshift", "resource-groups:default=localstack.services.providers:resource_groups", "resourcegroupstaggingapi:default=localstack.services.providers:resourcegroupstaggingapi", "route53:default=localstack.services.providers:route53", "route53resolver:default=localstack.services.providers:route53resolver", "s3:default=localstack.services.providers:s3", "s3control:default=localstack.services.providers:s3control", "scheduler:default=localstack.services.providers:scheduler", "secretsmanager:default=localstack.services.providers:secretsmanager", "ses:default=localstack.services.providers:ses", "sns:default=localstack.services.providers:sns", "sqs:default=localstack.services.providers:sqs", "ssm:default=localstack.services.providers:ssm", "stepfunctions:default=localstack.services.providers:stepfunctions", "stepfunctions:v2=localstack.services.providers:stepfunctions_v2", "sts:default=localstack.services.providers:sts", "support:default=localstack.services.providers:support", "swf:default=localstack.services.providers:swf", "transcribe:default=localstack.services.providers:transcribe"], "localstack.hooks.on_infra_shutdown": ["remove_custom_endpoints=localstack.services.lambda_.plugins:remove_custom_endpoints", "stop_server=localstack.dns.plugins:stop_server", "_run_init_scripts_on_shutdown=localstack.runtime.init:_run_init_scripts_on_shutdown", "publish_metrics=localstack.utils.analytics.metrics.publisher:publish_metrics", "run_on_after_service_shutdown_handlers=localstack.runtime.shutdown:run_on_after_service_shutdown_handlers", "run_shutdown_handlers=localstack.runtime.shutdown:run_shutdown_handlers", "shutdown_services=localstack.runtime.shutdown:shutdown_services"], "localstack.hooks.on_infra_ready": ["publish_provider_assignment=localstack.utils.analytics.service_providers:publish_provider_assignment", "_run_init_scripts_on_ready=localstack.runtime.init:_run_init_scripts_on_ready"], "localstack.lambda.runtime_executor": ["docker=localstack.services.lambda_.invocation.plugins:DockerRuntimeExecutorPlugin"], "localstack.runtime.components": ["aws=localstack.aws.components:AwsComponents"], "localstack.hooks.configure_localstack_container": ["_mount_machine_file=localstack.utils.analytics.metadata:_mount_machine_file"], "localstack.hooks.prepare_host": ["prepare_host_machine_id=localstack.utils.analytics.metadata:prepare_host_machine_id"], "localstack.init.runner": ["py=localstack.runtime.init:PythonScriptRunner", "sh=localstack.runtime.init:ShellScriptRunner"], "localstack.runtime.server": ["hypercorn=localstack.runtime.server.plugins:HypercornRuntimeServerPlugin", "twisted=localstack.runtime.server.plugins:TwistedRuntimeServerPlugin"]}
|
|
File without changes
|
{localstack_core-4.7.1.dev77.data → localstack_core-4.7.1.dev81.data}/scripts/localstack-supervisor
RENAMED
|
File without changes
|
{localstack_core-4.7.1.dev77.data → localstack_core-4.7.1.dev81.data}/scripts/localstack.bat
RENAMED
|
File without changes
|
|
File without changes
|
{localstack_core-4.7.1.dev77.dist-info → localstack_core-4.7.1.dev81.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{localstack_core-4.7.1.dev77.dist-info → localstack_core-4.7.1.dev81.dist-info}/licenses/LICENSE.txt
RENAMED
|
File without changes
|
{localstack_core-4.7.1.dev77.dist-info → localstack_core-4.7.1.dev81.dist-info}/top_level.txt
RENAMED
|
File without changes
|