localstack-core 4.5.1.dev25__py3-none-any.whl → 4.5.1.dev26__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 +98 -3
- localstack/services/cloudformation/engine/v2/change_set_model_preproc.py +1 -1
- localstack/services/cloudformation/engine/v2/change_set_model_transform.py +155 -0
- localstack/services/cloudformation/engine/v2/change_set_model_visitor.py +8 -0
- localstack/services/cloudformation/v2/entities.py +6 -19
- localstack/services/cloudformation/v2/provider.py +55 -6
- localstack/version.py +2 -2
- {localstack_core-4.5.1.dev25.dist-info → localstack_core-4.5.1.dev26.dist-info}/METADATA +1 -1
- {localstack_core-4.5.1.dev25.dist-info → localstack_core-4.5.1.dev26.dist-info}/RECORD +17 -16
- localstack_core-4.5.1.dev26.dist-info/plux.json +1 -0
- localstack_core-4.5.1.dev25.dist-info/plux.json +0 -1
- {localstack_core-4.5.1.dev25.data → localstack_core-4.5.1.dev26.data}/scripts/localstack +0 -0
- {localstack_core-4.5.1.dev25.data → localstack_core-4.5.1.dev26.data}/scripts/localstack-supervisor +0 -0
- {localstack_core-4.5.1.dev25.data → localstack_core-4.5.1.dev26.data}/scripts/localstack.bat +0 -0
- {localstack_core-4.5.1.dev25.dist-info → localstack_core-4.5.1.dev26.dist-info}/WHEEL +0 -0
- {localstack_core-4.5.1.dev25.dist-info → localstack_core-4.5.1.dev26.dist-info}/entry_points.txt +0 -0
- {localstack_core-4.5.1.dev25.dist-info → localstack_core-4.5.1.dev26.dist-info}/licenses/LICENSE.txt +0 -0
- {localstack_core-4.5.1.dev25.dist-info → localstack_core-4.5.1.dev26.dist-info}/top_level.txt +0 -0
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
3
3
|
import abc
|
4
4
|
import enum
|
5
5
|
from itertools import zip_longest
|
6
|
-
from typing import Any, Final, Generator, Optional, Union, cast
|
6
|
+
from typing import Any, Final, Generator, Optional, TypedDict, Union, cast
|
7
7
|
|
8
8
|
from typing_extensions import TypeVar
|
9
9
|
|
@@ -78,6 +78,11 @@ def change_type_of(before: Maybe[Any], after: Maybe[Any], children: list[Maybe[C
|
|
78
78
|
return change_type
|
79
79
|
|
80
80
|
|
81
|
+
class NormalisedGlobalTransformDefinition(TypedDict):
|
82
|
+
Name: Any
|
83
|
+
Parameters: Maybe[Any]
|
84
|
+
|
85
|
+
|
81
86
|
class Scope(str):
|
82
87
|
_ROOT_SCOPE: Final[str] = str()
|
83
88
|
_SEPARATOR: Final[str] = "/"
|
@@ -143,6 +148,7 @@ class ChangeSetTerminal(ChangeSetEntity, abc.ABC): ...
|
|
143
148
|
|
144
149
|
|
145
150
|
class NodeTemplate(ChangeSetNode):
|
151
|
+
transform: Final[NodeTransform]
|
146
152
|
mappings: Final[NodeMappings]
|
147
153
|
parameters: Final[NodeParameters]
|
148
154
|
conditions: Final[NodeConditions]
|
@@ -152,14 +158,16 @@ class NodeTemplate(ChangeSetNode):
|
|
152
158
|
def __init__(
|
153
159
|
self,
|
154
160
|
scope: Scope,
|
161
|
+
transform: NodeTransform,
|
155
162
|
mappings: NodeMappings,
|
156
163
|
parameters: NodeParameters,
|
157
164
|
conditions: NodeConditions,
|
158
165
|
resources: NodeResources,
|
159
166
|
outputs: NodeOutputs,
|
160
167
|
):
|
161
|
-
change_type = parent_change_type_of([resources, outputs])
|
168
|
+
change_type = parent_change_type_of([transform, resources, outputs])
|
162
169
|
super().__init__(scope=scope, change_type=change_type)
|
170
|
+
self.transform = transform
|
163
171
|
self.mappings = mappings
|
164
172
|
self.parameters = parameters
|
165
173
|
self.conditions = conditions
|
@@ -277,6 +285,29 @@ class NodeConditions(ChangeSetNode):
|
|
277
285
|
self.conditions = conditions
|
278
286
|
|
279
287
|
|
288
|
+
class NodeGlobalTransform(ChangeSetNode):
|
289
|
+
name: Final[TerminalValue]
|
290
|
+
parameters: Final[Maybe[ChangeSetEntity]]
|
291
|
+
|
292
|
+
def __init__(self, scope: Scope, name: TerminalValue, parameters: Maybe[ChangeSetEntity]):
|
293
|
+
if not is_nothing(parameters):
|
294
|
+
change_type = parent_change_type_of([name, parameters])
|
295
|
+
else:
|
296
|
+
change_type = name.change_type
|
297
|
+
super().__init__(scope=scope, change_type=change_type)
|
298
|
+
self.name = name
|
299
|
+
self.parameters = parameters
|
300
|
+
|
301
|
+
|
302
|
+
class NodeTransform(ChangeSetNode):
|
303
|
+
global_transforms: Final[list[NodeGlobalTransform]]
|
304
|
+
|
305
|
+
def __init__(self, scope: Scope, global_transforms: list[NodeGlobalTransform]):
|
306
|
+
change_type = parent_change_type_of(global_transforms)
|
307
|
+
super().__init__(scope=scope, change_type=change_type)
|
308
|
+
self.global_transforms = global_transforms
|
309
|
+
|
310
|
+
|
280
311
|
class NodeResources(ChangeSetNode):
|
281
312
|
resources: Final[list[NodeResource]]
|
282
313
|
|
@@ -401,6 +432,8 @@ class TerminalValueUnchanged(TerminalValue):
|
|
401
432
|
super().__init__(scope=scope, change_type=ChangeType.UNCHANGED, value=value)
|
402
433
|
|
403
434
|
|
435
|
+
NameKey: Final[str] = "Name"
|
436
|
+
TransformKey: Final[str] = "Transform"
|
404
437
|
TypeKey: Final[str] = "Type"
|
405
438
|
ConditionKey: Final[str] = "Condition"
|
406
439
|
ConditionsKey: Final[str] = "Conditions"
|
@@ -1098,10 +1131,72 @@ class ChangeSetModel:
|
|
1098
1131
|
outputs.append(output)
|
1099
1132
|
return NodeOutputs(scope=scope, outputs=outputs)
|
1100
1133
|
|
1134
|
+
def _visit_global_transform(
|
1135
|
+
self,
|
1136
|
+
scope: Scope,
|
1137
|
+
before_global_transform: Maybe[NormalisedGlobalTransformDefinition],
|
1138
|
+
after_global_transform: Maybe[NormalisedGlobalTransformDefinition],
|
1139
|
+
) -> NodeGlobalTransform:
|
1140
|
+
name_scope, (before_name, after_name) = self._safe_access_in(
|
1141
|
+
scope, NameKey, before_global_transform, after_global_transform
|
1142
|
+
)
|
1143
|
+
name = self._visit_terminal_value(
|
1144
|
+
scope=name_scope, before_value=before_name, after_value=after_name
|
1145
|
+
)
|
1146
|
+
|
1147
|
+
parameters_scope, (before_parameters, after_parameters) = self._safe_access_in(
|
1148
|
+
scope, ParametersKey, before_global_transform, after_global_transform
|
1149
|
+
)
|
1150
|
+
parameters = self._visit_value(
|
1151
|
+
scope=parameters_scope, before_value=before_parameters, after_value=after_parameters
|
1152
|
+
)
|
1153
|
+
|
1154
|
+
return NodeGlobalTransform(scope=scope, name=name, parameters=parameters)
|
1155
|
+
|
1156
|
+
@staticmethod
|
1157
|
+
def _normalise_transformer_value(value: Maybe[str | list[Any]]) -> Maybe[list[Any]]:
|
1158
|
+
# To simplify downstream logics, reduce the type options to array of transformations.
|
1159
|
+
# TODO: add validation logic
|
1160
|
+
# TODO: should we sort to avoid detecting user-side ordering changes as template changes?
|
1161
|
+
if isinstance(value, NothingType):
|
1162
|
+
return value
|
1163
|
+
elif isinstance(value, str):
|
1164
|
+
value = [NormalisedGlobalTransformDefinition(Name=value, Parameters=Nothing)]
|
1165
|
+
elif not isinstance(value, list):
|
1166
|
+
raise RuntimeError(f"Invalid type for Transformer: '{value}'")
|
1167
|
+
return value
|
1168
|
+
|
1169
|
+
def _visit_transform(
|
1170
|
+
self, scope: Scope, before_transform: Maybe[Any], after_transform: Maybe[Any]
|
1171
|
+
) -> NodeTransform:
|
1172
|
+
before_transform_normalised = self._normalise_transformer_value(before_transform)
|
1173
|
+
after_transform_normalised = self._normalise_transformer_value(after_transform)
|
1174
|
+
global_transforms = list()
|
1175
|
+
for index, (before_global_transform, after_global_transform) in enumerate(
|
1176
|
+
zip_longest(before_transform_normalised, after_transform_normalised, fillvalue=Nothing)
|
1177
|
+
):
|
1178
|
+
global_transform_scope = scope.open_index(index=index)
|
1179
|
+
global_transform: NodeGlobalTransform = self._visit_global_transform(
|
1180
|
+
scope=global_transform_scope,
|
1181
|
+
before_global_transform=before_global_transform,
|
1182
|
+
after_global_transform=after_global_transform,
|
1183
|
+
)
|
1184
|
+
global_transforms.append(global_transform)
|
1185
|
+
return NodeTransform(scope=scope, global_transforms=global_transforms)
|
1186
|
+
|
1101
1187
|
def _model(self, before_template: Maybe[dict], after_template: Maybe[dict]) -> NodeTemplate:
|
1102
1188
|
root_scope = Scope()
|
1103
1189
|
# TODO: visit other child types
|
1104
1190
|
|
1191
|
+
transform_scope, (before_transform, after_transform) = self._safe_access_in(
|
1192
|
+
root_scope, TransformKey, before_template, after_template
|
1193
|
+
)
|
1194
|
+
transform = self._visit_transform(
|
1195
|
+
scope=transform_scope,
|
1196
|
+
before_transform=before_transform,
|
1197
|
+
after_transform=after_transform,
|
1198
|
+
)
|
1199
|
+
|
1105
1200
|
mappings_scope, (before_mappings, after_mappings) = self._safe_access_in(
|
1106
1201
|
root_scope, MappingsKey, before_template, after_template
|
1107
1202
|
)
|
@@ -1143,9 +1238,9 @@ class ChangeSetModel:
|
|
1143
1238
|
scope=outputs_scope, before_outputs=before_outputs, after_outputs=after_outputs
|
1144
1239
|
)
|
1145
1240
|
|
1146
|
-
# TODO: compute the change_type of the template properly.
|
1147
1241
|
return NodeTemplate(
|
1148
1242
|
scope=root_scope,
|
1243
|
+
transform=transform,
|
1149
1244
|
mappings=mappings,
|
1150
1245
|
parameters=parameters,
|
1151
1246
|
conditions=conditions,
|
@@ -170,7 +170,7 @@ class ChangeSetModelPreproc(ChangeSetModelVisitor):
|
|
170
170
|
|
171
171
|
def __init__(self, change_set: ChangeSet):
|
172
172
|
self._change_set = change_set
|
173
|
-
self._node_template = change_set.
|
173
|
+
self._node_template = change_set.update_model
|
174
174
|
self._before_resolved_resources = change_set.stack.resolved_resources
|
175
175
|
self._processed = dict()
|
176
176
|
|
@@ -0,0 +1,155 @@
|
|
1
|
+
import copy
|
2
|
+
import os
|
3
|
+
from typing import Final, Optional
|
4
|
+
|
5
|
+
import boto3
|
6
|
+
from samtranslator.translator.transform import transform as transform_sam
|
7
|
+
|
8
|
+
from localstack.services.cloudformation.engine.policy_loader import create_policy_loader
|
9
|
+
from localstack.services.cloudformation.engine.transformers import FailedTransformationException
|
10
|
+
from localstack.services.cloudformation.engine.v2.change_set_model import (
|
11
|
+
ChangeType,
|
12
|
+
Maybe,
|
13
|
+
NodeGlobalTransform,
|
14
|
+
NodeTransform,
|
15
|
+
Nothing,
|
16
|
+
is_nothing,
|
17
|
+
)
|
18
|
+
from localstack.services.cloudformation.engine.v2.change_set_model_preproc import (
|
19
|
+
ChangeSetModelPreproc,
|
20
|
+
PreprocEntityDelta,
|
21
|
+
)
|
22
|
+
from localstack.services.cloudformation.v2.entities import ChangeSet
|
23
|
+
|
24
|
+
SERVERLESS_TRANSFORM = "AWS::Serverless-2016-10-31"
|
25
|
+
|
26
|
+
|
27
|
+
# TODO: evaluate the use of subtypes to represent and validate types of transforms
|
28
|
+
class GlobalTransform:
|
29
|
+
name: str
|
30
|
+
parameters: Maybe[dict]
|
31
|
+
|
32
|
+
def __init__(self, name: str, parameters: Maybe[dict]):
|
33
|
+
self.name = name
|
34
|
+
self.parameters = parameters
|
35
|
+
|
36
|
+
|
37
|
+
class ChangeSetModelTransform(ChangeSetModelPreproc):
|
38
|
+
_before_parameters: Final[dict]
|
39
|
+
_after_parameters: Final[dict]
|
40
|
+
_before_template: Final[Maybe[dict]]
|
41
|
+
_after_template: Final[Maybe[dict]]
|
42
|
+
|
43
|
+
def __init__(
|
44
|
+
self,
|
45
|
+
change_set: ChangeSet,
|
46
|
+
before_parameters: dict,
|
47
|
+
after_parameters: dict,
|
48
|
+
before_template: Optional[dict],
|
49
|
+
after_template: Optional[dict],
|
50
|
+
):
|
51
|
+
super().__init__(change_set=change_set)
|
52
|
+
self._before_parameters = before_parameters
|
53
|
+
self._after_parameters = after_parameters
|
54
|
+
self._before_template = before_template or Nothing
|
55
|
+
self._after_template = after_template or Nothing
|
56
|
+
|
57
|
+
# Ported from v1:
|
58
|
+
@staticmethod
|
59
|
+
def _apply_serverless_transformation(
|
60
|
+
region_name: str, template: dict, parameters: dict
|
61
|
+
) -> dict:
|
62
|
+
"""only returns string when parsing SAM template, otherwise None"""
|
63
|
+
# TODO: we might also want to override the access key ID to account ID
|
64
|
+
region_before = os.environ.get("AWS_DEFAULT_REGION")
|
65
|
+
if boto3.session.Session().region_name is None:
|
66
|
+
os.environ["AWS_DEFAULT_REGION"] = region_name
|
67
|
+
loader = create_policy_loader()
|
68
|
+
# The following transformation function can carry out in-place changes ensure this cannot occur.
|
69
|
+
template = copy.deepcopy(template)
|
70
|
+
parameters = copy.deepcopy(parameters)
|
71
|
+
try:
|
72
|
+
transformed = transform_sam(template, parameters, loader)
|
73
|
+
return transformed
|
74
|
+
except Exception as e:
|
75
|
+
raise FailedTransformationException(transformation=SERVERLESS_TRANSFORM, message=str(e))
|
76
|
+
finally:
|
77
|
+
# Note: we need to fix boto3 region, otherwise AWS SAM transformer fails
|
78
|
+
os.environ.pop("AWS_DEFAULT_REGION", None)
|
79
|
+
if region_before is not None:
|
80
|
+
os.environ["AWS_DEFAULT_REGION"] = region_before
|
81
|
+
|
82
|
+
def _apply_global_transform(
|
83
|
+
self, global_transform: GlobalTransform, template: dict, parameters: dict
|
84
|
+
) -> dict:
|
85
|
+
if global_transform.name == SERVERLESS_TRANSFORM:
|
86
|
+
return self._apply_serverless_transformation(
|
87
|
+
region_name=self._change_set.region_name,
|
88
|
+
template=template,
|
89
|
+
parameters=parameters,
|
90
|
+
)
|
91
|
+
# TODO: expand support
|
92
|
+
raise RuntimeError(f"Unsupported global transform '{global_transform.name}'")
|
93
|
+
|
94
|
+
def transform(self) -> tuple[dict, dict]:
|
95
|
+
transform_delta: PreprocEntityDelta[list[GlobalTransform], list[GlobalTransform]] = (
|
96
|
+
self.visit_node_transform(self._node_template.transform)
|
97
|
+
)
|
98
|
+
transform_before: Maybe[list[GlobalTransform]] = transform_delta.before
|
99
|
+
transform_after: Maybe[list[GlobalTransform]] = transform_delta.after
|
100
|
+
|
101
|
+
transformed_before_template = self._before_template
|
102
|
+
if not is_nothing(transform_before) and not is_nothing(self._before_template):
|
103
|
+
transformed_before_template = self._before_template
|
104
|
+
for before_global_transform in transform_before:
|
105
|
+
transformed_before_template = self._apply_global_transform(
|
106
|
+
global_transform=before_global_transform,
|
107
|
+
parameters=self._before_parameters,
|
108
|
+
template=transformed_before_template,
|
109
|
+
)
|
110
|
+
|
111
|
+
transformed_after_template = self._after_template
|
112
|
+
if not is_nothing(transform_before) and not is_nothing(self._after_template):
|
113
|
+
transformed_after_template = self._after_template
|
114
|
+
for after_global_transform in transform_after:
|
115
|
+
transformed_after_template = self._apply_global_transform(
|
116
|
+
global_transform=after_global_transform,
|
117
|
+
parameters=self._after_parameters,
|
118
|
+
template=transformed_after_template,
|
119
|
+
)
|
120
|
+
|
121
|
+
return transformed_before_template, transformed_after_template
|
122
|
+
|
123
|
+
def visit_node_global_transform(
|
124
|
+
self, node_global_transform: NodeGlobalTransform
|
125
|
+
) -> PreprocEntityDelta[GlobalTransform, GlobalTransform]:
|
126
|
+
change_type = node_global_transform.change_type
|
127
|
+
|
128
|
+
name_delta = self.visit(node_global_transform.name)
|
129
|
+
parameters_delta = self.visit(node_global_transform.parameters)
|
130
|
+
|
131
|
+
before = Nothing
|
132
|
+
if change_type != ChangeType.CREATED:
|
133
|
+
before = GlobalTransform(name=name_delta.before, parameters=parameters_delta.before)
|
134
|
+
after = Nothing
|
135
|
+
if change_type != ChangeType.REMOVED:
|
136
|
+
after = GlobalTransform(name=name_delta.after, parameters=parameters_delta.after)
|
137
|
+
return PreprocEntityDelta(before=before, after=after)
|
138
|
+
|
139
|
+
def visit_node_transform(
|
140
|
+
self, node_transform: NodeTransform
|
141
|
+
) -> PreprocEntityDelta[list[GlobalTransform], list[GlobalTransform]]:
|
142
|
+
change_type = node_transform.change_type
|
143
|
+
before = list() if change_type != ChangeType.CREATED else Nothing
|
144
|
+
after = list() if change_type != ChangeType.REMOVED else Nothing
|
145
|
+
for change_set_entity in node_transform.global_transforms:
|
146
|
+
delta: PreprocEntityDelta[GlobalTransform, GlobalTransform] = self.visit(
|
147
|
+
change_set_entity=change_set_entity
|
148
|
+
)
|
149
|
+
delta_before = delta.before
|
150
|
+
delta_after = delta.after
|
151
|
+
if not is_nothing(before) and not is_nothing(delta_before):
|
152
|
+
before.append(delta_before)
|
153
|
+
if not is_nothing(after) and not is_nothing(delta_after):
|
154
|
+
after.append(delta_after)
|
155
|
+
return PreprocEntityDelta(before=before, after=after)
|
@@ -7,6 +7,7 @@ from localstack.services.cloudformation.engine.v2.change_set_model import (
|
|
7
7
|
NodeConditions,
|
8
8
|
NodeDependsOn,
|
9
9
|
NodeDivergence,
|
10
|
+
NodeGlobalTransform,
|
10
11
|
NodeIntrinsicFunction,
|
11
12
|
NodeMapping,
|
12
13
|
NodeMappings,
|
@@ -20,6 +21,7 @@ from localstack.services.cloudformation.engine.v2.change_set_model import (
|
|
20
21
|
NodeResource,
|
21
22
|
NodeResources,
|
22
23
|
NodeTemplate,
|
24
|
+
NodeTransform,
|
23
25
|
TerminalValueCreated,
|
24
26
|
TerminalValueModified,
|
25
27
|
TerminalValueRemoved,
|
@@ -55,6 +57,12 @@ class ChangeSetModelVisitor(abc.ABC):
|
|
55
57
|
self.visit(node_template.resources)
|
56
58
|
self.visit(node_template.outputs)
|
57
59
|
|
60
|
+
def visit_node_transform(self, node_transform: NodeTransform):
|
61
|
+
self.visit_children(node_transform)
|
62
|
+
|
63
|
+
def visit_node_global_transform(self, node_global_transform: NodeGlobalTransform):
|
64
|
+
self.visit_children(node_global_transform)
|
65
|
+
|
58
66
|
def visit_node_outputs(self, node_outputs: NodeOutputs):
|
59
67
|
self.visit_children(node_outputs)
|
60
68
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
from datetime import datetime, timezone
|
2
|
-
from typing import TypedDict
|
2
|
+
from typing import Optional, TypedDict
|
3
3
|
|
4
4
|
from localstack.aws.api.cloudformation import (
|
5
5
|
ChangeSetStatus,
|
@@ -23,7 +23,6 @@ from localstack.services.cloudformation.engine.entities import (
|
|
23
23
|
StackTemplate,
|
24
24
|
)
|
25
25
|
from localstack.services.cloudformation.engine.v2.change_set_model import (
|
26
|
-
ChangeSetModel,
|
27
26
|
NodeTemplate,
|
28
27
|
)
|
29
28
|
from localstack.utils.aws import arns
|
@@ -154,7 +153,7 @@ class ChangeSet:
|
|
154
153
|
change_set_name: str
|
155
154
|
change_set_id: str
|
156
155
|
change_set_type: ChangeSetType
|
157
|
-
|
156
|
+
update_model: Optional[NodeTemplate]
|
158
157
|
status: ChangeSetStatus
|
159
158
|
execution_status: ExecutionStatus
|
160
159
|
creation_time: datetime
|
@@ -169,7 +168,7 @@ class ChangeSet:
|
|
169
168
|
self.template = template
|
170
169
|
self.status = ChangeSetStatus.CREATE_IN_PROGRESS
|
171
170
|
self.execution_status = ExecutionStatus.AVAILABLE
|
172
|
-
self.
|
171
|
+
self.update_model = None
|
173
172
|
self.creation_time = datetime.now(tz=timezone.utc)
|
174
173
|
|
175
174
|
self.change_set_name = request_payload["ChangeSetName"]
|
@@ -181,6 +180,9 @@ class ChangeSet:
|
|
181
180
|
region_name=self.stack.region_name,
|
182
181
|
)
|
183
182
|
|
183
|
+
def set_update_model(self, update_model: NodeTemplate) -> None:
|
184
|
+
self.update_model = update_model
|
185
|
+
|
184
186
|
def set_change_set_status(self, status: ChangeSetStatus):
|
185
187
|
self.status = status
|
186
188
|
|
@@ -194,18 +196,3 @@ class ChangeSet:
|
|
194
196
|
@property
|
195
197
|
def region_name(self) -> str:
|
196
198
|
return self.stack.region_name
|
197
|
-
|
198
|
-
def populate_update_graph(
|
199
|
-
self,
|
200
|
-
before_template: dict | None = None,
|
201
|
-
after_template: dict | None = None,
|
202
|
-
before_parameters: dict | None = None,
|
203
|
-
after_parameters: dict | None = None,
|
204
|
-
) -> None:
|
205
|
-
change_set_model = ChangeSetModel(
|
206
|
-
before_template=before_template,
|
207
|
-
after_template=after_template,
|
208
|
-
before_parameters=before_parameters,
|
209
|
-
after_parameters=after_parameters,
|
210
|
-
)
|
211
|
-
self.update_graph = change_set_model.get_update_model()
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import copy
|
2
2
|
import logging
|
3
3
|
from datetime import datetime, timezone
|
4
|
-
from typing import Any
|
4
|
+
from typing import Any, Optional
|
5
5
|
|
6
6
|
from localstack.aws.api import RequestContext, handler
|
7
7
|
from localstack.aws.api.cloudformation import (
|
@@ -37,12 +37,19 @@ from localstack.aws.api.cloudformation import (
|
|
37
37
|
)
|
38
38
|
from localstack.services.cloudformation import api_utils
|
39
39
|
from localstack.services.cloudformation.engine import template_preparer
|
40
|
+
from localstack.services.cloudformation.engine.v2.change_set_model import (
|
41
|
+
ChangeSetModel,
|
42
|
+
NodeTemplate,
|
43
|
+
)
|
40
44
|
from localstack.services.cloudformation.engine.v2.change_set_model_describer import (
|
41
45
|
ChangeSetModelDescriber,
|
42
46
|
)
|
43
47
|
from localstack.services.cloudformation.engine.v2.change_set_model_executor import (
|
44
48
|
ChangeSetModelExecutor,
|
45
49
|
)
|
50
|
+
from localstack.services.cloudformation.engine.v2.change_set_model_transform import (
|
51
|
+
ChangeSetModelTransform,
|
52
|
+
)
|
46
53
|
from localstack.services.cloudformation.engine.validations import ValidationError
|
47
54
|
from localstack.services.cloudformation.provider import (
|
48
55
|
ARN_CHANGESET_REGEX,
|
@@ -122,6 +129,47 @@ def find_change_set_v2(
|
|
122
129
|
|
123
130
|
|
124
131
|
class CloudformationProviderV2(CloudformationProvider):
|
132
|
+
@staticmethod
|
133
|
+
def _setup_change_set_model(
|
134
|
+
change_set: ChangeSet,
|
135
|
+
before_template: Optional[dict],
|
136
|
+
after_template: Optional[dict],
|
137
|
+
before_parameters: Optional[dict],
|
138
|
+
after_parameters: Optional[dict],
|
139
|
+
):
|
140
|
+
# Create and preprocess the update graph for this template update.
|
141
|
+
change_set_model = ChangeSetModel(
|
142
|
+
before_template=before_template,
|
143
|
+
after_template=after_template,
|
144
|
+
before_parameters=before_parameters,
|
145
|
+
after_parameters=after_parameters,
|
146
|
+
)
|
147
|
+
raw_update_model: NodeTemplate = change_set_model.get_update_model()
|
148
|
+
change_set.set_update_model(raw_update_model)
|
149
|
+
|
150
|
+
# Apply global transforms.
|
151
|
+
# TODO: skip this process iff both versions of the template don't specify transform blocks.
|
152
|
+
change_set_model_transform = ChangeSetModelTransform(
|
153
|
+
change_set=change_set,
|
154
|
+
before_parameters=before_parameters,
|
155
|
+
after_parameters=after_parameters,
|
156
|
+
before_template=before_template,
|
157
|
+
after_template=after_template,
|
158
|
+
)
|
159
|
+
transformed_before_template, transformed_after_template = (
|
160
|
+
change_set_model_transform.transform()
|
161
|
+
)
|
162
|
+
|
163
|
+
# Remodel the update graph after the applying the global transforms.
|
164
|
+
change_set_model = ChangeSetModel(
|
165
|
+
before_template=transformed_before_template,
|
166
|
+
after_template=transformed_after_template,
|
167
|
+
before_parameters=before_parameters,
|
168
|
+
after_parameters=after_parameters,
|
169
|
+
)
|
170
|
+
update_model = change_set_model.get_update_model()
|
171
|
+
change_set.set_update_model(update_model)
|
172
|
+
|
125
173
|
@handler("CreateChangeSet", expand=False)
|
126
174
|
def create_change_set(
|
127
175
|
self, context: RequestContext, request: CreateChangeSetInput
|
@@ -242,14 +290,14 @@ class CloudformationProviderV2(CloudformationProvider):
|
|
242
290
|
|
243
291
|
# create change set for the stack and apply changes
|
244
292
|
change_set = ChangeSet(stack, request, template=after_template)
|
245
|
-
|
246
|
-
|
247
|
-
change_set.populate_update_graph(
|
293
|
+
self._setup_change_set_model(
|
294
|
+
change_set=change_set,
|
248
295
|
before_template=before_template,
|
249
296
|
after_template=after_template,
|
250
297
|
before_parameters=before_parameters,
|
251
298
|
after_parameters=after_parameters,
|
252
299
|
)
|
300
|
+
|
253
301
|
change_set.set_change_set_status(ChangeSetStatus.CREATE_COMPLETE)
|
254
302
|
stack.change_set_id = change_set.change_set_id
|
255
303
|
stack.change_set_id = change_set.change_set_id
|
@@ -285,7 +333,7 @@ class CloudformationProviderV2(CloudformationProvider):
|
|
285
333
|
# stack_name,
|
286
334
|
# len(change_set.template_resources),
|
287
335
|
# )
|
288
|
-
if not change_set.
|
336
|
+
if not change_set.update_model:
|
289
337
|
raise RuntimeError("Programming error: no update graph found for change set")
|
290
338
|
|
291
339
|
change_set.set_execution_status(ExecutionStatus.EXECUTE_IN_PROGRESS)
|
@@ -471,7 +519,8 @@ class CloudformationProviderV2(CloudformationProvider):
|
|
471
519
|
|
472
520
|
# create a dummy change set
|
473
521
|
change_set = ChangeSet(stack, {"ChangeSetName": f"delete-stack_{stack.stack_name}"}) # noqa
|
474
|
-
|
522
|
+
self._setup_change_set_model(
|
523
|
+
change_set=change_set,
|
475
524
|
before_template=stack.template,
|
476
525
|
after_template=None,
|
477
526
|
before_parameters=stack.resolved_parameters,
|
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.5.1.
|
21
|
-
__version_tuple__ = version_tuple = (4, 5, 1, '
|
20
|
+
__version__ = version = '4.5.1.dev26'
|
21
|
+
__version_tuple__ = version_tuple = (4, 5, 1, 'dev26')
|
@@ -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=PnXAfMjoTidVxOMwKOGOrQ3rOEdeQX8Nx4jx_tQPybc,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,12 @@ 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=
|
313
|
+
localstack/services/cloudformation/engine/v2/change_set_model.py,sha256=FnRCaiCCj16ofuXEIAVfYTTbTil2Lce-CPSBoNjoGu8,53736
|
314
314
|
localstack/services/cloudformation/engine/v2/change_set_model_describer.py,sha256=J2OibRDuVXu-rnLxHmxtjqOD4Q489F9An_6-fkTTAm8,8057
|
315
315
|
localstack/services/cloudformation/engine/v2/change_set_model_executor.py,sha256=kwExKaHG9DpbSd4aUnD1fkbYv2gE0_Zono8FoFCaMpc,19052
|
316
|
-
localstack/services/cloudformation/engine/v2/change_set_model_preproc.py,sha256=
|
317
|
-
localstack/services/cloudformation/engine/v2/
|
316
|
+
localstack/services/cloudformation/engine/v2/change_set_model_preproc.py,sha256=2VvveGHH8uE-ei2bQCqb9dUEYl4NwP6V9J7nwb0DYHA,48953
|
317
|
+
localstack/services/cloudformation/engine/v2/change_set_model_transform.py,sha256=1ibOGuSZpZwiLt2dEPwptsNVQTBjuRk2R4_Wy06FkvI,6676
|
318
|
+
localstack/services/cloudformation/engine/v2/change_set_model_visitor.py,sha256=JERT55YkPF-UHzG-sk958mpyEq2Gxz4smY8xwDbhIRQ,7666
|
318
319
|
localstack/services/cloudformation/models/__init__.py,sha256=da1PTClDMl-IBkrSvq6JC1lnS-K_BASzCvxVhNxN5Ls,13
|
319
320
|
localstack/services/cloudformation/resource_providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
320
321
|
localstack/services/cloudformation/resource_providers/aws_cloudformation_macro.py,sha256=Grn3dP1jANRlVO9HyKQV5GHv0x1eNRBeaIYhgn-FKv4,2812
|
@@ -332,8 +333,8 @@ localstack/services/cloudformation/resource_providers/aws_cloudformation_waitcon
|
|
332
333
|
localstack/services/cloudformation/scaffolding/__main__.py,sha256=zjedOdqvnfN99WzQ43gxtGZxLDitSnbFGA-zpWbyMQ0,30960
|
333
334
|
localstack/services/cloudformation/scaffolding/propgen.py,sha256=9YsSCkDegcU_Yp8Sfw8eNV26N5ibOlLC6Hg6lxPeBBM,7949
|
334
335
|
localstack/services/cloudformation/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
335
|
-
localstack/services/cloudformation/v2/entities.py,sha256=
|
336
|
-
localstack/services/cloudformation/v2/provider.py,sha256=
|
336
|
+
localstack/services/cloudformation/v2/entities.py,sha256=WJod0UgwaIXmLbb-fh3ZNweqF2kiv0gDJiy1gW1vIQU,6498
|
337
|
+
localstack/services/cloudformation/v2/provider.py,sha256=mpcdRne444-OAoC3ymZncNZqQUh9LV29q3sNHG_8Fz8,22824
|
337
338
|
localstack/services/cloudformation/v2/utils.py,sha256=xy4Lcp4X8XGJ0OKfnsE7pnfMcFrtIH0Chw35qwjhZuw,148
|
338
339
|
localstack/services/cloudwatch/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
339
340
|
localstack/services/cloudwatch/alarm_scheduler.py,sha256=XFllg0gI_WNV7cNxOcgXifzmbNA07OPpuEUuf37keP4,15663
|
@@ -1283,13 +1284,13 @@ localstack/utils/server/tcp_proxy.py,sha256=rR6d5jR0ozDvIlpHiqW0cfyY9a2fRGdOzyA8
|
|
1283
1284
|
localstack/utils/xray/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1284
1285
|
localstack/utils/xray/trace_header.py,sha256=ahXk9eonq7LpeENwlqUEPj3jDOCiVRixhntQuxNor-Q,6209
|
1285
1286
|
localstack/utils/xray/traceid.py,sha256=SQSsMV2rhbTNK6ceIoozZYuGU7Fg687EXcgqxoDl1Fw,1106
|
1286
|
-
localstack_core-4.5.1.
|
1287
|
-
localstack_core-4.5.1.
|
1288
|
-
localstack_core-4.5.1.
|
1289
|
-
localstack_core-4.5.1.
|
1290
|
-
localstack_core-4.5.1.
|
1291
|
-
localstack_core-4.5.1.
|
1292
|
-
localstack_core-4.5.1.
|
1293
|
-
localstack_core-4.5.1.
|
1294
|
-
localstack_core-4.5.1.
|
1295
|
-
localstack_core-4.5.1.
|
1287
|
+
localstack_core-4.5.1.dev26.data/scripts/localstack,sha256=WyL11vp5CkuP79iIR-L8XT7Cj8nvmxX7XRAgxhbmXNE,529
|
1288
|
+
localstack_core-4.5.1.dev26.data/scripts/localstack-supervisor,sha256=nm1Il2d6ASyOB6Vo4CRHd90w7TK9FdRl9VPp0NN6hUk,6378
|
1289
|
+
localstack_core-4.5.1.dev26.data/scripts/localstack.bat,sha256=tlzZTXtveHkMX_s_fa7VDfvdNdS8iVpEz2ER3uk9B_c,29
|
1290
|
+
localstack_core-4.5.1.dev26.dist-info/licenses/LICENSE.txt,sha256=3PC-9Z69UsNARuQ980gNR_JsLx8uvMjdG6C7cc4LBYs,606
|
1291
|
+
localstack_core-4.5.1.dev26.dist-info/METADATA,sha256=XUpsSE2NWbiu-Uu2nGn26PMhmGN736B7hz5nc8yEbDU,5539
|
1292
|
+
localstack_core-4.5.1.dev26.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
1293
|
+
localstack_core-4.5.1.dev26.dist-info/entry_points.txt,sha256=tsZ2TeV3-omCfAUEXmTWXu_D40b_17a9FDAEpbeaoNw,20571
|
1294
|
+
localstack_core-4.5.1.dev26.dist-info/plux.json,sha256=X9nSuRXpiGtCgHqI4G3XGoXOCeI_KCcf0S4NjPoiVJQ,20793
|
1295
|
+
localstack_core-4.5.1.dev26.dist-info/top_level.txt,sha256=3sqmK2lGac8nCy8nwsbS5SpIY_izmtWtgaTFKHYVHbI,11
|
1296
|
+
localstack_core-4.5.1.dev26.dist-info/RECORD,,
|
@@ -0,0 +1 @@
|
|
1
|
+
{"localstack.hooks.on_infra_start": ["conditionally_enable_debugger=localstack.dev.debugger.plugins:conditionally_enable_debugger", "register_swagger_endpoints=localstack.http.resources.swagger.plugins:register_swagger_endpoints", "_publish_config_as_analytics_event=localstack.runtime.analytics:_publish_config_as_analytics_event", "_publish_container_info=localstack.runtime.analytics:_publish_container_info", "register_cloudformation_deploy_ui=localstack.services.cloudformation.plugins:register_cloudformation_deploy_ui", "apply_aws_runtime_patches=localstack.aws.patches:apply_aws_runtime_patches", "_patch_botocore_endpoint_in_memory=localstack.aws.client:_patch_botocore_endpoint_in_memory", "_patch_botocore_json_parser=localstack.aws.client:_patch_botocore_json_parser", "_patch_cbor2=localstack.aws.client:_patch_cbor2", "register_custom_endpoints=localstack.services.lambda_.plugins:register_custom_endpoints", "validate_configuration=localstack.services.lambda_.plugins:validate_configuration", "delete_cached_certificate=localstack.plugins:delete_cached_certificate", "deprecation_warnings=localstack.plugins:deprecation_warnings", "_run_init_scripts_on_start=localstack.runtime.init:_run_init_scripts_on_start", "setup_dns_configuration_on_host=localstack.dns.plugins:setup_dns_configuration_on_host", "start_dns_server=localstack.dns.plugins:start_dns_server", "eager_load_services=localstack.services.plugins:eager_load_services", "apply_runtime_patches=localstack.runtime.patches:apply_runtime_patches"], "localstack.cloudformation.resource_providers": ["AWS::EC2::DHCPOptions=localstack.services.ec2.resource_providers.aws_ec2_dhcpoptions_plugin:EC2DHCPOptionsProviderPlugin", "AWS::Events::Rule=localstack.services.events.resource_providers.aws_events_rule_plugin:EventsRuleProviderPlugin", "AWS::ApiGateway::GatewayResponse=localstack.services.apigateway.resource_providers.aws_apigateway_gatewayresponse_plugin:ApiGatewayGatewayResponseProviderPlugin", "AWS::Events::EventBus=localstack.services.events.resource_providers.aws_events_eventbus_plugin:EventsEventBusProviderPlugin", "AWS::IAM::ServerCertificate=localstack.services.iam.resource_providers.aws_iam_servercertificate_plugin:IAMServerCertificateProviderPlugin", "AWS::StepFunctions::StateMachine=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_statemachine_plugin:StepFunctionsStateMachineProviderPlugin", "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::SecretsManager::SecretTargetAttachment=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secrettargetattachment_plugin:SecretsManagerSecretTargetAttachmentProviderPlugin", "AWS::CloudFormation::WaitConditionHandle=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitconditionhandle_plugin:CloudFormationWaitConditionHandleProviderPlugin", "AWS::EC2::RouteTable=localstack.services.ec2.resource_providers.aws_ec2_routetable_plugin:EC2RouteTableProviderPlugin", "AWS::Lambda::LayerVersion=localstack.services.lambda_.resource_providers.aws_lambda_layerversion_plugin:LambdaLayerVersionProviderPlugin", "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::Lambda::CodeSigningConfig=localstack.services.lambda_.resource_providers.aws_lambda_codesigningconfig_plugin:LambdaCodeSigningConfigProviderPlugin", "AWS::SSM::MaintenanceWindowTarget=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtarget_plugin:SSMMaintenanceWindowTargetProviderPlugin", "AWS::IAM::AccessKey=localstack.services.iam.resource_providers.aws_iam_accesskey_plugin:IAMAccessKeyProviderPlugin", "AWS::ECR::Repository=localstack.services.ecr.resource_providers.aws_ecr_repository_plugin:ECRRepositoryProviderPlugin", "AWS::IAM::InstanceProfile=localstack.services.iam.resource_providers.aws_iam_instanceprofile_plugin:IAMInstanceProfileProviderPlugin", "AWS::ApiGateway::UsagePlanKey=localstack.services.apigateway.resource_providers.aws_apigateway_usageplankey_plugin:ApiGatewayUsagePlanKeyProviderPlugin", "AWS::ApiGateway::Deployment=localstack.services.apigateway.resource_providers.aws_apigateway_deployment_plugin:ApiGatewayDeploymentProviderPlugin", "AWS::Lambda::LayerVersionPermission=localstack.services.lambda_.resource_providers.aws_lambda_layerversionpermission_plugin:LambdaLayerVersionPermissionProviderPlugin", "AWS::CloudFormation::WaitCondition=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitcondition_plugin:CloudFormationWaitConditionProviderPlugin", "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::Kinesis::Stream=localstack.services.kinesis.resource_providers.aws_kinesis_stream_plugin:KinesisStreamProviderPlugin", "AWS::IAM::Group=localstack.services.iam.resource_providers.aws_iam_group_plugin:IAMGroupProviderPlugin", "AWS::DynamoDB::Table=localstack.services.dynamodb.resource_providers.aws_dynamodb_table_plugin:DynamoDBTableProviderPlugin", "AWS::Scheduler::Schedule=localstack.services.scheduler.resource_providers.aws_scheduler_schedule_plugin:SchedulerScheduleProviderPlugin", "AWS::EC2::SubnetRouteTableAssociation=localstack.services.ec2.resource_providers.aws_ec2_subnetroutetableassociation_plugin:EC2SubnetRouteTableAssociationProviderPlugin", "AWS::EC2::VPCEndpoint=localstack.services.ec2.resource_providers.aws_ec2_vpcendpoint_plugin:EC2VPCEndpointProviderPlugin", "AWS::ApiGateway::Model=localstack.services.apigateway.resource_providers.aws_apigateway_model_plugin:ApiGatewayModelProviderPlugin", "AWS::Lambda::Version=localstack.services.lambda_.resource_providers.aws_lambda_version_plugin:LambdaVersionProviderPlugin", "AWS::Lambda::Alias=localstack.services.lambda_.resource_providers.lambda_alias_plugin:LambdaAliasProviderPlugin", "AWS::Lambda::Url=localstack.services.lambda_.resource_providers.aws_lambda_url_plugin:LambdaUrlProviderPlugin", "AWS::Scheduler::ScheduleGroup=localstack.services.scheduler.resource_providers.aws_scheduler_schedulegroup_plugin:SchedulerScheduleGroupProviderPlugin", "AWS::KMS::Alias=localstack.services.kms.resource_providers.aws_kms_alias_plugin:KMSAliasProviderPlugin", "AWS::EC2::KeyPair=localstack.services.ec2.resource_providers.aws_ec2_keypair_plugin:EC2KeyPairProviderPlugin", "AWS::IAM::ServiceLinkedRole=localstack.services.iam.resource_providers.aws_iam_servicelinkedrole_plugin:IAMServiceLinkedRoleProviderPlugin", "AWS::Lambda::Permission=localstack.services.lambda_.resource_providers.aws_lambda_permission_plugin:LambdaPermissionProviderPlugin", "AWS::Lambda::EventSourceMapping=localstack.services.lambda_.resource_providers.aws_lambda_eventsourcemapping_plugin:LambdaEventSourceMappingProviderPlugin", "AWS::ApiGateway::Stage=localstack.services.apigateway.resource_providers.aws_apigateway_stage_plugin:ApiGatewayStageProviderPlugin", "AWS::SSM::MaintenanceWindowTask=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtask_plugin:SSMMaintenanceWindowTaskProviderPlugin", "AWS::SSM::MaintenanceWindow=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindow_plugin:SSMMaintenanceWindowProviderPlugin", "AWS::SSM::PatchBaseline=localstack.services.ssm.resource_providers.aws_ssm_patchbaseline_plugin:SSMPatchBaselineProviderPlugin", "AWS::CertificateManager::Certificate=localstack.services.certificatemanager.resource_providers.aws_certificatemanager_certificate_plugin:CertificateManagerCertificateProviderPlugin", "AWS::Logs::SubscriptionFilter=localstack.services.logs.resource_providers.aws_logs_subscriptionfilter_plugin:LogsSubscriptionFilterProviderPlugin", "AWS::EC2::TransitGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_transitgatewayattachment_plugin:EC2TransitGatewayAttachmentProviderPlugin", "AWS::ApiGateway::Method=localstack.services.apigateway.resource_providers.aws_apigateway_method_plugin:ApiGatewayMethodProviderPlugin", "AWS::EC2::VPCGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_vpcgatewayattachment_plugin:EC2VPCGatewayAttachmentProviderPlugin", "AWS::ApiGateway::RestApi=localstack.services.apigateway.resource_providers.aws_apigateway_restapi_plugin:ApiGatewayRestApiProviderPlugin", "AWS::EC2::TransitGateway=localstack.services.ec2.resource_providers.aws_ec2_transitgateway_plugin:EC2TransitGatewayProviderPlugin", "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::SES::EmailIdentity=localstack.services.ses.resource_providers.aws_ses_emailidentity_plugin:SESEmailIdentityProviderPlugin", "AWS::Events::ApiDestination=localstack.services.events.resource_providers.aws_events_apidestination_plugin:EventsApiDestinationProviderPlugin", "AWS::EC2::SecurityGroup=localstack.services.ec2.resource_providers.aws_ec2_securitygroup_plugin:EC2SecurityGroupProviderPlugin", "AWS::Lambda::Function=localstack.services.lambda_.resource_providers.aws_lambda_function_plugin:LambdaFunctionProviderPlugin", "AWS::ApiGateway::Resource=localstack.services.apigateway.resource_providers.aws_apigateway_resource_plugin:ApiGatewayResourceProviderPlugin", "AWS::EC2::Instance=localstack.services.ec2.resource_providers.aws_ec2_instance_plugin:EC2InstanceProviderPlugin", "AWS::ResourceGroups::Group=localstack.services.resource_groups.resource_providers.aws_resourcegroups_group_plugin:ResourceGroupsGroupProviderPlugin", "AWS::KMS::Key=localstack.services.kms.resource_providers.aws_kms_key_plugin:KMSKeyProviderPlugin", "AWS::CDK::Metadata=localstack.services.cdk.resource_providers.cdk_metadata_plugin:LambdaAliasProviderPlugin", "AWS::Route53::RecordSet=localstack.services.route53.resource_providers.aws_route53_recordset_plugin:Route53RecordSetProviderPlugin", "AWS::EC2::VPC=localstack.services.ec2.resource_providers.aws_ec2_vpc_plugin:EC2VPCProviderPlugin", "AWS::CloudWatch::Alarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_alarm_plugin:CloudWatchAlarmProviderPlugin", "AWS::SecretsManager::ResourcePolicy=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_resourcepolicy_plugin:SecretsManagerResourcePolicyProviderPlugin", "AWS::EC2::PrefixList=localstack.services.ec2.resource_providers.aws_ec2_prefixlist_plugin:EC2PrefixListProviderPlugin", "AWS::SecretsManager::Secret=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secret_plugin:SecretsManagerSecretProviderPlugin", "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::CloudWatch::CompositeAlarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_compositealarm_plugin:CloudWatchCompositeAlarmProviderPlugin", "AWS::ApiGateway::RequestValidator=localstack.services.apigateway.resource_providers.aws_apigateway_requestvalidator_plugin:ApiGatewayRequestValidatorProviderPlugin", "AWS::Lambda::EventInvokeConfig=localstack.services.lambda_.resource_providers.aws_lambda_eventinvokeconfig_plugin:LambdaEventInvokeConfigProviderPlugin", "AWS::Events::EventBusPolicy=localstack.services.events.resource_providers.aws_events_eventbuspolicy_plugin:EventsEventBusPolicyProviderPlugin", "AWS::SecretsManager::RotationSchedule=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_rotationschedule_plugin:SecretsManagerRotationScheduleProviderPlugin", "AWS::SQS::Queue=localstack.services.sqs.resource_providers.aws_sqs_queue_plugin:SQSQueueProviderPlugin", "AWS::ApiGateway::UsagePlan=localstack.services.apigateway.resource_providers.aws_apigateway_usageplan_plugin:ApiGatewayUsagePlanProviderPlugin", "AWS::EC2::Route=localstack.services.ec2.resource_providers.aws_ec2_route_plugin:EC2RouteProviderPlugin", "AWS::KinesisFirehose::DeliveryStream=localstack.services.kinesisfirehose.resource_providers.aws_kinesisfirehose_deliverystream_plugin:KinesisFirehoseDeliveryStreamProviderPlugin", "AWS::IAM::ManagedPolicy=localstack.services.iam.resource_providers.aws_iam_managedpolicy_plugin:IAMManagedPolicyProviderPlugin", "AWS::Elasticsearch::Domain=localstack.services.opensearch.resource_providers.aws_elasticsearch_domain_plugin:ElasticsearchDomainProviderPlugin", "AWS::OpenSearchService::Domain=localstack.services.opensearch.resource_providers.aws_opensearchservice_domain_plugin:OpenSearchServiceDomainProviderPlugin", "AWS::SSM::Parameter=localstack.services.ssm.resource_providers.aws_ssm_parameter_plugin:SSMParameterProviderPlugin", "AWS::Kinesis::StreamConsumer=localstack.services.kinesis.resource_providers.aws_kinesis_streamconsumer_plugin:KinesisStreamConsumerProviderPlugin", "AWS::SNS::Subscription=localstack.services.sns.resource_providers.aws_sns_subscription_plugin:SNSSubscriptionProviderPlugin", "AWS::ApiGateway::Account=localstack.services.apigateway.resource_providers.aws_apigateway_account_plugin:ApiGatewayAccountProviderPlugin", "AWS::IAM::Role=localstack.services.iam.resource_providers.aws_iam_role_plugin:IAMRoleProviderPlugin", "AWS::S3::Bucket=localstack.services.s3.resource_providers.aws_s3_bucket_plugin:S3BucketProviderPlugin", "AWS::ApiGateway::DomainName=localstack.services.apigateway.resource_providers.aws_apigateway_domainname_plugin:ApiGatewayDomainNameProviderPlugin", "AWS::EC2::Subnet=localstack.services.ec2.resource_providers.aws_ec2_subnet_plugin:EC2SubnetProviderPlugin", "AWS::Logs::LogStream=localstack.services.logs.resource_providers.aws_logs_logstream_plugin:LogsLogStreamProviderPlugin", "AWS::CloudFormation::Stack=localstack.services.cloudformation.resource_providers.aws_cloudformation_stack_plugin:CloudFormationStackProviderPlugin", "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::EC2::NatGateway=localstack.services.ec2.resource_providers.aws_ec2_natgateway_plugin:EC2NatGatewayProviderPlugin", "AWS::Route53::HealthCheck=localstack.services.route53.resource_providers.aws_route53_healthcheck_plugin:Route53HealthCheckProviderPlugin", "AWS::SNS::TopicPolicy=localstack.services.sns.resource_providers.aws_sns_topicpolicy_plugin:SNSTopicPolicyProviderPlugin", "AWS::ApiGateway::ApiKey=localstack.services.apigateway.resource_providers.aws_apigateway_apikey_plugin:ApiGatewayApiKeyProviderPlugin", "AWS::S3::BucketPolicy=localstack.services.s3.resource_providers.aws_s3_bucketpolicy_plugin:S3BucketPolicyProviderPlugin", "AWS::IAM::User=localstack.services.iam.resource_providers.aws_iam_user_plugin:IAMUserProviderPlugin"], "localstack.packages": ["kinesis-mock/community=localstack.services.kinesis.plugins:kinesismock_package", "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", "jpype-jsonata/community=localstack.services.stepfunctions.plugins:jpype_jsonata_package", "dynamodb-local/community=localstack.services.dynamodb.plugins:dynamodb_local_package", "opensearch/community=localstack.services.opensearch.plugins:opensearch_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"], "localstack.hooks.on_infra_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", "remove_custom_endpoints=localstack.services.lambda_.plugins:remove_custom_endpoints", "publish_metrics=localstack.utils.analytics.metrics.publisher:publish_metrics", "_run_init_scripts_on_shutdown=localstack.runtime.init:_run_init_scripts_on_shutdown", "stop_server=localstack.dns.plugins:stop_server"], "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.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.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"]}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"localstack.cloudformation.resource_providers": ["AWS::EC2::SecurityGroup=localstack.services.ec2.resource_providers.aws_ec2_securitygroup_plugin:EC2SecurityGroupProviderPlugin", "AWS::EC2::VPC=localstack.services.ec2.resource_providers.aws_ec2_vpc_plugin:EC2VPCProviderPlugin", "AWS::Elasticsearch::Domain=localstack.services.opensearch.resource_providers.aws_elasticsearch_domain_plugin:ElasticsearchDomainProviderPlugin", "AWS::DynamoDB::Table=localstack.services.dynamodb.resource_providers.aws_dynamodb_table_plugin:DynamoDBTableProviderPlugin", "AWS::ApiGateway::Deployment=localstack.services.apigateway.resource_providers.aws_apigateway_deployment_plugin:ApiGatewayDeploymentProviderPlugin", "AWS::IAM::User=localstack.services.iam.resource_providers.aws_iam_user_plugin:IAMUserProviderPlugin", "AWS::KinesisFirehose::DeliveryStream=localstack.services.kinesisfirehose.resource_providers.aws_kinesisfirehose_deliverystream_plugin:KinesisFirehoseDeliveryStreamProviderPlugin", "AWS::CloudWatch::CompositeAlarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_compositealarm_plugin:CloudWatchCompositeAlarmProviderPlugin", "AWS::Lambda::Version=localstack.services.lambda_.resource_providers.aws_lambda_version_plugin:LambdaVersionProviderPlugin", "AWS::EC2::TransitGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_transitgatewayattachment_plugin:EC2TransitGatewayAttachmentProviderPlugin", "AWS::IAM::AccessKey=localstack.services.iam.resource_providers.aws_iam_accesskey_plugin:IAMAccessKeyProviderPlugin", "AWS::Redshift::Cluster=localstack.services.redshift.resource_providers.aws_redshift_cluster_plugin:RedshiftClusterProviderPlugin", "AWS::CDK::Metadata=localstack.services.cdk.resource_providers.cdk_metadata_plugin:LambdaAliasProviderPlugin", "AWS::Lambda::Alias=localstack.services.lambda_.resource_providers.lambda_alias_plugin:LambdaAliasProviderPlugin", "AWS::Lambda::CodeSigningConfig=localstack.services.lambda_.resource_providers.aws_lambda_codesigningconfig_plugin:LambdaCodeSigningConfigProviderPlugin", "AWS::IAM::Group=localstack.services.iam.resource_providers.aws_iam_group_plugin:IAMGroupProviderPlugin", "AWS::Kinesis::Stream=localstack.services.kinesis.resource_providers.aws_kinesis_stream_plugin:KinesisStreamProviderPlugin", "AWS::Kinesis::StreamConsumer=localstack.services.kinesis.resource_providers.aws_kinesis_streamconsumer_plugin:KinesisStreamConsumerProviderPlugin", "AWS::ApiGateway::RestApi=localstack.services.apigateway.resource_providers.aws_apigateway_restapi_plugin:ApiGatewayRestApiProviderPlugin", "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::CloudFormation::WaitCondition=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitcondition_plugin:CloudFormationWaitConditionProviderPlugin", "AWS::IAM::Policy=localstack.services.iam.resource_providers.aws_iam_policy_plugin:IAMPolicyProviderPlugin", "AWS::ApiGateway::RequestValidator=localstack.services.apigateway.resource_providers.aws_apigateway_requestvalidator_plugin:ApiGatewayRequestValidatorProviderPlugin", "AWS::SNS::Topic=localstack.services.sns.resource_providers.aws_sns_topic_plugin:SNSTopicProviderPlugin", "AWS::SecretsManager::ResourcePolicy=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_resourcepolicy_plugin:SecretsManagerResourcePolicyProviderPlugin", "AWS::IAM::ServiceLinkedRole=localstack.services.iam.resource_providers.aws_iam_servicelinkedrole_plugin:IAMServiceLinkedRoleProviderPlugin", "AWS::ApiGateway::GatewayResponse=localstack.services.apigateway.resource_providers.aws_apigateway_gatewayresponse_plugin:ApiGatewayGatewayResponseProviderPlugin", "AWS::Events::Connection=localstack.services.events.resource_providers.aws_events_connection_plugin:EventsConnectionProviderPlugin", "AWS::IAM::ManagedPolicy=localstack.services.iam.resource_providers.aws_iam_managedpolicy_plugin:IAMManagedPolicyProviderPlugin", "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::EC2::DHCPOptions=localstack.services.ec2.resource_providers.aws_ec2_dhcpoptions_plugin:EC2DHCPOptionsProviderPlugin", "AWS::SSM::Parameter=localstack.services.ssm.resource_providers.aws_ssm_parameter_plugin:SSMParameterProviderPlugin", "AWS::EC2::InternetGateway=localstack.services.ec2.resource_providers.aws_ec2_internetgateway_plugin:EC2InternetGatewayProviderPlugin", "AWS::ApiGateway::BasePathMapping=localstack.services.apigateway.resource_providers.aws_apigateway_basepathmapping_plugin:ApiGatewayBasePathMappingProviderPlugin", "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::EC2::NatGateway=localstack.services.ec2.resource_providers.aws_ec2_natgateway_plugin:EC2NatGatewayProviderPlugin", "AWS::KMS::Alias=localstack.services.kms.resource_providers.aws_kms_alias_plugin:KMSAliasProviderPlugin", "AWS::Logs::LogStream=localstack.services.logs.resource_providers.aws_logs_logstream_plugin:LogsLogStreamProviderPlugin", "AWS::ApiGateway::Stage=localstack.services.apigateway.resource_providers.aws_apigateway_stage_plugin:ApiGatewayStageProviderPlugin", "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::CloudFormation::WaitConditionHandle=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitconditionhandle_plugin:CloudFormationWaitConditionHandleProviderPlugin", "AWS::SNS::TopicPolicy=localstack.services.sns.resource_providers.aws_sns_topicpolicy_plugin:SNSTopicPolicyProviderPlugin", "AWS::IAM::Role=localstack.services.iam.resource_providers.aws_iam_role_plugin:IAMRoleProviderPlugin", "AWS::ApiGateway::ApiKey=localstack.services.apigateway.resource_providers.aws_apigateway_apikey_plugin:ApiGatewayApiKeyProviderPlugin", "AWS::SSM::MaintenanceWindow=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindow_plugin:SSMMaintenanceWindowProviderPlugin", "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::CloudFormation::Macro=localstack.services.cloudformation.resource_providers.aws_cloudformation_macro_plugin:CloudFormationMacroProviderPlugin", "AWS::CloudWatch::Alarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_alarm_plugin:CloudWatchAlarmProviderPlugin", "AWS::EC2::TransitGateway=localstack.services.ec2.resource_providers.aws_ec2_transitgateway_plugin:EC2TransitGatewayProviderPlugin", "AWS::Lambda::LayerVersionPermission=localstack.services.lambda_.resource_providers.aws_lambda_layerversionpermission_plugin:LambdaLayerVersionPermissionProviderPlugin", "AWS::IAM::InstanceProfile=localstack.services.iam.resource_providers.aws_iam_instanceprofile_plugin:IAMInstanceProfileProviderPlugin", "AWS::EC2::NetworkAcl=localstack.services.ec2.resource_providers.aws_ec2_networkacl_plugin:EC2NetworkAclProviderPlugin", "AWS::Events::ApiDestination=localstack.services.events.resource_providers.aws_events_apidestination_plugin:EventsApiDestinationProviderPlugin", "AWS::SSM::MaintenanceWindowTask=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtask_plugin:SSMMaintenanceWindowTaskProviderPlugin", "AWS::Lambda::Url=localstack.services.lambda_.resource_providers.aws_lambda_url_plugin:LambdaUrlProviderPlugin", "AWS::EC2::VPCGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_vpcgatewayattachment_plugin:EC2VPCGatewayAttachmentProviderPlugin", "AWS::Lambda::LayerVersion=localstack.services.lambda_.resource_providers.aws_lambda_layerversion_plugin:LambdaLayerVersionProviderPlugin", "AWS::SES::EmailIdentity=localstack.services.ses.resource_providers.aws_ses_emailidentity_plugin:SESEmailIdentityProviderPlugin", "AWS::S3::BucketPolicy=localstack.services.s3.resource_providers.aws_s3_bucketpolicy_plugin:S3BucketPolicyProviderPlugin", "AWS::Logs::LogGroup=localstack.services.logs.resource_providers.aws_logs_loggroup_plugin:LogsLogGroupProviderPlugin", "AWS::SQS::QueuePolicy=localstack.services.sqs.resource_providers.aws_sqs_queuepolicy_plugin:SQSQueuePolicyProviderPlugin", "AWS::EC2::Route=localstack.services.ec2.resource_providers.aws_ec2_route_plugin:EC2RouteProviderPlugin", "AWS::EC2::PrefixList=localstack.services.ec2.resource_providers.aws_ec2_prefixlist_plugin:EC2PrefixListProviderPlugin", "AWS::KMS::Key=localstack.services.kms.resource_providers.aws_kms_key_plugin:KMSKeyProviderPlugin", "AWS::Scheduler::Schedule=localstack.services.scheduler.resource_providers.aws_scheduler_schedule_plugin:SchedulerScheduleProviderPlugin", "AWS::Route53::HealthCheck=localstack.services.route53.resource_providers.aws_route53_healthcheck_plugin:Route53HealthCheckProviderPlugin", "AWS::Events::EventBus=localstack.services.events.resource_providers.aws_events_eventbus_plugin:EventsEventBusProviderPlugin", "AWS::SQS::Queue=localstack.services.sqs.resource_providers.aws_sqs_queue_plugin:SQSQueueProviderPlugin", "AWS::SecretsManager::RotationSchedule=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_rotationschedule_plugin:SecretsManagerRotationScheduleProviderPlugin", "AWS::S3::Bucket=localstack.services.s3.resource_providers.aws_s3_bucket_plugin:S3BucketProviderPlugin", "AWS::ApiGateway::Method=localstack.services.apigateway.resource_providers.aws_apigateway_method_plugin:ApiGatewayMethodProviderPlugin", "AWS::EC2::RouteTable=localstack.services.ec2.resource_providers.aws_ec2_routetable_plugin:EC2RouteTableProviderPlugin", "AWS::SecretsManager::Secret=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secret_plugin:SecretsManagerSecretProviderPlugin", "AWS::ECR::Repository=localstack.services.ecr.resource_providers.aws_ecr_repository_plugin:ECRRepositoryProviderPlugin", "AWS::Lambda::EventInvokeConfig=localstack.services.lambda_.resource_providers.aws_lambda_eventinvokeconfig_plugin:LambdaEventInvokeConfigProviderPlugin", "AWS::EC2::SubnetRouteTableAssociation=localstack.services.ec2.resource_providers.aws_ec2_subnetroutetableassociation_plugin:EC2SubnetRouteTableAssociationProviderPlugin", "AWS::CertificateManager::Certificate=localstack.services.certificatemanager.resource_providers.aws_certificatemanager_certificate_plugin:CertificateManagerCertificateProviderPlugin", "AWS::CloudFormation::Stack=localstack.services.cloudformation.resource_providers.aws_cloudformation_stack_plugin:CloudFormationStackProviderPlugin", "AWS::Route53::RecordSet=localstack.services.route53.resource_providers.aws_route53_recordset_plugin:Route53RecordSetProviderPlugin", "AWS::ApiGateway::UsagePlanKey=localstack.services.apigateway.resource_providers.aws_apigateway_usageplankey_plugin:ApiGatewayUsagePlanKeyProviderPlugin", "AWS::ResourceGroups::Group=localstack.services.resource_groups.resource_providers.aws_resourcegroups_group_plugin:ResourceGroupsGroupProviderPlugin", "AWS::StepFunctions::Activity=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_activity_plugin:StepFunctionsActivityProviderPlugin", "AWS::SNS::Subscription=localstack.services.sns.resource_providers.aws_sns_subscription_plugin:SNSSubscriptionProviderPlugin", "AWS::ApiGateway::Model=localstack.services.apigateway.resource_providers.aws_apigateway_model_plugin:ApiGatewayModelProviderPlugin", "AWS::IAM::ServerCertificate=localstack.services.iam.resource_providers.aws_iam_servercertificate_plugin:IAMServerCertificateProviderPlugin", "AWS::ApiGateway::DomainName=localstack.services.apigateway.resource_providers.aws_apigateway_domainname_plugin:ApiGatewayDomainNameProviderPlugin", "AWS::Lambda::Function=localstack.services.lambda_.resource_providers.aws_lambda_function_plugin:LambdaFunctionProviderPlugin", "AWS::Logs::SubscriptionFilter=localstack.services.logs.resource_providers.aws_logs_subscriptionfilter_plugin:LogsSubscriptionFilterProviderPlugin", "AWS::Events::EventBusPolicy=localstack.services.events.resource_providers.aws_events_eventbuspolicy_plugin:EventsEventBusPolicyProviderPlugin", "AWS::EC2::VPCEndpoint=localstack.services.ec2.resource_providers.aws_ec2_vpcendpoint_plugin:EC2VPCEndpointProviderPlugin", "AWS::ApiGateway::UsagePlan=localstack.services.apigateway.resource_providers.aws_apigateway_usageplan_plugin:ApiGatewayUsagePlanProviderPlugin", "AWS::Lambda::Permission=localstack.services.lambda_.resource_providers.aws_lambda_permission_plugin:LambdaPermissionProviderPlugin", "AWS::EC2::Instance=localstack.services.ec2.resource_providers.aws_ec2_instance_plugin:EC2InstanceProviderPlugin", "AWS::ApiGateway::Resource=localstack.services.apigateway.resource_providers.aws_apigateway_resource_plugin:ApiGatewayResourceProviderPlugin", "AWS::Scheduler::ScheduleGroup=localstack.services.scheduler.resource_providers.aws_scheduler_schedulegroup_plugin:SchedulerScheduleGroupProviderPlugin", "AWS::SSM::MaintenanceWindowTarget=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtarget_plugin:SSMMaintenanceWindowTargetProviderPlugin"], "localstack.packages": ["dynamodb-local/community=localstack.services.dynamodb.plugins:dynamodb_local_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", "kinesis-mock/community=localstack.services.kinesis.plugins:kinesismock_package", "jpype-jsonata/community=localstack.services.stepfunctions.plugins:jpype_jsonata_package", "vosk/community=localstack.services.transcribe.plugins:vosk_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"], "localstack.hooks.on_infra_start": ["apply_runtime_patches=localstack.runtime.patches:apply_runtime_patches", "register_swagger_endpoints=localstack.http.resources.swagger.plugins:register_swagger_endpoints", "_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", "_run_init_scripts_on_start=localstack.runtime.init:_run_init_scripts_on_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", "conditionally_enable_debugger=localstack.dev.debugger.plugins:conditionally_enable_debugger", "register_cloudformation_deploy_ui=localstack.services.cloudformation.plugins:register_cloudformation_deploy_ui", "eager_load_services=localstack.services.plugins:eager_load_services", "setup_dns_configuration_on_host=localstack.dns.plugins:setup_dns_configuration_on_host", "start_dns_server=localstack.dns.plugins:start_dns_server", "register_custom_endpoints=localstack.services.lambda_.plugins:register_custom_endpoints", "validate_configuration=localstack.services.lambda_.plugins:validate_configuration", "_publish_config_as_analytics_event=localstack.runtime.analytics:_publish_config_as_analytics_event", "_publish_container_info=localstack.runtime.analytics:_publish_container_info"], "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.on_infra_shutdown": ["_run_init_scripts_on_shutdown=localstack.runtime.init:_run_init_scripts_on_shutdown", "publish_metrics=localstack.utils.analytics.metrics.publisher:publish_metrics", "run_on_after_service_shutdown_handlers=localstack.runtime.shutdown:run_on_after_service_shutdown_handlers", "run_shutdown_handlers=localstack.runtime.shutdown:run_shutdown_handlers", "shutdown_services=localstack.runtime.shutdown:shutdown_services", "stop_server=localstack.dns.plugins:stop_server", "remove_custom_endpoints=localstack.services.lambda_.plugins:remove_custom_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.openapi.spec": ["localstack=localstack.plugins:CoreOASPlugin"], "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.lambda.runtime_executor": ["docker=localstack.services.lambda_.invocation.plugins:DockerRuntimeExecutorPlugin"], "localstack.runtime.server": ["hypercorn=localstack.runtime.server.plugins:HypercornRuntimeServerPlugin", "twisted=localstack.runtime.server.plugins:TwistedRuntimeServerPlugin"]}
|
File without changes
|
{localstack_core-4.5.1.dev25.data → localstack_core-4.5.1.dev26.data}/scripts/localstack-supervisor
RENAMED
File without changes
|
{localstack_core-4.5.1.dev25.data → localstack_core-4.5.1.dev26.data}/scripts/localstack.bat
RENAMED
File without changes
|
File without changes
|
{localstack_core-4.5.1.dev25.dist-info → localstack_core-4.5.1.dev26.dist-info}/entry_points.txt
RENAMED
File without changes
|
{localstack_core-4.5.1.dev25.dist-info → localstack_core-4.5.1.dev26.dist-info}/licenses/LICENSE.txt
RENAMED
File without changes
|
{localstack_core-4.5.1.dev25.dist-info → localstack_core-4.5.1.dev26.dist-info}/top_level.txt
RENAMED
File without changes
|