localstack-core 4.4.1.dev59__py3-none-any.whl → 4.4.1.dev61__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.
- localstack/services/cloudformation/engine/v2/change_set_model.py +3 -2
- localstack/services/cloudformation/engine/v2/change_set_model_describer.py +33 -16
- localstack/services/cloudformation/engine/v2/change_set_model_executor.py +47 -20
- localstack/services/cloudformation/engine/v2/change_set_model_preproc.py +108 -16
- localstack/services/cloudformation/engine/v2/change_set_model_visitor.py +11 -1
- localstack/testing/pytest/cloudformation/fixtures.py +13 -1
- localstack/version.py +2 -2
- {localstack_core-4.4.1.dev59.dist-info → localstack_core-4.4.1.dev61.dist-info}/METADATA +1 -1
- {localstack_core-4.4.1.dev59.dist-info → localstack_core-4.4.1.dev61.dist-info}/RECORD +17 -17
- localstack_core-4.4.1.dev61.dist-info/plux.json +1 -0
- localstack_core-4.4.1.dev59.dist-info/plux.json +0 -1
- {localstack_core-4.4.1.dev59.data → localstack_core-4.4.1.dev61.data}/scripts/localstack +0 -0
- {localstack_core-4.4.1.dev59.data → localstack_core-4.4.1.dev61.data}/scripts/localstack-supervisor +0 -0
- {localstack_core-4.4.1.dev59.data → localstack_core-4.4.1.dev61.data}/scripts/localstack.bat +0 -0
- {localstack_core-4.4.1.dev59.dist-info → localstack_core-4.4.1.dev61.dist-info}/WHEEL +0 -0
- {localstack_core-4.4.1.dev59.dist-info → localstack_core-4.4.1.dev61.dist-info}/entry_points.txt +0 -0
- {localstack_core-4.4.1.dev59.dist-info → localstack_core-4.4.1.dev61.dist-info}/licenses/LICENSE.txt +0 -0
- {localstack_core-4.4.1.dev59.dist-info → localstack_core-4.4.1.dev61.dist-info}/top_level.txt +0 -0
@@ -386,6 +386,7 @@ FnGetAttKey: Final[str] = "Fn::GetAtt"
|
|
386
386
|
FnEqualsKey: Final[str] = "Fn::Equals"
|
387
387
|
FnFindInMapKey: Final[str] = "Fn::FindInMap"
|
388
388
|
FnSubKey: Final[str] = "Fn::Sub"
|
389
|
+
FnTransform: Final[str] = "Fn::Transform"
|
389
390
|
INTRINSIC_FUNCTIONS: Final[set[str]] = {
|
390
391
|
RefKey,
|
391
392
|
FnIfKey,
|
@@ -395,6 +396,7 @@ INTRINSIC_FUNCTIONS: Final[set[str]] = {
|
|
395
396
|
FnGetAttKey,
|
396
397
|
FnFindInMapKey,
|
397
398
|
FnSubKey,
|
399
|
+
FnTransform,
|
398
400
|
}
|
399
401
|
|
400
402
|
|
@@ -523,7 +525,6 @@ class ChangeSetModel:
|
|
523
525
|
def _resolve_intrinsic_function_ref(self, arguments: ChangeSetEntity) -> ChangeType:
|
524
526
|
if arguments.change_type != ChangeType.UNCHANGED:
|
525
527
|
return arguments.change_type
|
526
|
-
# TODO: add support for nested functions, here we assume the argument is a logicalID.
|
527
528
|
if not isinstance(arguments, TerminalValue):
|
528
529
|
return arguments.change_type
|
529
530
|
|
@@ -1170,7 +1171,7 @@ class ChangeSetModel:
|
|
1170
1171
|
parameters_scope, parameter_name, before_parameters, after_parameters
|
1171
1172
|
)
|
1172
1173
|
node_parameter = self._visit_parameter(
|
1173
|
-
|
1174
|
+
parameter_scope,
|
1174
1175
|
parameter_name,
|
1175
1176
|
before_parameter=before_parameter,
|
1176
1177
|
after_parameter=after_parameter,
|
@@ -6,6 +6,7 @@ from typing import Final, Optional
|
|
6
6
|
import localstack.aws.api.cloudformation as cfn_api
|
7
7
|
from localstack.services.cloudformation.engine.v2.change_set_model import (
|
8
8
|
NodeIntrinsicFunction,
|
9
|
+
NodeProperty,
|
9
10
|
NodeResource,
|
10
11
|
PropertiesKey,
|
11
12
|
)
|
@@ -45,26 +46,36 @@ class ChangeSetModelDescriber(ChangeSetModelPreproc):
|
|
45
46
|
# artificially limit the precision of our output to match AWS's?
|
46
47
|
|
47
48
|
arguments_delta = self.visit(node_intrinsic_function.arguments)
|
48
|
-
|
49
|
-
|
49
|
+
before_argument: Optional[list[str]] = arguments_delta.before
|
50
|
+
if isinstance(before_argument, str):
|
51
|
+
before_argument = before_argument.split(".")
|
52
|
+
after_argument: Optional[list[str]] = arguments_delta.after
|
53
|
+
if isinstance(after_argument, str):
|
54
|
+
after_argument = after_argument.split(".")
|
50
55
|
|
51
56
|
before = None
|
52
|
-
if
|
53
|
-
before_logical_name_of_resource =
|
54
|
-
before_attribute_name =
|
57
|
+
if before_argument:
|
58
|
+
before_logical_name_of_resource = before_argument[0]
|
59
|
+
before_attribute_name = before_argument[1]
|
55
60
|
before_node_resource = self._get_node_resource_for(
|
56
61
|
resource_name=before_logical_name_of_resource, node_template=self._node_template
|
57
62
|
)
|
58
|
-
before_node_property = self._get_node_property_for(
|
63
|
+
before_node_property: Optional[NodeProperty] = self._get_node_property_for(
|
59
64
|
property_name=before_attribute_name, node_resource=before_node_resource
|
60
65
|
)
|
61
|
-
|
62
|
-
|
66
|
+
if before_node_property is not None:
|
67
|
+
before_property_delta = self.visit(before_node_property)
|
68
|
+
before = before_property_delta.before
|
69
|
+
else:
|
70
|
+
before = self._before_deployed_property_value_of(
|
71
|
+
resource_logical_id=before_logical_name_of_resource,
|
72
|
+
property_name=before_attribute_name,
|
73
|
+
)
|
63
74
|
|
64
75
|
after = None
|
65
|
-
if
|
66
|
-
after_logical_name_of_resource =
|
67
|
-
after_attribute_name =
|
76
|
+
if after_argument:
|
77
|
+
after_logical_name_of_resource = after_argument[0]
|
78
|
+
after_attribute_name = after_argument[1]
|
68
79
|
after_node_resource = self._get_node_resource_for(
|
69
80
|
resource_name=after_logical_name_of_resource, node_template=self._node_template
|
70
81
|
)
|
@@ -74,12 +85,18 @@ class ChangeSetModelDescriber(ChangeSetModelPreproc):
|
|
74
85
|
)
|
75
86
|
if after_node_property is not None:
|
76
87
|
after_property_delta = self.visit(after_node_property)
|
88
|
+
if after_property_delta.before == after_property_delta.after:
|
89
|
+
after = after_property_delta.after
|
90
|
+
else:
|
91
|
+
after = CHANGESET_KNOWN_AFTER_APPLY
|
77
92
|
else:
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
93
|
+
try:
|
94
|
+
after = self._after_deployed_property_value_of(
|
95
|
+
resource_logical_id=after_logical_name_of_resource,
|
96
|
+
property_name=after_attribute_name,
|
97
|
+
)
|
98
|
+
except RuntimeError:
|
99
|
+
after = CHANGESET_KNOWN_AFTER_APPLY
|
83
100
|
|
84
101
|
return PreprocEntityDelta(before=before, after=after)
|
85
102
|
|
@@ -103,40 +103,44 @@ class ChangeSetModelExecutor(ChangeSetModelPreproc):
|
|
103
103
|
`after` delta with the physical resource ID, if side effects resulted in an update.
|
104
104
|
"""
|
105
105
|
delta = super().visit_node_resource(node_resource=node_resource)
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
106
|
+
before = delta.before
|
107
|
+
after = delta.after
|
108
|
+
|
109
|
+
if before != after:
|
110
|
+
# There are changes for this resource.
|
111
|
+
self._execute_resource_change(name=node_resource.name, before=before, after=after)
|
112
|
+
else:
|
113
|
+
# There are no updates for this resource; iff the resource was previously
|
114
|
+
# deployed, then the resolved details are copied in the current state for
|
115
|
+
# references or other downstream operations.
|
116
|
+
if before is not None:
|
117
|
+
before_logical_id = delta.before.logical_id
|
118
|
+
before_resource = self._before_resolved_resources.get(before_logical_id, dict())
|
119
|
+
self.resources[before_logical_id] = before_resource
|
120
|
+
|
121
|
+
# Update the latest version of this resource for downstream references.
|
122
|
+
if after is not None:
|
123
|
+
after_logical_id = after.logical_id
|
124
|
+
after_physical_id: str = self._after_resource_physical_id(
|
113
125
|
resource_logical_id=after_logical_id
|
114
126
|
)
|
115
|
-
|
116
|
-
raise RuntimeError(
|
117
|
-
f"No PhysicalResourceId was found for resource '{after_physical_id}' post-update."
|
118
|
-
)
|
119
|
-
after_resource.physical_resource_id = after_physical_id
|
127
|
+
after.physical_resource_id = after_physical_id
|
120
128
|
return delta
|
121
129
|
|
122
130
|
def visit_node_output(
|
123
131
|
self, node_output: NodeOutput
|
124
132
|
) -> PreprocEntityDelta[PreprocOutput, PreprocOutput]:
|
125
133
|
delta = super().visit_node_output(node_output=node_output)
|
126
|
-
|
127
|
-
|
128
|
-
# TODO: are there other situations?
|
134
|
+
after = delta.after
|
135
|
+
if after is None or (isinstance(after, PreprocOutput) and after.condition is False):
|
129
136
|
return delta
|
130
|
-
|
131
137
|
self.outputs[delta.after.name] = delta.after.value
|
132
138
|
return delta
|
133
139
|
|
134
|
-
def
|
140
|
+
def _execute_resource_change(
|
135
141
|
self, name: str, before: Optional[PreprocResource], after: Optional[PreprocResource]
|
136
142
|
) -> None:
|
137
|
-
|
138
|
-
# unchanged: nothing to do.
|
139
|
-
return
|
143
|
+
# Changes are to be made about this resource.
|
140
144
|
# TODO: this logic is a POC and should be revised.
|
141
145
|
if before is not None and after is not None:
|
142
146
|
# Case: change on same type.
|
@@ -257,11 +261,34 @@ class ChangeSetModelExecutor(ChangeSetModelPreproc):
|
|
257
261
|
case OperationStatus.SUCCESS:
|
258
262
|
# merge the resources state with the external state
|
259
263
|
# TODO: this is likely a duplicate of updating from extra_resource_properties
|
264
|
+
|
265
|
+
# TODO: add typing
|
266
|
+
# TODO: avoid the use of string literals for sampling from the object, use typed classes instead
|
267
|
+
# TODO: avoid sampling from resources and use tmp var reference
|
268
|
+
# TODO: add utils functions to abstract this logic away (resource.update(..))
|
269
|
+
# TODO: avoid the use of setdefault (debuggability/readability)
|
270
|
+
# TODO: review the use of merge
|
271
|
+
|
260
272
|
self.resources[logical_resource_id]["Properties"].update(event.resource_model)
|
261
273
|
self.resources[logical_resource_id].update(extra_resource_properties)
|
262
274
|
# XXX for legacy delete_stack compatibility
|
263
275
|
self.resources[logical_resource_id]["LogicalResourceId"] = logical_resource_id
|
264
276
|
self.resources[logical_resource_id]["Type"] = resource_type
|
277
|
+
|
278
|
+
# TODO: review why the physical id is returned as None during updates
|
279
|
+
# TODO: abstract this in member function of resource classes instead
|
280
|
+
physical_resource_id = None
|
281
|
+
try:
|
282
|
+
physical_resource_id = self._after_resource_physical_id(logical_resource_id)
|
283
|
+
except RuntimeError:
|
284
|
+
# The physical id is missing or is set to None, which is invalid.
|
285
|
+
pass
|
286
|
+
if physical_resource_id is None:
|
287
|
+
# The physical resource id is None after an update that didn't rewrite the resource, the previous
|
288
|
+
# resource id is therefore the current physical id of this resource.
|
289
|
+
physical_resource_id = self._before_resource_physical_id(logical_resource_id)
|
290
|
+
self.resources[logical_resource_id]["PhysicalResourceId"] = physical_resource_id
|
291
|
+
|
265
292
|
case OperationStatus.FAILED:
|
266
293
|
reason = event.message
|
267
294
|
LOG.warning(
|
@@ -3,6 +3,11 @@ from __future__ import annotations
|
|
3
3
|
import re
|
4
4
|
from typing import Any, Final, Generic, Optional, TypeVar
|
5
5
|
|
6
|
+
from localstack.services.cloudformation.engine.transformers import (
|
7
|
+
Transformer,
|
8
|
+
execute_macro,
|
9
|
+
transformers,
|
10
|
+
)
|
6
11
|
from localstack.services.cloudformation.engine.v2.change_set_model import (
|
7
12
|
ChangeSetEntity,
|
8
13
|
ChangeType,
|
@@ -30,6 +35,7 @@ from localstack.services.cloudformation.engine.v2.change_set_model import (
|
|
30
35
|
from localstack.services.cloudformation.engine.v2.change_set_model_visitor import (
|
31
36
|
ChangeSetModelVisitor,
|
32
37
|
)
|
38
|
+
from localstack.services.cloudformation.stores import get_cloudformation_store
|
33
39
|
from localstack.services.cloudformation.v2.entities import ChangeSet
|
34
40
|
from localstack.utils.aws.arns import get_partition
|
35
41
|
from localstack.utils.urls import localstack_host
|
@@ -168,6 +174,7 @@ class ChangeSetModelPreproc(ChangeSetModelVisitor):
|
|
168
174
|
# TODO: this could be improved with hashmap lookups if the Node contained bindings and not lists.
|
169
175
|
for node_resource in node_template.resources.resources:
|
170
176
|
if node_resource.name == resource_name:
|
177
|
+
self.visit(node_resource)
|
171
178
|
return node_resource
|
172
179
|
raise RuntimeError(f"No resource '{resource_name}' was found")
|
173
180
|
|
@@ -177,6 +184,7 @@ class ChangeSetModelPreproc(ChangeSetModelVisitor):
|
|
177
184
|
# TODO: this could be improved with hashmap lookups if the Node contained bindings and not lists.
|
178
185
|
for node_property in node_resource.properties.properties:
|
179
186
|
if node_property.name == property_name:
|
187
|
+
self.visit(node_property)
|
180
188
|
return node_property
|
181
189
|
return None
|
182
190
|
|
@@ -189,10 +197,9 @@ class ChangeSetModelPreproc(ChangeSetModelVisitor):
|
|
189
197
|
# process the resource if this wasn't processed already. Ideally, values should only
|
190
198
|
# be accessible through delta objects, to ensure computation is always complete at
|
191
199
|
# every level.
|
192
|
-
|
200
|
+
_ = self._get_node_resource_for(
|
193
201
|
resource_name=resource_logical_id, node_template=self._node_template
|
194
202
|
)
|
195
|
-
self.visit(node_resource)
|
196
203
|
|
197
204
|
resolved_resource = resolved_resources.get(resource_logical_id)
|
198
205
|
if resolved_resource is None:
|
@@ -228,6 +235,7 @@ class ChangeSetModelPreproc(ChangeSetModelVisitor):
|
|
228
235
|
# TODO: another scenarios suggesting property lookups might be preferable.
|
229
236
|
for mapping in mappings:
|
230
237
|
if mapping.name == map_name:
|
238
|
+
self.visit(mapping)
|
231
239
|
return mapping
|
232
240
|
# TODO
|
233
241
|
raise RuntimeError()
|
@@ -237,6 +245,7 @@ class ChangeSetModelPreproc(ChangeSetModelVisitor):
|
|
237
245
|
# TODO: another scenarios suggesting property lookups might be preferable.
|
238
246
|
for parameter in parameters:
|
239
247
|
if parameter.name == parameter_name:
|
248
|
+
self.visit(parameter)
|
240
249
|
return parameter
|
241
250
|
return None
|
242
251
|
|
@@ -245,6 +254,7 @@ class ChangeSetModelPreproc(ChangeSetModelVisitor):
|
|
245
254
|
# TODO: another scenarios suggesting property lookups might be preferable.
|
246
255
|
for condition in conditions:
|
247
256
|
if condition.name == condition_name:
|
257
|
+
self.visit(condition)
|
248
258
|
return condition
|
249
259
|
return None
|
250
260
|
|
@@ -372,15 +382,19 @@ class ChangeSetModelPreproc(ChangeSetModelVisitor):
|
|
372
382
|
def visit_node_intrinsic_function_fn_get_att(
|
373
383
|
self, node_intrinsic_function: NodeIntrinsicFunction
|
374
384
|
) -> PreprocEntityDelta:
|
375
|
-
arguments_delta = self.visit(node_intrinsic_function.arguments)
|
376
385
|
# TODO: validate the return value according to the spec.
|
377
|
-
|
378
|
-
|
386
|
+
arguments_delta = self.visit(node_intrinsic_function.arguments)
|
387
|
+
before_argument: Optional[list[str]] = arguments_delta.before
|
388
|
+
if isinstance(before_argument, str):
|
389
|
+
before_argument = before_argument.split(".")
|
390
|
+
after_argument: Optional[list[str]] = arguments_delta.after
|
391
|
+
if isinstance(after_argument, str):
|
392
|
+
after_argument = after_argument.split(".")
|
379
393
|
|
380
394
|
before = None
|
381
|
-
if
|
382
|
-
before_logical_name_of_resource =
|
383
|
-
before_attribute_name =
|
395
|
+
if before_argument:
|
396
|
+
before_logical_name_of_resource = before_argument[0]
|
397
|
+
before_attribute_name = before_argument[1]
|
384
398
|
|
385
399
|
before_node_resource = self._get_node_resource_for(
|
386
400
|
resource_name=before_logical_name_of_resource, node_template=self._node_template
|
@@ -401,9 +415,9 @@ class ChangeSetModelPreproc(ChangeSetModelVisitor):
|
|
401
415
|
)
|
402
416
|
|
403
417
|
after = None
|
404
|
-
if
|
405
|
-
after_logical_name_of_resource =
|
406
|
-
after_attribute_name =
|
418
|
+
if after_argument:
|
419
|
+
after_logical_name_of_resource = after_argument[0]
|
420
|
+
after_attribute_name = after_argument[1]
|
407
421
|
after_node_resource = self._get_node_resource_for(
|
408
422
|
resource_name=after_logical_name_of_resource, node_template=self._node_template
|
409
423
|
)
|
@@ -452,10 +466,14 @@ class ChangeSetModelPreproc(ChangeSetModelVisitor):
|
|
452
466
|
)
|
453
467
|
|
454
468
|
# TODO: add support for this being created or removed.
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
469
|
+
before = None
|
470
|
+
if arguments_delta.before:
|
471
|
+
before_outcome_delta = _compute_delta_for_if_statement(arguments_delta.before)
|
472
|
+
before = before_outcome_delta.before
|
473
|
+
after = None
|
474
|
+
if arguments_delta.after:
|
475
|
+
after_outcome_delta = _compute_delta_for_if_statement(arguments_delta.after)
|
476
|
+
after = after_outcome_delta.after
|
459
477
|
return PreprocEntityDelta(before=before, after=after)
|
460
478
|
|
461
479
|
def visit_node_intrinsic_function_fn_not(
|
@@ -478,6 +496,78 @@ class ChangeSetModelPreproc(ChangeSetModelVisitor):
|
|
478
496
|
# Implicit change type computation.
|
479
497
|
return PreprocEntityDelta(before=before, after=after)
|
480
498
|
|
499
|
+
def _compute_fn_transform(self, args: dict[str, Any]) -> Any:
|
500
|
+
# TODO: add typing to arguments before this level.
|
501
|
+
# TODO: add schema validation
|
502
|
+
# TODO: add support for other transform types
|
503
|
+
|
504
|
+
account_id = self._change_set.account_id
|
505
|
+
region_name = self._change_set.region_name
|
506
|
+
transform_name: str = args.get("Name")
|
507
|
+
if not isinstance(transform_name, str):
|
508
|
+
raise RuntimeError("Invalid or missing Fn::Transform 'Name' argument")
|
509
|
+
transform_parameters: dict = args.get("Parameters")
|
510
|
+
if not isinstance(transform_parameters, dict):
|
511
|
+
raise RuntimeError("Invalid or missing Fn::Transform 'Parameters' argument")
|
512
|
+
|
513
|
+
if transform_name in transformers:
|
514
|
+
# TODO: port and refactor this 'transformers' logic to this package.
|
515
|
+
builtin_transformer_class = transformers[transform_name]
|
516
|
+
builtin_transformer: Transformer = builtin_transformer_class()
|
517
|
+
transform_output: Any = builtin_transformer.transform(
|
518
|
+
account_id=account_id, region_name=region_name, parameters=transform_parameters
|
519
|
+
)
|
520
|
+
return transform_output
|
521
|
+
|
522
|
+
macros_store = get_cloudformation_store(
|
523
|
+
account_id=account_id, region_name=region_name
|
524
|
+
).macros
|
525
|
+
if transform_name in macros_store:
|
526
|
+
# TODO: this formatting of stack parameters is odd but required to integrate with v1 execute_macro util.
|
527
|
+
# consider porting this utils and passing the plain list of parameters instead.
|
528
|
+
stack_parameters = {
|
529
|
+
parameter["ParameterKey"]: parameter
|
530
|
+
for parameter in self._change_set.stack.parameters
|
531
|
+
}
|
532
|
+
transform_output: Any = execute_macro(
|
533
|
+
account_id=account_id,
|
534
|
+
region_name=region_name,
|
535
|
+
parsed_template=dict(), # TODO: review the requirements for this argument.
|
536
|
+
macro=args, # TODO: review support for non dict bindings (v1).
|
537
|
+
stack_parameters=stack_parameters,
|
538
|
+
transformation_parameters=transform_parameters,
|
539
|
+
is_intrinsic=True,
|
540
|
+
)
|
541
|
+
return transform_output
|
542
|
+
|
543
|
+
raise RuntimeError(
|
544
|
+
f"Unsupported transform function '{transform_name}' in '{self._change_set.stack.stack_name}'"
|
545
|
+
)
|
546
|
+
|
547
|
+
def visit_node_intrinsic_function_fn_transform(
|
548
|
+
self, node_intrinsic_function: NodeIntrinsicFunction
|
549
|
+
) -> PreprocEntityDelta:
|
550
|
+
arguments_delta = self.visit(node_intrinsic_function.arguments)
|
551
|
+
arguments_before = arguments_delta.before
|
552
|
+
arguments_after = arguments_delta.after
|
553
|
+
|
554
|
+
# TODO: review the use of cache in self.precessed from the 'before' run to
|
555
|
+
# ensure changes to the lambda (such as after UpdateFunctionCode) do not
|
556
|
+
# generalise tot he before value at this depth (thus making it seems as
|
557
|
+
# though for this transformation before==after). Another options may be to
|
558
|
+
# have specialised caching for transformations.
|
559
|
+
|
560
|
+
# TODO: add tests to review the behaviour of CFN with changes to transformation
|
561
|
+
# function code and no changes to the template.
|
562
|
+
|
563
|
+
before = None
|
564
|
+
if arguments_before:
|
565
|
+
before = self._compute_fn_transform(args=arguments_before)
|
566
|
+
after = None
|
567
|
+
if arguments_after:
|
568
|
+
after = self._compute_fn_transform(args=arguments_after)
|
569
|
+
return PreprocEntityDelta(before=before, after=after)
|
570
|
+
|
481
571
|
def visit_node_intrinsic_function_fn_sub(
|
482
572
|
self, node_intrinsic_function: NodeIntrinsicFunction
|
483
573
|
) -> PreprocEntityDelta:
|
@@ -520,6 +610,8 @@ class ChangeSetModelPreproc(ChangeSetModelVisitor):
|
|
520
610
|
template_variable_value = (
|
521
611
|
reference_delta.before if select_before else reference_delta.after
|
522
612
|
)
|
613
|
+
if isinstance(template_variable_value, PreprocResource):
|
614
|
+
template_variable_value = template_variable_value.logical_id
|
523
615
|
except RuntimeError:
|
524
616
|
raise RuntimeError(
|
525
617
|
f"Undefined variable name in Fn::Sub string template '{template_variable_name}'"
|
@@ -558,7 +650,7 @@ class ChangeSetModelPreproc(ChangeSetModelVisitor):
|
|
558
650
|
delimiter: str = str(args[0])
|
559
651
|
values: list[Any] = args[1]
|
560
652
|
if not isinstance(values, list):
|
561
|
-
raise RuntimeError("Invalid arguments list definition for Fn::Join")
|
653
|
+
raise RuntimeError(f"Invalid arguments list definition for Fn::Join: '{args}'")
|
562
654
|
join_result = delimiter.join(map(str, values))
|
563
655
|
return join_result
|
564
656
|
|
@@ -48,7 +48,12 @@ class ChangeSetModelVisitor(abc.ABC):
|
|
48
48
|
self.visit(child)
|
49
49
|
|
50
50
|
def visit_node_template(self, node_template: NodeTemplate):
|
51
|
-
|
51
|
+
# Visit the resources, which will lazily evaluate all the referenced (direct and indirect)
|
52
|
+
# entities (parameters, mappings, conditions, etc.). Then compute the output fields; computing
|
53
|
+
# only the output fields would only result in the deployment logic of the referenced outputs
|
54
|
+
# being evaluated, hence enforce the visiting of all the resources first.
|
55
|
+
self.visit(node_template.resources)
|
56
|
+
self.visit(node_template.outputs)
|
52
57
|
|
53
58
|
def visit_node_outputs(self, node_outputs: NodeOutputs):
|
54
59
|
self.visit_children(node_outputs)
|
@@ -108,6 +113,11 @@ class ChangeSetModelVisitor(abc.ABC):
|
|
108
113
|
):
|
109
114
|
self.visit_children(node_intrinsic_function)
|
110
115
|
|
116
|
+
def visit_node_intrinsic_function_fn_transform(
|
117
|
+
self, node_intrinsic_function: NodeIntrinsicFunction
|
118
|
+
):
|
119
|
+
self.visit_children(node_intrinsic_function)
|
120
|
+
|
111
121
|
def visit_node_intrinsic_function_fn_sub(self, node_intrinsic_function: NodeIntrinsicFunction):
|
112
122
|
self.visit_children(node_intrinsic_function)
|
113
123
|
|
@@ -4,7 +4,7 @@ from typing import Callable
|
|
4
4
|
|
5
5
|
import pytest
|
6
6
|
|
7
|
-
from localstack.aws.api.cloudformation import StackEvent
|
7
|
+
from localstack.aws.api.cloudformation import DescribeChangeSetOutput, StackEvent
|
8
8
|
from localstack.aws.connect import ServiceLevelClientFactory
|
9
9
|
from localstack.utils.functions import call_safe
|
10
10
|
from localstack.utils.strings import short_uid
|
@@ -29,6 +29,12 @@ def capture_per_resource_events(
|
|
29
29
|
return capture
|
30
30
|
|
31
31
|
|
32
|
+
def _normalise_describe_change_set_output(value: DescribeChangeSetOutput) -> None:
|
33
|
+
value.get("Changes", list()).sort(
|
34
|
+
key=lambda change: change.get("ResourceChange", dict()).get("LogicalResourceId", str())
|
35
|
+
)
|
36
|
+
|
37
|
+
|
32
38
|
@pytest.fixture
|
33
39
|
def capture_update_process(aws_client_no_retry, cleanups, capture_per_resource_events):
|
34
40
|
"""
|
@@ -84,12 +90,15 @@ def capture_update_process(aws_client_no_retry, cleanups, capture_per_resource_e
|
|
84
90
|
ChangeSetName=change_set_id, IncludePropertyValues=True
|
85
91
|
)
|
86
92
|
)
|
93
|
+
_normalise_describe_change_set_output(describe_change_set_with_prop_values)
|
87
94
|
snapshot.match("describe-change-set-1-prop-values", describe_change_set_with_prop_values)
|
95
|
+
|
88
96
|
describe_change_set_without_prop_values = (
|
89
97
|
aws_client_no_retry.cloudformation.describe_change_set(
|
90
98
|
ChangeSetName=change_set_id, IncludePropertyValues=False
|
91
99
|
)
|
92
100
|
)
|
101
|
+
_normalise_describe_change_set_output(describe_change_set_without_prop_values)
|
93
102
|
snapshot.match("describe-change-set-1", describe_change_set_without_prop_values)
|
94
103
|
|
95
104
|
execute_results = aws_client_no_retry.cloudformation.execute_change_set(
|
@@ -132,12 +141,15 @@ def capture_update_process(aws_client_no_retry, cleanups, capture_per_resource_e
|
|
132
141
|
ChangeSetName=change_set_id, IncludePropertyValues=True
|
133
142
|
)
|
134
143
|
)
|
144
|
+
_normalise_describe_change_set_output(describe_change_set_with_prop_values)
|
135
145
|
snapshot.match("describe-change-set-2-prop-values", describe_change_set_with_prop_values)
|
146
|
+
|
136
147
|
describe_change_set_without_prop_values = (
|
137
148
|
aws_client_no_retry.cloudformation.describe_change_set(
|
138
149
|
ChangeSetName=change_set_id, IncludePropertyValues=False
|
139
150
|
)
|
140
151
|
)
|
152
|
+
_normalise_describe_change_set_output(describe_change_set_without_prop_values)
|
141
153
|
snapshot.match("describe-change-set-2", describe_change_set_without_prop_values)
|
142
154
|
|
143
155
|
execute_results = aws_client_no_retry.cloudformation.execute_change_set(
|
localstack/version.py
CHANGED
@@ -17,5 +17,5 @@ __version__: str
|
|
17
17
|
__version_tuple__: VERSION_TUPLE
|
18
18
|
version_tuple: VERSION_TUPLE
|
19
19
|
|
20
|
-
__version__ = version = '4.4.1.
|
21
|
-
__version_tuple__ = version_tuple = (4, 4, 1, '
|
20
|
+
__version__ = version = '4.4.1.dev61'
|
21
|
+
__version_tuple__ = version_tuple = (4, 4, 1, 'dev61')
|
@@ -4,7 +4,7 @@ localstack/deprecations.py,sha256=mNXTebZ8kSbQjFKz0LbT-g1Kdr0CE8bhEgZfHV3IX0s,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=BiE34atc8jkKXYJSnPavvUElTXitHO1CC7TKf01jArs,526
|
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
|
@@ -310,11 +310,11 @@ localstack/services/cloudformation/engine/types.py,sha256=YIhmTrO__obIviYvzzCovK
|
|
310
310
|
localstack/services/cloudformation/engine/validations.py,sha256=brq7s8O8exA5kvnfzR9ulOtQ7i4konrWQs07-0h_ByE,2847
|
311
311
|
localstack/services/cloudformation/engine/yaml_parser.py,sha256=LQpAVq9Syze9jXUGen9Mz8SjosBuodpV5XvsCSn9bDg,2164
|
312
312
|
localstack/services/cloudformation/engine/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
313
|
-
localstack/services/cloudformation/engine/v2/change_set_model.py,sha256=
|
314
|
-
localstack/services/cloudformation/engine/v2/change_set_model_describer.py,sha256=
|
315
|
-
localstack/services/cloudformation/engine/v2/change_set_model_executor.py,sha256=
|
316
|
-
localstack/services/cloudformation/engine/v2/change_set_model_preproc.py,sha256=
|
317
|
-
localstack/services/cloudformation/engine/v2/change_set_model_visitor.py,sha256=
|
313
|
+
localstack/services/cloudformation/engine/v2/change_set_model.py,sha256=w0LYTNQnW0mMZnAQvL4CHBX_r2oK0phCwnLpcf73vnk,50933
|
314
|
+
localstack/services/cloudformation/engine/v2/change_set_model_describer.py,sha256=IkuH0jSOd9VdZpexYXl04B5iod9PFNAImrcgD3Lh1zc,9126
|
315
|
+
localstack/services/cloudformation/engine/v2/change_set_model_executor.py,sha256=6hyGcqSTBAfEdEJZ8mG9pkWc8X_UfQ6KeL6SR-FNaQQ,16168
|
316
|
+
localstack/services/cloudformation/engine/v2/change_set_model_preproc.py,sha256=nZHQ_s5k0pAK-JIsi5U73ZYelTRFxA91rhYg9jrpyGU,38822
|
317
|
+
localstack/services/cloudformation/engine/v2/change_set_model_visitor.py,sha256=spv0qpCb9-I4yT4rIkSWyTU5XsbcFZBj5M1SUl2iAJo,6208
|
318
318
|
localstack/services/cloudformation/models/__init__.py,sha256=da1PTClDMl-IBkrSvq6JC1lnS-K_BASzCvxVhNxN5Ls,13
|
319
319
|
localstack/services/cloudformation/resource_providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
320
320
|
localstack/services/cloudformation/resource_providers/aws_cloudformation_macro.py,sha256=Grn3dP1jANRlVO9HyKQV5GHv0x1eNRBeaIYhgn-FKv4,2812
|
@@ -1178,7 +1178,7 @@ localstack/testing/pytest/path_filter.py,sha256=U1V5qy23H7yZ6Tznr-MdveeH7TvCM_u4
|
|
1178
1178
|
localstack/testing/pytest/util.py,sha256=TQAAb_Cj5gTSX0VkenAbSabvyCkl7THxEj70PrT_H7Y,941
|
1179
1179
|
localstack/testing/pytest/validation_tracking.py,sha256=zGYn2r2n1xEe2Xq2JLPhS5dQJ9s29pIQEFpiF7ifehM,5630
|
1180
1180
|
localstack/testing/pytest/cloudformation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1181
|
-
localstack/testing/pytest/cloudformation/fixtures.py,sha256=
|
1181
|
+
localstack/testing/pytest/cloudformation/fixtures.py,sha256=q0dyZlcjUwNlhlZuxCCxWJFhgq9HQF9jt_WjFxdHHJk,7029
|
1182
1182
|
localstack/testing/pytest/stepfunctions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1183
1183
|
localstack/testing/pytest/stepfunctions/fixtures.py,sha256=m9gdU7opK1LoDKuUDTJKcuUfWi4LWHw0idL0_GNlkfo,32817
|
1184
1184
|
localstack/testing/pytest/stepfunctions/utils.py,sha256=zK9qD4o1dOoKkr2hwmNBfv4DqgxNiX1zRd335FG9i7o,31298
|
@@ -1279,13 +1279,13 @@ localstack/utils/server/tcp_proxy.py,sha256=rR6d5jR0ozDvIlpHiqW0cfyY9a2fRGdOzyA8
|
|
1279
1279
|
localstack/utils/xray/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1280
1280
|
localstack/utils/xray/trace_header.py,sha256=ahXk9eonq7LpeENwlqUEPj3jDOCiVRixhntQuxNor-Q,6209
|
1281
1281
|
localstack/utils/xray/traceid.py,sha256=SQSsMV2rhbTNK6ceIoozZYuGU7Fg687EXcgqxoDl1Fw,1106
|
1282
|
-
localstack_core-4.4.1.
|
1283
|
-
localstack_core-4.4.1.
|
1284
|
-
localstack_core-4.4.1.
|
1285
|
-
localstack_core-4.4.1.
|
1286
|
-
localstack_core-4.4.1.
|
1287
|
-
localstack_core-4.4.1.
|
1288
|
-
localstack_core-4.4.1.
|
1289
|
-
localstack_core-4.4.1.
|
1290
|
-
localstack_core-4.4.1.
|
1291
|
-
localstack_core-4.4.1.
|
1282
|
+
localstack_core-4.4.1.dev61.data/scripts/localstack,sha256=WyL11vp5CkuP79iIR-L8XT7Cj8nvmxX7XRAgxhbmXNE,529
|
1283
|
+
localstack_core-4.4.1.dev61.data/scripts/localstack-supervisor,sha256=nm1Il2d6ASyOB6Vo4CRHd90w7TK9FdRl9VPp0NN6hUk,6378
|
1284
|
+
localstack_core-4.4.1.dev61.data/scripts/localstack.bat,sha256=tlzZTXtveHkMX_s_fa7VDfvdNdS8iVpEz2ER3uk9B_c,29
|
1285
|
+
localstack_core-4.4.1.dev61.dist-info/licenses/LICENSE.txt,sha256=3PC-9Z69UsNARuQ980gNR_JsLx8uvMjdG6C7cc4LBYs,606
|
1286
|
+
localstack_core-4.4.1.dev61.dist-info/METADATA,sha256=FRb_3DESddb_1an0xfEZFph237GChJ_yLE98C4u3hqo,5539
|
1287
|
+
localstack_core-4.4.1.dev61.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
1288
|
+
localstack_core-4.4.1.dev61.dist-info/entry_points.txt,sha256=K5M7il9Vwev64SlQiOaZVUhYpVNIE6IFHiWJ0znpbHQ,20491
|
1289
|
+
localstack_core-4.4.1.dev61.dist-info/plux.json,sha256=2I9IjVDjFdYnr155NCMe5Fe6q6uCH1ObYe_bK6TB-_0,20712
|
1290
|
+
localstack_core-4.4.1.dev61.dist-info/top_level.txt,sha256=3sqmK2lGac8nCy8nwsbS5SpIY_izmtWtgaTFKHYVHbI,11
|
1291
|
+
localstack_core-4.4.1.dev61.dist-info/RECORD,,
|
@@ -0,0 +1 @@
|
|
1
|
+
{"localstack.cloudformation.resource_providers": ["AWS::EC2::SecurityGroup=localstack.services.ec2.resource_providers.aws_ec2_securitygroup_plugin:EC2SecurityGroupProviderPlugin", "AWS::ApiGateway::GatewayResponse=localstack.services.apigateway.resource_providers.aws_apigateway_gatewayresponse_plugin:ApiGatewayGatewayResponseProviderPlugin", "AWS::Lambda::Version=localstack.services.lambda_.resource_providers.aws_lambda_version_plugin:LambdaVersionProviderPlugin", "AWS::KMS::Key=localstack.services.kms.resource_providers.aws_kms_key_plugin:KMSKeyProviderPlugin", "AWS::EC2::TransitGateway=localstack.services.ec2.resource_providers.aws_ec2_transitgateway_plugin:EC2TransitGatewayProviderPlugin", "AWS::Lambda::CodeSigningConfig=localstack.services.lambda_.resource_providers.aws_lambda_codesigningconfig_plugin:LambdaCodeSigningConfigProviderPlugin", "AWS::KMS::Alias=localstack.services.kms.resource_providers.aws_kms_alias_plugin:KMSAliasProviderPlugin", "AWS::Lambda::Url=localstack.services.lambda_.resource_providers.aws_lambda_url_plugin:LambdaUrlProviderPlugin", "AWS::EC2::NatGateway=localstack.services.ec2.resource_providers.aws_ec2_natgateway_plugin:EC2NatGatewayProviderPlugin", "AWS::EC2::SubnetRouteTableAssociation=localstack.services.ec2.resource_providers.aws_ec2_subnetroutetableassociation_plugin:EC2SubnetRouteTableAssociationProviderPlugin", "AWS::SNS::TopicPolicy=localstack.services.sns.resource_providers.aws_sns_topicpolicy_plugin:SNSTopicPolicyProviderPlugin", "AWS::SNS::Topic=localstack.services.sns.resource_providers.aws_sns_topic_plugin:SNSTopicProviderPlugin", "AWS::StepFunctions::StateMachine=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_statemachine_plugin:StepFunctionsStateMachineProviderPlugin", "AWS::Kinesis::Stream=localstack.services.kinesis.resource_providers.aws_kinesis_stream_plugin:KinesisStreamProviderPlugin", "AWS::ApiGateway::BasePathMapping=localstack.services.apigateway.resource_providers.aws_apigateway_basepathmapping_plugin:ApiGatewayBasePathMappingProviderPlugin", "AWS::StepFunctions::Activity=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_activity_plugin:StepFunctionsActivityProviderPlugin", "AWS::ApiGateway::UsagePlan=localstack.services.apigateway.resource_providers.aws_apigateway_usageplan_plugin:ApiGatewayUsagePlanProviderPlugin", "AWS::CertificateManager::Certificate=localstack.services.certificatemanager.resource_providers.aws_certificatemanager_certificate_plugin:CertificateManagerCertificateProviderPlugin", "AWS::CloudFormation::WaitConditionHandle=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitconditionhandle_plugin:CloudFormationWaitConditionHandleProviderPlugin", "AWS::Logs::LogGroup=localstack.services.logs.resource_providers.aws_logs_loggroup_plugin:LogsLogGroupProviderPlugin", "AWS::EC2::InternetGateway=localstack.services.ec2.resource_providers.aws_ec2_internetgateway_plugin:EC2InternetGatewayProviderPlugin", "AWS::EC2::TransitGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_transitgatewayattachment_plugin:EC2TransitGatewayAttachmentProviderPlugin", "AWS::S3::Bucket=localstack.services.s3.resource_providers.aws_s3_bucket_plugin:S3BucketProviderPlugin", "AWS::ECR::Repository=localstack.services.ecr.resource_providers.aws_ecr_repository_plugin:ECRRepositoryProviderPlugin", "AWS::IAM::Group=localstack.services.iam.resource_providers.aws_iam_group_plugin:IAMGroupProviderPlugin", "AWS::Events::ApiDestination=localstack.services.events.resource_providers.aws_events_apidestination_plugin:EventsApiDestinationProviderPlugin", "AWS::Events::EventBusPolicy=localstack.services.events.resource_providers.aws_events_eventbuspolicy_plugin:EventsEventBusPolicyProviderPlugin", "AWS::ApiGateway::Resource=localstack.services.apigateway.resource_providers.aws_apigateway_resource_plugin:ApiGatewayResourceProviderPlugin", "AWS::IAM::ServerCertificate=localstack.services.iam.resource_providers.aws_iam_servercertificate_plugin:IAMServerCertificateProviderPlugin", "AWS::Logs::SubscriptionFilter=localstack.services.logs.resource_providers.aws_logs_subscriptionfilter_plugin:LogsSubscriptionFilterProviderPlugin", "AWS::EC2::Subnet=localstack.services.ec2.resource_providers.aws_ec2_subnet_plugin:EC2SubnetProviderPlugin", "AWS::EC2::NetworkAcl=localstack.services.ec2.resource_providers.aws_ec2_networkacl_plugin:EC2NetworkAclProviderPlugin", "AWS::SecretsManager::Secret=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secret_plugin:SecretsManagerSecretProviderPlugin", "AWS::Elasticsearch::Domain=localstack.services.opensearch.resource_providers.aws_elasticsearch_domain_plugin:ElasticsearchDomainProviderPlugin", "AWS::Events::EventBus=localstack.services.events.resource_providers.aws_events_eventbus_plugin:EventsEventBusProviderPlugin", "AWS::S3::BucketPolicy=localstack.services.s3.resource_providers.aws_s3_bucketpolicy_plugin:S3BucketPolicyProviderPlugin", "AWS::EC2::KeyPair=localstack.services.ec2.resource_providers.aws_ec2_keypair_plugin:EC2KeyPairProviderPlugin", "AWS::KinesisFirehose::DeliveryStream=localstack.services.kinesisfirehose.resource_providers.aws_kinesisfirehose_deliverystream_plugin:KinesisFirehoseDeliveryStreamProviderPlugin", "AWS::Lambda::EventInvokeConfig=localstack.services.lambda_.resource_providers.aws_lambda_eventinvokeconfig_plugin:LambdaEventInvokeConfigProviderPlugin", "AWS::IAM::User=localstack.services.iam.resource_providers.aws_iam_user_plugin:IAMUserProviderPlugin", "AWS::SES::EmailIdentity=localstack.services.ses.resource_providers.aws_ses_emailidentity_plugin:SESEmailIdentityProviderPlugin", "AWS::Lambda::Function=localstack.services.lambda_.resource_providers.aws_lambda_function_plugin:LambdaFunctionProviderPlugin", "AWS::ApiGateway::Method=localstack.services.apigateway.resource_providers.aws_apigateway_method_plugin:ApiGatewayMethodProviderPlugin", "AWS::ApiGateway::UsagePlanKey=localstack.services.apigateway.resource_providers.aws_apigateway_usageplankey_plugin:ApiGatewayUsagePlanKeyProviderPlugin", "AWS::EC2::VPCEndpoint=localstack.services.ec2.resource_providers.aws_ec2_vpcendpoint_plugin:EC2VPCEndpointProviderPlugin", "AWS::SecretsManager::SecretTargetAttachment=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secrettargetattachment_plugin:SecretsManagerSecretTargetAttachmentProviderPlugin", "AWS::EC2::RouteTable=localstack.services.ec2.resource_providers.aws_ec2_routetable_plugin:EC2RouteTableProviderPlugin", "AWS::SQS::QueuePolicy=localstack.services.sqs.resource_providers.aws_sqs_queuepolicy_plugin:SQSQueuePolicyProviderPlugin", "AWS::CloudWatch::CompositeAlarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_compositealarm_plugin:CloudWatchCompositeAlarmProviderPlugin", "AWS::ApiGateway::DomainName=localstack.services.apigateway.resource_providers.aws_apigateway_domainname_plugin:ApiGatewayDomainNameProviderPlugin", "AWS::ResourceGroups::Group=localstack.services.resource_groups.resource_providers.aws_resourcegroups_group_plugin:ResourceGroupsGroupProviderPlugin", "AWS::ApiGateway::ApiKey=localstack.services.apigateway.resource_providers.aws_apigateway_apikey_plugin:ApiGatewayApiKeyProviderPlugin", "AWS::ApiGateway::RestApi=localstack.services.apigateway.resource_providers.aws_apigateway_restapi_plugin:ApiGatewayRestApiProviderPlugin", "AWS::DynamoDB::GlobalTable=localstack.services.dynamodb.resource_providers.aws_dynamodb_globaltable_plugin:DynamoDBGlobalTableProviderPlugin", "AWS::IAM::ServiceLinkedRole=localstack.services.iam.resource_providers.aws_iam_servicelinkedrole_plugin:IAMServiceLinkedRoleProviderPlugin", "AWS::ApiGateway::Account=localstack.services.apigateway.resource_providers.aws_apigateway_account_plugin:ApiGatewayAccountProviderPlugin", "AWS::SSM::Parameter=localstack.services.ssm.resource_providers.aws_ssm_parameter_plugin:SSMParameterProviderPlugin", "AWS::Lambda::EventSourceMapping=localstack.services.lambda_.resource_providers.aws_lambda_eventsourcemapping_plugin:LambdaEventSourceMappingProviderPlugin", "AWS::IAM::Policy=localstack.services.iam.resource_providers.aws_iam_policy_plugin:IAMPolicyProviderPlugin", "AWS::Route53::RecordSet=localstack.services.route53.resource_providers.aws_route53_recordset_plugin:Route53RecordSetProviderPlugin", "AWS::CloudWatch::Alarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_alarm_plugin:CloudWatchAlarmProviderPlugin", "AWS::IAM::ManagedPolicy=localstack.services.iam.resource_providers.aws_iam_managedpolicy_plugin:IAMManagedPolicyProviderPlugin", "AWS::CloudFormation::Macro=localstack.services.cloudformation.resource_providers.aws_cloudformation_macro_plugin:CloudFormationMacroProviderPlugin", "AWS::EC2::Route=localstack.services.ec2.resource_providers.aws_ec2_route_plugin:EC2RouteProviderPlugin", "AWS::SSM::MaintenanceWindow=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindow_plugin:SSMMaintenanceWindowProviderPlugin", "AWS::SNS::Subscription=localstack.services.sns.resource_providers.aws_sns_subscription_plugin:SNSSubscriptionProviderPlugin", "AWS::Lambda::LayerVersion=localstack.services.lambda_.resource_providers.aws_lambda_layerversion_plugin:LambdaLayerVersionProviderPlugin", "AWS::Lambda::Alias=localstack.services.lambda_.resource_providers.lambda_alias_plugin:LambdaAliasProviderPlugin", "AWS::Logs::LogStream=localstack.services.logs.resource_providers.aws_logs_logstream_plugin:LogsLogStreamProviderPlugin", "AWS::EC2::VPCGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_vpcgatewayattachment_plugin:EC2VPCGatewayAttachmentProviderPlugin", "AWS::IAM::AccessKey=localstack.services.iam.resource_providers.aws_iam_accesskey_plugin:IAMAccessKeyProviderPlugin", "AWS::SQS::Queue=localstack.services.sqs.resource_providers.aws_sqs_queue_plugin:SQSQueueProviderPlugin", "AWS::SSM::MaintenanceWindowTask=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtask_plugin:SSMMaintenanceWindowTaskProviderPlugin", "AWS::ApiGateway::Stage=localstack.services.apigateway.resource_providers.aws_apigateway_stage_plugin:ApiGatewayStageProviderPlugin", "AWS::OpenSearchService::Domain=localstack.services.opensearch.resource_providers.aws_opensearchservice_domain_plugin:OpenSearchServiceDomainProviderPlugin", "AWS::SSM::MaintenanceWindowTarget=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtarget_plugin:SSMMaintenanceWindowTargetProviderPlugin", "AWS::Lambda::LayerVersionPermission=localstack.services.lambda_.resource_providers.aws_lambda_layerversionpermission_plugin:LambdaLayerVersionPermissionProviderPlugin", "AWS::SecretsManager::RotationSchedule=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_rotationschedule_plugin:SecretsManagerRotationScheduleProviderPlugin", "AWS::CloudFormation::Stack=localstack.services.cloudformation.resource_providers.aws_cloudformation_stack_plugin:CloudFormationStackProviderPlugin", "AWS::SSM::PatchBaseline=localstack.services.ssm.resource_providers.aws_ssm_patchbaseline_plugin:SSMPatchBaselineProviderPlugin", "AWS::EC2::VPC=localstack.services.ec2.resource_providers.aws_ec2_vpc_plugin:EC2VPCProviderPlugin", "AWS::CloudFormation::WaitCondition=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitcondition_plugin:CloudFormationWaitConditionProviderPlugin", "AWS::ApiGateway::RequestValidator=localstack.services.apigateway.resource_providers.aws_apigateway_requestvalidator_plugin:ApiGatewayRequestValidatorProviderPlugin", "AWS::EC2::Instance=localstack.services.ec2.resource_providers.aws_ec2_instance_plugin:EC2InstanceProviderPlugin", "AWS::Lambda::Permission=localstack.services.lambda_.resource_providers.aws_lambda_permission_plugin:LambdaPermissionProviderPlugin", "AWS::DynamoDB::Table=localstack.services.dynamodb.resource_providers.aws_dynamodb_table_plugin:DynamoDBTableProviderPlugin", "AWS::Events::Rule=localstack.services.events.resource_providers.aws_events_rule_plugin:EventsRuleProviderPlugin", "AWS::ApiGateway::Deployment=localstack.services.apigateway.resource_providers.aws_apigateway_deployment_plugin:ApiGatewayDeploymentProviderPlugin", "AWS::Kinesis::StreamConsumer=localstack.services.kinesis.resource_providers.aws_kinesis_streamconsumer_plugin:KinesisStreamConsumerProviderPlugin", "AWS::ApiGateway::Model=localstack.services.apigateway.resource_providers.aws_apigateway_model_plugin:ApiGatewayModelProviderPlugin", "AWS::EC2::DHCPOptions=localstack.services.ec2.resource_providers.aws_ec2_dhcpoptions_plugin:EC2DHCPOptionsProviderPlugin", "AWS::Route53::HealthCheck=localstack.services.route53.resource_providers.aws_route53_healthcheck_plugin:Route53HealthCheckProviderPlugin", "AWS::Scheduler::Schedule=localstack.services.scheduler.resource_providers.aws_scheduler_schedule_plugin:SchedulerScheduleProviderPlugin", "AWS::CDK::Metadata=localstack.services.cdk.resource_providers.cdk_metadata_plugin:LambdaAliasProviderPlugin", "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::PrefixList=localstack.services.ec2.resource_providers.aws_ec2_prefixlist_plugin:EC2PrefixListProviderPlugin", "AWS::SecretsManager::ResourcePolicy=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_resourcepolicy_plugin:SecretsManagerResourcePolicyProviderPlugin", "AWS::Events::Connection=localstack.services.events.resource_providers.aws_events_connection_plugin:EventsConnectionProviderPlugin", "AWS::IAM::InstanceProfile=localstack.services.iam.resource_providers.aws_iam_instanceprofile_plugin:IAMInstanceProfileProviderPlugin", "AWS::Redshift::Cluster=localstack.services.redshift.resource_providers.aws_redshift_cluster_plugin:RedshiftClusterProviderPlugin"], "localstack.packages": ["vosk/community=localstack.services.transcribe.plugins:vosk_package", "lambda-java-libs/community=localstack.services.lambda_.plugins:lambda_java_libs", "lambda-runtime/community=localstack.services.lambda_.plugins:lambda_runtime_package", "kinesis-mock/community=localstack.services.kinesis.plugins:kinesismock_package", "jpype-jsonata/community=localstack.services.stepfunctions.plugins:jpype_jsonata_package", "dynamodb-local/community=localstack.services.dynamodb.plugins:dynamodb_local_package", "elasticsearch/community=localstack.services.es.plugins:elasticsearch_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"], "localstack.hooks.on_infra_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", "apply_runtime_patches=localstack.runtime.patches:apply_runtime_patches", "register_cloudformation_deploy_ui=localstack.services.cloudformation.plugins:register_cloudformation_deploy_ui", "apply_aws_runtime_patches=localstack.aws.patches:apply_aws_runtime_patches", "conditionally_enable_debugger=localstack.dev.debugger.plugins:conditionally_enable_debugger", "delete_cached_certificate=localstack.plugins:delete_cached_certificate", "deprecation_warnings=localstack.plugins:deprecation_warnings", "register_swagger_endpoints=localstack.http.resources.swagger.plugins:register_swagger_endpoints", "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", "_publish_config_as_analytics_event=localstack.runtime.analytics:_publish_config_as_analytics_event", "_publish_container_info=localstack.runtime.analytics:_publish_container_info"], "localstack.hooks.on_infra_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:publish_metrics", "stop_server=localstack.dns.plugins:stop_server", "_run_init_scripts_on_shutdown=localstack.runtime.init:_run_init_scripts_on_shutdown"], "localstack.lambda.runtime_executor": ["docker=localstack.services.lambda_.invocation.plugins:DockerRuntimeExecutorPlugin"], "localstack.runtime.components": ["aws=localstack.aws.components:AwsComponents"], "localstack.runtime.server": ["hypercorn=localstack.runtime.server.plugins:HypercornRuntimeServerPlugin", "twisted=localstack.runtime.server.plugins:TwistedRuntimeServerPlugin"], "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.openapi.spec": ["localstack=localstack.plugins:CoreOASPlugin"], "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"], "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"]}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"localstack.cloudformation.resource_providers": ["AWS::Lambda::EventSourceMapping=localstack.services.lambda_.resource_providers.aws_lambda_eventsourcemapping_plugin:LambdaEventSourceMappingProviderPlugin", "AWS::Lambda::Url=localstack.services.lambda_.resource_providers.aws_lambda_url_plugin:LambdaUrlProviderPlugin", "AWS::CloudFormation::Stack=localstack.services.cloudformation.resource_providers.aws_cloudformation_stack_plugin:CloudFormationStackProviderPlugin", "AWS::Logs::LogGroup=localstack.services.logs.resource_providers.aws_logs_loggroup_plugin:LogsLogGroupProviderPlugin", "AWS::EC2::VPCGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_vpcgatewayattachment_plugin:EC2VPCGatewayAttachmentProviderPlugin", "AWS::SSM::MaintenanceWindow=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindow_plugin:SSMMaintenanceWindowProviderPlugin", "AWS::Lambda::EventInvokeConfig=localstack.services.lambda_.resource_providers.aws_lambda_eventinvokeconfig_plugin:LambdaEventInvokeConfigProviderPlugin", "AWS::EC2::TransitGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_transitgatewayattachment_plugin:EC2TransitGatewayAttachmentProviderPlugin", "AWS::Lambda::LayerVersion=localstack.services.lambda_.resource_providers.aws_lambda_layerversion_plugin:LambdaLayerVersionProviderPlugin", "AWS::ApiGateway::BasePathMapping=localstack.services.apigateway.resource_providers.aws_apigateway_basepathmapping_plugin:ApiGatewayBasePathMappingProviderPlugin", "AWS::IAM::AccessKey=localstack.services.iam.resource_providers.aws_iam_accesskey_plugin:IAMAccessKeyProviderPlugin", "AWS::SQS::Queue=localstack.services.sqs.resource_providers.aws_sqs_queue_plugin:SQSQueueProviderPlugin", "AWS::SNS::Subscription=localstack.services.sns.resource_providers.aws_sns_subscription_plugin:SNSSubscriptionProviderPlugin", "AWS::ApiGateway::GatewayResponse=localstack.services.apigateway.resource_providers.aws_apigateway_gatewayresponse_plugin:ApiGatewayGatewayResponseProviderPlugin", "AWS::IAM::User=localstack.services.iam.resource_providers.aws_iam_user_plugin:IAMUserProviderPlugin", "AWS::Kinesis::StreamConsumer=localstack.services.kinesis.resource_providers.aws_kinesis_streamconsumer_plugin:KinesisStreamConsumerProviderPlugin", "AWS::EC2::NetworkAcl=localstack.services.ec2.resource_providers.aws_ec2_networkacl_plugin:EC2NetworkAclProviderPlugin", "AWS::ApiGateway::UsagePlanKey=localstack.services.apigateway.resource_providers.aws_apigateway_usageplankey_plugin:ApiGatewayUsagePlanKeyProviderPlugin", "AWS::Logs::LogStream=localstack.services.logs.resource_providers.aws_logs_logstream_plugin:LogsLogStreamProviderPlugin", "AWS::SecretsManager::ResourcePolicy=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_resourcepolicy_plugin:SecretsManagerResourcePolicyProviderPlugin", "AWS::Route53::HealthCheck=localstack.services.route53.resource_providers.aws_route53_healthcheck_plugin:Route53HealthCheckProviderPlugin", "AWS::EC2::NatGateway=localstack.services.ec2.resource_providers.aws_ec2_natgateway_plugin:EC2NatGatewayProviderPlugin", "AWS::Lambda::LayerVersionPermission=localstack.services.lambda_.resource_providers.aws_lambda_layerversionpermission_plugin:LambdaLayerVersionPermissionProviderPlugin", "AWS::Events::ApiDestination=localstack.services.events.resource_providers.aws_events_apidestination_plugin:EventsApiDestinationProviderPlugin", "AWS::EC2::TransitGateway=localstack.services.ec2.resource_providers.aws_ec2_transitgateway_plugin:EC2TransitGatewayProviderPlugin", "AWS::SQS::QueuePolicy=localstack.services.sqs.resource_providers.aws_sqs_queuepolicy_plugin:SQSQueuePolicyProviderPlugin", "AWS::IAM::InstanceProfile=localstack.services.iam.resource_providers.aws_iam_instanceprofile_plugin:IAMInstanceProfileProviderPlugin", "AWS::Lambda::CodeSigningConfig=localstack.services.lambda_.resource_providers.aws_lambda_codesigningconfig_plugin:LambdaCodeSigningConfigProviderPlugin", "AWS::IAM::ServerCertificate=localstack.services.iam.resource_providers.aws_iam_servercertificate_plugin:IAMServerCertificateProviderPlugin", "AWS::SSM::MaintenanceWindowTask=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtask_plugin:SSMMaintenanceWindowTaskProviderPlugin", "AWS::DynamoDB::Table=localstack.services.dynamodb.resource_providers.aws_dynamodb_table_plugin:DynamoDBTableProviderPlugin", "AWS::EC2::SubnetRouteTableAssociation=localstack.services.ec2.resource_providers.aws_ec2_subnetroutetableassociation_plugin:EC2SubnetRouteTableAssociationProviderPlugin", "AWS::Lambda::Alias=localstack.services.lambda_.resource_providers.lambda_alias_plugin:LambdaAliasProviderPlugin", "AWS::Lambda::Permission=localstack.services.lambda_.resource_providers.aws_lambda_permission_plugin:LambdaPermissionProviderPlugin", "AWS::SSM::Parameter=localstack.services.ssm.resource_providers.aws_ssm_parameter_plugin:SSMParameterProviderPlugin", "AWS::SES::EmailIdentity=localstack.services.ses.resource_providers.aws_ses_emailidentity_plugin:SESEmailIdentityProviderPlugin", "AWS::EC2::Route=localstack.services.ec2.resource_providers.aws_ec2_route_plugin:EC2RouteProviderPlugin", "AWS::SSM::PatchBaseline=localstack.services.ssm.resource_providers.aws_ssm_patchbaseline_plugin:SSMPatchBaselineProviderPlugin", "AWS::SNS::Topic=localstack.services.sns.resource_providers.aws_sns_topic_plugin:SNSTopicProviderPlugin", "AWS::IAM::Group=localstack.services.iam.resource_providers.aws_iam_group_plugin:IAMGroupProviderPlugin", "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::Redshift::Cluster=localstack.services.redshift.resource_providers.aws_redshift_cluster_plugin:RedshiftClusterProviderPlugin", "AWS::CertificateManager::Certificate=localstack.services.certificatemanager.resource_providers.aws_certificatemanager_certificate_plugin:CertificateManagerCertificateProviderPlugin", "AWS::CloudFormation::WaitConditionHandle=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitconditionhandle_plugin:CloudFormationWaitConditionHandleProviderPlugin", "AWS::Route53::RecordSet=localstack.services.route53.resource_providers.aws_route53_recordset_plugin:Route53RecordSetProviderPlugin", "AWS::KMS::Alias=localstack.services.kms.resource_providers.aws_kms_alias_plugin:KMSAliasProviderPlugin", "AWS::ApiGateway::Model=localstack.services.apigateway.resource_providers.aws_apigateway_model_plugin:ApiGatewayModelProviderPlugin", "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::ApiGateway::UsagePlan=localstack.services.apigateway.resource_providers.aws_apigateway_usageplan_plugin:ApiGatewayUsagePlanProviderPlugin", "AWS::S3::BucketPolicy=localstack.services.s3.resource_providers.aws_s3_bucketpolicy_plugin:S3BucketPolicyProviderPlugin", "AWS::EC2::VPC=localstack.services.ec2.resource_providers.aws_ec2_vpc_plugin:EC2VPCProviderPlugin", "AWS::Lambda::Version=localstack.services.lambda_.resource_providers.aws_lambda_version_plugin:LambdaVersionProviderPlugin", "AWS::ResourceGroups::Group=localstack.services.resource_groups.resource_providers.aws_resourcegroups_group_plugin:ResourceGroupsGroupProviderPlugin", "AWS::CloudWatch::Alarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_alarm_plugin:CloudWatchAlarmProviderPlugin", "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::KinesisFirehose::DeliveryStream=localstack.services.kinesisfirehose.resource_providers.aws_kinesisfirehose_deliverystream_plugin:KinesisFirehoseDeliveryStreamProviderPlugin", "AWS::EC2::Instance=localstack.services.ec2.resource_providers.aws_ec2_instance_plugin:EC2InstanceProviderPlugin", "AWS::SecretsManager::Secret=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secret_plugin:SecretsManagerSecretProviderPlugin", "AWS::Logs::SubscriptionFilter=localstack.services.logs.resource_providers.aws_logs_subscriptionfilter_plugin:LogsSubscriptionFilterProviderPlugin", "AWS::CloudFormation::Macro=localstack.services.cloudformation.resource_providers.aws_cloudformation_macro_plugin:CloudFormationMacroProviderPlugin", "AWS::Events::EventBusPolicy=localstack.services.events.resource_providers.aws_events_eventbuspolicy_plugin:EventsEventBusPolicyProviderPlugin", "AWS::StepFunctions::StateMachine=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_statemachine_plugin:StepFunctionsStateMachineProviderPlugin", "AWS::Events::Connection=localstack.services.events.resource_providers.aws_events_connection_plugin:EventsConnectionProviderPlugin", "AWS::ApiGateway::Account=localstack.services.apigateway.resource_providers.aws_apigateway_account_plugin:ApiGatewayAccountProviderPlugin", "AWS::ApiGateway::DomainName=localstack.services.apigateway.resource_providers.aws_apigateway_domainname_plugin:ApiGatewayDomainNameProviderPlugin", "AWS::EC2::InternetGateway=localstack.services.ec2.resource_providers.aws_ec2_internetgateway_plugin:EC2InternetGatewayProviderPlugin", "AWS::StepFunctions::Activity=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_activity_plugin:StepFunctionsActivityProviderPlugin", "AWS::IAM::ManagedPolicy=localstack.services.iam.resource_providers.aws_iam_managedpolicy_plugin:IAMManagedPolicyProviderPlugin", "AWS::SecretsManager::RotationSchedule=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_rotationschedule_plugin:SecretsManagerRotationScheduleProviderPlugin", "AWS::CloudWatch::CompositeAlarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_compositealarm_plugin:CloudWatchCompositeAlarmProviderPlugin", "AWS::EC2::DHCPOptions=localstack.services.ec2.resource_providers.aws_ec2_dhcpoptions_plugin:EC2DHCPOptionsProviderPlugin", "AWS::Kinesis::Stream=localstack.services.kinesis.resource_providers.aws_kinesis_stream_plugin:KinesisStreamProviderPlugin", "AWS::Elasticsearch::Domain=localstack.services.opensearch.resource_providers.aws_elasticsearch_domain_plugin:ElasticsearchDomainProviderPlugin", "AWS::EC2::RouteTable=localstack.services.ec2.resource_providers.aws_ec2_routetable_plugin:EC2RouteTableProviderPlugin", "AWS::EC2::PrefixList=localstack.services.ec2.resource_providers.aws_ec2_prefixlist_plugin:EC2PrefixListProviderPlugin", "AWS::ApiGateway::Method=localstack.services.apigateway.resource_providers.aws_apigateway_method_plugin:ApiGatewayMethodProviderPlugin", "AWS::IAM::Policy=localstack.services.iam.resource_providers.aws_iam_policy_plugin:IAMPolicyProviderPlugin", "AWS::S3::Bucket=localstack.services.s3.resource_providers.aws_s3_bucket_plugin:S3BucketProviderPlugin", "AWS::ApiGateway::Deployment=localstack.services.apigateway.resource_providers.aws_apigateway_deployment_plugin:ApiGatewayDeploymentProviderPlugin", "AWS::Events::EventBus=localstack.services.events.resource_providers.aws_events_eventbus_plugin:EventsEventBusProviderPlugin", "AWS::IAM::ServiceLinkedRole=localstack.services.iam.resource_providers.aws_iam_servicelinkedrole_plugin:IAMServiceLinkedRoleProviderPlugin", "AWS::Scheduler::ScheduleGroup=localstack.services.scheduler.resource_providers.aws_scheduler_schedulegroup_plugin:SchedulerScheduleGroupProviderPlugin", "AWS::EC2::Subnet=localstack.services.ec2.resource_providers.aws_ec2_subnet_plugin:EC2SubnetProviderPlugin", "AWS::Events::Rule=localstack.services.events.resource_providers.aws_events_rule_plugin:EventsRuleProviderPlugin", "AWS::ApiGateway::RestApi=localstack.services.apigateway.resource_providers.aws_apigateway_restapi_plugin:ApiGatewayRestApiProviderPlugin", "AWS::EC2::SecurityGroup=localstack.services.ec2.resource_providers.aws_ec2_securitygroup_plugin:EC2SecurityGroupProviderPlugin", "AWS::ApiGateway::RequestValidator=localstack.services.apigateway.resource_providers.aws_apigateway_requestvalidator_plugin:ApiGatewayRequestValidatorProviderPlugin", "AWS::SSM::MaintenanceWindowTarget=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtarget_plugin:SSMMaintenanceWindowTargetProviderPlugin", "AWS::CDK::Metadata=localstack.services.cdk.resource_providers.cdk_metadata_plugin:LambdaAliasProviderPlugin", "AWS::ApiGateway::ApiKey=localstack.services.apigateway.resource_providers.aws_apigateway_apikey_plugin:ApiGatewayApiKeyProviderPlugin", "AWS::OpenSearchService::Domain=localstack.services.opensearch.resource_providers.aws_opensearchservice_domain_plugin:OpenSearchServiceDomainProviderPlugin", "AWS::SecretsManager::SecretTargetAttachment=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secrettargetattachment_plugin:SecretsManagerSecretTargetAttachmentProviderPlugin", "AWS::SNS::TopicPolicy=localstack.services.sns.resource_providers.aws_sns_topicpolicy_plugin:SNSTopicPolicyProviderPlugin", "AWS::ApiGateway::Stage=localstack.services.apigateway.resource_providers.aws_apigateway_stage_plugin:ApiGatewayStageProviderPlugin", "AWS::CloudFormation::WaitCondition=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitcondition_plugin:CloudFormationWaitConditionProviderPlugin", "AWS::EC2::KeyPair=localstack.services.ec2.resource_providers.aws_ec2_keypair_plugin:EC2KeyPairProviderPlugin", "AWS::IAM::Role=localstack.services.iam.resource_providers.aws_iam_role_plugin:IAMRoleProviderPlugin", "AWS::Lambda::Function=localstack.services.lambda_.resource_providers.aws_lambda_function_plugin:LambdaFunctionProviderPlugin"], "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", "apply_aws_runtime_patches=localstack.aws.patches:apply_aws_runtime_patches", "register_custom_endpoints=localstack.services.lambda_.plugins:register_custom_endpoints", "validate_configuration=localstack.services.lambda_.plugins:validate_configuration", "_run_init_scripts_on_start=localstack.runtime.init:_run_init_scripts_on_start", "conditionally_enable_debugger=localstack.dev.debugger.plugins:conditionally_enable_debugger", "register_cloudformation_deploy_ui=localstack.services.cloudformation.plugins:register_cloudformation_deploy_ui", "_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", "apply_runtime_patches=localstack.runtime.patches:apply_runtime_patches", "_publish_config_as_analytics_event=localstack.runtime.analytics:_publish_config_as_analytics_event", "_publish_container_info=localstack.runtime.analytics:_publish_container_info", "setup_dns_configuration_on_host=localstack.dns.plugins:setup_dns_configuration_on_host", "start_dns_server=localstack.dns.plugins:start_dns_server", "register_swagger_endpoints=localstack.http.resources.swagger.plugins:register_swagger_endpoints"], "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.packages": ["jpype-jsonata/community=localstack.services.stepfunctions.plugins:jpype_jsonata_package", "dynamodb-local/community=localstack.services.dynamodb.plugins:dynamodb_local_package", "elasticsearch/community=localstack.services.es.plugins:elasticsearch_package", "lambda-java-libs/community=localstack.services.lambda_.plugins:lambda_java_libs", "lambda-runtime/community=localstack.services.lambda_.plugins:lambda_runtime_package", "opensearch/community=localstack.services.opensearch.plugins:opensearch_package", "vosk/community=localstack.services.transcribe.plugins:vosk_package", "kinesis-mock/community=localstack.services.kinesis.plugins:kinesismock_package", "ffmpeg/community=localstack.packages.plugins:ffmpeg_package", "java/community=localstack.packages.plugins:java_package", "terraform/community=localstack.packages.plugins:terraform_package"], "localstack.hooks.on_infra_shutdown": ["remove_custom_endpoints=localstack.services.lambda_.plugins:remove_custom_endpoints", "_run_init_scripts_on_shutdown=localstack.runtime.init:_run_init_scripts_on_shutdown", "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", "stop_server=localstack.dns.plugins:stop_server", "publish_metrics=localstack.utils.analytics.metrics:publish_metrics"], "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"], "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.runtime.components": ["aws=localstack.aws.components:AwsComponents"], "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"]}
|
File without changes
|
{localstack_core-4.4.1.dev59.data → localstack_core-4.4.1.dev61.data}/scripts/localstack-supervisor
RENAMED
File without changes
|
{localstack_core-4.4.1.dev59.data → localstack_core-4.4.1.dev61.data}/scripts/localstack.bat
RENAMED
File without changes
|
File without changes
|
{localstack_core-4.4.1.dev59.dist-info → localstack_core-4.4.1.dev61.dist-info}/entry_points.txt
RENAMED
File without changes
|
{localstack_core-4.4.1.dev59.dist-info → localstack_core-4.4.1.dev61.dist-info}/licenses/LICENSE.txt
RENAMED
File without changes
|
{localstack_core-4.4.1.dev59.dist-info → localstack_core-4.4.1.dev61.dist-info}/top_level.txt
RENAMED
File without changes
|