localstack-core 4.7.1.dev52__py3-none-any.whl → 4.7.1.dev53__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 +113 -10
- localstack/services/cloudformation/engine/v2/change_set_model_preproc.py +5 -0
- localstack/services/cloudformation/engine/v2/change_set_model_transform.py +250 -100
- localstack/services/cloudformation/engine/v2/change_set_model_validator.py +8 -0
- localstack/services/cloudformation/v2/entities.py +3 -3
- localstack/services/cloudformation/v2/provider.py +28 -3
- localstack/version.py +2 -2
- {localstack_core-4.7.1.dev52.dist-info → localstack_core-4.7.1.dev53.dist-info}/METADATA +1 -1
- {localstack_core-4.7.1.dev52.dist-info → localstack_core-4.7.1.dev53.dist-info}/RECORD +17 -17
- localstack_core-4.7.1.dev53.dist-info/plux.json +1 -0
- localstack_core-4.7.1.dev52.dist-info/plux.json +0 -1
- {localstack_core-4.7.1.dev52.data → localstack_core-4.7.1.dev53.data}/scripts/localstack +0 -0
- {localstack_core-4.7.1.dev52.data → localstack_core-4.7.1.dev53.data}/scripts/localstack-supervisor +0 -0
- {localstack_core-4.7.1.dev52.data → localstack_core-4.7.1.dev53.data}/scripts/localstack.bat +0 -0
- {localstack_core-4.7.1.dev52.dist-info → localstack_core-4.7.1.dev53.dist-info}/WHEEL +0 -0
- {localstack_core-4.7.1.dev52.dist-info → localstack_core-4.7.1.dev53.dist-info}/entry_points.txt +0 -0
- {localstack_core-4.7.1.dev52.dist-info → localstack_core-4.7.1.dev53.dist-info}/licenses/LICENSE.txt +0 -0
- {localstack_core-4.7.1.dev52.dist-info → localstack_core-4.7.1.dev53.dist-info}/top_level.txt +0 -0
|
@@ -14,6 +14,7 @@ from localstack.services.cloudformation.v2.types import (
|
|
|
14
14
|
EngineParameter,
|
|
15
15
|
engine_parameter_value,
|
|
16
16
|
)
|
|
17
|
+
from localstack.utils.json import extract_jsonpath
|
|
17
18
|
from localstack.utils.strings import camel_to_snake_case
|
|
18
19
|
|
|
19
20
|
T = TypeVar("T")
|
|
@@ -106,6 +107,30 @@ class Scope(str):
|
|
|
106
107
|
def unwrap(self) -> list[str]:
|
|
107
108
|
return self.split(self._SEPARATOR)
|
|
108
109
|
|
|
110
|
+
@property
|
|
111
|
+
def parent(self) -> Scope:
|
|
112
|
+
return Scope(self._SEPARATOR.join(self.split(self._SEPARATOR)[:-1]))
|
|
113
|
+
|
|
114
|
+
@property
|
|
115
|
+
def jsonpath(self) -> str:
|
|
116
|
+
parts = self.split("/")
|
|
117
|
+
json_parts = []
|
|
118
|
+
|
|
119
|
+
for part in parts:
|
|
120
|
+
if not part: # Skip empty strings from leading/trailing slashes
|
|
121
|
+
continue
|
|
122
|
+
|
|
123
|
+
if part == "divergence":
|
|
124
|
+
continue
|
|
125
|
+
|
|
126
|
+
# Wrap keys with special characters (e.g., colon) in quotes
|
|
127
|
+
if ":" in part:
|
|
128
|
+
json_parts.append(f'"{part}"')
|
|
129
|
+
else:
|
|
130
|
+
json_parts.append(part)
|
|
131
|
+
|
|
132
|
+
return f"$.{'.'.join(json_parts)}"
|
|
133
|
+
|
|
109
134
|
|
|
110
135
|
class ChangeType(enum.Enum):
|
|
111
136
|
UNCHANGED = "Unchanged"
|
|
@@ -343,11 +368,18 @@ class NodeTransform(ChangeSetNode):
|
|
|
343
368
|
|
|
344
369
|
class NodeResources(ChangeSetNode):
|
|
345
370
|
resources: Final[list[NodeResource]]
|
|
371
|
+
fn_transform: Final[Maybe[NodeIntrinsicFunctionFnTransform]]
|
|
346
372
|
|
|
347
|
-
def __init__(
|
|
373
|
+
def __init__(
|
|
374
|
+
self,
|
|
375
|
+
scope: Scope,
|
|
376
|
+
resources: list[NodeResource],
|
|
377
|
+
fn_transform: Maybe[NodeIntrinsicFunctionFnTransform],
|
|
378
|
+
):
|
|
348
379
|
change_type = parent_change_type_of(resources)
|
|
349
380
|
super().__init__(scope=scope, change_type=change_type)
|
|
350
381
|
self.resources = resources
|
|
382
|
+
self.fn_transform = fn_transform
|
|
351
383
|
|
|
352
384
|
|
|
353
385
|
class NodeResource(ChangeSetNode):
|
|
@@ -359,6 +391,7 @@ class NodeResource(ChangeSetNode):
|
|
|
359
391
|
requires_replacement: Final[bool]
|
|
360
392
|
deletion_policy: Final[Maybe[ChangeSetTerminal]]
|
|
361
393
|
update_replace_policy: Final[Maybe[ChangeSetTerminal]]
|
|
394
|
+
fn_transform: Final[Maybe[NodeIntrinsicFunctionFnTransform]]
|
|
362
395
|
|
|
363
396
|
def __init__(
|
|
364
397
|
self,
|
|
@@ -372,6 +405,7 @@ class NodeResource(ChangeSetNode):
|
|
|
372
405
|
requires_replacement: bool,
|
|
373
406
|
deletion_policy: Maybe[ChangeSetTerminal],
|
|
374
407
|
update_replace_policy: Maybe[ChangeSetTerminal],
|
|
408
|
+
fn_transform: Maybe[NodeIntrinsicFunctionFnTransform],
|
|
375
409
|
):
|
|
376
410
|
super().__init__(scope=scope, change_type=change_type)
|
|
377
411
|
self.name = name
|
|
@@ -382,15 +416,23 @@ class NodeResource(ChangeSetNode):
|
|
|
382
416
|
self.requires_replacement = requires_replacement
|
|
383
417
|
self.deletion_policy = deletion_policy
|
|
384
418
|
self.update_replace_policy = update_replace_policy
|
|
419
|
+
self.fn_transform = fn_transform
|
|
385
420
|
|
|
386
421
|
|
|
387
422
|
class NodeProperties(ChangeSetNode):
|
|
388
423
|
properties: Final[list[NodeProperty]]
|
|
424
|
+
fn_transform: Final[Maybe[NodeIntrinsicFunctionFnTransform]]
|
|
389
425
|
|
|
390
|
-
def __init__(
|
|
426
|
+
def __init__(
|
|
427
|
+
self,
|
|
428
|
+
scope: Scope,
|
|
429
|
+
properties: list[NodeProperty],
|
|
430
|
+
fn_transform: Maybe[NodeIntrinsicFunctionFnTransform],
|
|
431
|
+
):
|
|
391
432
|
change_type = parent_change_type_of(properties)
|
|
392
433
|
super().__init__(scope=scope, change_type=change_type)
|
|
393
434
|
self.properties = properties
|
|
435
|
+
self.fn_transform = fn_transform
|
|
394
436
|
|
|
395
437
|
|
|
396
438
|
class NodeDependsOn(ChangeSetNode):
|
|
@@ -427,6 +469,26 @@ class NodeIntrinsicFunction(ChangeSetNode):
|
|
|
427
469
|
self.arguments = arguments
|
|
428
470
|
|
|
429
471
|
|
|
472
|
+
class NodeIntrinsicFunctionFnTransform(NodeIntrinsicFunction):
|
|
473
|
+
def __init__(
|
|
474
|
+
self,
|
|
475
|
+
scope: Scope,
|
|
476
|
+
change_type: ChangeType,
|
|
477
|
+
intrinsic_function: str,
|
|
478
|
+
arguments: ChangeSetEntity,
|
|
479
|
+
before_siblings: list[Any],
|
|
480
|
+
after_siblings: list[Any],
|
|
481
|
+
):
|
|
482
|
+
super().__init__(
|
|
483
|
+
scope=scope,
|
|
484
|
+
change_type=change_type,
|
|
485
|
+
intrinsic_function=intrinsic_function,
|
|
486
|
+
arguments=arguments,
|
|
487
|
+
)
|
|
488
|
+
self.before_siblings = before_siblings
|
|
489
|
+
self.after_siblings = after_siblings
|
|
490
|
+
|
|
491
|
+
|
|
430
492
|
class NodeObject(ChangeSetNode):
|
|
431
493
|
bindings: Final[dict[str, ChangeSetEntity]]
|
|
432
494
|
|
|
@@ -611,12 +673,32 @@ class ChangeSetModel:
|
|
|
611
673
|
change_type = resolve_function(arguments)
|
|
612
674
|
else:
|
|
613
675
|
change_type = arguments.change_type
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
676
|
+
|
|
677
|
+
if intrinsic_function == FnTransform:
|
|
678
|
+
if scope.count(FnTransform) > 1:
|
|
679
|
+
raise RuntimeError(
|
|
680
|
+
"Invalid: Fn::Transforms cannot be nested inside another Fn::Transform"
|
|
681
|
+
)
|
|
682
|
+
|
|
683
|
+
path = "$" + ".".join(scope.split("/")[:-1])
|
|
684
|
+
before_siblings = extract_jsonpath(self._before_template, path)
|
|
685
|
+
after_siblings = extract_jsonpath(self._after_template, path)
|
|
686
|
+
|
|
687
|
+
node_intrinsic_function = NodeIntrinsicFunctionFnTransform(
|
|
688
|
+
scope=scope,
|
|
689
|
+
change_type=change_type,
|
|
690
|
+
arguments=arguments,
|
|
691
|
+
intrinsic_function=intrinsic_function,
|
|
692
|
+
before_siblings=before_siblings,
|
|
693
|
+
after_siblings=after_siblings,
|
|
694
|
+
)
|
|
695
|
+
else:
|
|
696
|
+
node_intrinsic_function = NodeIntrinsicFunction(
|
|
697
|
+
scope=scope,
|
|
698
|
+
change_type=change_type,
|
|
699
|
+
intrinsic_function=intrinsic_function,
|
|
700
|
+
arguments=arguments,
|
|
701
|
+
)
|
|
620
702
|
self._visited_scopes[scope] = node_intrinsic_function
|
|
621
703
|
return node_intrinsic_function
|
|
622
704
|
|
|
@@ -889,10 +971,18 @@ class ChangeSetModel:
|
|
|
889
971
|
return node_properties
|
|
890
972
|
property_names: list[str] = self._safe_keys_of(before_properties, after_properties)
|
|
891
973
|
properties: list[NodeProperty] = []
|
|
974
|
+
fn_transform = Nothing
|
|
975
|
+
|
|
892
976
|
for property_name in property_names:
|
|
893
977
|
property_scope, (before_property, after_property) = self._safe_access_in(
|
|
894
978
|
scope, property_name, before_properties, after_properties
|
|
895
979
|
)
|
|
980
|
+
if property_name == FnTransform:
|
|
981
|
+
fn_transform = self._visit_intrinsic_function(
|
|
982
|
+
property_scope, FnTransform, before_property, after_property
|
|
983
|
+
)
|
|
984
|
+
continue
|
|
985
|
+
|
|
896
986
|
property_ = self._visit_property(
|
|
897
987
|
scope=property_scope,
|
|
898
988
|
property_name=property_name,
|
|
@@ -900,7 +990,10 @@ class ChangeSetModel:
|
|
|
900
990
|
after_property=after_property,
|
|
901
991
|
)
|
|
902
992
|
properties.append(property_)
|
|
903
|
-
|
|
993
|
+
|
|
994
|
+
node_properties = NodeProperties(
|
|
995
|
+
scope=scope, properties=properties, fn_transform=fn_transform
|
|
996
|
+
)
|
|
904
997
|
self._visited_scopes[scope] = node_properties
|
|
905
998
|
return node_properties
|
|
906
999
|
|
|
@@ -1019,6 +1112,7 @@ class ChangeSetModel:
|
|
|
1019
1112
|
requires_replacement=requires_replacement,
|
|
1020
1113
|
deletion_policy=deletion_policy,
|
|
1021
1114
|
update_replace_policy=update_replace_policy,
|
|
1115
|
+
fn_transform=Nothing, # TODO
|
|
1022
1116
|
)
|
|
1023
1117
|
self._visited_scopes[scope] = node_resource
|
|
1024
1118
|
return node_resource
|
|
@@ -1029,10 +1123,19 @@ class ChangeSetModel:
|
|
|
1029
1123
|
# TODO: investigate type changes behavior.
|
|
1030
1124
|
resources: list[NodeResource] = []
|
|
1031
1125
|
resource_names = self._safe_keys_of(before_resources, after_resources)
|
|
1126
|
+
fn_transform = Nothing
|
|
1032
1127
|
for resource_name in resource_names:
|
|
1033
1128
|
resource_scope, (before_resource, after_resource) = self._safe_access_in(
|
|
1034
1129
|
scope, resource_name, before_resources, after_resources
|
|
1035
1130
|
)
|
|
1131
|
+
if resource_name == FnTransform:
|
|
1132
|
+
fn_transform = self._visit_intrinsic_function(
|
|
1133
|
+
scope=resource_scope,
|
|
1134
|
+
intrinsic_function=resource_name,
|
|
1135
|
+
before_arguments=before_resource,
|
|
1136
|
+
after_arguments=after_resource,
|
|
1137
|
+
)
|
|
1138
|
+
continue
|
|
1036
1139
|
resource = self._visit_resource(
|
|
1037
1140
|
scope=resource_scope,
|
|
1038
1141
|
resource_name=resource_name,
|
|
@@ -1040,7 +1143,7 @@ class ChangeSetModel:
|
|
|
1040
1143
|
after_resource=after_resource,
|
|
1041
1144
|
)
|
|
1042
1145
|
resources.append(resource)
|
|
1043
|
-
return NodeResources(scope=scope, resources=resources)
|
|
1146
|
+
return NodeResources(scope=scope, resources=resources, fn_transform=fn_transform)
|
|
1044
1147
|
|
|
1045
1148
|
def _visit_mapping(
|
|
1046
1149
|
self, scope: Scope, name: str, before_mapping: Maybe[dict], after_mapping: Maybe[dict]
|
|
@@ -1216,3 +1216,8 @@ class ChangeSetModelPreproc(ChangeSetModelVisitor):
|
|
|
1216
1216
|
resolver=_compute_fn_import_value,
|
|
1217
1217
|
)
|
|
1218
1218
|
return delta
|
|
1219
|
+
|
|
1220
|
+
def visit_node_intrinsic_function_fn_transform(
|
|
1221
|
+
self, node_intrinsic_function: NodeIntrinsicFunction
|
|
1222
|
+
):
|
|
1223
|
+
raise RuntimeError("Fn::Transform should have been handled by the Transformer")
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import copy
|
|
2
|
+
import json
|
|
2
3
|
import logging
|
|
3
4
|
import os
|
|
5
|
+
import re
|
|
4
6
|
from typing import Any, Final, TypedDict
|
|
5
7
|
|
|
6
8
|
import boto3
|
|
9
|
+
import jsonpath_ng
|
|
7
10
|
from botocore.exceptions import ClientError
|
|
8
11
|
from samtranslator.translator.transform import transform as transform_sam
|
|
9
12
|
|
|
@@ -12,13 +15,16 @@ from localstack.services.cloudformation.engine.policy_loader import create_polic
|
|
|
12
15
|
from localstack.services.cloudformation.engine.template_preparer import parse_template
|
|
13
16
|
from localstack.services.cloudformation.engine.transformers import (
|
|
14
17
|
FailedTransformationException,
|
|
15
|
-
execute_macro,
|
|
16
18
|
)
|
|
17
19
|
from localstack.services.cloudformation.engine.v2.change_set_model import (
|
|
18
20
|
ChangeType,
|
|
21
|
+
FnTransform,
|
|
19
22
|
Maybe,
|
|
20
23
|
NodeGlobalTransform,
|
|
21
|
-
|
|
24
|
+
NodeIntrinsicFunction,
|
|
25
|
+
NodeIntrinsicFunctionFnTransform,
|
|
26
|
+
NodeProperties,
|
|
27
|
+
NodeResources,
|
|
22
28
|
NodeTransform,
|
|
23
29
|
Nothing,
|
|
24
30
|
Scope,
|
|
@@ -27,10 +33,14 @@ from localstack.services.cloudformation.engine.v2.change_set_model import (
|
|
|
27
33
|
from localstack.services.cloudformation.engine.v2.change_set_model_preproc import (
|
|
28
34
|
ChangeSetModelPreproc,
|
|
29
35
|
PreprocEntityDelta,
|
|
36
|
+
PreprocProperties,
|
|
30
37
|
)
|
|
38
|
+
from localstack.services.cloudformation.engine.validations import ValidationError
|
|
31
39
|
from localstack.services.cloudformation.stores import get_cloudformation_store
|
|
32
40
|
from localstack.services.cloudformation.v2.entities import ChangeSet
|
|
41
|
+
from localstack.services.cloudformation.v2.types import engine_parameter_value
|
|
33
42
|
from localstack.utils import testutil
|
|
43
|
+
from localstack.utils.strings import long_uid
|
|
34
44
|
|
|
35
45
|
LOG = logging.getLogger(__name__)
|
|
36
46
|
|
|
@@ -79,45 +89,6 @@ class ChangeSetModelTransform(ChangeSetModelPreproc):
|
|
|
79
89
|
self._before_template = before_template or Nothing
|
|
80
90
|
self._after_template = after_template or Nothing
|
|
81
91
|
|
|
82
|
-
def visit_node_parameter(
|
|
83
|
-
self, node_parameter: NodeParameter
|
|
84
|
-
) -> PreprocEntityDelta[
|
|
85
|
-
dict[str, TransformPreprocParameter], dict[str, TransformPreprocParameter]
|
|
86
|
-
]:
|
|
87
|
-
# Enable compatability with v1 util.
|
|
88
|
-
# TODO: port v1's SSM parameter resolution
|
|
89
|
-
|
|
90
|
-
parameter_value_delta = super().visit_node_parameter(node_parameter=node_parameter)
|
|
91
|
-
parameter_value_before = parameter_value_delta.before
|
|
92
|
-
parameter_value_after = parameter_value_delta.after
|
|
93
|
-
|
|
94
|
-
parameter_type_delta = self.visit(node_parameter.type_)
|
|
95
|
-
parameter_type_before = parameter_type_delta.before
|
|
96
|
-
parameter_type_after = parameter_type_delta.after
|
|
97
|
-
|
|
98
|
-
parameter_key = node_parameter.name
|
|
99
|
-
|
|
100
|
-
before = Nothing
|
|
101
|
-
if not is_nothing(parameter_value_before):
|
|
102
|
-
before = TransformPreprocParameter(
|
|
103
|
-
ParameterKey=parameter_key,
|
|
104
|
-
ParameterValue=parameter_value_before,
|
|
105
|
-
ParameterType=parameter_type_before
|
|
106
|
-
if not is_nothing(parameter_type_before)
|
|
107
|
-
else None,
|
|
108
|
-
)
|
|
109
|
-
after = Nothing
|
|
110
|
-
if not is_nothing(parameter_value_after):
|
|
111
|
-
after = TransformPreprocParameter(
|
|
112
|
-
ParameterKey=parameter_key,
|
|
113
|
-
ParameterValue=parameter_value_after,
|
|
114
|
-
ParameterType=parameter_type_after
|
|
115
|
-
if not is_nothing(parameter_type_after)
|
|
116
|
-
else None,
|
|
117
|
-
)
|
|
118
|
-
|
|
119
|
-
return PreprocEntityDelta(before=before, after=after)
|
|
120
|
-
|
|
121
92
|
# Ported from v1:
|
|
122
93
|
@staticmethod
|
|
123
94
|
def _apply_global_serverless_transformation(
|
|
@@ -143,18 +114,17 @@ class ChangeSetModelTransform(ChangeSetModelPreproc):
|
|
|
143
114
|
if region_before is not None:
|
|
144
115
|
os.environ["AWS_DEFAULT_REGION"] = region_before
|
|
145
116
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
global_transform: GlobalTransform, template: dict, parameters: dict, account_id, region_name
|
|
149
|
-
) -> dict:
|
|
150
|
-
location = global_transform.parameters.get("Location")
|
|
117
|
+
def _compute_include_transform(self, parameters: dict, fragment: dict) -> dict:
|
|
118
|
+
location = parameters.get("Location")
|
|
151
119
|
if not location or not location.startswith("s3://"):
|
|
152
120
|
raise FailedTransformationException(
|
|
153
121
|
transformation=INCLUDE_TRANSFORM,
|
|
154
122
|
message="Unexpected Location parameter for AWS::Include transformer: %s" % location,
|
|
155
123
|
)
|
|
156
124
|
|
|
157
|
-
s3_client = connect_to(
|
|
125
|
+
s3_client = connect_to(
|
|
126
|
+
aws_access_key_id=self._change_set.account_id, region_name=self._change_set.region_name
|
|
127
|
+
).s3
|
|
158
128
|
bucket, _, path = location.removeprefix("s3://").partition("/")
|
|
159
129
|
try:
|
|
160
130
|
content = testutil.download_s3_object(s3_client, bucket, path)
|
|
@@ -167,34 +137,8 @@ class ChangeSetModelTransform(ChangeSetModelPreproc):
|
|
|
167
137
|
template_to_include = parse_template(content)
|
|
168
138
|
except Exception as e:
|
|
169
139
|
raise FailedTransformationException(transformation=INCLUDE_TRANSFORM, message=str(e))
|
|
170
|
-
return {**template, **template_to_include}
|
|
171
140
|
|
|
172
|
-
|
|
173
|
-
def _apply_global_macro_transformation(
|
|
174
|
-
account_id: str,
|
|
175
|
-
region_name,
|
|
176
|
-
global_transform: GlobalTransform,
|
|
177
|
-
template: dict,
|
|
178
|
-
parameters: dict,
|
|
179
|
-
) -> dict | None:
|
|
180
|
-
macro_name = global_transform.name
|
|
181
|
-
macros_store = get_cloudformation_store(
|
|
182
|
-
account_id=account_id, region_name=region_name
|
|
183
|
-
).macros
|
|
184
|
-
macro = macros_store.get(macro_name)
|
|
185
|
-
if macro is None:
|
|
186
|
-
raise RuntimeError(f"No definitions for global transform '{macro_name}'")
|
|
187
|
-
transformation_parameters = global_transform.parameters or {}
|
|
188
|
-
transformed_template = execute_macro(
|
|
189
|
-
account_id,
|
|
190
|
-
region_name,
|
|
191
|
-
parsed_template=template,
|
|
192
|
-
macro=macro,
|
|
193
|
-
stack_parameters=parameters,
|
|
194
|
-
transformation_parameters=transformation_parameters,
|
|
195
|
-
)
|
|
196
|
-
# The type annotation on the v1 util appears to be incorrect.
|
|
197
|
-
return transformed_template # noqa
|
|
141
|
+
return {**fragment, **template_to_include}
|
|
198
142
|
|
|
199
143
|
def _apply_global_transform(
|
|
200
144
|
self, global_transform: GlobalTransform, template: dict, parameters: dict
|
|
@@ -214,20 +158,18 @@ class ChangeSetModelTransform(ChangeSetModelPreproc):
|
|
|
214
158
|
LOG.warning("%s is not yet supported. Ignoring.", SECRETSMANAGER_TRANSFORM)
|
|
215
159
|
transformed_template = template
|
|
216
160
|
elif transform_name == INCLUDE_TRANSFORM:
|
|
217
|
-
transformed_template = self.
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
account_id=self._change_set.account_id,
|
|
221
|
-
template=template,
|
|
222
|
-
parameters=parameters,
|
|
161
|
+
transformed_template = self._compute_include_transform(
|
|
162
|
+
parameters=global_transform.parameters,
|
|
163
|
+
fragment=template,
|
|
223
164
|
)
|
|
224
165
|
else:
|
|
225
|
-
transformed_template = self.
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
global_transform
|
|
229
|
-
|
|
230
|
-
|
|
166
|
+
transformed_template = self._invoke_macro(
|
|
167
|
+
name=global_transform.name,
|
|
168
|
+
parameters=global_transform.parameters
|
|
169
|
+
if not is_nothing(global_transform.parameters)
|
|
170
|
+
else {},
|
|
171
|
+
fragment=template,
|
|
172
|
+
allow_string=False,
|
|
231
173
|
)
|
|
232
174
|
return transformed_template
|
|
233
175
|
|
|
@@ -240,6 +182,8 @@ class ChangeSetModelTransform(ChangeSetModelPreproc):
|
|
|
240
182
|
parameters_before = parameters_delta.before
|
|
241
183
|
parameters_after = parameters_delta.after
|
|
242
184
|
|
|
185
|
+
self.visit_node_resources(node_template.resources)
|
|
186
|
+
|
|
243
187
|
transform_delta: PreprocEntityDelta[list[GlobalTransform], list[GlobalTransform]] = (
|
|
244
188
|
self.visit_node_transform(node_template.transform)
|
|
245
189
|
)
|
|
@@ -248,9 +192,9 @@ class ChangeSetModelTransform(ChangeSetModelPreproc):
|
|
|
248
192
|
|
|
249
193
|
transformed_before_template = self._before_template
|
|
250
194
|
if transform_before and not is_nothing(self._before_template):
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
195
|
+
if _SCOPE_TRANSFORM_TEMPLATE_OUTCOME in self._before_cache:
|
|
196
|
+
transformed_before_template = self._before_cache[_SCOPE_TRANSFORM_TEMPLATE_OUTCOME]
|
|
197
|
+
else:
|
|
254
198
|
for before_global_transform in transform_before:
|
|
255
199
|
if not is_nothing(before_global_transform.name):
|
|
256
200
|
transformed_before_template = self._apply_global_transform(
|
|
@@ -258,21 +202,26 @@ class ChangeSetModelTransform(ChangeSetModelPreproc):
|
|
|
258
202
|
parameters=parameters_before,
|
|
259
203
|
template=transformed_before_template,
|
|
260
204
|
)
|
|
205
|
+
|
|
206
|
+
# Macro transformations won't remove the transform from the template
|
|
207
|
+
if "Transform" in transformed_before_template:
|
|
208
|
+
transformed_before_template.pop("Transform")
|
|
261
209
|
self._before_cache[_SCOPE_TRANSFORM_TEMPLATE_OUTCOME] = transformed_before_template
|
|
262
210
|
|
|
263
211
|
transformed_after_template = self._after_template
|
|
264
212
|
if transform_after and not is_nothing(self._after_template):
|
|
265
|
-
transformed_after_template = self.
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
213
|
+
transformed_after_template = self._after_template
|
|
214
|
+
for after_global_transform in transform_after:
|
|
215
|
+
if not is_nothing(after_global_transform.name):
|
|
216
|
+
transformed_after_template = self._apply_global_transform(
|
|
217
|
+
global_transform=after_global_transform,
|
|
218
|
+
parameters=parameters_after,
|
|
219
|
+
template=transformed_after_template,
|
|
220
|
+
)
|
|
221
|
+
# Macro transformations won't remove the transform from the template
|
|
222
|
+
if "Transform" in transformed_after_template:
|
|
223
|
+
transformed_after_template.pop("Transform")
|
|
224
|
+
self._after_cache[_SCOPE_TRANSFORM_TEMPLATE_OUTCOME] = transformed_after_template
|
|
276
225
|
|
|
277
226
|
self._save_runtime_cache()
|
|
278
227
|
|
|
@@ -301,6 +250,9 @@ class ChangeSetModelTransform(ChangeSetModelPreproc):
|
|
|
301
250
|
before = [] if change_type != ChangeType.CREATED else Nothing
|
|
302
251
|
after = [] if change_type != ChangeType.REMOVED else Nothing
|
|
303
252
|
for change_set_entity in node_transform.global_transforms:
|
|
253
|
+
if not isinstance(change_set_entity.name.value, str):
|
|
254
|
+
raise ValidationError("Key Name of transform definition must be a string.")
|
|
255
|
+
|
|
304
256
|
delta: PreprocEntityDelta[GlobalTransform, GlobalTransform] = self.visit(
|
|
305
257
|
change_set_entity=change_set_entity
|
|
306
258
|
)
|
|
@@ -311,3 +263,201 @@ class ChangeSetModelTransform(ChangeSetModelPreproc):
|
|
|
311
263
|
if not is_nothing(after) and not is_nothing(delta_after):
|
|
312
264
|
after.append(delta_after)
|
|
313
265
|
return PreprocEntityDelta(before=before, after=after)
|
|
266
|
+
|
|
267
|
+
def _compute_fn_transform(
|
|
268
|
+
self, macro_definition: Any, siblings: Any, allow_string: False
|
|
269
|
+
) -> Any:
|
|
270
|
+
def _normalize_transform(obj):
|
|
271
|
+
transforms = []
|
|
272
|
+
|
|
273
|
+
if isinstance(obj, str):
|
|
274
|
+
transforms.append({"Name": obj, "Parameters": {}})
|
|
275
|
+
|
|
276
|
+
if isinstance(obj, dict):
|
|
277
|
+
transforms.append(obj)
|
|
278
|
+
|
|
279
|
+
if isinstance(obj, list):
|
|
280
|
+
for v in obj:
|
|
281
|
+
if isinstance(v, str):
|
|
282
|
+
transforms.append({"Name": v, "Parameters": {}})
|
|
283
|
+
|
|
284
|
+
if isinstance(v, dict):
|
|
285
|
+
if not v.get("Parameters"):
|
|
286
|
+
v["Parameters"] = {}
|
|
287
|
+
transforms.append(v)
|
|
288
|
+
|
|
289
|
+
return transforms
|
|
290
|
+
|
|
291
|
+
normalized_transforms = _normalize_transform(macro_definition)
|
|
292
|
+
transform_output = copy.deepcopy(siblings)
|
|
293
|
+
for transform in normalized_transforms:
|
|
294
|
+
transform_name = transform["Name"]
|
|
295
|
+
if transform_name == INCLUDE_TRANSFORM:
|
|
296
|
+
transform_output = self._compute_include_transform(
|
|
297
|
+
parameters=transform["Parameters"], fragment=transform_output
|
|
298
|
+
)
|
|
299
|
+
else:
|
|
300
|
+
transform_output: dict | str = self._invoke_macro(
|
|
301
|
+
fragment=transform_output,
|
|
302
|
+
name=transform["Name"],
|
|
303
|
+
parameters=transform.get("Parameters", {}),
|
|
304
|
+
allow_string=allow_string,
|
|
305
|
+
)
|
|
306
|
+
|
|
307
|
+
if isinstance(transform_output, dict) and FnTransform in transform_output:
|
|
308
|
+
transform_output.pop(FnTransform)
|
|
309
|
+
|
|
310
|
+
return transform_output
|
|
311
|
+
|
|
312
|
+
def _replace_at_jsonpath(self, template: dict, path: str, result: Any):
|
|
313
|
+
pattern = jsonpath_ng.parse(path)
|
|
314
|
+
result_template = pattern.update(template, result)
|
|
315
|
+
|
|
316
|
+
return result_template
|
|
317
|
+
|
|
318
|
+
def visit_node_intrinsic_function_fn_transform(
|
|
319
|
+
self, node_intrinsic_function: NodeIntrinsicFunctionFnTransform
|
|
320
|
+
) -> PreprocEntityDelta:
|
|
321
|
+
arguments_delta = self.visit(node_intrinsic_function.arguments)
|
|
322
|
+
parent_json_path = node_intrinsic_function.scope.parent.jsonpath
|
|
323
|
+
|
|
324
|
+
# Only when a FnTransform is used as Property value the macro function is allowed to return a str
|
|
325
|
+
property_value_regex = r"\.(Properties)"
|
|
326
|
+
allow_string = False
|
|
327
|
+
if re.search(property_value_regex, parent_json_path):
|
|
328
|
+
allow_string = True
|
|
329
|
+
|
|
330
|
+
if not is_nothing(arguments_delta.before):
|
|
331
|
+
before = self._compute_fn_transform(
|
|
332
|
+
arguments_delta.before,
|
|
333
|
+
node_intrinsic_function.before_siblings,
|
|
334
|
+
allow_string=allow_string,
|
|
335
|
+
)
|
|
336
|
+
updated_before_template = self._replace_at_jsonpath(
|
|
337
|
+
self._before_template, parent_json_path, before
|
|
338
|
+
)
|
|
339
|
+
self._after_cache[_SCOPE_TRANSFORM_TEMPLATE_OUTCOME] = updated_before_template
|
|
340
|
+
else:
|
|
341
|
+
before = Nothing
|
|
342
|
+
|
|
343
|
+
if not is_nothing(arguments_delta.after):
|
|
344
|
+
after = self._compute_fn_transform(
|
|
345
|
+
arguments_delta.after,
|
|
346
|
+
node_intrinsic_function.after_siblings,
|
|
347
|
+
allow_string=allow_string,
|
|
348
|
+
)
|
|
349
|
+
updated_after_template = self._replace_at_jsonpath(
|
|
350
|
+
self._after_template, parent_json_path, after
|
|
351
|
+
)
|
|
352
|
+
self._after_cache[_SCOPE_TRANSFORM_TEMPLATE_OUTCOME] = updated_after_template
|
|
353
|
+
else:
|
|
354
|
+
after = Nothing
|
|
355
|
+
|
|
356
|
+
self._save_runtime_cache()
|
|
357
|
+
return PreprocEntityDelta(before=before, after=after)
|
|
358
|
+
|
|
359
|
+
def visit_node_properties(
|
|
360
|
+
self, node_properties: NodeProperties
|
|
361
|
+
) -> PreprocEntityDelta[PreprocProperties, PreprocProperties]:
|
|
362
|
+
if not is_nothing(node_properties.fn_transform):
|
|
363
|
+
self.visit_node_intrinsic_function_fn_transform(node_properties.fn_transform)
|
|
364
|
+
|
|
365
|
+
return super().visit_node_properties(node_properties=node_properties)
|
|
366
|
+
|
|
367
|
+
def visit_node_resources(self, node_resources: NodeResources) -> PreprocEntityDelta:
|
|
368
|
+
if not is_nothing(node_resources.fn_transform):
|
|
369
|
+
self.visit_node_intrinsic_function_fn_transform(
|
|
370
|
+
node_intrinsic_function=node_resources.fn_transform
|
|
371
|
+
)
|
|
372
|
+
|
|
373
|
+
return super().visit_node_resources(node_resources=node_resources)
|
|
374
|
+
|
|
375
|
+
def _invoke_macro(self, name: str, parameters: dict, fragment: dict, allow_string=False):
|
|
376
|
+
account_id = self._change_set.account_id
|
|
377
|
+
region_name = self._change_set.region_name
|
|
378
|
+
macro_definition = get_cloudformation_store(
|
|
379
|
+
account_id=account_id, region_name=region_name
|
|
380
|
+
).macros.get(name)
|
|
381
|
+
|
|
382
|
+
if not macro_definition:
|
|
383
|
+
raise FailedTransformationException(name, f"Transformation {name} is not supported.")
|
|
384
|
+
|
|
385
|
+
simplified_parameters = {}
|
|
386
|
+
if resolved_parameters := self._change_set.resolved_parameters:
|
|
387
|
+
for key, resolved_parameter in resolved_parameters.items():
|
|
388
|
+
final_value = engine_parameter_value(resolved_parameter)
|
|
389
|
+
simplified_parameters[key] = (
|
|
390
|
+
final_value.split(",")
|
|
391
|
+
if resolved_parameter["type_"] == "CommaDelimitedList"
|
|
392
|
+
else final_value
|
|
393
|
+
)
|
|
394
|
+
|
|
395
|
+
transformation_id = f"{account_id}::{name}"
|
|
396
|
+
event = {
|
|
397
|
+
"region": region_name,
|
|
398
|
+
"accountId": account_id,
|
|
399
|
+
"fragment": fragment,
|
|
400
|
+
"transformId": transformation_id,
|
|
401
|
+
"params": parameters,
|
|
402
|
+
"requestId": long_uid(),
|
|
403
|
+
"templateParameterValues": simplified_parameters,
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
client = connect_to(aws_access_key_id=account_id, region_name=region_name).lambda_
|
|
407
|
+
try:
|
|
408
|
+
invocation = client.invoke(
|
|
409
|
+
FunctionName=macro_definition["FunctionName"], Payload=json.dumps(event)
|
|
410
|
+
)
|
|
411
|
+
except ClientError:
|
|
412
|
+
LOG.error(
|
|
413
|
+
"client error executing lambda function '%s' with payload '%s'",
|
|
414
|
+
macro_definition["FunctionName"],
|
|
415
|
+
json.dumps(event),
|
|
416
|
+
)
|
|
417
|
+
raise
|
|
418
|
+
if invocation.get("StatusCode") != 200 or invocation.get("FunctionError") == "Unhandled":
|
|
419
|
+
raise FailedTransformationException(
|
|
420
|
+
transformation=name,
|
|
421
|
+
message=f"Received malformed response from transform {transformation_id}. Rollback requested by user.",
|
|
422
|
+
)
|
|
423
|
+
result = json.loads(invocation["Payload"].read())
|
|
424
|
+
|
|
425
|
+
if result.get("status") != "success":
|
|
426
|
+
error_message = result.get("errorMessage")
|
|
427
|
+
message = (
|
|
428
|
+
f"Transform {transformation_id} failed with: {error_message}. Rollback requested by user."
|
|
429
|
+
if error_message
|
|
430
|
+
else f"Transform {transformation_id} failed without an error message.. Rollback requested by user."
|
|
431
|
+
)
|
|
432
|
+
raise FailedTransformationException(transformation=name, message=message)
|
|
433
|
+
|
|
434
|
+
if not isinstance(result.get("fragment"), dict) and not allow_string:
|
|
435
|
+
raise FailedTransformationException(
|
|
436
|
+
transformation=name,
|
|
437
|
+
message="Template format error: unsupported structure.. Rollback requested by user.",
|
|
438
|
+
)
|
|
439
|
+
|
|
440
|
+
return result.get("fragment")
|
|
441
|
+
|
|
442
|
+
def visit_node_intrinsic_function_fn_get_att(
|
|
443
|
+
self, node_intrinsic_function: NodeIntrinsicFunction
|
|
444
|
+
) -> PreprocEntityDelta:
|
|
445
|
+
return self.visit(node_intrinsic_function.arguments)
|
|
446
|
+
|
|
447
|
+
def visit_node_intrinsic_function_fn_sub(
|
|
448
|
+
self, node_intrinsic_function: NodeIntrinsicFunction
|
|
449
|
+
) -> PreprocEntityDelta:
|
|
450
|
+
try:
|
|
451
|
+
# If an argument is a Parameter it should be resolved, any other case, ignore it
|
|
452
|
+
return super().visit_node_intrinsic_function_fn_sub(node_intrinsic_function)
|
|
453
|
+
except RuntimeError:
|
|
454
|
+
return self.visit(node_intrinsic_function.arguments)
|
|
455
|
+
|
|
456
|
+
def visit_node_intrinsic_function_fn_split(
|
|
457
|
+
self, node_intrinsic_function: NodeIntrinsicFunction
|
|
458
|
+
) -> PreprocEntityDelta:
|
|
459
|
+
try:
|
|
460
|
+
# If an argument is a Parameter it should be resolved, any other case, ignore it
|
|
461
|
+
return super().visit_node_intrinsic_function_fn_split(node_intrinsic_function)
|
|
462
|
+
except RuntimeError:
|
|
463
|
+
return self.visit(node_intrinsic_function.arguments)
|
|
@@ -139,3 +139,11 @@ class ChangeSetModelValidator(ChangeSetModelPreproc):
|
|
|
139
139
|
if is_nothing(after) and not is_nothing(arguments_after):
|
|
140
140
|
after = _compute_sub(args=arguments_after, select_before=False)
|
|
141
141
|
return PreprocEntityDelta(before=before, after=after)
|
|
142
|
+
|
|
143
|
+
def visit_node_intrinsic_function_fn_transform(
|
|
144
|
+
self, node_intrinsic_function: NodeIntrinsicFunction
|
|
145
|
+
):
|
|
146
|
+
# TODO Research this issue:
|
|
147
|
+
# Function is already resolved in the template reaching this point
|
|
148
|
+
# But transformation is still present in update model
|
|
149
|
+
return self.visit(node_intrinsic_function.arguments)
|
|
@@ -29,7 +29,7 @@ from localstack.services.cloudformation.engine.v2.change_set_model import (
|
|
|
29
29
|
ChangeType,
|
|
30
30
|
UpdateModel,
|
|
31
31
|
)
|
|
32
|
-
from localstack.services.cloudformation.v2.types import ResolvedResource
|
|
32
|
+
from localstack.services.cloudformation.v2.types import EngineParameter, ResolvedResource
|
|
33
33
|
from localstack.utils.aws import arns
|
|
34
34
|
from localstack.utils.strings import long_uid, short_uid
|
|
35
35
|
|
|
@@ -192,7 +192,7 @@ class ChangeSet:
|
|
|
192
192
|
execution_status: ExecutionStatus
|
|
193
193
|
creation_time: datetime
|
|
194
194
|
processed_template: dict | None
|
|
195
|
-
resolved_parameters:
|
|
195
|
+
resolved_parameters: dict[str, EngineParameter]
|
|
196
196
|
description: str | None
|
|
197
197
|
|
|
198
198
|
def __init__(
|
|
@@ -210,7 +210,7 @@ class ChangeSet:
|
|
|
210
210
|
self.execution_status = ExecutionStatus.AVAILABLE
|
|
211
211
|
self.update_model = None
|
|
212
212
|
self.creation_time = datetime.now(tz=UTC)
|
|
213
|
-
self.resolved_parameters =
|
|
213
|
+
self.resolved_parameters = {}
|
|
214
214
|
|
|
215
215
|
self.change_set_name = request_payload["ChangeSetName"]
|
|
216
216
|
self.change_set_type = request_payload.get("ChangeSetType", ChangeSetType.UPDATE)
|
|
@@ -80,6 +80,7 @@ from localstack.aws.connect import connect_to
|
|
|
80
80
|
from localstack.services.cloudformation import api_utils
|
|
81
81
|
from localstack.services.cloudformation.engine import template_preparer
|
|
82
82
|
from localstack.services.cloudformation.engine.parameters import resolve_ssm_parameter
|
|
83
|
+
from localstack.services.cloudformation.engine.transformers import FailedTransformationException
|
|
83
84
|
from localstack.services.cloudformation.engine.v2.change_set_model import (
|
|
84
85
|
ChangeSetModel,
|
|
85
86
|
ChangeType,
|
|
@@ -299,9 +300,18 @@ class CloudformationProviderV2(CloudformationProvider):
|
|
|
299
300
|
before_template=before_template,
|
|
300
301
|
after_template=after_template,
|
|
301
302
|
)
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
303
|
+
try:
|
|
304
|
+
transformed_before_template, transformed_after_template = (
|
|
305
|
+
change_set_model_transform.transform()
|
|
306
|
+
)
|
|
307
|
+
except FailedTransformationException as e:
|
|
308
|
+
change_set.status = ChangeSetStatus.FAILED
|
|
309
|
+
change_set.status_reason = e.message
|
|
310
|
+
change_set.stack.set_stack_status(
|
|
311
|
+
status=StackStatus.ROLLBACK_IN_PROGRESS, reason=e.message
|
|
312
|
+
)
|
|
313
|
+
change_set.stack.set_stack_status(status=StackStatus.CREATE_FAILED)
|
|
314
|
+
return
|
|
305
315
|
|
|
306
316
|
# Remodel the update graph after the applying the global transforms.
|
|
307
317
|
change_set_model = ChangeSetModel(
|
|
@@ -363,6 +373,12 @@ class CloudformationProviderV2(CloudformationProvider):
|
|
|
363
373
|
template_body = api_utils.extract_template_body(request)
|
|
364
374
|
structured_template = template_preparer.parse_template(template_body)
|
|
365
375
|
|
|
376
|
+
if len(template_body) > 51200:
|
|
377
|
+
raise ValidationError(
|
|
378
|
+
f"1 validation error detected: Value '{template_body}' at 'templateBody' "
|
|
379
|
+
"failed to satisfy constraint: Member must have length less than or equal to 51200"
|
|
380
|
+
)
|
|
381
|
+
|
|
366
382
|
# this is intentionally not in a util yet. Let's first see how the different operations deal with these before generalizing
|
|
367
383
|
# handle ARN stack_name here (not valid for initial CREATE, since stack doesn't exist yet)
|
|
368
384
|
if is_stack_arn(stack_name):
|
|
@@ -688,6 +704,12 @@ class CloudformationProviderV2(CloudformationProvider):
|
|
|
688
704
|
template_body = api_utils.extract_template_body(request)
|
|
689
705
|
structured_template = template_preparer.parse_template(template_body)
|
|
690
706
|
|
|
707
|
+
if len(template_body) > 51200:
|
|
708
|
+
raise ValidationError(
|
|
709
|
+
f"1 validation error detected: Value '{template_body}' at 'templateBody' "
|
|
710
|
+
"failed to satisfy constraint: Member must have length less than or equal to 51200"
|
|
711
|
+
)
|
|
712
|
+
|
|
691
713
|
if "CAPABILITY_AUTO_EXPAND" not in request.get("Capabilities", []) and (
|
|
692
714
|
"Transform" in structured_template.keys() or "Fn::Transform" in template_body
|
|
693
715
|
):
|
|
@@ -727,6 +749,8 @@ class CloudformationProviderV2(CloudformationProvider):
|
|
|
727
749
|
after_parameters=after_parameters,
|
|
728
750
|
previous_update_model=None,
|
|
729
751
|
)
|
|
752
|
+
if change_set.status == ChangeSetStatus.FAILED:
|
|
753
|
+
return CreateStackOutput(StackId=stack.stack_id)
|
|
730
754
|
|
|
731
755
|
# deployment process
|
|
732
756
|
stack.set_stack_status(StackStatus.CREATE_IN_PROGRESS)
|
|
@@ -742,6 +766,7 @@ class CloudformationProviderV2(CloudformationProvider):
|
|
|
742
766
|
# which was just deployed
|
|
743
767
|
stack.template = change_set.template
|
|
744
768
|
stack.template_body = change_set.template_body
|
|
769
|
+
stack.processed_template = change_set.processed_template
|
|
745
770
|
stack.resolved_parameters = change_set.resolved_parameters
|
|
746
771
|
stack.resolved_exports = {}
|
|
747
772
|
for output in result.outputs:
|
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.7.1.
|
|
21
|
-
__version_tuple__ = version_tuple = (4, 7, 1, '
|
|
20
|
+
__version__ = version = '4.7.1.dev53'
|
|
21
|
+
__version_tuple__ = version_tuple = (4, 7, 1, 'dev53')
|
|
@@ -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=gkzjmZOQJuMMvuJT5ymjPQTk1DKZiC_UIEBlujGzqHg,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
|
|
@@ -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=7-mOvqx-hib-IwGFm6wY6DM00VTqdPz15BY0LS2s7zo,64011
|
|
315
315
|
localstack/services/cloudformation/engine/v2/change_set_model_describer.py,sha256=ROQwv8a2geaA0HVqCJWftAO0TKCnWPK-z82-wWU_vbE,10397
|
|
316
316
|
localstack/services/cloudformation/engine/v2/change_set_model_executor.py,sha256=NPe43w7c4wRyHzW762zrpstDQ6iq5jL-ZMpU68CKUXA,25799
|
|
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=
|
|
317
|
+
localstack/services/cloudformation/engine/v2/change_set_model_preproc.py,sha256=xTV501asFt4GZJpsQ254zPL0voe4lujWLyWMlRCZ1Q8,52720
|
|
318
|
+
localstack/services/cloudformation/engine/v2/change_set_model_transform.py,sha256=yBcLjMnSh0O3DZq6uKjlSU4JEMpRqTB0yvIuCtMv73I,19828
|
|
319
|
+
localstack/services/cloudformation/engine/v2/change_set_model_validator.py,sha256=KkqMrApsWRzRSZ8VogljPg4_9S1FU_Leitx7ZnlvInA,6696
|
|
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,8 +336,8 @@ 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=
|
|
339
|
+
localstack/services/cloudformation/v2/entities.py,sha256=SqSmdcw3toeRdxuIHyel5DCKlhRIeNHCRASBTpMGnbc,9001
|
|
340
|
+
localstack/services/cloudformation/v2/provider.py,sha256=oRiVt7fX5wRYDu99eH0TOTt0iw7Opl5YXANJVlawNWE,62742
|
|
341
341
|
localstack/services/cloudformation/v2/types.py,sha256=YOKERHmgRjK3RCjqKwQ3ZxZKfa0D-Uwjt2W9GaFDkiM,864
|
|
342
342
|
localstack/services/cloudformation/v2/utils.py,sha256=xy4Lcp4X8XGJ0OKfnsE7pnfMcFrtIH0Chw35qwjhZuw,148
|
|
343
343
|
localstack/services/cloudwatch/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -1286,13 +1286,13 @@ localstack/utils/server/tcp_proxy.py,sha256=rR6d5jR0ozDvIlpHiqW0cfyY9a2fRGdOzyA8
|
|
|
1286
1286
|
localstack/utils/xray/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1287
1287
|
localstack/utils/xray/trace_header.py,sha256=ahXk9eonq7LpeENwlqUEPj3jDOCiVRixhntQuxNor-Q,6209
|
|
1288
1288
|
localstack/utils/xray/traceid.py,sha256=SQSsMV2rhbTNK6ceIoozZYuGU7Fg687EXcgqxoDl1Fw,1106
|
|
1289
|
-
localstack_core-4.7.1.
|
|
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.
|
|
1289
|
+
localstack_core-4.7.1.dev53.data/scripts/localstack,sha256=WyL11vp5CkuP79iIR-L8XT7Cj8nvmxX7XRAgxhbmXNE,529
|
|
1290
|
+
localstack_core-4.7.1.dev53.data/scripts/localstack-supervisor,sha256=nm1Il2d6ASyOB6Vo4CRHd90w7TK9FdRl9VPp0NN6hUk,6378
|
|
1291
|
+
localstack_core-4.7.1.dev53.data/scripts/localstack.bat,sha256=tlzZTXtveHkMX_s_fa7VDfvdNdS8iVpEz2ER3uk9B_c,29
|
|
1292
|
+
localstack_core-4.7.1.dev53.dist-info/licenses/LICENSE.txt,sha256=3PC-9Z69UsNARuQ980gNR_JsLx8uvMjdG6C7cc4LBYs,606
|
|
1293
|
+
localstack_core-4.7.1.dev53.dist-info/METADATA,sha256=UTJydFnqzldfLCawmEKeJEQAPkVCN62rYhGC4-d7Vro,5570
|
|
1294
|
+
localstack_core-4.7.1.dev53.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
1295
|
+
localstack_core-4.7.1.dev53.dist-info/entry_points.txt,sha256=-GFtw80qM_1GQIDUcyqXojJvnqvP_8lK1Vc-M9ShaJE,20668
|
|
1296
|
+
localstack_core-4.7.1.dev53.dist-info/plux.json,sha256=0nilt3JYHcNLYOpoIpj2hcVTTZXF_QOaqBp3WP4mzgM,20891
|
|
1297
|
+
localstack_core-4.7.1.dev53.dist-info/top_level.txt,sha256=3sqmK2lGac8nCy8nwsbS5SpIY_izmtWtgaTFKHYVHbI,11
|
|
1298
|
+
localstack_core-4.7.1.dev53.dist-info/RECORD,,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"localstack.cloudformation.resource_providers": ["AWS::IAM::ManagedPolicy=localstack.services.iam.resource_providers.aws_iam_managedpolicy_plugin:IAMManagedPolicyProviderPlugin", "AWS::Lambda::LayerVersionPermission=localstack.services.lambda_.resource_providers.aws_lambda_layerversionpermission_plugin:LambdaLayerVersionPermissionProviderPlugin", "AWS::EC2::VPCGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_vpcgatewayattachment_plugin:EC2VPCGatewayAttachmentProviderPlugin", "AWS::Lambda::EventInvokeConfig=localstack.services.lambda_.resource_providers.aws_lambda_eventinvokeconfig_plugin:LambdaEventInvokeConfigProviderPlugin", "AWS::KMS::Alias=localstack.services.kms.resource_providers.aws_kms_alias_plugin:KMSAliasProviderPlugin", "AWS::SSM::MaintenanceWindowTarget=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtarget_plugin:SSMMaintenanceWindowTargetProviderPlugin", "AWS::ECR::Repository=localstack.services.ecr.resource_providers.aws_ecr_repository_plugin:ECRRepositoryProviderPlugin", "AWS::S3::BucketPolicy=localstack.services.s3.resource_providers.aws_s3_bucketpolicy_plugin:S3BucketPolicyProviderPlugin", "AWS::EC2::TransitGateway=localstack.services.ec2.resource_providers.aws_ec2_transitgateway_plugin:EC2TransitGatewayProviderPlugin", "AWS::SQS::Queue=localstack.services.sqs.resource_providers.aws_sqs_queue_plugin:SQSQueueProviderPlugin", "AWS::EC2::Subnet=localstack.services.ec2.resource_providers.aws_ec2_subnet_plugin:EC2SubnetProviderPlugin", "AWS::ApiGateway::ApiKey=localstack.services.apigateway.resource_providers.aws_apigateway_apikey_plugin:ApiGatewayApiKeyProviderPlugin", "AWS::Scheduler::ScheduleGroup=localstack.services.scheduler.resource_providers.aws_scheduler_schedulegroup_plugin:SchedulerScheduleGroupProviderPlugin", "AWS::Route53::RecordSet=localstack.services.route53.resource_providers.aws_route53_recordset_plugin:Route53RecordSetProviderPlugin", "AWS::ApiGateway::Method=localstack.services.apigateway.resource_providers.aws_apigateway_method_plugin:ApiGatewayMethodProviderPlugin", "AWS::SecretsManager::Secret=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secret_plugin:SecretsManagerSecretProviderPlugin", "AWS::EC2::Instance=localstack.services.ec2.resource_providers.aws_ec2_instance_plugin:EC2InstanceProviderPlugin", "AWS::S3::Bucket=localstack.services.s3.resource_providers.aws_s3_bucket_plugin:S3BucketProviderPlugin", "AWS::IAM::ServerCertificate=localstack.services.iam.resource_providers.aws_iam_servercertificate_plugin:IAMServerCertificateProviderPlugin", "AWS::ApiGateway::GatewayResponse=localstack.services.apigateway.resource_providers.aws_apigateway_gatewayresponse_plugin:ApiGatewayGatewayResponseProviderPlugin", "AWS::DynamoDB::Table=localstack.services.dynamodb.resource_providers.aws_dynamodb_table_plugin:DynamoDBTableProviderPlugin", "AWS::IAM::User=localstack.services.iam.resource_providers.aws_iam_user_plugin:IAMUserProviderPlugin", "AWS::EC2::SecurityGroup=localstack.services.ec2.resource_providers.aws_ec2_securitygroup_plugin:EC2SecurityGroupProviderPlugin", "AWS::ApiGateway::Stage=localstack.services.apigateway.resource_providers.aws_apigateway_stage_plugin:ApiGatewayStageProviderPlugin", "AWS::SNS::TopicPolicy=localstack.services.sns.resource_providers.aws_sns_topicpolicy_plugin:SNSTopicPolicyProviderPlugin", "AWS::CloudFormation::Macro=localstack.services.cloudformation.resource_providers.aws_cloudformation_macro_plugin:CloudFormationMacroProviderPlugin", "AWS::ResourceGroups::Group=localstack.services.resource_groups.resource_providers.aws_resourcegroups_group_plugin:ResourceGroupsGroupProviderPlugin", "AWS::Lambda::Permission=localstack.services.lambda_.resource_providers.aws_lambda_permission_plugin:LambdaPermissionProviderPlugin", "AWS::CertificateManager::Certificate=localstack.services.certificatemanager.resource_providers.aws_certificatemanager_certificate_plugin:CertificateManagerCertificateProviderPlugin", "AWS::Logs::LogStream=localstack.services.logs.resource_providers.aws_logs_logstream_plugin:LogsLogStreamProviderPlugin", "AWS::Events::Rule=localstack.services.events.resource_providers.aws_events_rule_plugin:EventsRuleProviderPlugin", "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::SSM::MaintenanceWindowTask=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtask_plugin:SSMMaintenanceWindowTaskProviderPlugin", "AWS::EC2::VPC=localstack.services.ec2.resource_providers.aws_ec2_vpc_plugin:EC2VPCProviderPlugin", "AWS::Kinesis::StreamConsumer=localstack.services.kinesis.resource_providers.aws_kinesis_streamconsumer_plugin:KinesisStreamConsumerProviderPlugin", "AWS::Events::Connection=localstack.services.events.resource_providers.aws_events_connection_plugin:EventsConnectionProviderPlugin", "AWS::SQS::QueuePolicy=localstack.services.sqs.resource_providers.aws_sqs_queuepolicy_plugin:SQSQueuePolicyProviderPlugin", "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::SecretsManager::SecretTargetAttachment=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secrettargetattachment_plugin:SecretsManagerSecretTargetAttachmentProviderPlugin", "AWS::Lambda::Function=localstack.services.lambda_.resource_providers.aws_lambda_function_plugin:LambdaFunctionProviderPlugin", "AWS::ApiGateway::Deployment=localstack.services.apigateway.resource_providers.aws_apigateway_deployment_plugin:ApiGatewayDeploymentProviderPlugin", "AWS::ApiGateway::RequestValidator=localstack.services.apigateway.resource_providers.aws_apigateway_requestvalidator_plugin:ApiGatewayRequestValidatorProviderPlugin", "AWS::CloudFormation::WaitCondition=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitcondition_plugin:CloudFormationWaitConditionProviderPlugin", "AWS::Logs::SubscriptionFilter=localstack.services.logs.resource_providers.aws_logs_subscriptionfilter_plugin:LogsSubscriptionFilterProviderPlugin", "AWS::Lambda::Version=localstack.services.lambda_.resource_providers.aws_lambda_version_plugin:LambdaVersionProviderPlugin", "AWS::StepFunctions::Activity=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_activity_plugin:StepFunctionsActivityProviderPlugin", "AWS::StepFunctions::StateMachine=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_statemachine_plugin:StepFunctionsStateMachineProviderPlugin", "AWS::EC2::NetworkAcl=localstack.services.ec2.resource_providers.aws_ec2_networkacl_plugin:EC2NetworkAclProviderPlugin", "AWS::Redshift::Cluster=localstack.services.redshift.resource_providers.aws_redshift_cluster_plugin:RedshiftClusterProviderPlugin", "AWS::CloudFormation::Stack=localstack.services.cloudformation.resource_providers.aws_cloudformation_stack_plugin:CloudFormationStackProviderPlugin", "AWS::IAM::Role=localstack.services.iam.resource_providers.aws_iam_role_plugin:IAMRoleProviderPlugin", "AWS::EC2::PrefixList=localstack.services.ec2.resource_providers.aws_ec2_prefixlist_plugin:EC2PrefixListProviderPlugin", "AWS::Lambda::CodeSigningConfig=localstack.services.lambda_.resource_providers.aws_lambda_codesigningconfig_plugin:LambdaCodeSigningConfigProviderPlugin", "AWS::Events::ApiDestination=localstack.services.events.resource_providers.aws_events_apidestination_plugin:EventsApiDestinationProviderPlugin", "AWS::Lambda::Url=localstack.services.lambda_.resource_providers.aws_lambda_url_plugin:LambdaUrlProviderPlugin", "AWS::ApiGateway::RestApi=localstack.services.apigateway.resource_providers.aws_apigateway_restapi_plugin:ApiGatewayRestApiProviderPlugin", "AWS::IAM::InstanceProfile=localstack.services.iam.resource_providers.aws_iam_instanceprofile_plugin:IAMInstanceProfileProviderPlugin", "AWS::ApiGateway::DomainName=localstack.services.apigateway.resource_providers.aws_apigateway_domainname_plugin:ApiGatewayDomainNameProviderPlugin", "AWS::Kinesis::Stream=localstack.services.kinesis.resource_providers.aws_kinesis_stream_plugin:KinesisStreamProviderPlugin", "AWS::IAM::Policy=localstack.services.iam.resource_providers.aws_iam_policy_plugin:IAMPolicyProviderPlugin", "AWS::Logs::LogGroup=localstack.services.logs.resource_providers.aws_logs_loggroup_plugin:LogsLogGroupProviderPlugin", "AWS::DynamoDB::GlobalTable=localstack.services.dynamodb.resource_providers.aws_dynamodb_globaltable_plugin:DynamoDBGlobalTableProviderPlugin", "AWS::Events::EventBusPolicy=localstack.services.events.resource_providers.aws_events_eventbuspolicy_plugin:EventsEventBusPolicyProviderPlugin", "AWS::EC2::NatGateway=localstack.services.ec2.resource_providers.aws_ec2_natgateway_plugin:EC2NatGatewayProviderPlugin", "AWS::SSM::Parameter=localstack.services.ssm.resource_providers.aws_ssm_parameter_plugin:SSMParameterProviderPlugin", "AWS::EC2::KeyPair=localstack.services.ec2.resource_providers.aws_ec2_keypair_plugin:EC2KeyPairProviderPlugin", "AWS::Lambda::EventSourceMapping=localstack.services.lambda_.resource_providers.aws_lambda_eventsourcemapping_plugin:LambdaEventSourceMappingProviderPlugin", "AWS::EC2::Route=localstack.services.ec2.resource_providers.aws_ec2_route_plugin:EC2RouteProviderPlugin", "AWS::Lambda::LayerVersion=localstack.services.lambda_.resource_providers.aws_lambda_layerversion_plugin:LambdaLayerVersionProviderPlugin", "AWS::ApiGateway::Account=localstack.services.apigateway.resource_providers.aws_apigateway_account_plugin:ApiGatewayAccountProviderPlugin", "AWS::ApiGateway::Model=localstack.services.apigateway.resource_providers.aws_apigateway_model_plugin:ApiGatewayModelProviderPlugin", "AWS::Elasticsearch::Domain=localstack.services.opensearch.resource_providers.aws_elasticsearch_domain_plugin:ElasticsearchDomainProviderPlugin", "AWS::IAM::Group=localstack.services.iam.resource_providers.aws_iam_group_plugin:IAMGroupProviderPlugin", "AWS::SNS::Topic=localstack.services.sns.resource_providers.aws_sns_topic_plugin:SNSTopicProviderPlugin", "AWS::EC2::VPCEndpoint=localstack.services.ec2.resource_providers.aws_ec2_vpcendpoint_plugin:EC2VPCEndpointProviderPlugin", "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::KMS::Key=localstack.services.kms.resource_providers.aws_kms_key_plugin:KMSKeyProviderPlugin", "AWS::SecretsManager::RotationSchedule=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_rotationschedule_plugin:SecretsManagerRotationScheduleProviderPlugin", "AWS::EC2::SubnetRouteTableAssociation=localstack.services.ec2.resource_providers.aws_ec2_subnetroutetableassociation_plugin:EC2SubnetRouteTableAssociationProviderPlugin", "AWS::CloudWatch::Alarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_alarm_plugin:CloudWatchAlarmProviderPlugin", "AWS::EC2::RouteTable=localstack.services.ec2.resource_providers.aws_ec2_routetable_plugin:EC2RouteTableProviderPlugin", "AWS::CloudFormation::WaitConditionHandle=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitconditionhandle_plugin:CloudFormationWaitConditionHandleProviderPlugin", "AWS::Lambda::Alias=localstack.services.lambda_.resource_providers.lambda_alias_plugin:LambdaAliasProviderPlugin", "AWS::IAM::ServiceLinkedRole=localstack.services.iam.resource_providers.aws_iam_servicelinkedrole_plugin:IAMServiceLinkedRoleProviderPlugin", "AWS::ApiGateway::Resource=localstack.services.apigateway.resource_providers.aws_apigateway_resource_plugin:ApiGatewayResourceProviderPlugin", "AWS::SecretsManager::ResourcePolicy=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_resourcepolicy_plugin:SecretsManagerResourcePolicyProviderPlugin", "AWS::ApiGateway::BasePathMapping=localstack.services.apigateway.resource_providers.aws_apigateway_basepathmapping_plugin:ApiGatewayBasePathMappingProviderPlugin", "AWS::SSM::PatchBaseline=localstack.services.ssm.resource_providers.aws_ssm_patchbaseline_plugin:SSMPatchBaselineProviderPlugin", "AWS::CDK::Metadata=localstack.services.cdk.resource_providers.cdk_metadata_plugin:LambdaAliasProviderPlugin", "AWS::Events::EventBus=localstack.services.events.resource_providers.aws_events_eventbus_plugin:EventsEventBusProviderPlugin", "AWS::IAM::AccessKey=localstack.services.iam.resource_providers.aws_iam_accesskey_plugin:IAMAccessKeyProviderPlugin", "AWS::CloudWatch::CompositeAlarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_compositealarm_plugin:CloudWatchCompositeAlarmProviderPlugin", "AWS::ApiGateway::UsagePlanKey=localstack.services.apigateway.resource_providers.aws_apigateway_usageplankey_plugin:ApiGatewayUsagePlanKeyProviderPlugin", "AWS::OpenSearchService::Domain=localstack.services.opensearch.resource_providers.aws_opensearchservice_domain_plugin:OpenSearchServiceDomainProviderPlugin", "AWS::EC2::TransitGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_transitgatewayattachment_plugin:EC2TransitGatewayAttachmentProviderPlugin", "AWS::Route53::HealthCheck=localstack.services.route53.resource_providers.aws_route53_healthcheck_plugin:Route53HealthCheckProviderPlugin", "AWS::EC2::DHCPOptions=localstack.services.ec2.resource_providers.aws_ec2_dhcpoptions_plugin:EC2DHCPOptionsProviderPlugin", "AWS::SES::EmailIdentity=localstack.services.ses.resource_providers.aws_ses_emailidentity_plugin:SESEmailIdentityProviderPlugin"], "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", "conditionally_enable_debugger=localstack.dev.debugger.plugins:conditionally_enable_debugger", "_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", "register_swagger_endpoints=localstack.http.resources.swagger.plugins:register_swagger_endpoints", "register_custom_endpoints=localstack.services.lambda_.plugins:register_custom_endpoints", "validate_configuration=localstack.services.lambda_.plugins:validate_configuration", "register_cloudformation_deploy_ui=localstack.services.cloudformation.plugins:register_cloudformation_deploy_ui", "_publish_config_as_analytics_event=localstack.runtime.analytics:_publish_config_as_analytics_event", "_publish_container_info=localstack.runtime.analytics:_publish_container_info", "init_response_mutation_handler=localstack.aws.handlers.response:init_response_mutation_handler", "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", "eager_load_services=localstack.services.plugins:eager_load_services", "apply_aws_runtime_patches=localstack.aws.patches:apply_aws_runtime_patches", "apply_runtime_patches=localstack.runtime.patches:apply_runtime_patches"], "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.packages": ["ffmpeg/community=localstack.packages.plugins:ffmpeg_package", "java/community=localstack.packages.plugins:java_package", "terraform/community=localstack.packages.plugins:terraform_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", "vosk/community=localstack.services.transcribe.plugins:vosk_package", "opensearch/community=localstack.services.opensearch.plugins:opensearch_package", "dynamodb-local/community=localstack.services.dynamodb.plugins:dynamodb_local_package", "kinesis-mock/community=localstack.services.kinesis.plugins:kinesismock_package", "jpype-jsonata/community=localstack.services.stepfunctions.plugins:jpype_jsonata_package"], "localstack.hooks.on_infra_shutdown": ["remove_custom_endpoints=localstack.services.lambda_.plugins:remove_custom_endpoints", "publish_metrics=localstack.utils.analytics.metrics.publisher:publish_metrics", "stop_server=localstack.dns.plugins:stop_server", "_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"], "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.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.hooks.on_infra_ready": ["_run_init_scripts_on_ready=localstack.runtime.init:_run_init_scripts_on_ready"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"localstack.cloudformation.resource_providers": ["AWS::S3::Bucket=localstack.services.s3.resource_providers.aws_s3_bucket_plugin:S3BucketProviderPlugin", "AWS::Route53::HealthCheck=localstack.services.route53.resource_providers.aws_route53_healthcheck_plugin:Route53HealthCheckProviderPlugin", "AWS::Kinesis::Stream=localstack.services.kinesis.resource_providers.aws_kinesis_stream_plugin:KinesisStreamProviderPlugin", "AWS::ApiGateway::RequestValidator=localstack.services.apigateway.resource_providers.aws_apigateway_requestvalidator_plugin:ApiGatewayRequestValidatorProviderPlugin", "AWS::Lambda::Alias=localstack.services.lambda_.resource_providers.lambda_alias_plugin:LambdaAliasProviderPlugin", "AWS::ApiGateway::Resource=localstack.services.apigateway.resource_providers.aws_apigateway_resource_plugin:ApiGatewayResourceProviderPlugin", "AWS::EC2::VPC=localstack.services.ec2.resource_providers.aws_ec2_vpc_plugin:EC2VPCProviderPlugin", "AWS::EC2::PrefixList=localstack.services.ec2.resource_providers.aws_ec2_prefixlist_plugin:EC2PrefixListProviderPlugin", "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::IAM::User=localstack.services.iam.resource_providers.aws_iam_user_plugin:IAMUserProviderPlugin", "AWS::EC2::Route=localstack.services.ec2.resource_providers.aws_ec2_route_plugin:EC2RouteProviderPlugin", "AWS::OpenSearchService::Domain=localstack.services.opensearch.resource_providers.aws_opensearchservice_domain_plugin:OpenSearchServiceDomainProviderPlugin", "AWS::SNS::Subscription=localstack.services.sns.resource_providers.aws_sns_subscription_plugin:SNSSubscriptionProviderPlugin", "AWS::CloudFormation::WaitCondition=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitcondition_plugin:CloudFormationWaitConditionProviderPlugin", "AWS::Logs::LogGroup=localstack.services.logs.resource_providers.aws_logs_loggroup_plugin:LogsLogGroupProviderPlugin", "AWS::ApiGateway::Model=localstack.services.apigateway.resource_providers.aws_apigateway_model_plugin:ApiGatewayModelProviderPlugin", "AWS::Redshift::Cluster=localstack.services.redshift.resource_providers.aws_redshift_cluster_plugin:RedshiftClusterProviderPlugin", "AWS::CloudWatch::Alarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_alarm_plugin:CloudWatchAlarmProviderPlugin", "AWS::IAM::Role=localstack.services.iam.resource_providers.aws_iam_role_plugin:IAMRoleProviderPlugin", "AWS::ApiGateway::Method=localstack.services.apigateway.resource_providers.aws_apigateway_method_plugin:ApiGatewayMethodProviderPlugin", "AWS::Lambda::EventInvokeConfig=localstack.services.lambda_.resource_providers.aws_lambda_eventinvokeconfig_plugin:LambdaEventInvokeConfigProviderPlugin", "AWS::SNS::Topic=localstack.services.sns.resource_providers.aws_sns_topic_plugin:SNSTopicProviderPlugin", "AWS::ApiGateway::BasePathMapping=localstack.services.apigateway.resource_providers.aws_apigateway_basepathmapping_plugin:ApiGatewayBasePathMappingProviderPlugin", "AWS::ApiGateway::UsagePlanKey=localstack.services.apigateway.resource_providers.aws_apigateway_usageplankey_plugin:ApiGatewayUsagePlanKeyProviderPlugin", "AWS::EC2::TransitGateway=localstack.services.ec2.resource_providers.aws_ec2_transitgateway_plugin:EC2TransitGatewayProviderPlugin", "AWS::SecretsManager::Secret=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secret_plugin:SecretsManagerSecretProviderPlugin", "AWS::CloudWatch::CompositeAlarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_compositealarm_plugin:CloudWatchCompositeAlarmProviderPlugin", "AWS::EC2::NatGateway=localstack.services.ec2.resource_providers.aws_ec2_natgateway_plugin:EC2NatGatewayProviderPlugin", "AWS::SSM::MaintenanceWindow=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindow_plugin:SSMMaintenanceWindowProviderPlugin", "AWS::KMS::Alias=localstack.services.kms.resource_providers.aws_kms_alias_plugin:KMSAliasProviderPlugin", "AWS::EC2::RouteTable=localstack.services.ec2.resource_providers.aws_ec2_routetable_plugin:EC2RouteTableProviderPlugin", "AWS::CDK::Metadata=localstack.services.cdk.resource_providers.cdk_metadata_plugin:LambdaAliasProviderPlugin", "AWS::IAM::Group=localstack.services.iam.resource_providers.aws_iam_group_plugin:IAMGroupProviderPlugin", "AWS::ApiGateway::Account=localstack.services.apigateway.resource_providers.aws_apigateway_account_plugin:ApiGatewayAccountProviderPlugin", "AWS::SSM::PatchBaseline=localstack.services.ssm.resource_providers.aws_ssm_patchbaseline_plugin:SSMPatchBaselineProviderPlugin", "AWS::IAM::ManagedPolicy=localstack.services.iam.resource_providers.aws_iam_managedpolicy_plugin:IAMManagedPolicyProviderPlugin", "AWS::Lambda::LayerVersion=localstack.services.lambda_.resource_providers.aws_lambda_layerversion_plugin:LambdaLayerVersionProviderPlugin", "AWS::CloudFormation::Stack=localstack.services.cloudformation.resource_providers.aws_cloudformation_stack_plugin:CloudFormationStackProviderPlugin", "AWS::ApiGateway::Deployment=localstack.services.apigateway.resource_providers.aws_apigateway_deployment_plugin:ApiGatewayDeploymentProviderPlugin", "AWS::IAM::AccessKey=localstack.services.iam.resource_providers.aws_iam_accesskey_plugin:IAMAccessKeyProviderPlugin", "AWS::Route53::RecordSet=localstack.services.route53.resource_providers.aws_route53_recordset_plugin:Route53RecordSetProviderPlugin", "AWS::Events::EventBus=localstack.services.events.resource_providers.aws_events_eventbus_plugin:EventsEventBusProviderPlugin", "AWS::EC2::InternetGateway=localstack.services.ec2.resource_providers.aws_ec2_internetgateway_plugin:EC2InternetGatewayProviderPlugin", "AWS::ApiGateway::ApiKey=localstack.services.apigateway.resource_providers.aws_apigateway_apikey_plugin:ApiGatewayApiKeyProviderPlugin", "AWS::CloudFormation::Macro=localstack.services.cloudformation.resource_providers.aws_cloudformation_macro_plugin:CloudFormationMacroProviderPlugin", "AWS::DynamoDB::GlobalTable=localstack.services.dynamodb.resource_providers.aws_dynamodb_globaltable_plugin:DynamoDBGlobalTableProviderPlugin", "AWS::Events::Rule=localstack.services.events.resource_providers.aws_events_rule_plugin:EventsRuleProviderPlugin", "AWS::Scheduler::ScheduleGroup=localstack.services.scheduler.resource_providers.aws_scheduler_schedulegroup_plugin:SchedulerScheduleGroupProviderPlugin", "AWS::EC2::VPCEndpoint=localstack.services.ec2.resource_providers.aws_ec2_vpcendpoint_plugin:EC2VPCEndpointProviderPlugin", "AWS::KinesisFirehose::DeliveryStream=localstack.services.kinesisfirehose.resource_providers.aws_kinesisfirehose_deliverystream_plugin:KinesisFirehoseDeliveryStreamProviderPlugin", "AWS::Elasticsearch::Domain=localstack.services.opensearch.resource_providers.aws_elasticsearch_domain_plugin:ElasticsearchDomainProviderPlugin", "AWS::ResourceGroups::Group=localstack.services.resource_groups.resource_providers.aws_resourcegroups_group_plugin:ResourceGroupsGroupProviderPlugin", "AWS::Lambda::Function=localstack.services.lambda_.resource_providers.aws_lambda_function_plugin:LambdaFunctionProviderPlugin", "AWS::CloudFormation::WaitConditionHandle=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitconditionhandle_plugin:CloudFormationWaitConditionHandleProviderPlugin", "AWS::StepFunctions::Activity=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_activity_plugin:StepFunctionsActivityProviderPlugin", "AWS::IAM::Policy=localstack.services.iam.resource_providers.aws_iam_policy_plugin:IAMPolicyProviderPlugin", "AWS::Lambda::Permission=localstack.services.lambda_.resource_providers.aws_lambda_permission_plugin:LambdaPermissionProviderPlugin", "AWS::S3::BucketPolicy=localstack.services.s3.resource_providers.aws_s3_bucketpolicy_plugin:S3BucketPolicyProviderPlugin", "AWS::Lambda::CodeSigningConfig=localstack.services.lambda_.resource_providers.aws_lambda_codesigningconfig_plugin:LambdaCodeSigningConfigProviderPlugin", "AWS::SecretsManager::ResourcePolicy=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_resourcepolicy_plugin:SecretsManagerResourcePolicyProviderPlugin", "AWS::SecretsManager::SecretTargetAttachment=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secrettargetattachment_plugin:SecretsManagerSecretTargetAttachmentProviderPlugin", "AWS::IAM::ServerCertificate=localstack.services.iam.resource_providers.aws_iam_servercertificate_plugin:IAMServerCertificateProviderPlugin", "AWS::Lambda::EventSourceMapping=localstack.services.lambda_.resource_providers.aws_lambda_eventsourcemapping_plugin:LambdaEventSourceMappingProviderPlugin", "AWS::EC2::KeyPair=localstack.services.ec2.resource_providers.aws_ec2_keypair_plugin:EC2KeyPairProviderPlugin", "AWS::Events::ApiDestination=localstack.services.events.resource_providers.aws_events_apidestination_plugin:EventsApiDestinationProviderPlugin", "AWS::SSM::Parameter=localstack.services.ssm.resource_providers.aws_ssm_parameter_plugin:SSMParameterProviderPlugin", "AWS::EC2::SubnetRouteTableAssociation=localstack.services.ec2.resource_providers.aws_ec2_subnetroutetableassociation_plugin:EC2SubnetRouteTableAssociationProviderPlugin", "AWS::EC2::NetworkAcl=localstack.services.ec2.resource_providers.aws_ec2_networkacl_plugin:EC2NetworkAclProviderPlugin", "AWS::SSM::MaintenanceWindowTask=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtask_plugin:SSMMaintenanceWindowTaskProviderPlugin", "AWS::Lambda::Version=localstack.services.lambda_.resource_providers.aws_lambda_version_plugin:LambdaVersionProviderPlugin", "AWS::StepFunctions::StateMachine=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_statemachine_plugin:StepFunctionsStateMachineProviderPlugin", "AWS::EC2::Subnet=localstack.services.ec2.resource_providers.aws_ec2_subnet_plugin:EC2SubnetProviderPlugin", "AWS::Kinesis::StreamConsumer=localstack.services.kinesis.resource_providers.aws_kinesis_streamconsumer_plugin:KinesisStreamConsumerProviderPlugin", "AWS::EC2::VPCGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_vpcgatewayattachment_plugin:EC2VPCGatewayAttachmentProviderPlugin", "AWS::EC2::Instance=localstack.services.ec2.resource_providers.aws_ec2_instance_plugin:EC2InstanceProviderPlugin", "AWS::IAM::InstanceProfile=localstack.services.iam.resource_providers.aws_iam_instanceprofile_plugin:IAMInstanceProfileProviderPlugin", "AWS::SecretsManager::RotationSchedule=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_rotationschedule_plugin:SecretsManagerRotationScheduleProviderPlugin", "AWS::EC2::SecurityGroup=localstack.services.ec2.resource_providers.aws_ec2_securitygroup_plugin:EC2SecurityGroupProviderPlugin", "AWS::EC2::TransitGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_transitgatewayattachment_plugin:EC2TransitGatewayAttachmentProviderPlugin", "AWS::SES::EmailIdentity=localstack.services.ses.resource_providers.aws_ses_emailidentity_plugin:SESEmailIdentityProviderPlugin", "AWS::Events::EventBusPolicy=localstack.services.events.resource_providers.aws_events_eventbuspolicy_plugin:EventsEventBusPolicyProviderPlugin", "AWS::SQS::QueuePolicy=localstack.services.sqs.resource_providers.aws_sqs_queuepolicy_plugin:SQSQueuePolicyProviderPlugin", "AWS::SSM::MaintenanceWindowTarget=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtarget_plugin:SSMMaintenanceWindowTargetProviderPlugin", "AWS::ECR::Repository=localstack.services.ecr.resource_providers.aws_ecr_repository_plugin:ECRRepositoryProviderPlugin", "AWS::SQS::Queue=localstack.services.sqs.resource_providers.aws_sqs_queue_plugin:SQSQueueProviderPlugin", "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::IAM::ServiceLinkedRole=localstack.services.iam.resource_providers.aws_iam_servicelinkedrole_plugin:IAMServiceLinkedRoleProviderPlugin", "AWS::ApiGateway::DomainName=localstack.services.apigateway.resource_providers.aws_apigateway_domainname_plugin:ApiGatewayDomainNameProviderPlugin", "AWS::Logs::LogStream=localstack.services.logs.resource_providers.aws_logs_logstream_plugin:LogsLogStreamProviderPlugin", "AWS::CertificateManager::Certificate=localstack.services.certificatemanager.resource_providers.aws_certificatemanager_certificate_plugin:CertificateManagerCertificateProviderPlugin", "AWS::Scheduler::Schedule=localstack.services.scheduler.resource_providers.aws_scheduler_schedule_plugin:SchedulerScheduleProviderPlugin", "AWS::EC2::DHCPOptions=localstack.services.ec2.resource_providers.aws_ec2_dhcpoptions_plugin:EC2DHCPOptionsProviderPlugin", "AWS::ApiGateway::GatewayResponse=localstack.services.apigateway.resource_providers.aws_apigateway_gatewayresponse_plugin:ApiGatewayGatewayResponseProviderPlugin", "AWS::ApiGateway::UsagePlan=localstack.services.apigateway.resource_providers.aws_apigateway_usageplan_plugin:ApiGatewayUsagePlanProviderPlugin", "AWS::DynamoDB::Table=localstack.services.dynamodb.resource_providers.aws_dynamodb_table_plugin:DynamoDBTableProviderPlugin", "AWS::Events::Connection=localstack.services.events.resource_providers.aws_events_connection_plugin:EventsConnectionProviderPlugin", "AWS::ApiGateway::RestApi=localstack.services.apigateway.resource_providers.aws_apigateway_restapi_plugin:ApiGatewayRestApiProviderPlugin", "AWS::KMS::Key=localstack.services.kms.resource_providers.aws_kms_key_plugin:KMSKeyProviderPlugin", "AWS::Logs::SubscriptionFilter=localstack.services.logs.resource_providers.aws_logs_subscriptionfilter_plugin:LogsSubscriptionFilterProviderPlugin"], "localstack.hooks.on_infra_start": ["apply_aws_runtime_patches=localstack.aws.patches:apply_aws_runtime_patches", "register_swagger_endpoints=localstack.http.resources.swagger.plugins:register_swagger_endpoints", "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", "eager_load_services=localstack.services.plugins:eager_load_services", "init_response_mutation_handler=localstack.aws.handlers.response:init_response_mutation_handler", "_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", "conditionally_enable_debugger=localstack.dev.debugger.plugins:conditionally_enable_debugger", "_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", "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", "apply_runtime_patches=localstack.runtime.patches:apply_runtime_patches"], "localstack.packages": ["lambda-java-libs/community=localstack.services.lambda_.plugins:lambda_java_libs", "lambda-runtime/community=localstack.services.lambda_.plugins:lambda_runtime_package", "vosk/community=localstack.services.transcribe.plugins:vosk_package", "kinesis-mock/community=localstack.services.kinesis.plugins:kinesismock_package", "jpype-jsonata/community=localstack.services.stepfunctions.plugins:jpype_jsonata_package", "elasticsearch/community=localstack.services.es.plugins:elasticsearch_package", "opensearch/community=localstack.services.opensearch.plugins:opensearch_package", "ffmpeg/community=localstack.packages.plugins:ffmpeg_package", "java/community=localstack.packages.plugins:java_package", "terraform/community=localstack.packages.plugins:terraform_package", "dynamodb-local/community=localstack.services.dynamodb.plugins:dynamodb_local_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", "stop_server=localstack.dns.plugins:stop_server", "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.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.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"], "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.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"]}
|
|
File without changes
|
{localstack_core-4.7.1.dev52.data → localstack_core-4.7.1.dev53.data}/scripts/localstack-supervisor
RENAMED
|
File without changes
|
{localstack_core-4.7.1.dev52.data → localstack_core-4.7.1.dev53.data}/scripts/localstack.bat
RENAMED
|
File without changes
|
|
File without changes
|
{localstack_core-4.7.1.dev52.dist-info → localstack_core-4.7.1.dev53.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{localstack_core-4.7.1.dev52.dist-info → localstack_core-4.7.1.dev53.dist-info}/licenses/LICENSE.txt
RENAMED
|
File without changes
|
{localstack_core-4.7.1.dev52.dist-info → localstack_core-4.7.1.dev53.dist-info}/top_level.txt
RENAMED
|
File without changes
|