localstack-core 4.2.1.dev30__py3-none-any.whl → 4.2.1.dev32__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/stepfunctions/backend/alias.py +121 -0
- localstack/services/stepfunctions/backend/execution.py +19 -1
- localstack/services/stepfunctions/backend/state_machine.py +3 -0
- localstack/services/stepfunctions/backend/store.py +3 -0
- localstack/services/stepfunctions/provider.py +297 -14
- localstack/testing/pytest/stepfunctions/fixtures.py +25 -0
- localstack/testing/pytest/stepfunctions/utils.py +46 -0
- localstack/version.py +2 -2
- {localstack_core-4.2.1.dev30.dist-info → localstack_core-4.2.1.dev32.dist-info}/METADATA +1 -1
- {localstack_core-4.2.1.dev30.dist-info → localstack_core-4.2.1.dev32.dist-info}/RECORD +18 -17
- localstack_core-4.2.1.dev32.dist-info/plux.json +1 -0
- localstack_core-4.2.1.dev30.dist-info/plux.json +0 -1
- {localstack_core-4.2.1.dev30.data → localstack_core-4.2.1.dev32.data}/scripts/localstack +0 -0
- {localstack_core-4.2.1.dev30.data → localstack_core-4.2.1.dev32.data}/scripts/localstack-supervisor +0 -0
- {localstack_core-4.2.1.dev30.data → localstack_core-4.2.1.dev32.data}/scripts/localstack.bat +0 -0
- {localstack_core-4.2.1.dev30.dist-info → localstack_core-4.2.1.dev32.dist-info}/LICENSE.txt +0 -0
- {localstack_core-4.2.1.dev30.dist-info → localstack_core-4.2.1.dev32.dist-info}/WHEEL +0 -0
- {localstack_core-4.2.1.dev30.dist-info → localstack_core-4.2.1.dev32.dist-info}/entry_points.txt +0 -0
- {localstack_core-4.2.1.dev30.dist-info → localstack_core-4.2.1.dev32.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import copy
|
|
4
|
+
import datetime
|
|
5
|
+
import random
|
|
6
|
+
import threading
|
|
7
|
+
from typing import Final, Optional
|
|
8
|
+
|
|
9
|
+
from localstack.aws.api.stepfunctions import (
|
|
10
|
+
AliasDescription,
|
|
11
|
+
Arn,
|
|
12
|
+
CharacterRestrictedName,
|
|
13
|
+
DescribeStateMachineAliasOutput,
|
|
14
|
+
RoutingConfigurationList,
|
|
15
|
+
StateMachineAliasListItem,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class Alias:
|
|
20
|
+
_mutex: Final[threading.Lock]
|
|
21
|
+
update_date: Optional[datetime.datetime]
|
|
22
|
+
name: Final[CharacterRestrictedName]
|
|
23
|
+
_description: Optional[AliasDescription]
|
|
24
|
+
_routing_configuration_list: RoutingConfigurationList
|
|
25
|
+
_state_machine_version_arns: list[Arn]
|
|
26
|
+
_execution_probability_distribution: list[int]
|
|
27
|
+
state_machine_alias_arn: Final[Arn]
|
|
28
|
+
create_date: datetime.datetime
|
|
29
|
+
|
|
30
|
+
def __init__(
|
|
31
|
+
self,
|
|
32
|
+
state_machine_arn: Arn,
|
|
33
|
+
name: CharacterRestrictedName,
|
|
34
|
+
description: Optional[AliasDescription],
|
|
35
|
+
routing_configuration_list: RoutingConfigurationList,
|
|
36
|
+
):
|
|
37
|
+
self._mutex = threading.Lock()
|
|
38
|
+
self.update_date = None
|
|
39
|
+
self.name = name
|
|
40
|
+
self._description = None
|
|
41
|
+
self.state_machine_alias_arn = f"{state_machine_arn}:{name}"
|
|
42
|
+
self.update(description=description, routing_configuration_list=routing_configuration_list)
|
|
43
|
+
self.create_date = self._get_mutex_date()
|
|
44
|
+
|
|
45
|
+
def __hash__(self):
|
|
46
|
+
return hash(self.state_machine_alias_arn)
|
|
47
|
+
|
|
48
|
+
def __eq__(self, other):
|
|
49
|
+
if isinstance(other, Alias):
|
|
50
|
+
return self.is_idempotent(other=other)
|
|
51
|
+
return False
|
|
52
|
+
|
|
53
|
+
def is_idempotent(self, other: Alias) -> bool:
|
|
54
|
+
return all(
|
|
55
|
+
[
|
|
56
|
+
self.state_machine_alias_arn == other.state_machine_alias_arn,
|
|
57
|
+
self.name == other.name,
|
|
58
|
+
self._description == other._description,
|
|
59
|
+
self._routing_configuration_list == other._routing_configuration_list,
|
|
60
|
+
]
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
@staticmethod
|
|
64
|
+
def _get_mutex_date() -> datetime.datetime:
|
|
65
|
+
return datetime.datetime.now(tz=datetime.timezone.utc)
|
|
66
|
+
|
|
67
|
+
def get_routing_configuration_list(self) -> RoutingConfigurationList:
|
|
68
|
+
return copy.deepcopy(self._routing_configuration_list)
|
|
69
|
+
|
|
70
|
+
def is_router_for(self, state_machine_version_arn: Arn) -> bool:
|
|
71
|
+
with self._mutex:
|
|
72
|
+
return state_machine_version_arn in self._state_machine_version_arns
|
|
73
|
+
|
|
74
|
+
def update(
|
|
75
|
+
self,
|
|
76
|
+
description: Optional[AliasDescription],
|
|
77
|
+
routing_configuration_list: RoutingConfigurationList,
|
|
78
|
+
) -> None:
|
|
79
|
+
with self._mutex:
|
|
80
|
+
self.update_date = self._get_mutex_date()
|
|
81
|
+
|
|
82
|
+
if description is not None:
|
|
83
|
+
self._description = description
|
|
84
|
+
|
|
85
|
+
if routing_configuration_list:
|
|
86
|
+
self._routing_configuration_list = routing_configuration_list
|
|
87
|
+
self._state_machine_version_arns = list()
|
|
88
|
+
self._execution_probability_distribution = list()
|
|
89
|
+
for routing_configuration in routing_configuration_list:
|
|
90
|
+
self._state_machine_version_arns.append(
|
|
91
|
+
routing_configuration["stateMachineVersionArn"]
|
|
92
|
+
)
|
|
93
|
+
self._execution_probability_distribution.append(routing_configuration["weight"])
|
|
94
|
+
|
|
95
|
+
def sample(self):
|
|
96
|
+
with self._mutex:
|
|
97
|
+
samples = random.choices(
|
|
98
|
+
self._state_machine_version_arns,
|
|
99
|
+
weights=self._execution_probability_distribution,
|
|
100
|
+
k=1,
|
|
101
|
+
)
|
|
102
|
+
state_machine_version_arn = samples[0]
|
|
103
|
+
return state_machine_version_arn
|
|
104
|
+
|
|
105
|
+
def to_description(self) -> DescribeStateMachineAliasOutput:
|
|
106
|
+
with self._mutex:
|
|
107
|
+
description = DescribeStateMachineAliasOutput(
|
|
108
|
+
creationDate=self.create_date,
|
|
109
|
+
name=self.name,
|
|
110
|
+
description=self._description,
|
|
111
|
+
routingConfiguration=self._routing_configuration_list,
|
|
112
|
+
stateMachineAliasArn=self.state_machine_alias_arn,
|
|
113
|
+
)
|
|
114
|
+
if self.update_date is not None:
|
|
115
|
+
description["updateDate"] = self.update_date
|
|
116
|
+
return description
|
|
117
|
+
|
|
118
|
+
def to_item(self) -> StateMachineAliasListItem:
|
|
119
|
+
return StateMachineAliasListItem(
|
|
120
|
+
stateMachineAliasArn=self.state_machine_alias_arn, creationDate=self.create_date
|
|
121
|
+
)
|
|
@@ -103,6 +103,10 @@ class Execution:
|
|
|
103
103
|
region_name: str
|
|
104
104
|
|
|
105
105
|
state_machine: Final[StateMachineInstance]
|
|
106
|
+
state_machine_arn: Final[Arn]
|
|
107
|
+
state_machine_version_arn: Final[Optional[Arn]]
|
|
108
|
+
state_machine_alias_arn: Final[Optional[Arn]]
|
|
109
|
+
|
|
106
110
|
start_date: Final[Timestamp]
|
|
107
111
|
input_data: Final[Optional[json]]
|
|
108
112
|
input_details: Final[Optional[CloudWatchEventsExecutionDataDetails]]
|
|
@@ -136,6 +140,7 @@ class Execution:
|
|
|
136
140
|
activity_store: dict[Arn, Activity],
|
|
137
141
|
input_data: Optional[json] = None,
|
|
138
142
|
trace_header: Optional[TraceHeader] = None,
|
|
143
|
+
state_machine_alias_arn: Optional[Arn] = None,
|
|
139
144
|
):
|
|
140
145
|
self.name = name
|
|
141
146
|
self.sm_type = sm_type
|
|
@@ -144,6 +149,13 @@ class Execution:
|
|
|
144
149
|
self.account_id = account_id
|
|
145
150
|
self.region_name = region_name
|
|
146
151
|
self.state_machine = state_machine
|
|
152
|
+
if isinstance(state_machine, StateMachineVersion):
|
|
153
|
+
self.state_machine_arn = state_machine.source_arn
|
|
154
|
+
self.state_machine_version_arn = state_machine.arn
|
|
155
|
+
else:
|
|
156
|
+
self.state_machine_arn = state_machine.arn
|
|
157
|
+
self.state_machine_version_arn = None
|
|
158
|
+
self.state_machine_alias_arn = state_machine_alias_arn
|
|
147
159
|
self.start_date = start_date
|
|
148
160
|
self._cloud_watch_logging_session = cloud_watch_logging_session
|
|
149
161
|
self.input_data = input_data
|
|
@@ -167,7 +179,7 @@ class Execution:
|
|
|
167
179
|
def to_describe_output(self) -> DescribeExecutionOutput:
|
|
168
180
|
describe_output = DescribeExecutionOutput(
|
|
169
181
|
executionArn=self.exec_arn,
|
|
170
|
-
stateMachineArn=self.
|
|
182
|
+
stateMachineArn=self.state_machine_arn,
|
|
171
183
|
name=self.name,
|
|
172
184
|
status=self.exec_status,
|
|
173
185
|
startDate=self.start_date,
|
|
@@ -183,6 +195,10 @@ class Execution:
|
|
|
183
195
|
describe_output["error"] = self.error
|
|
184
196
|
if self.cause is not None:
|
|
185
197
|
describe_output["cause"] = self.cause
|
|
198
|
+
if self.state_machine_version_arn is not None:
|
|
199
|
+
describe_output["stateMachineVersionArn"] = self.state_machine_version_arn
|
|
200
|
+
if self.state_machine_alias_arn is not None:
|
|
201
|
+
describe_output["stateMachineAliasArn"] = self.state_machine_alias_arn
|
|
186
202
|
return describe_output
|
|
187
203
|
|
|
188
204
|
def to_describe_state_machine_for_execution_output(
|
|
@@ -231,6 +247,8 @@ class Execution:
|
|
|
231
247
|
)
|
|
232
248
|
if state_machine_version_arn is not None:
|
|
233
249
|
item["stateMachineVersionArn"] = state_machine_version_arn
|
|
250
|
+
if self.state_machine_alias_arn is not None:
|
|
251
|
+
item["stateMachineAliasArn"] = self.state_machine_alias_arn
|
|
234
252
|
return item
|
|
235
253
|
|
|
236
254
|
def to_history_output(self) -> GetExecutionHistoryOutput:
|
|
@@ -30,6 +30,7 @@ from localstack.services.stepfunctions.asl.eval.event.logging import (
|
|
|
30
30
|
from localstack.services.stepfunctions.asl.static_analyser.variable_references_static_analyser import (
|
|
31
31
|
VariableReferencesStaticAnalyser,
|
|
32
32
|
)
|
|
33
|
+
from localstack.services.stepfunctions.backend.alias import Alias
|
|
33
34
|
from localstack.utils.strings import long_uid
|
|
34
35
|
|
|
35
36
|
|
|
@@ -163,6 +164,7 @@ class StateMachineRevision(StateMachineInstance):
|
|
|
163
164
|
_next_version_number: int
|
|
164
165
|
versions: Final[dict[RevisionId, Arn]]
|
|
165
166
|
tag_manager: Final[TagManager]
|
|
167
|
+
aliases: Final[set[Alias]]
|
|
166
168
|
|
|
167
169
|
def __init__(
|
|
168
170
|
self,
|
|
@@ -194,6 +196,7 @@ class StateMachineRevision(StateMachineInstance):
|
|
|
194
196
|
self.tag_manager = TagManager()
|
|
195
197
|
if tags:
|
|
196
198
|
self.tag_manager.add_all(tags)
|
|
199
|
+
self.aliases = set()
|
|
197
200
|
|
|
198
201
|
def create_revision(
|
|
199
202
|
self,
|
|
@@ -3,6 +3,7 @@ from typing import Final
|
|
|
3
3
|
|
|
4
4
|
from localstack.aws.api.stepfunctions import Arn
|
|
5
5
|
from localstack.services.stepfunctions.backend.activity import Activity
|
|
6
|
+
from localstack.services.stepfunctions.backend.alias import Alias
|
|
6
7
|
from localstack.services.stepfunctions.backend.execution import Execution
|
|
7
8
|
from localstack.services.stepfunctions.backend.state_machine import StateMachineInstance
|
|
8
9
|
from localstack.services.stores import AccountRegionBundle, BaseStore, LocalAttribute
|
|
@@ -11,6 +12,8 @@ from localstack.services.stores import AccountRegionBundle, BaseStore, LocalAttr
|
|
|
11
12
|
class SFNStore(BaseStore):
|
|
12
13
|
# Maps ARNs to state machines.
|
|
13
14
|
state_machines: Final[dict[Arn, StateMachineInstance]] = LocalAttribute(default=dict)
|
|
15
|
+
# Map Alias ARNs to state machine aliases
|
|
16
|
+
aliases: Final[dict[Arn, Alias]] = LocalAttribute(default=dict)
|
|
14
17
|
# Maps Execution-ARNs to state machines.
|
|
15
18
|
executions: Final[dict[Arn, Execution]] = LocalAttribute(
|
|
16
19
|
default=OrderedDict
|
|
@@ -9,18 +9,23 @@ from typing import Final, Optional
|
|
|
9
9
|
from localstack.aws.api import CommonServiceException, RequestContext
|
|
10
10
|
from localstack.aws.api.stepfunctions import (
|
|
11
11
|
ActivityDoesNotExist,
|
|
12
|
+
AliasDescription,
|
|
12
13
|
Arn,
|
|
14
|
+
CharacterRestrictedName,
|
|
13
15
|
ConflictException,
|
|
14
16
|
CreateActivityOutput,
|
|
17
|
+
CreateStateMachineAliasOutput,
|
|
15
18
|
CreateStateMachineInput,
|
|
16
19
|
CreateStateMachineOutput,
|
|
17
20
|
Definition,
|
|
18
21
|
DeleteActivityOutput,
|
|
22
|
+
DeleteStateMachineAliasOutput,
|
|
19
23
|
DeleteStateMachineOutput,
|
|
20
24
|
DeleteStateMachineVersionOutput,
|
|
21
25
|
DescribeActivityOutput,
|
|
22
26
|
DescribeExecutionOutput,
|
|
23
27
|
DescribeMapRunOutput,
|
|
28
|
+
DescribeStateMachineAliasOutput,
|
|
24
29
|
DescribeStateMachineForExecutionOutput,
|
|
25
30
|
DescribeStateMachineOutput,
|
|
26
31
|
EncryptionConfiguration,
|
|
@@ -43,6 +48,7 @@ from localstack.aws.api.stepfunctions import (
|
|
|
43
48
|
ListExecutionsOutput,
|
|
44
49
|
ListExecutionsPageToken,
|
|
45
50
|
ListMapRunsOutput,
|
|
51
|
+
ListStateMachineAliasesOutput,
|
|
46
52
|
ListStateMachinesOutput,
|
|
47
53
|
ListStateMachineVersionsOutput,
|
|
48
54
|
ListTagsForResourceOutput,
|
|
@@ -60,6 +66,7 @@ from localstack.aws.api.stepfunctions import (
|
|
|
60
66
|
RevealSecrets,
|
|
61
67
|
ReverseOrder,
|
|
62
68
|
RevisionId,
|
|
69
|
+
RoutingConfigurationList,
|
|
63
70
|
SendTaskFailureOutput,
|
|
64
71
|
SendTaskHeartbeatOutput,
|
|
65
72
|
SendTaskSuccessOutput,
|
|
@@ -68,6 +75,7 @@ from localstack.aws.api.stepfunctions import (
|
|
|
68
75
|
SensitiveError,
|
|
69
76
|
StartExecutionOutput,
|
|
70
77
|
StartSyncExecutionOutput,
|
|
78
|
+
StateMachineAliasList,
|
|
71
79
|
StateMachineAlreadyExists,
|
|
72
80
|
StateMachineDoesNotExist,
|
|
73
81
|
StateMachineList,
|
|
@@ -88,6 +96,7 @@ from localstack.aws.api.stepfunctions import (
|
|
|
88
96
|
TracingConfiguration,
|
|
89
97
|
UntagResourceOutput,
|
|
90
98
|
UpdateMapRunOutput,
|
|
99
|
+
UpdateStateMachineAliasOutput,
|
|
91
100
|
UpdateStateMachineOutput,
|
|
92
101
|
ValidateStateMachineDefinitionDiagnostic,
|
|
93
102
|
ValidateStateMachineDefinitionDiagnosticList,
|
|
@@ -129,6 +138,7 @@ from localstack.services.stepfunctions.asl.static_analyser.usage_metrics_static_
|
|
|
129
138
|
UsageMetricsStaticAnalyser,
|
|
130
139
|
)
|
|
131
140
|
from localstack.services.stepfunctions.backend.activity import Activity, ActivityTask
|
|
141
|
+
from localstack.services.stepfunctions.backend.alias import Alias
|
|
132
142
|
from localstack.services.stepfunctions.backend.execution import Execution, SyncExecution
|
|
133
143
|
from localstack.services.stepfunctions.backend.state_machine import (
|
|
134
144
|
StateMachineInstance,
|
|
@@ -170,7 +180,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
170
180
|
visitor.visit(sfn_stores)
|
|
171
181
|
|
|
172
182
|
_STATE_MACHINE_ARN_REGEX: Final[re.Pattern] = re.compile(
|
|
173
|
-
rf"{ARN_PARTITION_REGEX}:states:[a-z0-9-]+:[0-9]{{12}}:stateMachine:[a-zA-Z0-9-_.]+(:\d+)
|
|
183
|
+
rf"{ARN_PARTITION_REGEX}:states:[a-z0-9-]+:[0-9]{{12}}:stateMachine:[a-zA-Z0-9-_.]+(:\d+)?(:[a-zA-Z0-9-_.]+)*$"
|
|
174
184
|
)
|
|
175
185
|
|
|
176
186
|
_STATE_MACHINE_EXECUTION_ARN_REGEX: Final[re.Pattern] = re.compile(
|
|
@@ -181,6 +191,12 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
181
191
|
rf"{ARN_PARTITION_REGEX}:states:[a-z0-9-]+:[0-9]{{12}}:activity:[a-zA-Z0-9-_\.]{{1,80}}$"
|
|
182
192
|
)
|
|
183
193
|
|
|
194
|
+
_ALIAS_ARN_REGEX: Final[re.Pattern] = re.compile(
|
|
195
|
+
rf"{ARN_PARTITION_REGEX}:states:[a-z0-9-]+:[0-9]{{12}}:stateMachine:[A-Za-z0-9_.-]+:[A-Za-z_.-]+[A-Za-z0-9_.-]{{0,80}}$"
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
_ALIAS_NAME_REGEX: Final[re.Pattern] = re.compile(r"^(?=.*[a-zA-Z_\-\.])[a-zA-Z0-9_\-\.]+$")
|
|
199
|
+
|
|
184
200
|
@staticmethod
|
|
185
201
|
def _validate_state_machine_arn(state_machine_arn: str) -> None:
|
|
186
202
|
# TODO: InvalidArn exception message do not communicate which part of the ARN is incorrect.
|
|
@@ -203,6 +219,11 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
203
219
|
if not StepFunctionsProvider._ACTIVITY_ARN_REGEX.match(activity_arn):
|
|
204
220
|
raise InvalidArn(f"Invalid arn: '{activity_arn}'")
|
|
205
221
|
|
|
222
|
+
@staticmethod
|
|
223
|
+
def _validate_state_machine_alias_arn(state_machine_alias_arn: Arn) -> None:
|
|
224
|
+
if not StepFunctionsProvider._ALIAS_ARN_REGEX.match(state_machine_alias_arn):
|
|
225
|
+
raise InvalidArn(f"Invalid arn: '{state_machine_alias_arn}'")
|
|
226
|
+
|
|
206
227
|
def _raise_state_machine_type_not_supported(self):
|
|
207
228
|
raise StateMachineTypeNotSupported(
|
|
208
229
|
"This operation is not supported by this type of state machine"
|
|
@@ -233,6 +254,22 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
233
254
|
if char in invalid_chars:
|
|
234
255
|
raise InvalidName(f"Invalid Name: '{name}'")
|
|
235
256
|
|
|
257
|
+
@staticmethod
|
|
258
|
+
def _validate_state_machine_alias_name(name: CharacterRestrictedName) -> None:
|
|
259
|
+
len_name = len(name)
|
|
260
|
+
if len_name > 80:
|
|
261
|
+
raise ValidationException(
|
|
262
|
+
f"1 validation error detected: Value '{name}' at 'name' failed to satisfy constraint: "
|
|
263
|
+
f"Member must have length less than or equal to 80"
|
|
264
|
+
)
|
|
265
|
+
if not StepFunctionsProvider._ALIAS_NAME_REGEX.match(name):
|
|
266
|
+
raise ValidationException(
|
|
267
|
+
# TODO: explore more error cases in which more than one validation error may occur which results
|
|
268
|
+
# in the counter below being greater than 1.
|
|
269
|
+
f"1 validation error detected: Value '{name}' at 'name' failed to satisfy constraint: "
|
|
270
|
+
f"Member must satisfy regular expression pattern: ^(?=.*[a-zA-Z_\\-\\.])[a-zA-Z0-9_\\-\\.]+$"
|
|
271
|
+
)
|
|
272
|
+
|
|
236
273
|
def _get_execution(self, context: RequestContext, execution_arn: Arn) -> Execution:
|
|
237
274
|
execution: Optional[Execution] = self.get_store(context).executions.get(execution_arn)
|
|
238
275
|
if not execution:
|
|
@@ -489,6 +526,149 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
489
526
|
|
|
490
527
|
return create_output
|
|
491
528
|
|
|
529
|
+
def _validate_state_machine_alias_routing_configuration(
|
|
530
|
+
self, context: RequestContext, routing_configuration_list: RoutingConfigurationList
|
|
531
|
+
) -> None:
|
|
532
|
+
# TODO: to match AWS's approach best validation exceptions could be
|
|
533
|
+
# built in a process decoupled from the provider.
|
|
534
|
+
|
|
535
|
+
routing_configuration_list_len = len(routing_configuration_list)
|
|
536
|
+
if not (1 <= routing_configuration_list_len <= 2):
|
|
537
|
+
# Replicate the object string dump format:
|
|
538
|
+
# [RoutingConfigurationListItem(stateMachineVersionArn=arn_no_quotes, weight=int), ...]
|
|
539
|
+
routing_configuration_serialization_parts = []
|
|
540
|
+
for routing_configuration in routing_configuration_list:
|
|
541
|
+
routing_configuration_serialization_parts.append(
|
|
542
|
+
"".join(
|
|
543
|
+
[
|
|
544
|
+
"RoutingConfigurationListItem(stateMachineVersionArn=",
|
|
545
|
+
routing_configuration["stateMachineVersionArn"],
|
|
546
|
+
", weight=",
|
|
547
|
+
str(routing_configuration["weight"]),
|
|
548
|
+
")",
|
|
549
|
+
]
|
|
550
|
+
)
|
|
551
|
+
)
|
|
552
|
+
routing_configuration_serialization_list = (
|
|
553
|
+
f"[{', '.join(routing_configuration_serialization_parts)}]"
|
|
554
|
+
)
|
|
555
|
+
raise ValidationException(
|
|
556
|
+
f"1 validation error detected: Value '{routing_configuration_serialization_list}' "
|
|
557
|
+
"at 'routingConfiguration' failed to "
|
|
558
|
+
"satisfy constraint: Member must have length less than or equal to 2"
|
|
559
|
+
)
|
|
560
|
+
|
|
561
|
+
routing_configuration_arn_list = [
|
|
562
|
+
routing_configuration["stateMachineVersionArn"]
|
|
563
|
+
for routing_configuration in routing_configuration_list
|
|
564
|
+
]
|
|
565
|
+
if len(set(routing_configuration_arn_list)) < routing_configuration_list_len:
|
|
566
|
+
arn_list_string = f"[{', '.join(routing_configuration_arn_list)}]"
|
|
567
|
+
raise ValidationException(
|
|
568
|
+
"Routing configuration must contain distinct state machine version ARNs. "
|
|
569
|
+
f"Received: {arn_list_string}"
|
|
570
|
+
)
|
|
571
|
+
|
|
572
|
+
routing_weights = [
|
|
573
|
+
routing_configuration["weight"] for routing_configuration in routing_configuration_list
|
|
574
|
+
]
|
|
575
|
+
for i, weight in enumerate(routing_weights):
|
|
576
|
+
# TODO: check for weight type.
|
|
577
|
+
if weight < 0:
|
|
578
|
+
raise ValidationException(
|
|
579
|
+
f"Invalid value for parameter routingConfiguration[{i + 1}].weight, value: {weight}, valid min value: 0"
|
|
580
|
+
)
|
|
581
|
+
if weight > 100:
|
|
582
|
+
raise ValidationException(
|
|
583
|
+
f"1 validation error detected: Value '{weight}' at 'routingConfiguration.{i + 1}.member.weight' "
|
|
584
|
+
"failed to satisfy constraint: Member must have value less than or equal to 100"
|
|
585
|
+
)
|
|
586
|
+
routing_weights_sum = sum(routing_weights)
|
|
587
|
+
if not routing_weights_sum == 100:
|
|
588
|
+
raise ValidationException(
|
|
589
|
+
f"Sum of routing configuration weights must equal 100. Received: {json.dumps(routing_weights)}"
|
|
590
|
+
)
|
|
591
|
+
|
|
592
|
+
store = self.get_store(context=context)
|
|
593
|
+
state_machines = store.state_machines
|
|
594
|
+
|
|
595
|
+
first_routing_qualified_arn = routing_configuration_arn_list[0]
|
|
596
|
+
shared_state_machine_revision_arn = self._get_state_machine_arn_from_qualified_arn(
|
|
597
|
+
qualified_arn=first_routing_qualified_arn
|
|
598
|
+
)
|
|
599
|
+
for routing_configuration_arn in routing_configuration_arn_list:
|
|
600
|
+
maybe_state_machine_version = state_machines.get(routing_configuration_arn)
|
|
601
|
+
if not isinstance(maybe_state_machine_version, StateMachineVersion):
|
|
602
|
+
arn_list_string = f"[{', '.join(routing_configuration_arn_list)}]"
|
|
603
|
+
raise ValidationException(
|
|
604
|
+
f"Routing configuration must contain state machine version ARNs. Received: {arn_list_string}"
|
|
605
|
+
)
|
|
606
|
+
state_machine_revision_arn = self._get_state_machine_arn_from_qualified_arn(
|
|
607
|
+
qualified_arn=routing_configuration_arn
|
|
608
|
+
)
|
|
609
|
+
if state_machine_revision_arn != shared_state_machine_revision_arn:
|
|
610
|
+
raise ValidationException("TODO")
|
|
611
|
+
|
|
612
|
+
@staticmethod
|
|
613
|
+
def _get_state_machine_arn_from_qualified_arn(qualified_arn: Arn) -> Arn:
|
|
614
|
+
last_colon_index = qualified_arn.rfind(":")
|
|
615
|
+
base_arn = qualified_arn[:last_colon_index]
|
|
616
|
+
return base_arn
|
|
617
|
+
|
|
618
|
+
def create_state_machine_alias(
|
|
619
|
+
self,
|
|
620
|
+
context: RequestContext,
|
|
621
|
+
name: CharacterRestrictedName,
|
|
622
|
+
routing_configuration: RoutingConfigurationList,
|
|
623
|
+
description: AliasDescription = None,
|
|
624
|
+
**kwargs,
|
|
625
|
+
) -> CreateStateMachineAliasOutput:
|
|
626
|
+
# Validate the inputs.
|
|
627
|
+
self._validate_state_machine_alias_name(name=name)
|
|
628
|
+
self._validate_state_machine_alias_routing_configuration(
|
|
629
|
+
context=context, routing_configuration_list=routing_configuration
|
|
630
|
+
)
|
|
631
|
+
|
|
632
|
+
# Determine the state machine arn this alias maps to,
|
|
633
|
+
# do so unsafely as validation already took place before initialisation.
|
|
634
|
+
first_routing_qualified_arn = routing_configuration[0]["stateMachineVersionArn"]
|
|
635
|
+
state_machine_revision_arn = self._get_state_machine_arn_from_qualified_arn(
|
|
636
|
+
qualified_arn=first_routing_qualified_arn
|
|
637
|
+
)
|
|
638
|
+
alias = Alias(
|
|
639
|
+
state_machine_arn=state_machine_revision_arn,
|
|
640
|
+
name=name,
|
|
641
|
+
description=description,
|
|
642
|
+
routing_configuration_list=routing_configuration,
|
|
643
|
+
)
|
|
644
|
+
state_machine_alias_arn = alias.state_machine_alias_arn
|
|
645
|
+
|
|
646
|
+
store = self.get_store(context=context)
|
|
647
|
+
|
|
648
|
+
aliases = store.aliases
|
|
649
|
+
if maybe_idempotent_alias := aliases.get(state_machine_alias_arn):
|
|
650
|
+
if alias.is_idempotent(maybe_idempotent_alias):
|
|
651
|
+
return CreateStateMachineAliasOutput(
|
|
652
|
+
stateMachineAliasArn=state_machine_alias_arn, creationDate=alias.create_date
|
|
653
|
+
)
|
|
654
|
+
else:
|
|
655
|
+
# CreateStateMachineAlias is an idempotent API. Idempotent requests won’t create duplicate resources.
|
|
656
|
+
raise ConflictException(
|
|
657
|
+
"Failed to create alias because an alias with the same name and a "
|
|
658
|
+
"different routing configuration already exists."
|
|
659
|
+
)
|
|
660
|
+
aliases[state_machine_alias_arn] = alias
|
|
661
|
+
|
|
662
|
+
state_machine_revision = store.state_machines.get(state_machine_revision_arn)
|
|
663
|
+
if not isinstance(state_machine_revision, StateMachineRevision):
|
|
664
|
+
# The state machine was deleted but not the version referenced in this context.
|
|
665
|
+
raise RuntimeError(f"No state machine revision for arn '{state_machine_revision_arn}'")
|
|
666
|
+
state_machine_revision.aliases.add(alias)
|
|
667
|
+
|
|
668
|
+
return CreateStateMachineAliasOutput(
|
|
669
|
+
stateMachineAliasArn=state_machine_alias_arn, creationDate=alias.create_date
|
|
670
|
+
)
|
|
671
|
+
|
|
492
672
|
def describe_state_machine(
|
|
493
673
|
self,
|
|
494
674
|
context: RequestContext,
|
|
@@ -502,6 +682,19 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
502
682
|
self._raise_state_machine_does_not_exist(state_machine_arn)
|
|
503
683
|
return state_machine.describe()
|
|
504
684
|
|
|
685
|
+
def describe_state_machine_alias(
|
|
686
|
+
self, context: RequestContext, state_machine_alias_arn: Arn, **kwargs
|
|
687
|
+
) -> DescribeStateMachineAliasOutput:
|
|
688
|
+
self._validate_state_machine_alias_arn(state_machine_alias_arn=state_machine_alias_arn)
|
|
689
|
+
alias: Optional[Alias] = self.get_store(context=context).aliases.get(
|
|
690
|
+
state_machine_alias_arn
|
|
691
|
+
)
|
|
692
|
+
if alias is None:
|
|
693
|
+
# TODO: assemble the correct exception
|
|
694
|
+
raise ValidationException()
|
|
695
|
+
description = alias.to_description()
|
|
696
|
+
return description
|
|
697
|
+
|
|
505
698
|
def describe_state_machine_for_execution(
|
|
506
699
|
self,
|
|
507
700
|
context: RequestContext,
|
|
@@ -585,9 +778,14 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
585
778
|
**kwargs,
|
|
586
779
|
) -> StartExecutionOutput:
|
|
587
780
|
self._validate_state_machine_arn(state_machine_arn)
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
781
|
+
|
|
782
|
+
store = self.get_store(context=context)
|
|
783
|
+
|
|
784
|
+
alias: Optional[Alias] = store.aliases.get(state_machine_arn)
|
|
785
|
+
alias_sample_state_machine_version_arn = alias.sample() if alias is not None else None
|
|
786
|
+
unsafe_state_machine: Optional[StateMachineInstance] = store.state_machines.get(
|
|
787
|
+
alias_sample_state_machine_version_arn or state_machine_arn
|
|
788
|
+
)
|
|
591
789
|
if not unsafe_state_machine:
|
|
592
790
|
self._raise_state_machine_does_not_exist(state_machine_arn)
|
|
593
791
|
|
|
@@ -614,7 +812,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
614
812
|
# Exhaustive check on STANDARD and EXPRESS type, validated on creation.
|
|
615
813
|
exec_arn = stepfunctions_express_execution_arn(normalised_state_machine_arn, exec_name)
|
|
616
814
|
|
|
617
|
-
if execution :=
|
|
815
|
+
if execution := store.executions.get(exec_arn):
|
|
618
816
|
# Return already running execution if name and input match
|
|
619
817
|
existing_execution = self._idempotent_start_execution(
|
|
620
818
|
execution=execution,
|
|
@@ -642,6 +840,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
642
840
|
account_id=context.account_id,
|
|
643
841
|
region_name=context.region,
|
|
644
842
|
state_machine=state_machine_clone,
|
|
843
|
+
state_machine_alias_arn=alias.state_machine_alias_arn if alias is not None else None,
|
|
645
844
|
start_date=datetime.datetime.now(tz=datetime.timezone.utc),
|
|
646
845
|
cloud_watch_logging_session=cloud_watch_logging_session,
|
|
647
846
|
input_data=input_data,
|
|
@@ -649,7 +848,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
649
848
|
activity_store=self.get_store(context).activities,
|
|
650
849
|
)
|
|
651
850
|
|
|
652
|
-
|
|
851
|
+
store.executions[exec_arn] = execution
|
|
653
852
|
|
|
654
853
|
execution.start()
|
|
655
854
|
return execution.to_start_output()
|
|
@@ -741,9 +940,10 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
741
940
|
|
|
742
941
|
@staticmethod
|
|
743
942
|
def _list_execution_filter(
|
|
744
|
-
ex: Execution, state_machine_arn: str
|
|
943
|
+
ex: Execution, state_machine_arn: str, status_filter: Optional[str]
|
|
745
944
|
) -> bool:
|
|
746
|
-
|
|
945
|
+
state_machine_reference_arn_set = {ex.state_machine_arn, ex.state_machine_version_arn}
|
|
946
|
+
if state_machine_arn not in state_machine_reference_arn_set:
|
|
747
947
|
return False
|
|
748
948
|
|
|
749
949
|
if not status_filter:
|
|
@@ -849,6 +1049,28 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
849
1049
|
|
|
850
1050
|
return ListStateMachinesOutput(stateMachines=page, nextToken=token_for_next_page)
|
|
851
1051
|
|
|
1052
|
+
def list_state_machine_aliases(
|
|
1053
|
+
self,
|
|
1054
|
+
context: RequestContext,
|
|
1055
|
+
state_machine_arn: Arn,
|
|
1056
|
+
next_token: PageToken = None,
|
|
1057
|
+
max_results: PageSize = None,
|
|
1058
|
+
**kwargs,
|
|
1059
|
+
) -> ListStateMachineAliasesOutput:
|
|
1060
|
+
# TODO: add pagination support.
|
|
1061
|
+
self._validate_state_machine_arn(state_machine_arn)
|
|
1062
|
+
state_machines = self.get_store(context).state_machines
|
|
1063
|
+
state_machine_revision = state_machines.get(state_machine_arn)
|
|
1064
|
+
if not isinstance(state_machine_revision, StateMachineRevision):
|
|
1065
|
+
raise InvalidArn(f"Invalid arn: {state_machine_arn}")
|
|
1066
|
+
|
|
1067
|
+
state_machine_aliases: StateMachineAliasList = list()
|
|
1068
|
+
for alias in state_machine_revision.aliases:
|
|
1069
|
+
state_machine_aliases.append(alias.to_item())
|
|
1070
|
+
state_machine_aliases.sort(key=lambda item: item["creationDate"])
|
|
1071
|
+
|
|
1072
|
+
return ListStateMachineAliasesOutput(stateMachineAliases=state_machine_aliases)
|
|
1073
|
+
|
|
852
1074
|
def list_state_machine_versions(
|
|
853
1075
|
self,
|
|
854
1076
|
context: RequestContext,
|
|
@@ -927,18 +1149,54 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
927
1149
|
state_machines.pop(version_arn, None)
|
|
928
1150
|
return DeleteStateMachineOutput()
|
|
929
1151
|
|
|
1152
|
+
def delete_state_machine_alias(
|
|
1153
|
+
self, context: RequestContext, state_machine_alias_arn: Arn, **kwargs
|
|
1154
|
+
) -> DeleteStateMachineAliasOutput:
|
|
1155
|
+
self._validate_state_machine_alias_arn(state_machine_alias_arn=state_machine_alias_arn)
|
|
1156
|
+
store = self.get_store(context=context)
|
|
1157
|
+
aliases = store.aliases
|
|
1158
|
+
if (alias := aliases.pop(state_machine_alias_arn, None)) is not None:
|
|
1159
|
+
state_machines = store.state_machines
|
|
1160
|
+
for routing_configuration in alias.get_routing_configuration_list():
|
|
1161
|
+
state_machine_version_arn = routing_configuration["stateMachineVersionArn"]
|
|
1162
|
+
if (
|
|
1163
|
+
state_machine_version := state_machines.get(state_machine_version_arn)
|
|
1164
|
+
) is None or not isinstance(state_machine_version, StateMachineVersion):
|
|
1165
|
+
continue
|
|
1166
|
+
if (
|
|
1167
|
+
state_machine_revision := state_machines.get(state_machine_version.source_arn)
|
|
1168
|
+
) is None or not isinstance(state_machine_revision, StateMachineRevision):
|
|
1169
|
+
continue
|
|
1170
|
+
state_machine_revision.aliases.discard(alias)
|
|
1171
|
+
return DeleteStateMachineOutput()
|
|
1172
|
+
|
|
930
1173
|
def delete_state_machine_version(
|
|
931
1174
|
self, context: RequestContext, state_machine_version_arn: LongArn, **kwargs
|
|
932
1175
|
) -> DeleteStateMachineVersionOutput:
|
|
933
1176
|
self._validate_state_machine_arn(state_machine_version_arn)
|
|
934
1177
|
state_machines = self.get_store(context).state_machines
|
|
935
|
-
state_machine_version = state_machines.get(state_machine_version_arn)
|
|
936
|
-
if isinstance(state_machine_version, StateMachineVersion):
|
|
937
|
-
state_machines.pop(state_machine_version.arn)
|
|
938
|
-
state_machine_revision = state_machines.get(state_machine_version.source_arn)
|
|
939
|
-
if isinstance(state_machine_revision, StateMachineRevision):
|
|
940
|
-
state_machine_revision.delete_version(state_machine_version_arn)
|
|
941
1178
|
|
|
1179
|
+
if not (
|
|
1180
|
+
state_machine_version := state_machines.get(state_machine_version_arn)
|
|
1181
|
+
) or not isinstance(state_machine_version, StateMachineVersion):
|
|
1182
|
+
return DeleteStateMachineVersionOutput()
|
|
1183
|
+
|
|
1184
|
+
if (
|
|
1185
|
+
state_machine_revision := state_machines.get(state_machine_version.source_arn)
|
|
1186
|
+
) and isinstance(state_machine_revision, StateMachineRevision):
|
|
1187
|
+
referencing_alias_names: list[str] = list()
|
|
1188
|
+
for alias in state_machine_revision.aliases:
|
|
1189
|
+
if alias.is_router_for(state_machine_version_arn=state_machine_version_arn):
|
|
1190
|
+
referencing_alias_names.append(alias.name)
|
|
1191
|
+
if referencing_alias_names:
|
|
1192
|
+
referencing_alias_names_list_body = ", ".join(referencing_alias_names)
|
|
1193
|
+
raise ConflictException(
|
|
1194
|
+
"Version to be deleted must not be referenced by an alias. "
|
|
1195
|
+
f"Current list of aliases referencing this version: [{referencing_alias_names_list_body}]"
|
|
1196
|
+
)
|
|
1197
|
+
state_machine_revision.delete_version(state_machine_version_arn)
|
|
1198
|
+
|
|
1199
|
+
state_machines.pop(state_machine_version.arn, None)
|
|
942
1200
|
return DeleteStateMachineVersionOutput()
|
|
943
1201
|
|
|
944
1202
|
def stop_execution(
|
|
@@ -1018,6 +1276,31 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
1018
1276
|
update_output["stateMachineVersionArn"] = version_arn
|
|
1019
1277
|
return update_output
|
|
1020
1278
|
|
|
1279
|
+
def update_state_machine_alias(
|
|
1280
|
+
self,
|
|
1281
|
+
context: RequestContext,
|
|
1282
|
+
state_machine_alias_arn: Arn,
|
|
1283
|
+
description: AliasDescription = None,
|
|
1284
|
+
routing_configuration: RoutingConfigurationList = None,
|
|
1285
|
+
**kwargs,
|
|
1286
|
+
) -> UpdateStateMachineAliasOutput:
|
|
1287
|
+
self._validate_state_machine_alias_arn(state_machine_alias_arn=state_machine_alias_arn)
|
|
1288
|
+
if not any([description, routing_configuration]):
|
|
1289
|
+
raise MissingRequiredParameter(
|
|
1290
|
+
"Either the description or the RoutingConfiguration must be specified"
|
|
1291
|
+
)
|
|
1292
|
+
if routing_configuration is not None:
|
|
1293
|
+
self._validate_state_machine_alias_routing_configuration(
|
|
1294
|
+
context=context, routing_configuration_list=routing_configuration
|
|
1295
|
+
)
|
|
1296
|
+
store = self.get_store(context=context)
|
|
1297
|
+
alias = store.aliases.get(state_machine_alias_arn)
|
|
1298
|
+
if alias is None:
|
|
1299
|
+
raise ResourceNotFound("Request references a resource that does not exist.")
|
|
1300
|
+
|
|
1301
|
+
alias.update(description=description, routing_configuration_list=routing_configuration)
|
|
1302
|
+
return UpdateStateMachineAliasOutput(updateDate=alias.update_date)
|
|
1303
|
+
|
|
1021
1304
|
def publish_state_machine_version(
|
|
1022
1305
|
self,
|
|
1023
1306
|
context: RequestContext,
|
|
@@ -266,6 +266,31 @@ def create_state_machine():
|
|
|
266
266
|
LOG.debug("Unable to delete state machine '%s' during cleanup: %s", arn, ex)
|
|
267
267
|
|
|
268
268
|
|
|
269
|
+
@pytest.fixture
|
|
270
|
+
def create_state_machine_alias():
|
|
271
|
+
state_machine_alias_arn_and_client = list()
|
|
272
|
+
|
|
273
|
+
def _create_state_machine_alias(target_aws_client, **kwargs):
|
|
274
|
+
step_functions_client = target_aws_client.stepfunctions
|
|
275
|
+
create_state_machine_response = step_functions_client.create_state_machine_alias(**kwargs)
|
|
276
|
+
state_machine_alias_arn_and_client.append(
|
|
277
|
+
(create_state_machine_response["stateMachineAliasArn"], step_functions_client)
|
|
278
|
+
)
|
|
279
|
+
return create_state_machine_response
|
|
280
|
+
|
|
281
|
+
yield _create_state_machine_alias
|
|
282
|
+
|
|
283
|
+
for state_machine_alias_arn, sfn_client in state_machine_alias_arn_and_client:
|
|
284
|
+
try:
|
|
285
|
+
sfn_client.delete_state_machine_alias(stateMachineAliasArn=state_machine_alias_arn)
|
|
286
|
+
except Exception as ex:
|
|
287
|
+
LOG.debug(
|
|
288
|
+
"Unable to delete the state machine alias '%s' during cleanup due '%s'",
|
|
289
|
+
state_machine_alias_arn,
|
|
290
|
+
ex,
|
|
291
|
+
)
|
|
292
|
+
|
|
293
|
+
|
|
269
294
|
@pytest.fixture
|
|
270
295
|
def create_activity(aws_client):
|
|
271
296
|
activities_arns: Final[list[str]] = list()
|
|
@@ -11,6 +11,7 @@ from localstack_snapshot.snapshots.transformer import (
|
|
|
11
11
|
)
|
|
12
12
|
|
|
13
13
|
from localstack.aws.api.stepfunctions import (
|
|
14
|
+
Arn,
|
|
14
15
|
CloudWatchLogsLogGroup,
|
|
15
16
|
CreateStateMachineOutput,
|
|
16
17
|
Definition,
|
|
@@ -52,6 +53,51 @@ def await_no_state_machines_listed(stepfunctions_client):
|
|
|
52
53
|
LOG.warning("Timed out whilst awaiting for listing to be empty.")
|
|
53
54
|
|
|
54
55
|
|
|
56
|
+
def _is_state_machine_alias_listed(
|
|
57
|
+
stepfunctions_client, state_machine_arn: Arn, state_machine_alias_arn: Arn
|
|
58
|
+
):
|
|
59
|
+
list_state_machine_aliases_list = stepfunctions_client.list_state_machine_aliases(
|
|
60
|
+
stateMachineArn=state_machine_arn
|
|
61
|
+
)
|
|
62
|
+
state_machine_aliases = list_state_machine_aliases_list["stateMachineAliases"]
|
|
63
|
+
for state_machine_alias in state_machine_aliases:
|
|
64
|
+
if state_machine_alias["stateMachineAliasArn"] == state_machine_alias_arn:
|
|
65
|
+
return True
|
|
66
|
+
return False
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def await_state_machine_alias_is_created(
|
|
70
|
+
stepfunctions_client, state_machine_arn: Arn, state_machine_alias_arn: Arn
|
|
71
|
+
):
|
|
72
|
+
success = poll_condition(
|
|
73
|
+
condition=lambda: _is_state_machine_alias_listed(
|
|
74
|
+
stepfunctions_client=stepfunctions_client,
|
|
75
|
+
state_machine_arn=state_machine_arn,
|
|
76
|
+
state_machine_alias_arn=state_machine_alias_arn,
|
|
77
|
+
),
|
|
78
|
+
timeout=_DELETION_TIMEOUT_SECS,
|
|
79
|
+
interval=1,
|
|
80
|
+
)
|
|
81
|
+
if not success:
|
|
82
|
+
LOG.warning("Timed out whilst awaiting for listing to be empty.")
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def await_state_machine_alias_is_deleted(
|
|
86
|
+
stepfunctions_client, state_machine_arn: Arn, state_machine_alias_arn: Arn
|
|
87
|
+
):
|
|
88
|
+
success = poll_condition(
|
|
89
|
+
condition=lambda: not _is_state_machine_alias_listed(
|
|
90
|
+
stepfunctions_client=stepfunctions_client,
|
|
91
|
+
state_machine_arn=state_machine_arn,
|
|
92
|
+
state_machine_alias_arn=state_machine_alias_arn,
|
|
93
|
+
),
|
|
94
|
+
timeout=_DELETION_TIMEOUT_SECS,
|
|
95
|
+
interval=1,
|
|
96
|
+
)
|
|
97
|
+
if not success:
|
|
98
|
+
LOG.warning("Timed out whilst awaiting for listing to be empty.")
|
|
99
|
+
|
|
100
|
+
|
|
55
101
|
def _is_state_machine_listed(stepfunctions_client, state_machine_arn: str) -> bool:
|
|
56
102
|
lst_resp = stepfunctions_client.list_state_machines()
|
|
57
103
|
state_machines = lst_resp["stateMachines"]
|
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.2.1.
|
|
21
|
-
__version_tuple__ = version_tuple = (4, 2, 1, '
|
|
20
|
+
__version__ = version = '4.2.1.dev32'
|
|
21
|
+
__version_tuple__ = version_tuple = (4, 2, 1, 'dev32')
|
|
@@ -3,7 +3,7 @@ localstack/constants.py,sha256=bBh6djh4x37MrS8az8LizX_APMZ56XdtJHCnZdOnmeg,6867
|
|
|
3
3
|
localstack/deprecations.py,sha256=t3zeaZaHhKYM8snP1wRZhpvAy6MbB12Vqv5hK78bwJ0,15162
|
|
4
4
|
localstack/openapi.yaml,sha256=B803NmpwsxG8PHpHrdZYBrUYjnrRh7B_JX0XuNynuFs,30237
|
|
5
5
|
localstack/plugins.py,sha256=BIJC9dlo0WbP7lLKkCiGtd_2q5oeqiHZohvoRTcejXM,2457
|
|
6
|
-
localstack/version.py,sha256=
|
|
6
|
+
localstack/version.py,sha256=JRHPMbyiA088IDEhD4sLuChInljVA_mJbhllSeP2iP0,526
|
|
7
7
|
localstack/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
8
|
localstack/aws/accounts.py,sha256=102zpGowOxo0S6UGMpfjw14QW7WCLVAGsnFK5xFMLoo,3043
|
|
9
9
|
localstack/aws/app.py,sha256=n9bJCfJRuMz_gLGAH430c3bIQXgUXeWO5NPfcdL2MV8,5145
|
|
@@ -773,7 +773,7 @@ localstack/services/ssm/resource_providers/aws_ssm_patchbaseline_plugin.py,sha25
|
|
|
773
773
|
localstack/services/stepfunctions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
774
774
|
localstack/services/stepfunctions/packages.py,sha256=RZblddr9VARCXqtCeFn_Z6FmyLerWP1-REkJ-spi1Ko,1705
|
|
775
775
|
localstack/services/stepfunctions/plugins.py,sha256=oY-qlTgrZHUalqoeIV4v9mkpC5cpMRUN_PX4YMPFMMI,324
|
|
776
|
-
localstack/services/stepfunctions/provider.py,sha256=
|
|
776
|
+
localstack/services/stepfunctions/provider.py,sha256=aFF2qiPfs2XPJ9kpadXnzA6CFtO4gtY6kPEe8iVUHqI,68265
|
|
777
777
|
localstack/services/stepfunctions/quotas.py,sha256=FprfsAD-_IziguWQnR-b3VA7QYhFdQzItuMLOwl9_FU,484
|
|
778
778
|
localstack/services/stepfunctions/stepfunctions_utils.py,sha256=rjKEMskaei3kjYXyIudJ6S3nWdctylendnWxwByAHIw,2351
|
|
779
779
|
localstack/services/stepfunctions/usage.py,sha256=7qhSca9456MNv76tuH-YYjrjlcvHk9y83gdhMPzs0mk,800
|
|
@@ -1103,11 +1103,12 @@ localstack/services/stepfunctions/asl/utils/encoding.py,sha256=51Or_Y09NKZ_BKDxY
|
|
|
1103
1103
|
localstack/services/stepfunctions/asl/utils/json_path.py,sha256=gUlsKZUati_XLoXnm6tdOQ2ym_UBjLDHWhLlkfi9xE4,1667
|
|
1104
1104
|
localstack/services/stepfunctions/backend/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1105
1105
|
localstack/services/stepfunctions/backend/activity.py,sha256=O0mPxXtSSg04-enVIL7e62qB4PYwiidoy0NymHOc9Dk,1371
|
|
1106
|
-
localstack/services/stepfunctions/backend/
|
|
1106
|
+
localstack/services/stepfunctions/backend/alias.py,sha256=_L_jFYQCW9-uRq0qiQ_KHcib9cgX0JYA22-brFAkaf4,4347
|
|
1107
|
+
localstack/services/stepfunctions/backend/execution.py,sha256=syWOUUKdM2F4wrsR8YHpZwM1TfulB06pi8xLaoPNdx4,16576
|
|
1107
1108
|
localstack/services/stepfunctions/backend/execution_worker.py,sha256=WEC7QzsS87zMestESVg5LdXJYHrqV9hqcef_RAkGW74,4910
|
|
1108
1109
|
localstack/services/stepfunctions/backend/execution_worker_comm.py,sha256=61yq2i_KAPFZj-f6kd5TETR0VT2xkOLmaOUkwxnuIvw,387
|
|
1109
|
-
localstack/services/stepfunctions/backend/state_machine.py,sha256=
|
|
1110
|
-
localstack/services/stepfunctions/backend/store.py,sha256=
|
|
1110
|
+
localstack/services/stepfunctions/backend/state_machine.py,sha256=14KdKg6ugJoVrrbH5X47uUh3tODtWdWc5_MWX5Qc_vs,9581
|
|
1111
|
+
localstack/services/stepfunctions/backend/store.py,sha256=eslh4iDAyXzBqZ0cN40GVQKdAzh1I0Sp-Jf8K2upk6o,1127
|
|
1111
1112
|
localstack/services/stepfunctions/backend/test_state/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1112
1113
|
localstack/services/stepfunctions/backend/test_state/execution.py,sha256=LPhZZqtWDbzucmeBqv4CrSF4rnERBnbtG4zZWhtCkxs,5359
|
|
1113
1114
|
localstack/services/stepfunctions/backend/test_state/execution_worker.py,sha256=aVUEriNB9GwU4nG5VE2PsSBbxQfMFq_4Xu4ZfkvaT0Y,2222
|
|
@@ -1159,8 +1160,8 @@ localstack/testing/pytest/path_filter.py,sha256=U1V5qy23H7yZ6Tznr-MdveeH7TvCM_u4
|
|
|
1159
1160
|
localstack/testing/pytest/util.py,sha256=TQAAb_Cj5gTSX0VkenAbSabvyCkl7THxEj70PrT_H7Y,941
|
|
1160
1161
|
localstack/testing/pytest/validation_tracking.py,sha256=f8AjyKZl_f9cfr0KI0op-QubKqYze1PrvsJfY-AvofI,5000
|
|
1161
1162
|
localstack/testing/pytest/stepfunctions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1162
|
-
localstack/testing/pytest/stepfunctions/fixtures.py,sha256=
|
|
1163
|
-
localstack/testing/pytest/stepfunctions/utils.py,sha256=
|
|
1163
|
+
localstack/testing/pytest/stepfunctions/fixtures.py,sha256=Q_MM9WRjlp_hOvB3Xlum1qZ0crCcq-7_P6nNjbTg8I0,31951
|
|
1164
|
+
localstack/testing/pytest/stepfunctions/utils.py,sha256=xr7lccNtvgeJrn7K7seqAHNZpLiATcEpfslpAUGol-U,27362
|
|
1164
1165
|
localstack/testing/scenario/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1165
1166
|
localstack/testing/scenario/cdk_lambda_helper.py,sha256=FdFDOTykrtqfP_FRJftijkUjwMbIY-DL9ovAtQwPBb4,8609
|
|
1166
1167
|
localstack/testing/scenario/provisioning.py,sha256=yo8E-fyspL6gG_46yZhmNce9nryf1oSZ4CiXteJMY14,18527
|
|
@@ -1258,13 +1259,13 @@ localstack/utils/server/tcp_proxy.py,sha256=rR6d5jR0ozDvIlpHiqW0cfyY9a2fRGdOzyA8
|
|
|
1258
1259
|
localstack/utils/xray/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1259
1260
|
localstack/utils/xray/trace_header.py,sha256=ahXk9eonq7LpeENwlqUEPj3jDOCiVRixhntQuxNor-Q,6209
|
|
1260
1261
|
localstack/utils/xray/traceid.py,sha256=SQSsMV2rhbTNK6ceIoozZYuGU7Fg687EXcgqxoDl1Fw,1106
|
|
1261
|
-
localstack_core-4.2.1.
|
|
1262
|
-
localstack_core-4.2.1.
|
|
1263
|
-
localstack_core-4.2.1.
|
|
1264
|
-
localstack_core-4.2.1.
|
|
1265
|
-
localstack_core-4.2.1.
|
|
1266
|
-
localstack_core-4.2.1.
|
|
1267
|
-
localstack_core-4.2.1.
|
|
1268
|
-
localstack_core-4.2.1.
|
|
1269
|
-
localstack_core-4.2.1.
|
|
1270
|
-
localstack_core-4.2.1.
|
|
1262
|
+
localstack_core-4.2.1.dev32.data/scripts/localstack,sha256=WyL11vp5CkuP79iIR-L8XT7Cj8nvmxX7XRAgxhbmXNE,529
|
|
1263
|
+
localstack_core-4.2.1.dev32.data/scripts/localstack-supervisor,sha256=nm1Il2d6ASyOB6Vo4CRHd90w7TK9FdRl9VPp0NN6hUk,6378
|
|
1264
|
+
localstack_core-4.2.1.dev32.data/scripts/localstack.bat,sha256=tlzZTXtveHkMX_s_fa7VDfvdNdS8iVpEz2ER3uk9B_c,29
|
|
1265
|
+
localstack_core-4.2.1.dev32.dist-info/LICENSE.txt,sha256=3PC-9Z69UsNARuQ980gNR_JsLx8uvMjdG6C7cc4LBYs,606
|
|
1266
|
+
localstack_core-4.2.1.dev32.dist-info/METADATA,sha256=s_g_eV5JKjqZq6q0-ulyc-Ocg_uytB1g-4snSZMJVSA,5481
|
|
1267
|
+
localstack_core-4.2.1.dev32.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
|
|
1268
|
+
localstack_core-4.2.1.dev32.dist-info/entry_points.txt,sha256=JSxo5YPv4XEemz1lJfLl6xIDDPhN9cSwEDywSfPTrTc,20489
|
|
1269
|
+
localstack_core-4.2.1.dev32.dist-info/plux.json,sha256=E3OGcOUOBPqzgQGTIOh643h8fuVOoaJckyxGOnarrM0,20710
|
|
1270
|
+
localstack_core-4.2.1.dev32.dist-info/top_level.txt,sha256=3sqmK2lGac8nCy8nwsbS5SpIY_izmtWtgaTFKHYVHbI,11
|
|
1271
|
+
localstack_core-4.2.1.dev32.dist-info/RECORD,,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"localstack.cloudformation.resource_providers": ["AWS::EC2::Route=localstack.services.ec2.resource_providers.aws_ec2_route_plugin:EC2RouteProviderPlugin", "AWS::CloudFormation::WaitCondition=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitcondition_plugin:CloudFormationWaitConditionProviderPlugin", "AWS::SSM::MaintenanceWindowTask=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtask_plugin:SSMMaintenanceWindowTaskProviderPlugin", "AWS::EC2::RouteTable=localstack.services.ec2.resource_providers.aws_ec2_routetable_plugin:EC2RouteTableProviderPlugin", "AWS::SSM::PatchBaseline=localstack.services.ssm.resource_providers.aws_ssm_patchbaseline_plugin:SSMPatchBaselineProviderPlugin", "AWS::EC2::KeyPair=localstack.services.ec2.resource_providers.aws_ec2_keypair_plugin:EC2KeyPairProviderPlugin", "AWS::Lambda::Version=localstack.services.lambda_.resource_providers.aws_lambda_version_plugin:LambdaVersionProviderPlugin", "AWS::CloudFormation::Stack=localstack.services.cloudformation.resource_providers.aws_cloudformation_stack_plugin:CloudFormationStackProviderPlugin", "AWS::DynamoDB::Table=localstack.services.dynamodb.resource_providers.aws_dynamodb_table_plugin:DynamoDBTableProviderPlugin", "AWS::Logs::LogGroup=localstack.services.logs.resource_providers.aws_logs_loggroup_plugin:LogsLogGroupProviderPlugin", "AWS::ApiGateway::Resource=localstack.services.apigateway.resource_providers.aws_apigateway_resource_plugin:ApiGatewayResourceProviderPlugin", "AWS::S3::Bucket=localstack.services.s3.resource_providers.aws_s3_bucket_plugin:S3BucketProviderPlugin", "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::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::Lambda::EventInvokeConfig=localstack.services.lambda_.resource_providers.aws_lambda_eventinvokeconfig_plugin:LambdaEventInvokeConfigProviderPlugin", "AWS::ApiGateway::UsagePlanKey=localstack.services.apigateway.resource_providers.aws_apigateway_usageplankey_plugin:ApiGatewayUsagePlanKeyProviderPlugin", "AWS::ApiGateway::ApiKey=localstack.services.apigateway.resource_providers.aws_apigateway_apikey_plugin:ApiGatewayApiKeyProviderPlugin", "AWS::CloudWatch::CompositeAlarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_compositealarm_plugin:CloudWatchCompositeAlarmProviderPlugin", "AWS::EC2::VPC=localstack.services.ec2.resource_providers.aws_ec2_vpc_plugin:EC2VPCProviderPlugin", "AWS::ApiGateway::UsagePlan=localstack.services.apigateway.resource_providers.aws_apigateway_usageplan_plugin:ApiGatewayUsagePlanProviderPlugin", "AWS::Events::ApiDestination=localstack.services.events.resource_providers.aws_events_apidestination_plugin:EventsApiDestinationProviderPlugin", "AWS::Events::Connection=localstack.services.events.resource_providers.aws_events_connection_plugin:EventsConnectionProviderPlugin", "AWS::ApiGateway::RequestValidator=localstack.services.apigateway.resource_providers.aws_apigateway_requestvalidator_plugin:ApiGatewayRequestValidatorProviderPlugin", "AWS::Events::EventBus=localstack.services.events.resource_providers.aws_events_eventbus_plugin:EventsEventBusProviderPlugin", "AWS::EC2::PrefixList=localstack.services.ec2.resource_providers.aws_ec2_prefixlist_plugin:EC2PrefixListProviderPlugin", "AWS::EC2::TransitGateway=localstack.services.ec2.resource_providers.aws_ec2_transitgateway_plugin:EC2TransitGatewayProviderPlugin", "AWS::SQS::QueuePolicy=localstack.services.sqs.resource_providers.aws_sqs_queuepolicy_plugin:SQSQueuePolicyProviderPlugin", "AWS::IAM::Group=localstack.services.iam.resource_providers.aws_iam_group_plugin:IAMGroupProviderPlugin", "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::ApiGateway::DomainName=localstack.services.apigateway.resource_providers.aws_apigateway_domainname_plugin:ApiGatewayDomainNameProviderPlugin", "AWS::Events::EventBusPolicy=localstack.services.events.resource_providers.aws_events_eventbuspolicy_plugin:EventsEventBusPolicyProviderPlugin", "AWS::EC2::Instance=localstack.services.ec2.resource_providers.aws_ec2_instance_plugin:EC2InstanceProviderPlugin", "AWS::KMS::Key=localstack.services.kms.resource_providers.aws_kms_key_plugin:KMSKeyProviderPlugin", "AWS::Logs::LogStream=localstack.services.logs.resource_providers.aws_logs_logstream_plugin:LogsLogStreamProviderPlugin", "AWS::CloudFormation::WaitConditionHandle=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitconditionhandle_plugin:CloudFormationWaitConditionHandleProviderPlugin", "AWS::Lambda::LayerVersion=localstack.services.lambda_.resource_providers.aws_lambda_layerversion_plugin:LambdaLayerVersionProviderPlugin", "AWS::CloudWatch::Alarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_alarm_plugin:CloudWatchAlarmProviderPlugin", "AWS::Scheduler::Schedule=localstack.services.scheduler.resource_providers.aws_scheduler_schedule_plugin:SchedulerScheduleProviderPlugin", "AWS::ApiGateway::Account=localstack.services.apigateway.resource_providers.aws_apigateway_account_plugin:ApiGatewayAccountProviderPlugin", "AWS::EC2::TransitGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_transitgatewayattachment_plugin:EC2TransitGatewayAttachmentProviderPlugin", "AWS::ApiGateway::BasePathMapping=localstack.services.apigateway.resource_providers.aws_apigateway_basepathmapping_plugin:ApiGatewayBasePathMappingProviderPlugin", "AWS::IAM::ManagedPolicy=localstack.services.iam.resource_providers.aws_iam_managedpolicy_plugin:IAMManagedPolicyProviderPlugin", "AWS::IAM::User=localstack.services.iam.resource_providers.aws_iam_user_plugin:IAMUserProviderPlugin", "AWS::IAM::ServiceLinkedRole=localstack.services.iam.resource_providers.aws_iam_servicelinkedrole_plugin:IAMServiceLinkedRoleProviderPlugin", "AWS::SNS::TopicPolicy=localstack.services.sns.resource_providers.aws_sns_topicpolicy_plugin:SNSTopicPolicyProviderPlugin", "AWS::EC2::SubnetRouteTableAssociation=localstack.services.ec2.resource_providers.aws_ec2_subnetroutetableassociation_plugin:EC2SubnetRouteTableAssociationProviderPlugin", "AWS::SQS::Queue=localstack.services.sqs.resource_providers.aws_sqs_queue_plugin:SQSQueueProviderPlugin", "AWS::CloudFormation::Macro=localstack.services.cloudformation.resource_providers.aws_cloudformation_macro_plugin:CloudFormationMacroProviderPlugin", "AWS::SNS::Subscription=localstack.services.sns.resource_providers.aws_sns_subscription_plugin:SNSSubscriptionProviderPlugin", "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::EC2::SecurityGroup=localstack.services.ec2.resource_providers.aws_ec2_securitygroup_plugin:EC2SecurityGroupProviderPlugin", "AWS::IAM::ServerCertificate=localstack.services.iam.resource_providers.aws_iam_servercertificate_plugin:IAMServerCertificateProviderPlugin", "AWS::ApiGateway::Model=localstack.services.apigateway.resource_providers.aws_apigateway_model_plugin:ApiGatewayModelProviderPlugin", "AWS::Lambda::Function=localstack.services.lambda_.resource_providers.aws_lambda_function_plugin:LambdaFunctionProviderPlugin", "AWS::SecretsManager::Secret=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secret_plugin:SecretsManagerSecretProviderPlugin", "AWS::ApiGateway::Stage=localstack.services.apigateway.resource_providers.aws_apigateway_stage_plugin:ApiGatewayStageProviderPlugin", "AWS::SSM::MaintenanceWindowTarget=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtarget_plugin:SSMMaintenanceWindowTargetProviderPlugin", "AWS::ApiGateway::Deployment=localstack.services.apigateway.resource_providers.aws_apigateway_deployment_plugin:ApiGatewayDeploymentProviderPlugin", "AWS::ResourceGroups::Group=localstack.services.resource_groups.resource_providers.aws_resourcegroups_group_plugin:ResourceGroupsGroupProviderPlugin", "AWS::SES::EmailIdentity=localstack.services.ses.resource_providers.aws_ses_emailidentity_plugin:SESEmailIdentityProviderPlugin", "AWS::Lambda::Url=localstack.services.lambda_.resource_providers.aws_lambda_url_plugin:LambdaUrlProviderPlugin", "AWS::Kinesis::StreamConsumer=localstack.services.kinesis.resource_providers.aws_kinesis_streamconsumer_plugin:KinesisStreamConsumerProviderPlugin", "AWS::Lambda::Alias=localstack.services.lambda_.resource_providers.lambda_alias_plugin:LambdaAliasProviderPlugin", "AWS::EC2::DHCPOptions=localstack.services.ec2.resource_providers.aws_ec2_dhcpoptions_plugin:EC2DHCPOptionsProviderPlugin", "AWS::IAM::Policy=localstack.services.iam.resource_providers.aws_iam_policy_plugin:IAMPolicyProviderPlugin", "AWS::IAM::Role=localstack.services.iam.resource_providers.aws_iam_role_plugin:IAMRoleProviderPlugin", "AWS::Route53::HealthCheck=localstack.services.route53.resource_providers.aws_route53_healthcheck_plugin:Route53HealthCheckProviderPlugin", "AWS::EC2::VPCGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_vpcgatewayattachment_plugin:EC2VPCGatewayAttachmentProviderPlugin", "AWS::Scheduler::ScheduleGroup=localstack.services.scheduler.resource_providers.aws_scheduler_schedulegroup_plugin:SchedulerScheduleGroupProviderPlugin", "AWS::SecretsManager::SecretTargetAttachment=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secrettargetattachment_plugin:SecretsManagerSecretTargetAttachmentProviderPlugin", "AWS::ApiGateway::Method=localstack.services.apigateway.resource_providers.aws_apigateway_method_plugin:ApiGatewayMethodProviderPlugin", "AWS::EC2::NatGateway=localstack.services.ec2.resource_providers.aws_ec2_natgateway_plugin:EC2NatGatewayProviderPlugin", "AWS::Lambda::Permission=localstack.services.lambda_.resource_providers.aws_lambda_permission_plugin:LambdaPermissionProviderPlugin", "AWS::Lambda::LayerVersionPermission=localstack.services.lambda_.resource_providers.aws_lambda_layerversionpermission_plugin:LambdaLayerVersionPermissionProviderPlugin", "AWS::S3::BucketPolicy=localstack.services.s3.resource_providers.aws_s3_bucketpolicy_plugin:S3BucketPolicyProviderPlugin", "AWS::KMS::Alias=localstack.services.kms.resource_providers.aws_kms_alias_plugin:KMSAliasProviderPlugin", "AWS::SecretsManager::ResourcePolicy=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_resourcepolicy_plugin:SecretsManagerResourcePolicyProviderPlugin", "AWS::SNS::Topic=localstack.services.sns.resource_providers.aws_sns_topic_plugin:SNSTopicProviderPlugin", "AWS::CertificateManager::Certificate=localstack.services.certificatemanager.resource_providers.aws_certificatemanager_certificate_plugin:CertificateManagerCertificateProviderPlugin", "AWS::Lambda::EventSourceMapping=localstack.services.lambda_.resource_providers.aws_lambda_eventsourcemapping_plugin:LambdaEventSourceMappingProviderPlugin", "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::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::ApiGateway::RestApi=localstack.services.apigateway.resource_providers.aws_apigateway_restapi_plugin:ApiGatewayRestApiProviderPlugin", "AWS::EC2::InternetGateway=localstack.services.ec2.resource_providers.aws_ec2_internetgateway_plugin:EC2InternetGatewayProviderPlugin", "AWS::DynamoDB::GlobalTable=localstack.services.dynamodb.resource_providers.aws_dynamodb_globaltable_plugin:DynamoDBGlobalTableProviderPlugin", "AWS::SSM::MaintenanceWindow=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindow_plugin:SSMMaintenanceWindowProviderPlugin", "AWS::SSM::Parameter=localstack.services.ssm.resource_providers.aws_ssm_parameter_plugin:SSMParameterProviderPlugin", "AWS::EC2::VPCEndpoint=localstack.services.ec2.resource_providers.aws_ec2_vpcendpoint_plugin:EC2VPCEndpointProviderPlugin", "AWS::Logs::SubscriptionFilter=localstack.services.logs.resource_providers.aws_logs_subscriptionfilter_plugin:LogsSubscriptionFilterProviderPlugin", "AWS::EC2::Subnet=localstack.services.ec2.resource_providers.aws_ec2_subnet_plugin:EC2SubnetProviderPlugin", "AWS::Lambda::CodeSigningConfig=localstack.services.lambda_.resource_providers.aws_lambda_codesigningconfig_plugin:LambdaCodeSigningConfigProviderPlugin", "AWS::ECR::Repository=localstack.services.ecr.resource_providers.aws_ecr_repository_plugin:ECRRepositoryProviderPlugin", "AWS::KinesisFirehose::DeliveryStream=localstack.services.kinesisfirehose.resource_providers.aws_kinesisfirehose_deliverystream_plugin:KinesisFirehoseDeliveryStreamProviderPlugin", "AWS::StepFunctions::Activity=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_activity_plugin:StepFunctionsActivityProviderPlugin", "AWS::CDK::Metadata=localstack.services.cdk.resource_providers.cdk_metadata_plugin:LambdaAliasProviderPlugin"], "localstack.hooks.on_infra_shutdown": ["aggregate_and_send=localstack.utils.analytics.usage:aggregate_and_send", "publish_metrics=localstack.utils.analytics.metrics: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", "_run_init_scripts_on_shutdown=localstack.runtime.init:_run_init_scripts_on_shutdown"], "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", "_publish_config_as_analytics_event=localstack.runtime.analytics:_publish_config_as_analytics_event", "_publish_container_info=localstack.runtime.analytics:_publish_container_info", "_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", "setup_dns_configuration_on_host=localstack.dns.plugins:setup_dns_configuration_on_host", "start_dns_server=localstack.dns.plugins:start_dns_server", "apply_aws_runtime_patches=localstack.aws.patches:apply_aws_runtime_patches", "register_custom_endpoints=localstack.services.lambda_.plugins:register_custom_endpoints", "validate_configuration=localstack.services.lambda_.plugins:validate_configuration", "register_cloudformation_deploy_ui=localstack.services.cloudformation.plugins:register_cloudformation_deploy_ui", "apply_runtime_patches=localstack.runtime.patches:apply_runtime_patches", "conditionally_enable_debugger=localstack.dev.debugger.plugins:conditionally_enable_debugger", "register_swagger_endpoints=localstack.http.resources.swagger.plugins:register_swagger_endpoints", "_run_init_scripts_on_start=localstack.runtime.init:_run_init_scripts_on_start"], "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", "ffmpeg/community=localstack.packages.plugins:ffmpeg_package", "java/community=localstack.packages.plugins:java_package", "terraform/community=localstack.packages.plugins:terraform_package", "opensearch/community=localstack.services.opensearch.plugins:opensearch_package", "jpype-jsonata/community=localstack.services.stepfunctions.plugins:jpype_jsonata_package", "dynamodb-local/community=localstack.services.dynamodb.plugins:dynamodb_local_package", "elasticsearch/community=localstack.services.es.plugins:elasticsearch_package"], "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.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", "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.server": ["hypercorn=localstack.runtime.server.plugins:HypercornRuntimeServerPlugin", "twisted=localstack.runtime.server.plugins:TwistedRuntimeServerPlugin"], "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.packages": ["dynamodb-local/community=localstack.services.dynamodb.plugins:dynamodb_local_package", "vosk/community=localstack.services.transcribe.plugins:vosk_package", "jpype-jsonata/community=localstack.services.stepfunctions.plugins:jpype_jsonata_package", "lambda-java-libs/community=localstack.services.lambda_.plugins:lambda_java_libs", "lambda-runtime/community=localstack.services.lambda_.plugins:lambda_runtime_package", "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", "kinesis-mock/community=localstack.services.kinesis.plugins:kinesismock_package"], "localstack.cloudformation.resource_providers": ["AWS::EC2::SecurityGroup=localstack.services.ec2.resource_providers.aws_ec2_securitygroup_plugin:EC2SecurityGroupProviderPlugin", "AWS::ApiGateway::RestApi=localstack.services.apigateway.resource_providers.aws_apigateway_restapi_plugin:ApiGatewayRestApiProviderPlugin", "AWS::IAM::ManagedPolicy=localstack.services.iam.resource_providers.aws_iam_managedpolicy_plugin:IAMManagedPolicyProviderPlugin", "AWS::EC2::InternetGateway=localstack.services.ec2.resource_providers.aws_ec2_internetgateway_plugin:EC2InternetGatewayProviderPlugin", "AWS::ApiGateway::Deployment=localstack.services.apigateway.resource_providers.aws_apigateway_deployment_plugin:ApiGatewayDeploymentProviderPlugin", "AWS::CloudFormation::WaitConditionHandle=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitconditionhandle_plugin:CloudFormationWaitConditionHandleProviderPlugin", "AWS::OpenSearchService::Domain=localstack.services.opensearch.resource_providers.aws_opensearchservice_domain_plugin:OpenSearchServiceDomainProviderPlugin", "AWS::Lambda::Version=localstack.services.lambda_.resource_providers.aws_lambda_version_plugin:LambdaVersionProviderPlugin", "AWS::EC2::Route=localstack.services.ec2.resource_providers.aws_ec2_route_plugin:EC2RouteProviderPlugin", "AWS::EC2::TransitGateway=localstack.services.ec2.resource_providers.aws_ec2_transitgateway_plugin:EC2TransitGatewayProviderPlugin", "AWS::SNS::Subscription=localstack.services.sns.resource_providers.aws_sns_subscription_plugin:SNSSubscriptionProviderPlugin", "AWS::EC2::NetworkAcl=localstack.services.ec2.resource_providers.aws_ec2_networkacl_plugin:EC2NetworkAclProviderPlugin", "AWS::SQS::Queue=localstack.services.sqs.resource_providers.aws_sqs_queue_plugin:SQSQueueProviderPlugin", "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::Logs::LogStream=localstack.services.logs.resource_providers.aws_logs_logstream_plugin:LogsLogStreamProviderPlugin", "AWS::Lambda::LayerVersion=localstack.services.lambda_.resource_providers.aws_lambda_layerversion_plugin:LambdaLayerVersionProviderPlugin", "AWS::ApiGateway::Method=localstack.services.apigateway.resource_providers.aws_apigateway_method_plugin:ApiGatewayMethodProviderPlugin", "AWS::ApiGateway::DomainName=localstack.services.apigateway.resource_providers.aws_apigateway_domainname_plugin:ApiGatewayDomainNameProviderPlugin", "AWS::EC2::SubnetRouteTableAssociation=localstack.services.ec2.resource_providers.aws_ec2_subnetroutetableassociation_plugin:EC2SubnetRouteTableAssociationProviderPlugin", "AWS::SSM::MaintenanceWindow=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindow_plugin:SSMMaintenanceWindowProviderPlugin", "AWS::SSM::MaintenanceWindowTask=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtask_plugin:SSMMaintenanceWindowTaskProviderPlugin", "AWS::ApiGateway::BasePathMapping=localstack.services.apigateway.resource_providers.aws_apigateway_basepathmapping_plugin:ApiGatewayBasePathMappingProviderPlugin", "AWS::Lambda::LayerVersionPermission=localstack.services.lambda_.resource_providers.aws_lambda_layerversionpermission_plugin:LambdaLayerVersionPermissionProviderPlugin", "AWS::Events::Connection=localstack.services.events.resource_providers.aws_events_connection_plugin:EventsConnectionProviderPlugin", "AWS::SSM::Parameter=localstack.services.ssm.resource_providers.aws_ssm_parameter_plugin:SSMParameterProviderPlugin", "AWS::DynamoDB::GlobalTable=localstack.services.dynamodb.resource_providers.aws_dynamodb_globaltable_plugin:DynamoDBGlobalTableProviderPlugin", "AWS::CloudWatch::Alarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_alarm_plugin:CloudWatchAlarmProviderPlugin", "AWS::IAM::AccessKey=localstack.services.iam.resource_providers.aws_iam_accesskey_plugin:IAMAccessKeyProviderPlugin", "AWS::EC2::Subnet=localstack.services.ec2.resource_providers.aws_ec2_subnet_plugin:EC2SubnetProviderPlugin", "AWS::ApiGateway::UsagePlan=localstack.services.apigateway.resource_providers.aws_apigateway_usageplan_plugin:ApiGatewayUsagePlanProviderPlugin", "AWS::ApiGateway::Model=localstack.services.apigateway.resource_providers.aws_apigateway_model_plugin:ApiGatewayModelProviderPlugin", "AWS::Lambda::Function=localstack.services.lambda_.resource_providers.aws_lambda_function_plugin:LambdaFunctionProviderPlugin", "AWS::CloudFormation::Stack=localstack.services.cloudformation.resource_providers.aws_cloudformation_stack_plugin:CloudFormationStackProviderPlugin", "AWS::SQS::QueuePolicy=localstack.services.sqs.resource_providers.aws_sqs_queuepolicy_plugin:SQSQueuePolicyProviderPlugin", "AWS::Kinesis::StreamConsumer=localstack.services.kinesis.resource_providers.aws_kinesis_streamconsumer_plugin:KinesisStreamConsumerProviderPlugin", "AWS::Route53::RecordSet=localstack.services.route53.resource_providers.aws_route53_recordset_plugin:Route53RecordSetProviderPlugin", "AWS::IAM::InstanceProfile=localstack.services.iam.resource_providers.aws_iam_instanceprofile_plugin:IAMInstanceProfileProviderPlugin", "AWS::Elasticsearch::Domain=localstack.services.opensearch.resource_providers.aws_elasticsearch_domain_plugin:ElasticsearchDomainProviderPlugin", "AWS::Events::EventBus=localstack.services.events.resource_providers.aws_events_eventbus_plugin:EventsEventBusProviderPlugin", "AWS::CloudWatch::CompositeAlarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_compositealarm_plugin:CloudWatchCompositeAlarmProviderPlugin", "AWS::StepFunctions::StateMachine=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_statemachine_plugin:StepFunctionsStateMachineProviderPlugin", "AWS::CDK::Metadata=localstack.services.cdk.resource_providers.cdk_metadata_plugin:LambdaAliasProviderPlugin", "AWS::S3::BucketPolicy=localstack.services.s3.resource_providers.aws_s3_bucketpolicy_plugin:S3BucketPolicyProviderPlugin", "AWS::ApiGateway::Account=localstack.services.apigateway.resource_providers.aws_apigateway_account_plugin:ApiGatewayAccountProviderPlugin", "AWS::Events::Rule=localstack.services.events.resource_providers.aws_events_rule_plugin:EventsRuleProviderPlugin", "AWS::IAM::ServerCertificate=localstack.services.iam.resource_providers.aws_iam_servercertificate_plugin:IAMServerCertificateProviderPlugin", "AWS::Events::EventBusPolicy=localstack.services.events.resource_providers.aws_events_eventbuspolicy_plugin:EventsEventBusPolicyProviderPlugin", "AWS::IAM::Group=localstack.services.iam.resource_providers.aws_iam_group_plugin:IAMGroupProviderPlugin", "AWS::KinesisFirehose::DeliveryStream=localstack.services.kinesisfirehose.resource_providers.aws_kinesisfirehose_deliverystream_plugin:KinesisFirehoseDeliveryStreamProviderPlugin", "AWS::EC2::PrefixList=localstack.services.ec2.resource_providers.aws_ec2_prefixlist_plugin:EC2PrefixListProviderPlugin", "AWS::EC2::RouteTable=localstack.services.ec2.resource_providers.aws_ec2_routetable_plugin:EC2RouteTableProviderPlugin", "AWS::SSM::PatchBaseline=localstack.services.ssm.resource_providers.aws_ssm_patchbaseline_plugin:SSMPatchBaselineProviderPlugin", "AWS::DynamoDB::Table=localstack.services.dynamodb.resource_providers.aws_dynamodb_table_plugin:DynamoDBTableProviderPlugin", "AWS::CloudFormation::Macro=localstack.services.cloudformation.resource_providers.aws_cloudformation_macro_plugin:CloudFormationMacroProviderPlugin", "AWS::Scheduler::ScheduleGroup=localstack.services.scheduler.resource_providers.aws_scheduler_schedulegroup_plugin:SchedulerScheduleGroupProviderPlugin", "AWS::Logs::LogGroup=localstack.services.logs.resource_providers.aws_logs_loggroup_plugin:LogsLogGroupProviderPlugin", "AWS::Events::ApiDestination=localstack.services.events.resource_providers.aws_events_apidestination_plugin:EventsApiDestinationProviderPlugin", "AWS::SecretsManager::RotationSchedule=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_rotationschedule_plugin:SecretsManagerRotationScheduleProviderPlugin", "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::EC2::TransitGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_transitgatewayattachment_plugin:EC2TransitGatewayAttachmentProviderPlugin", "AWS::ApiGateway::ApiKey=localstack.services.apigateway.resource_providers.aws_apigateway_apikey_plugin:ApiGatewayApiKeyProviderPlugin", "AWS::EC2::NatGateway=localstack.services.ec2.resource_providers.aws_ec2_natgateway_plugin:EC2NatGatewayProviderPlugin", "AWS::Kinesis::Stream=localstack.services.kinesis.resource_providers.aws_kinesis_stream_plugin:KinesisStreamProviderPlugin", "AWS::Lambda::CodeSigningConfig=localstack.services.lambda_.resource_providers.aws_lambda_codesigningconfig_plugin:LambdaCodeSigningConfigProviderPlugin", "AWS::EC2::Instance=localstack.services.ec2.resource_providers.aws_ec2_instance_plugin:EC2InstanceProviderPlugin", "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::CertificateManager::Certificate=localstack.services.certificatemanager.resource_providers.aws_certificatemanager_certificate_plugin:CertificateManagerCertificateProviderPlugin", "AWS::Route53::HealthCheck=localstack.services.route53.resource_providers.aws_route53_healthcheck_plugin:Route53HealthCheckProviderPlugin", "AWS::ApiGateway::UsagePlanKey=localstack.services.apigateway.resource_providers.aws_apigateway_usageplankey_plugin:ApiGatewayUsagePlanKeyProviderPlugin", "AWS::EC2::VPC=localstack.services.ec2.resource_providers.aws_ec2_vpc_plugin:EC2VPCProviderPlugin", "AWS::SecretsManager::Secret=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secret_plugin:SecretsManagerSecretProviderPlugin", "AWS::EC2::KeyPair=localstack.services.ec2.resource_providers.aws_ec2_keypair_plugin:EC2KeyPairProviderPlugin", "AWS::StepFunctions::Activity=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_activity_plugin:StepFunctionsActivityProviderPlugin", "AWS::ECR::Repository=localstack.services.ecr.resource_providers.aws_ecr_repository_plugin:ECRRepositoryProviderPlugin", "AWS::SNS::TopicPolicy=localstack.services.sns.resource_providers.aws_sns_topicpolicy_plugin:SNSTopicPolicyProviderPlugin", "AWS::ApiGateway::Resource=localstack.services.apigateway.resource_providers.aws_apigateway_resource_plugin:ApiGatewayResourceProviderPlugin", "AWS::SNS::Topic=localstack.services.sns.resource_providers.aws_sns_topic_plugin:SNSTopicProviderPlugin", "AWS::Lambda::EventSourceMapping=localstack.services.lambda_.resource_providers.aws_lambda_eventsourcemapping_plugin:LambdaEventSourceMappingProviderPlugin", "AWS::Lambda::Permission=localstack.services.lambda_.resource_providers.aws_lambda_permission_plugin:LambdaPermissionProviderPlugin", "AWS::SES::EmailIdentity=localstack.services.ses.resource_providers.aws_ses_emailidentity_plugin:SESEmailIdentityProviderPlugin", "AWS::Scheduler::Schedule=localstack.services.scheduler.resource_providers.aws_scheduler_schedule_plugin:SchedulerScheduleProviderPlugin", "AWS::SecretsManager::SecretTargetAttachment=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secrettargetattachment_plugin:SecretsManagerSecretTargetAttachmentProviderPlugin", "AWS::ApiGateway::Stage=localstack.services.apigateway.resource_providers.aws_apigateway_stage_plugin:ApiGatewayStageProviderPlugin", "AWS::SecretsManager::ResourcePolicy=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_resourcepolicy_plugin:SecretsManagerResourcePolicyProviderPlugin", "AWS::KMS::Alias=localstack.services.kms.resource_providers.aws_kms_alias_plugin:KMSAliasProviderPlugin", "AWS::EC2::DHCPOptions=localstack.services.ec2.resource_providers.aws_ec2_dhcpoptions_plugin:EC2DHCPOptionsProviderPlugin", "AWS::Lambda::EventInvokeConfig=localstack.services.lambda_.resource_providers.aws_lambda_eventinvokeconfig_plugin:LambdaEventInvokeConfigProviderPlugin", "AWS::Redshift::Cluster=localstack.services.redshift.resource_providers.aws_redshift_cluster_plugin:RedshiftClusterProviderPlugin", "AWS::ResourceGroups::Group=localstack.services.resource_groups.resource_providers.aws_resourcegroups_group_plugin:ResourceGroupsGroupProviderPlugin", "AWS::EC2::VPCGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_vpcgatewayattachment_plugin:EC2VPCGatewayAttachmentProviderPlugin", "AWS::IAM::Role=localstack.services.iam.resource_providers.aws_iam_role_plugin:IAMRoleProviderPlugin", "AWS::IAM::User=localstack.services.iam.resource_providers.aws_iam_user_plugin:IAMUserProviderPlugin", "AWS::KMS::Key=localstack.services.kms.resource_providers.aws_kms_key_plugin:KMSKeyProviderPlugin", "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::S3::Bucket=localstack.services.s3.resource_providers.aws_s3_bucket_plugin:S3BucketProviderPlugin", "AWS::SSM::MaintenanceWindowTarget=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtarget_plugin:SSMMaintenanceWindowTargetProviderPlugin", "AWS::EC2::VPCEndpoint=localstack.services.ec2.resource_providers.aws_ec2_vpcendpoint_plugin:EC2VPCEndpointProviderPlugin"], "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", "cloudwatch:default=localstack.services.providers:cloudwatch", "cloudwatch:v1=localstack.services.providers:cloudwatch_v1", "cloudwatch:v2=localstack.services.providers:cloudwatch_v2", "dynamodb:default=localstack.services.providers:dynamodb", "dynamodb:v2=localstack.services.providers:dynamodb_v2", "dynamodbstreams:default=localstack.services.providers:dynamodbstreams", "dynamodbstreams:v2=localstack.services.providers:dynamodbstreams_v2", "ec2:default=localstack.services.providers:ec2", "es:default=localstack.services.providers:es", "events:default=localstack.services.providers:events", "events:legacy=localstack.services.providers:events_legacy", "events:v1=localstack.services.providers:events_v1", "events:v2=localstack.services.providers:events_v2", "firehose:default=localstack.services.providers:firehose", "iam:default=localstack.services.providers:iam", "kinesis:default=localstack.services.providers:kinesis", "kms:default=localstack.services.providers:kms", "lambda:default=localstack.services.providers:lambda_", "lambda:asf=localstack.services.providers:lambda_asf", "lambda:v2=localstack.services.providers:lambda_v2", "logs:default=localstack.services.providers:logs", "opensearch:default=localstack.services.providers:opensearch", "redshift:default=localstack.services.providers:redshift", "resource-groups:default=localstack.services.providers:resource_groups", "resourcegroupstaggingapi:default=localstack.services.providers:resourcegroupstaggingapi", "route53:default=localstack.services.providers:route53", "route53resolver:default=localstack.services.providers:route53resolver", "s3:default=localstack.services.providers:s3", "s3control:default=localstack.services.providers:s3control", "scheduler:default=localstack.services.providers:scheduler", "secretsmanager:default=localstack.services.providers:secretsmanager", "ses:default=localstack.services.providers:ses", "sns:default=localstack.services.providers:sns", "sqs:default=localstack.services.providers:sqs", "ssm:default=localstack.services.providers:ssm", "stepfunctions:default=localstack.services.providers:stepfunctions", "stepfunctions:v2=localstack.services.providers:stepfunctions_v2", "sts:default=localstack.services.providers:sts", "support:default=localstack.services.providers:support", "swf:default=localstack.services.providers:swf", "transcribe:default=localstack.services.providers:transcribe"], "localstack.hooks.on_infra_shutdown": ["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", "_run_init_scripts_on_shutdown=localstack.runtime.init:_run_init_scripts_on_shutdown", "remove_custom_endpoints=localstack.services.lambda_.plugins:remove_custom_endpoints", "aggregate_and_send=localstack.utils.analytics.usage:aggregate_and_send", "publish_metrics=localstack.utils.analytics.metrics:publish_metrics"], "localstack.hooks.on_infra_start": ["_publish_config_as_analytics_event=localstack.runtime.analytics:_publish_config_as_analytics_event", "_publish_container_info=localstack.runtime.analytics:_publish_container_info", "delete_cached_certificate=localstack.plugins:delete_cached_certificate", "deprecation_warnings=localstack.plugins:deprecation_warnings", "register_cloudformation_deploy_ui=localstack.services.cloudformation.plugins:register_cloudformation_deploy_ui", "register_swagger_endpoints=localstack.http.resources.swagger.plugins:register_swagger_endpoints", "setup_dns_configuration_on_host=localstack.dns.plugins:setup_dns_configuration_on_host", "start_dns_server=localstack.dns.plugins:start_dns_server", "_run_init_scripts_on_start=localstack.runtime.init:_run_init_scripts_on_start", "register_custom_endpoints=localstack.services.lambda_.plugins:register_custom_endpoints", "validate_configuration=localstack.services.lambda_.plugins:validate_configuration", "apply_runtime_patches=localstack.runtime.patches:apply_runtime_patches", "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", "conditionally_enable_debugger=localstack.dev.debugger.plugins:conditionally_enable_debugger"], "localstack.openapi.spec": ["localstack=localstack.plugins:CoreOASPlugin"], "localstack.runtime.server": ["hypercorn=localstack.runtime.server.plugins:HypercornRuntimeServerPlugin", "twisted=localstack.runtime.server.plugins:TwistedRuntimeServerPlugin"], "localstack.init.runner": ["py=localstack.runtime.init:PythonScriptRunner", "sh=localstack.runtime.init:ShellScriptRunner"], "localstack.hooks.on_infra_ready": ["_run_init_scripts_on_ready=localstack.runtime.init:_run_init_scripts_on_ready"], "localstack.hooks.configure_localstack_container": ["_mount_machine_file=localstack.utils.analytics.metadata:_mount_machine_file"], "localstack.hooks.prepare_host": ["prepare_host_machine_id=localstack.utils.analytics.metadata:prepare_host_machine_id"], "localstack.runtime.components": ["aws=localstack.aws.components:AwsComponents"], "localstack.lambda.runtime_executor": ["docker=localstack.services.lambda_.invocation.plugins:DockerRuntimeExecutorPlugin"]}
|
|
File without changes
|
{localstack_core-4.2.1.dev30.data → localstack_core-4.2.1.dev32.data}/scripts/localstack-supervisor
RENAMED
|
File without changes
|
{localstack_core-4.2.1.dev30.data → localstack_core-4.2.1.dev32.data}/scripts/localstack.bat
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{localstack_core-4.2.1.dev30.dist-info → localstack_core-4.2.1.dev32.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{localstack_core-4.2.1.dev30.dist-info → localstack_core-4.2.1.dev32.dist-info}/top_level.txt
RENAMED
|
File without changes
|