localstack-core 4.4.1.dev64__py3-none-any.whl → 4.4.1.dev66__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/apigateway/legacy/provider.py +8 -8
- localstack/services/apigateway/next_gen/provider.py +222 -18
- localstack/services/apigateway/patches.py +24 -0
- localstack/services/cloudformation/engine/v2/change_set_model.py +2 -0
- localstack/services/cloudformation/engine/v2/change_set_model_preproc.py +29 -0
- localstack/services/cloudformation/engine/v2/change_set_model_visitor.py +5 -0
- localstack/version.py +2 -2
- {localstack_core-4.4.1.dev64.dist-info → localstack_core-4.4.1.dev66.dist-info}/METADATA +1 -1
- {localstack_core-4.4.1.dev64.dist-info → localstack_core-4.4.1.dev66.dist-info}/RECORD +17 -17
- localstack_core-4.4.1.dev66.dist-info/plux.json +1 -0
- localstack_core-4.4.1.dev64.dist-info/plux.json +0 -1
- {localstack_core-4.4.1.dev64.data → localstack_core-4.4.1.dev66.data}/scripts/localstack +0 -0
- {localstack_core-4.4.1.dev64.data → localstack_core-4.4.1.dev66.data}/scripts/localstack-supervisor +0 -0
- {localstack_core-4.4.1.dev64.data → localstack_core-4.4.1.dev66.data}/scripts/localstack.bat +0 -0
- {localstack_core-4.4.1.dev64.dist-info → localstack_core-4.4.1.dev66.dist-info}/WHEEL +0 -0
- {localstack_core-4.4.1.dev64.dist-info → localstack_core-4.4.1.dev66.dist-info}/entry_points.txt +0 -0
- {localstack_core-4.4.1.dev64.dist-info → localstack_core-4.4.1.dev66.dist-info}/licenses/LICENSE.txt +0 -0
- {localstack_core-4.4.1.dev64.dist-info → localstack_core-4.4.1.dev66.dist-info}/top_level.txt +0 -0
@@ -360,7 +360,7 @@ class ApigatewayProvider(ApigatewayApi, ServiceLifecycleHook):
|
|
360
360
|
|
361
361
|
fixed_patch_ops.append(patch_op)
|
362
362
|
|
363
|
-
|
363
|
+
patch_api_gateway_entity(rest_api, fixed_patch_ops)
|
364
364
|
|
365
365
|
# fix data types after patches have been applied
|
366
366
|
endpoint_configs = rest_api.endpoint_configuration or {}
|
@@ -684,7 +684,7 @@ class ApigatewayProvider(ApigatewayApi, ServiceLifecycleHook):
|
|
684
684
|
)
|
685
685
|
|
686
686
|
# TODO: test with multiple patch operations which would not be compatible between each other
|
687
|
-
|
687
|
+
patch_api_gateway_entity(moto_resource, patch_operations)
|
688
688
|
|
689
689
|
# after setting it, mutate the store
|
690
690
|
if moto_resource.parent_id != current_parent_id:
|
@@ -914,7 +914,7 @@ class ApigatewayProvider(ApigatewayApi, ServiceLifecycleHook):
|
|
914
914
|
]
|
915
915
|
|
916
916
|
# TODO: test with multiple patch operations which would not be compatible between each other
|
917
|
-
|
917
|
+
patch_api_gateway_entity(moto_method, applicable_patch_operations)
|
918
918
|
|
919
919
|
# if we removed all values of those fields, set them to None so that they're not returned anymore
|
920
920
|
if had_req_params and len(moto_method.request_parameters) == 0:
|
@@ -1074,7 +1074,7 @@ class ApigatewayProvider(ApigatewayApi, ServiceLifecycleHook):
|
|
1074
1074
|
if patch_path == "/tracingEnabled" and (value := patch_operation.get("value")):
|
1075
1075
|
patch_operation["value"] = value and value.lower() == "true" or False
|
1076
1076
|
|
1077
|
-
|
1077
|
+
patch_api_gateway_entity(moto_stage, patch_operations)
|
1078
1078
|
moto_stage.apply_operations(patch_operations)
|
1079
1079
|
|
1080
1080
|
response = moto_stage.to_json()
|
@@ -1464,7 +1464,7 @@ class ApigatewayProvider(ApigatewayApi, ServiceLifecycleHook):
|
|
1464
1464
|
if not result:
|
1465
1465
|
raise NotFoundException(f"Documentation version not found: {documentation_version}")
|
1466
1466
|
|
1467
|
-
|
1467
|
+
patch_api_gateway_entity(result, patch_operations)
|
1468
1468
|
|
1469
1469
|
return result
|
1470
1470
|
|
@@ -2011,7 +2011,7 @@ class ApigatewayProvider(ApigatewayApi, ServiceLifecycleHook):
|
|
2011
2011
|
raise NotFoundException("Invalid Integration identifier specified")
|
2012
2012
|
|
2013
2013
|
integration = method.method_integration
|
2014
|
-
|
2014
|
+
patch_api_gateway_entity(integration, patch_operations)
|
2015
2015
|
|
2016
2016
|
# fix data types
|
2017
2017
|
if integration.timeout_in_millis:
|
@@ -2617,7 +2617,7 @@ class ApigatewayProvider(ApigatewayApi, ServiceLifecycleHook):
|
|
2617
2617
|
f"Invalid null or empty value in {param_type}"
|
2618
2618
|
)
|
2619
2619
|
|
2620
|
-
|
2620
|
+
patch_api_gateway_entity(patched_entity, patch_operations)
|
2621
2621
|
|
2622
2622
|
return patched_entity
|
2623
2623
|
|
@@ -2739,7 +2739,7 @@ def create_custom_context(
|
|
2739
2739
|
return ctx
|
2740
2740
|
|
2741
2741
|
|
2742
|
-
def
|
2742
|
+
def patch_api_gateway_entity(entity: Any, patch_operations: ListOfPatchOperation):
|
2743
2743
|
patch_operations = patch_operations or []
|
2744
2744
|
|
2745
2745
|
if isinstance(entity, dict):
|
@@ -1,5 +1,10 @@
|
|
1
|
+
import copy
|
2
|
+
import datetime
|
3
|
+
import re
|
4
|
+
|
1
5
|
from localstack.aws.api import CommonServiceException, RequestContext, handler
|
2
6
|
from localstack.aws.api.apigateway import (
|
7
|
+
BadRequestException,
|
3
8
|
CacheClusterSize,
|
4
9
|
CreateStageRequest,
|
5
10
|
Deployment,
|
@@ -23,7 +28,11 @@ from localstack.services.apigateway.helpers import (
|
|
23
28
|
get_moto_rest_api,
|
24
29
|
get_rest_api_container,
|
25
30
|
)
|
26
|
-
from localstack.services.apigateway.legacy.provider import
|
31
|
+
from localstack.services.apigateway.legacy.provider import (
|
32
|
+
STAGE_UPDATE_PATHS,
|
33
|
+
ApigatewayProvider,
|
34
|
+
patch_api_gateway_entity,
|
35
|
+
)
|
27
36
|
from localstack.services.apigateway.patches import apply_patches
|
28
37
|
from localstack.services.edge import ROUTER
|
29
38
|
from localstack.services.moto import call_moto
|
@@ -66,13 +75,35 @@ class ApigatewayNextGenProvider(ApigatewayProvider):
|
|
66
75
|
|
67
76
|
@handler("CreateStage", expand=False)
|
68
77
|
def create_stage(self, context: RequestContext, request: CreateStageRequest) -> Stage:
|
69
|
-
|
78
|
+
# TODO: we need to internalize Stages and Deployments in LocalStack, we have a lot of split logic
|
79
|
+
super().create_stage(context, request)
|
80
|
+
rest_api_id = request["restApiId"].lower()
|
81
|
+
stage_name = request["stageName"]
|
82
|
+
moto_api = get_moto_rest_api(context, rest_api_id)
|
83
|
+
stage = moto_api.stages[stage_name]
|
84
|
+
|
85
|
+
if canary_settings := request.get("canarySettings"):
|
86
|
+
if (
|
87
|
+
deployment_id := canary_settings.get("deploymentId")
|
88
|
+
) and deployment_id not in moto_api.deployments:
|
89
|
+
raise BadRequestException("Deployment id does not exist")
|
90
|
+
|
91
|
+
default_settings = {
|
92
|
+
"deploymentId": stage.deployment_id,
|
93
|
+
"percentTraffic": 0.0,
|
94
|
+
"useStageCache": False,
|
95
|
+
}
|
96
|
+
default_settings.update(canary_settings)
|
97
|
+
stage.canary_settings = default_settings
|
98
|
+
else:
|
99
|
+
stage.canary_settings = None
|
100
|
+
|
70
101
|
store = get_apigateway_store(context=context)
|
71
102
|
|
72
|
-
rest_api_id = request["restApiId"].lower()
|
73
103
|
store.active_deployments.setdefault(rest_api_id, {})
|
74
|
-
store.active_deployments[rest_api_id][
|
75
|
-
|
104
|
+
store.active_deployments[rest_api_id][stage_name] = request["deploymentId"]
|
105
|
+
response: Stage = stage.to_json()
|
106
|
+
self._patch_stage_response(response)
|
76
107
|
return response
|
77
108
|
|
78
109
|
@handler("UpdateStage")
|
@@ -84,20 +115,121 @@ class ApigatewayNextGenProvider(ApigatewayProvider):
|
|
84
115
|
patch_operations: ListOfPatchOperation = None,
|
85
116
|
**kwargs,
|
86
117
|
) -> Stage:
|
87
|
-
|
88
|
-
|
89
|
-
|
118
|
+
moto_rest_api = get_moto_rest_api(context, rest_api_id)
|
119
|
+
if not (moto_stage := moto_rest_api.stages.get(stage_name)):
|
120
|
+
raise NotFoundException("Invalid Stage identifier specified")
|
121
|
+
|
122
|
+
# construct list of path regexes for validation
|
123
|
+
path_regexes = [re.sub("{[^}]+}", ".+", path) for path in STAGE_UPDATE_PATHS]
|
90
124
|
|
125
|
+
# copy the patch operations to not mutate them, so that we're logging the correct input
|
126
|
+
patch_operations = copy.deepcopy(patch_operations) or []
|
127
|
+
# we are only passing a subset of operations to Moto as it does not handle properly all of them
|
128
|
+
moto_patch_operations = []
|
129
|
+
moto_stage_copy = copy.deepcopy(moto_stage)
|
91
130
|
for patch_operation in patch_operations:
|
131
|
+
skip_moto_apply = False
|
92
132
|
patch_path = patch_operation["path"]
|
133
|
+
patch_op = patch_operation["op"]
|
134
|
+
|
135
|
+
# special case: handle updates (op=remove) for wildcard method settings
|
136
|
+
patch_path_stripped = patch_path.strip("/")
|
137
|
+
if patch_path_stripped == "*/*" and patch_op == "remove":
|
138
|
+
if not moto_stage.method_settings.pop(patch_path_stripped, None):
|
139
|
+
raise BadRequestException(
|
140
|
+
"Cannot remove method setting */* because there is no method setting for this method "
|
141
|
+
)
|
142
|
+
response = moto_stage.to_json()
|
143
|
+
self._patch_stage_response(response)
|
144
|
+
return response
|
93
145
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
146
|
+
path_valid = patch_path in STAGE_UPDATE_PATHS or any(
|
147
|
+
re.match(regex, patch_path) for regex in path_regexes
|
148
|
+
)
|
149
|
+
if is_canary := patch_path.startswith("/canarySettings"):
|
150
|
+
skip_moto_apply = True
|
151
|
+
path_valid = is_canary_settings_update_patch_valid(op=patch_op, path=patch_path)
|
152
|
+
# it seems our JSON Patch utility does not handle replace properly if the value does not exists before
|
153
|
+
# it seems to maybe be a Stage-only thing, so replacing it here
|
154
|
+
if patch_op == "replace":
|
155
|
+
patch_operation["op"] = "add"
|
156
|
+
|
157
|
+
if patch_op == "copy":
|
158
|
+
copy_from = patch_operation.get("from")
|
159
|
+
if patch_path not in ("/deploymentId", "/variables") or copy_from not in (
|
160
|
+
"/canarySettings/deploymentId",
|
161
|
+
"/canarySettings/stageVariableOverrides",
|
162
|
+
):
|
163
|
+
raise BadRequestException(
|
164
|
+
"Invalid copy operation with path: /canarySettings/stageVariableOverrides and from /variables. Valid copy:path are [/deploymentId, /variables] and valid copy:from are [/canarySettings/deploymentId, /canarySettings/stageVariableOverrides]"
|
99
165
|
)
|
100
166
|
|
167
|
+
if copy_from.startswith("/canarySettings") and not getattr(
|
168
|
+
moto_stage_copy, "canary_settings", None
|
169
|
+
):
|
170
|
+
raise BadRequestException("Promotion not available. Canary does not exist.")
|
171
|
+
|
172
|
+
if patch_path == "/variables":
|
173
|
+
moto_stage_copy.variables.update(
|
174
|
+
moto_stage_copy.canary_settings.get("stageVariableOverrides", {})
|
175
|
+
)
|
176
|
+
elif patch_path == "/deploymentId":
|
177
|
+
moto_stage_copy.deployment_id = moto_stage_copy.canary_settings["deploymentId"]
|
178
|
+
|
179
|
+
# we manually assign `copy` ops, no need to apply them
|
180
|
+
continue
|
181
|
+
|
182
|
+
if not path_valid:
|
183
|
+
valid_paths = f"[{', '.join(STAGE_UPDATE_PATHS)}]"
|
184
|
+
# note: weird formatting in AWS - required for snapshot testing
|
185
|
+
valid_paths = valid_paths.replace(
|
186
|
+
"/{resourcePath}/{httpMethod}/throttling/burstLimit, /{resourcePath}/{httpMethod}/throttling/rateLimit, /{resourcePath}/{httpMethod}/caching/ttlInSeconds",
|
187
|
+
"/{resourcePath}/{httpMethod}/throttling/burstLimit/{resourcePath}/{httpMethod}/throttling/rateLimit/{resourcePath}/{httpMethod}/caching/ttlInSeconds",
|
188
|
+
)
|
189
|
+
valid_paths = valid_paths.replace("/burstLimit, /", "/burstLimit /")
|
190
|
+
valid_paths = valid_paths.replace("/rateLimit, /", "/rateLimit /")
|
191
|
+
raise BadRequestException(
|
192
|
+
f"Invalid method setting path: {patch_operation['path']}. Must be one of: {valid_paths}"
|
193
|
+
)
|
194
|
+
|
195
|
+
# TODO: check if there are other boolean, maybe add a global step in _patch_api_gateway_entity
|
196
|
+
if patch_path == "/tracingEnabled" and (value := patch_operation.get("value")):
|
197
|
+
patch_operation["value"] = value and value.lower() == "true" or False
|
198
|
+
|
199
|
+
elif patch_path in ("/canarySettings/deploymentId", "/deploymentId"):
|
200
|
+
if patch_op != "copy" and not moto_rest_api.deployments.get(
|
201
|
+
patch_operation.get("value")
|
202
|
+
):
|
203
|
+
raise BadRequestException("Deployment id does not exist")
|
204
|
+
|
205
|
+
if not skip_moto_apply:
|
206
|
+
# we need to copy the patch operation because `_patch_api_gateway_entity` is mutating it in place
|
207
|
+
moto_patch_operations.append(dict(patch_operation))
|
208
|
+
|
209
|
+
# we need to apply patch operation individually to be able to validate the logic
|
210
|
+
# TODO: rework the patching logic
|
211
|
+
patch_api_gateway_entity(moto_stage_copy, [patch_operation])
|
212
|
+
if is_canary and (canary_settings := getattr(moto_stage_copy, "canary_settings", None)):
|
213
|
+
default_canary_settings = {
|
214
|
+
"deploymentId": moto_stage_copy.deployment_id,
|
215
|
+
"percentTraffic": 0.0,
|
216
|
+
"useStageCache": False,
|
217
|
+
}
|
218
|
+
default_canary_settings.update(canary_settings)
|
219
|
+
moto_stage_copy.canary_settings = default_canary_settings
|
220
|
+
|
221
|
+
moto_rest_api.stages[stage_name] = moto_stage_copy
|
222
|
+
moto_stage_copy.apply_operations(moto_patch_operations)
|
223
|
+
if moto_stage.deployment_id != moto_stage_copy.deployment_id:
|
224
|
+
store = get_apigateway_store(context=context)
|
225
|
+
store.active_deployments.setdefault(rest_api_id.lower(), {})[stage_name] = (
|
226
|
+
moto_stage_copy.deployment_id
|
227
|
+
)
|
228
|
+
|
229
|
+
moto_stage_copy.last_updated_date = datetime.datetime.now(tz=datetime.UTC)
|
230
|
+
|
231
|
+
response = moto_stage_copy.to_json()
|
232
|
+
self._patch_stage_response(response)
|
101
233
|
return response
|
102
234
|
|
103
235
|
def delete_stage(
|
@@ -121,13 +253,31 @@ class ApigatewayNextGenProvider(ApigatewayProvider):
|
|
121
253
|
tracing_enabled: NullableBoolean = None,
|
122
254
|
**kwargs,
|
123
255
|
) -> Deployment:
|
256
|
+
moto_rest_api = get_moto_rest_api(context, rest_api_id)
|
257
|
+
if canary_settings:
|
258
|
+
# TODO: add validation to the canary settings
|
259
|
+
if not stage_name:
|
260
|
+
error_stage = stage_name if stage_name is not None else "null"
|
261
|
+
raise BadRequestException(
|
262
|
+
f"Invalid deployment content specified.Non null and non empty stageName must be provided for canary deployment. Provided value is {error_stage}"
|
263
|
+
)
|
264
|
+
if stage_name not in moto_rest_api.stages:
|
265
|
+
raise BadRequestException(
|
266
|
+
"Invalid deployment content specified.Stage non-existing must already be created before making a canary release deployment"
|
267
|
+
)
|
268
|
+
|
269
|
+
# FIXME: moto has an issue and is not handling canarySettings, hence overwriting the current stage with the
|
270
|
+
# canary deployment
|
271
|
+
current_stage = None
|
272
|
+
if stage_name:
|
273
|
+
current_stage = copy.deepcopy(moto_rest_api.stages.get(stage_name))
|
274
|
+
|
124
275
|
# TODO: if the REST API does not contain any method, we should raise an exception
|
125
276
|
deployment: Deployment = call_moto(context)
|
126
277
|
# https://docs.aws.amazon.com/apigateway/latest/developerguide/updating-api.html
|
127
278
|
# TODO: the deployment is not accessible until it is linked to a stage
|
128
279
|
# you can combine a stage or later update the deployment with a stage id
|
129
280
|
store = get_apigateway_store(context=context)
|
130
|
-
moto_rest_api = get_moto_rest_api(context, rest_api_id)
|
131
281
|
rest_api_container = get_rest_api_container(context, rest_api_id=rest_api_id)
|
132
282
|
frozen_deployment = freeze_rest_api(
|
133
283
|
account_id=context.account_id,
|
@@ -136,12 +286,39 @@ class ApigatewayNextGenProvider(ApigatewayProvider):
|
|
136
286
|
localstack_rest_api=rest_api_container,
|
137
287
|
)
|
138
288
|
router_api_id = rest_api_id.lower()
|
139
|
-
|
140
|
-
|
141
|
-
)
|
289
|
+
deployment_id = deployment["id"]
|
290
|
+
store.internal_deployments.setdefault(router_api_id, {})[deployment_id] = frozen_deployment
|
142
291
|
|
143
292
|
if stage_name:
|
144
|
-
|
293
|
+
moto_stage = moto_rest_api.stages[stage_name]
|
294
|
+
store.active_deployments.setdefault(router_api_id, {})[stage_name] = deployment_id
|
295
|
+
if canary_settings:
|
296
|
+
moto_stage = current_stage
|
297
|
+
moto_rest_api.stages[stage_name] = current_stage
|
298
|
+
|
299
|
+
default_settings = {
|
300
|
+
"deploymentId": deployment_id,
|
301
|
+
"percentTraffic": 0.0,
|
302
|
+
"useStageCache": False,
|
303
|
+
}
|
304
|
+
default_settings.update(canary_settings)
|
305
|
+
moto_stage.canary_settings = default_settings
|
306
|
+
else:
|
307
|
+
moto_stage.canary_settings = None
|
308
|
+
|
309
|
+
if variables:
|
310
|
+
moto_stage.variables = variables
|
311
|
+
|
312
|
+
moto_stage.description = stage_description or moto_stage.description or None
|
313
|
+
|
314
|
+
if cache_cluster_enabled is not None:
|
315
|
+
moto_stage.cache_cluster_enabled = cache_cluster_enabled
|
316
|
+
|
317
|
+
if cache_cluster_size is not None:
|
318
|
+
moto_stage.cache_cluster_size = cache_cluster_size
|
319
|
+
|
320
|
+
if tracing_enabled is not None:
|
321
|
+
moto_stage.tracing_enabled = tracing_enabled
|
145
322
|
|
146
323
|
return deployment
|
147
324
|
|
@@ -267,6 +444,33 @@ class ApigatewayNextGenProvider(ApigatewayProvider):
|
|
267
444
|
return response
|
268
445
|
|
269
446
|
|
447
|
+
def is_canary_settings_update_patch_valid(op: str, path: str) -> bool:
|
448
|
+
path_regexes = (
|
449
|
+
r"\/canarySettings\/percentTraffic",
|
450
|
+
r"\/canarySettings\/deploymentId",
|
451
|
+
r"\/canarySettings\/stageVariableOverrides\/.+",
|
452
|
+
r"\/canarySettings\/useStageCache",
|
453
|
+
)
|
454
|
+
if path == "/canarySettings" and op == "remove":
|
455
|
+
return True
|
456
|
+
|
457
|
+
matches_path = any(re.match(regex, path) for regex in path_regexes)
|
458
|
+
|
459
|
+
if op not in ("replace", "copy"):
|
460
|
+
if matches_path:
|
461
|
+
raise BadRequestException(f"Invalid {op} operation with path: {path}")
|
462
|
+
|
463
|
+
raise BadRequestException(
|
464
|
+
f"Cannot {op} method setting {path.lstrip('/')} because there is no method setting for this method "
|
465
|
+
)
|
466
|
+
|
467
|
+
# stageVariableOverrides is a bit special as it's nested, it doesn't return the same error message
|
468
|
+
if not matches_path and path != "/canarySettings/stageVariableOverrides":
|
469
|
+
return False
|
470
|
+
|
471
|
+
return True
|
472
|
+
|
473
|
+
|
270
474
|
def _get_gateway_response_or_default(
|
271
475
|
response_type: GatewayResponseType,
|
272
476
|
gateway_responses: dict[GatewayResponseType, GatewayResponse],
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import datetime
|
1
2
|
import json
|
2
3
|
import logging
|
3
4
|
|
@@ -35,6 +36,10 @@ def apply_patches():
|
|
35
36
|
if (cacheClusterSize or cacheClusterEnabled) and not self.cache_cluster_status:
|
36
37
|
self.cache_cluster_status = "AVAILABLE"
|
37
38
|
|
39
|
+
now = datetime.datetime.now(tz=datetime.UTC)
|
40
|
+
self.created_date = now
|
41
|
+
self.last_updated_date = now
|
42
|
+
|
38
43
|
apigateway_models_Stage_init_orig = apigateway_models.Stage.__init__
|
39
44
|
apigateway_models.Stage.__init__ = apigateway_models_Stage_init
|
40
45
|
|
@@ -143,8 +148,27 @@ def apply_patches():
|
|
143
148
|
if "documentationVersion" not in result:
|
144
149
|
result["documentationVersion"] = getattr(self, "documentation_version", None)
|
145
150
|
|
151
|
+
if "canarySettings" not in result:
|
152
|
+
result["canarySettings"] = getattr(self, "canary_settings", None)
|
153
|
+
|
154
|
+
if "createdDate" not in result:
|
155
|
+
created_date = getattr(self, "created_date", None)
|
156
|
+
if created_date:
|
157
|
+
created_date = int(created_date.timestamp())
|
158
|
+
result["createdDate"] = created_date
|
159
|
+
|
160
|
+
if "lastUpdatedDate" not in result:
|
161
|
+
last_updated_date = getattr(self, "last_updated_date", None)
|
162
|
+
if last_updated_date:
|
163
|
+
last_updated_date = int(last_updated_date.timestamp())
|
164
|
+
result["lastUpdatedDate"] = last_updated_date
|
165
|
+
|
146
166
|
return result
|
147
167
|
|
168
|
+
@patch(apigateway_models.Stage._str2bool, pass_target=False)
|
169
|
+
def apigateway_models_stage_str_to_bool(self, v: bool | str) -> bool:
|
170
|
+
return str_to_bool(v)
|
171
|
+
|
148
172
|
# TODO remove this patch when the behavior is implemented in moto
|
149
173
|
@patch(apigateway_models.APIGatewayBackend.create_rest_api)
|
150
174
|
def create_rest_api(fn, self, *args, tags=None, **kwargs):
|
@@ -423,6 +423,7 @@ FnEqualsKey: Final[str] = "Fn::Equals"
|
|
423
423
|
FnFindInMapKey: Final[str] = "Fn::FindInMap"
|
424
424
|
FnSubKey: Final[str] = "Fn::Sub"
|
425
425
|
FnTransform: Final[str] = "Fn::Transform"
|
426
|
+
FnSelect: Final[str] = "Fn::Select"
|
426
427
|
INTRINSIC_FUNCTIONS: Final[set[str]] = {
|
427
428
|
RefKey,
|
428
429
|
FnIfKey,
|
@@ -433,6 +434,7 @@ INTRINSIC_FUNCTIONS: Final[set[str]] = {
|
|
433
434
|
FnFindInMapKey,
|
434
435
|
FnSubKey,
|
435
436
|
FnTransform,
|
437
|
+
FnSelect,
|
436
438
|
}
|
437
439
|
|
438
440
|
|
@@ -646,6 +646,35 @@ class ChangeSetModelPreproc(ChangeSetModelVisitor):
|
|
646
646
|
after = _compute_join(arguments_after)
|
647
647
|
return PreprocEntityDelta(before=before, after=after)
|
648
648
|
|
649
|
+
def visit_node_intrinsic_function_fn_select(
|
650
|
+
self, node_intrinsic_function: NodeIntrinsicFunction
|
651
|
+
):
|
652
|
+
# TODO: add further support for schema validation
|
653
|
+
arguments_delta = self.visit(node_intrinsic_function.arguments)
|
654
|
+
arguments_before = arguments_delta.before
|
655
|
+
arguments_after = arguments_delta.after
|
656
|
+
|
657
|
+
def _compute_fn_select(args: list[Any]) -> Any:
|
658
|
+
values: list[Any] = args[1]
|
659
|
+
if not isinstance(values, list) or not values:
|
660
|
+
raise RuntimeError(f"Invalid arguments list value for Fn::Select: '{values}'")
|
661
|
+
values_len = len(values)
|
662
|
+
index: int = int(args[0])
|
663
|
+
if not isinstance(index, int) or index < 0 or index > values_len:
|
664
|
+
raise RuntimeError(f"Invalid or out of range index value for Fn::Select: '{index}'")
|
665
|
+
selection = values[index]
|
666
|
+
return selection
|
667
|
+
|
668
|
+
before = Nothing
|
669
|
+
if not is_nothing(arguments_before):
|
670
|
+
before = _compute_fn_select(arguments_before)
|
671
|
+
|
672
|
+
after = Nothing
|
673
|
+
if not is_nothing(arguments_after):
|
674
|
+
after = _compute_fn_select(arguments_after)
|
675
|
+
|
676
|
+
return PreprocEntityDelta(before=before, after=after)
|
677
|
+
|
649
678
|
def visit_node_intrinsic_function_fn_find_in_map(
|
650
679
|
self, node_intrinsic_function: NodeIntrinsicFunction
|
651
680
|
) -> PreprocEntityDelta:
|
@@ -118,6 +118,11 @@ class ChangeSetModelVisitor(abc.ABC):
|
|
118
118
|
):
|
119
119
|
self.visit_children(node_intrinsic_function)
|
120
120
|
|
121
|
+
def visit_node_intrinsic_function_fn_select(
|
122
|
+
self, node_intrinsic_function: NodeIntrinsicFunction
|
123
|
+
):
|
124
|
+
self.visit_children(node_intrinsic_function)
|
125
|
+
|
121
126
|
def visit_node_intrinsic_function_fn_sub(self, node_intrinsic_function: NodeIntrinsicFunction):
|
122
127
|
self.visit_children(node_intrinsic_function)
|
123
128
|
|
localstack/version.py
CHANGED
@@ -17,5 +17,5 @@ __version__: str
|
|
17
17
|
__version_tuple__: VERSION_TUPLE
|
18
18
|
version_tuple: VERSION_TUPLE
|
19
19
|
|
20
|
-
__version__ = version = '4.4.1.
|
21
|
-
__version_tuple__ = version_tuple = (4, 4, 1, '
|
20
|
+
__version__ = version = '4.4.1.dev66'
|
21
|
+
__version_tuple__ = version_tuple = (4, 4, 1, 'dev66')
|
@@ -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=1tIHA8yTi1AYEuA56hM5f7ATclgDvb3VjW_x8BJz1II,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
|
@@ -186,17 +186,17 @@ localstack/services/apigateway/analytics.py,sha256=0KcsDIw7WCb3OnHZVo-nwHi81iIxb
|
|
186
186
|
localstack/services/apigateway/exporter.py,sha256=HV0lSZ1t7Sc2ck3Lc-UvBbQmrun6Lky5C6qrZt1snYc,13973
|
187
187
|
localstack/services/apigateway/helpers.py,sha256=J1QsR4Cp725zXmJXO16H3P52ITgNswjCjrMfzwTXTJ0,45313
|
188
188
|
localstack/services/apigateway/models.py,sha256=RHyjlVwRQHPI02J3XBD3cWCcYvt_jZewKX0zE6W-O88,5479
|
189
|
-
localstack/services/apigateway/patches.py,sha256=
|
189
|
+
localstack/services/apigateway/patches.py,sha256=CpdWTjssuNZSdLZNzcm4Yz4BhkPGuygWL3E1SU5JMiY,8703
|
190
190
|
localstack/services/apigateway/legacy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
191
191
|
localstack/services/apigateway/legacy/context.py,sha256=rAxA3Hsse8uDpDWsbJPvQUyDFna-iYvHItE4YSUrihs,6638
|
192
192
|
localstack/services/apigateway/legacy/helpers.py,sha256=NXqO51XF84JNhfiACs2GS7IkZrVDD9THmq-j5oNkn-I,27714
|
193
193
|
localstack/services/apigateway/legacy/integration.py,sha256=huAXczErE_txGt29zLLm6Sl8GDemLTdI9Ku94uAZ0Y4,48669
|
194
194
|
localstack/services/apigateway/legacy/invocations.py,sha256=rowiOycXuehS6JC-WPipLTuNVoGS4lC-Y2VPy7pxUK0,15310
|
195
|
-
localstack/services/apigateway/legacy/provider.py,sha256=
|
195
|
+
localstack/services/apigateway/legacy/provider.py,sha256=LxMgWYXuc4tNTxxFqC6U3Awp9EU4RbzQbpBbBaxQhZU,121861
|
196
196
|
localstack/services/apigateway/legacy/router_asf.py,sha256=-hf0eRxn0BXiSf_-1j2N2JtY6dVeoY19eckB8JTCPwI,6102
|
197
197
|
localstack/services/apigateway/legacy/templates.py,sha256=LiK-LRO0hadI3_JgzbwMsybD-2XEGvgn06KcUEjL0Uo,15065
|
198
198
|
localstack/services/apigateway/next_gen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
199
|
-
localstack/services/apigateway/next_gen/provider.py,sha256=
|
199
|
+
localstack/services/apigateway/next_gen/provider.py,sha256=AdOIEeuxKA1xjcYxU3XIaLQlTP7EOXgk5OsBZtKHdp4,21349
|
200
200
|
localstack/services/apigateway/next_gen/execute_api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
201
201
|
localstack/services/apigateway/next_gen/execute_api/api.py,sha256=4hBm-VYLhctVocblhap2g9HxbDu2HoMW0LkvxaMVFCA,550
|
202
202
|
localstack/services/apigateway/next_gen/execute_api/context.py,sha256=33967H4AtpVzdwLkJ2yEWmsQ_OVh1HkTW-vNGAAA-Wc,5193
|
@@ -310,11 +310,11 @@ localstack/services/cloudformation/engine/types.py,sha256=YIhmTrO__obIviYvzzCovK
|
|
310
310
|
localstack/services/cloudformation/engine/validations.py,sha256=brq7s8O8exA5kvnfzR9ulOtQ7i4konrWQs07-0h_ByE,2847
|
311
311
|
localstack/services/cloudformation/engine/yaml_parser.py,sha256=LQpAVq9Syze9jXUGen9Mz8SjosBuodpV5XvsCSn9bDg,2164
|
312
312
|
localstack/services/cloudformation/engine/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
313
|
-
localstack/services/cloudformation/engine/v2/change_set_model.py,sha256=
|
313
|
+
localstack/services/cloudformation/engine/v2/change_set_model.py,sha256=cGcsVMQFCEs5iYjUlpAbTN5w-0IDg9zMn3hf3KR0F08,48290
|
314
314
|
localstack/services/cloudformation/engine/v2/change_set_model_describer.py,sha256=c5pRXk7nzHcrRxCbtSj1mOem_v-wEIDzOm-r6echrZY,9209
|
315
315
|
localstack/services/cloudformation/engine/v2/change_set_model_executor.py,sha256=sCgIkkkSIE6ltUHCOK2v48Yjtdu5or9uJIztoAsz5LI,16212
|
316
|
-
localstack/services/cloudformation/engine/v2/change_set_model_preproc.py,sha256=
|
317
|
-
localstack/services/cloudformation/engine/v2/change_set_model_visitor.py,sha256=
|
316
|
+
localstack/services/cloudformation/engine/v2/change_set_model_preproc.py,sha256=jeC-xby1TmqutdxlH5s4N6mNS1tMTo2xGDEsrsU91X0,40651
|
317
|
+
localstack/services/cloudformation/engine/v2/change_set_model_visitor.py,sha256=oO7WSBJHOCJV1FKvXuZi5osvgpJeLHViWNOlKwklIRE,6379
|
318
318
|
localstack/services/cloudformation/models/__init__.py,sha256=da1PTClDMl-IBkrSvq6JC1lnS-K_BASzCvxVhNxN5Ls,13
|
319
319
|
localstack/services/cloudformation/resource_providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
320
320
|
localstack/services/cloudformation/resource_providers/aws_cloudformation_macro.py,sha256=Grn3dP1jANRlVO9HyKQV5GHv0x1eNRBeaIYhgn-FKv4,2812
|
@@ -1279,13 +1279,13 @@ localstack/utils/server/tcp_proxy.py,sha256=rR6d5jR0ozDvIlpHiqW0cfyY9a2fRGdOzyA8
|
|
1279
1279
|
localstack/utils/xray/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1280
1280
|
localstack/utils/xray/trace_header.py,sha256=ahXk9eonq7LpeENwlqUEPj3jDOCiVRixhntQuxNor-Q,6209
|
1281
1281
|
localstack/utils/xray/traceid.py,sha256=SQSsMV2rhbTNK6ceIoozZYuGU7Fg687EXcgqxoDl1Fw,1106
|
1282
|
-
localstack_core-4.4.1.
|
1283
|
-
localstack_core-4.4.1.
|
1284
|
-
localstack_core-4.4.1.
|
1285
|
-
localstack_core-4.4.1.
|
1286
|
-
localstack_core-4.4.1.
|
1287
|
-
localstack_core-4.4.1.
|
1288
|
-
localstack_core-4.4.1.
|
1289
|
-
localstack_core-4.4.1.
|
1290
|
-
localstack_core-4.4.1.
|
1291
|
-
localstack_core-4.4.1.
|
1282
|
+
localstack_core-4.4.1.dev66.data/scripts/localstack,sha256=WyL11vp5CkuP79iIR-L8XT7Cj8nvmxX7XRAgxhbmXNE,529
|
1283
|
+
localstack_core-4.4.1.dev66.data/scripts/localstack-supervisor,sha256=nm1Il2d6ASyOB6Vo4CRHd90w7TK9FdRl9VPp0NN6hUk,6378
|
1284
|
+
localstack_core-4.4.1.dev66.data/scripts/localstack.bat,sha256=tlzZTXtveHkMX_s_fa7VDfvdNdS8iVpEz2ER3uk9B_c,29
|
1285
|
+
localstack_core-4.4.1.dev66.dist-info/licenses/LICENSE.txt,sha256=3PC-9Z69UsNARuQ980gNR_JsLx8uvMjdG6C7cc4LBYs,606
|
1286
|
+
localstack_core-4.4.1.dev66.dist-info/METADATA,sha256=xfR7Wmkb2Yq0EjUFr1KQTaib3Vy3Uq4nQP59Qwrx1pQ,5539
|
1287
|
+
localstack_core-4.4.1.dev66.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
1288
|
+
localstack_core-4.4.1.dev66.dist-info/entry_points.txt,sha256=K5M7il9Vwev64SlQiOaZVUhYpVNIE6IFHiWJ0znpbHQ,20491
|
1289
|
+
localstack_core-4.4.1.dev66.dist-info/plux.json,sha256=N_yLqHcA9qmF2bGOm_K_-vSLO_MdEmNLWlmPhvDKXcs,20712
|
1290
|
+
localstack_core-4.4.1.dev66.dist-info/top_level.txt,sha256=3sqmK2lGac8nCy8nwsbS5SpIY_izmtWtgaTFKHYVHbI,11
|
1291
|
+
localstack_core-4.4.1.dev66.dist-info/RECORD,,
|
@@ -0,0 +1 @@
|
|
1
|
+
{"localstack.hooks.on_infra_start": ["apply_runtime_patches=localstack.runtime.patches:apply_runtime_patches", "apply_aws_runtime_patches=localstack.aws.patches:apply_aws_runtime_patches", "register_cloudformation_deploy_ui=localstack.services.cloudformation.plugins:register_cloudformation_deploy_ui", "_publish_config_as_analytics_event=localstack.runtime.analytics:_publish_config_as_analytics_event", "_publish_container_info=localstack.runtime.analytics:_publish_container_info", "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", "_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", "conditionally_enable_debugger=localstack.dev.debugger.plugins:conditionally_enable_debugger", "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"], "localstack.cloudformation.resource_providers": ["AWS::SecretsManager::Secret=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secret_plugin:SecretsManagerSecretProviderPlugin", "AWS::EC2::SecurityGroup=localstack.services.ec2.resource_providers.aws_ec2_securitygroup_plugin:EC2SecurityGroupProviderPlugin", "AWS::ApiGateway::DomainName=localstack.services.apigateway.resource_providers.aws_apigateway_domainname_plugin:ApiGatewayDomainNameProviderPlugin", "AWS::SNS::TopicPolicy=localstack.services.sns.resource_providers.aws_sns_topicpolicy_plugin:SNSTopicPolicyProviderPlugin", "AWS::IAM::Policy=localstack.services.iam.resource_providers.aws_iam_policy_plugin:IAMPolicyProviderPlugin", "AWS::CloudFormation::WaitCondition=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitcondition_plugin:CloudFormationWaitConditionProviderPlugin", "AWS::ApiGateway::RestApi=localstack.services.apigateway.resource_providers.aws_apigateway_restapi_plugin:ApiGatewayRestApiProviderPlugin", "AWS::Elasticsearch::Domain=localstack.services.opensearch.resource_providers.aws_elasticsearch_domain_plugin:ElasticsearchDomainProviderPlugin", "AWS::EC2::DHCPOptions=localstack.services.ec2.resource_providers.aws_ec2_dhcpoptions_plugin:EC2DHCPOptionsProviderPlugin", "AWS::DynamoDB::Table=localstack.services.dynamodb.resource_providers.aws_dynamodb_table_plugin:DynamoDBTableProviderPlugin", "AWS::Lambda::LayerVersionPermission=localstack.services.lambda_.resource_providers.aws_lambda_layerversionpermission_plugin:LambdaLayerVersionPermissionProviderPlugin", "AWS::ApiGateway::ApiKey=localstack.services.apigateway.resource_providers.aws_apigateway_apikey_plugin:ApiGatewayApiKeyProviderPlugin", "AWS::Lambda::Permission=localstack.services.lambda_.resource_providers.aws_lambda_permission_plugin:LambdaPermissionProviderPlugin", "AWS::EC2::TransitGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_transitgatewayattachment_plugin:EC2TransitGatewayAttachmentProviderPlugin", "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::Lambda::Url=localstack.services.lambda_.resource_providers.aws_lambda_url_plugin:LambdaUrlProviderPlugin", "AWS::ApiGateway::UsagePlanKey=localstack.services.apigateway.resource_providers.aws_apigateway_usageplankey_plugin:ApiGatewayUsagePlanKeyProviderPlugin", "AWS::Lambda::Version=localstack.services.lambda_.resource_providers.aws_lambda_version_plugin:LambdaVersionProviderPlugin", "AWS::ApiGateway::Stage=localstack.services.apigateway.resource_providers.aws_apigateway_stage_plugin:ApiGatewayStageProviderPlugin", "AWS::EC2::Subnet=localstack.services.ec2.resource_providers.aws_ec2_subnet_plugin:EC2SubnetProviderPlugin", "AWS::Events::EventBusPolicy=localstack.services.events.resource_providers.aws_events_eventbuspolicy_plugin:EventsEventBusPolicyProviderPlugin", "AWS::DynamoDB::GlobalTable=localstack.services.dynamodb.resource_providers.aws_dynamodb_globaltable_plugin:DynamoDBGlobalTableProviderPlugin", "AWS::CloudWatch::CompositeAlarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_compositealarm_plugin:CloudWatchCompositeAlarmProviderPlugin", "AWS::SSM::MaintenanceWindowTarget=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtarget_plugin:SSMMaintenanceWindowTargetProviderPlugin", "AWS::CloudFormation::Stack=localstack.services.cloudformation.resource_providers.aws_cloudformation_stack_plugin:CloudFormationStackProviderPlugin", "AWS::SNS::Topic=localstack.services.sns.resource_providers.aws_sns_topic_plugin:SNSTopicProviderPlugin", "AWS::ApiGateway::Account=localstack.services.apigateway.resource_providers.aws_apigateway_account_plugin:ApiGatewayAccountProviderPlugin", "AWS::KMS::Key=localstack.services.kms.resource_providers.aws_kms_key_plugin:KMSKeyProviderPlugin", "AWS::EC2::Instance=localstack.services.ec2.resource_providers.aws_ec2_instance_plugin:EC2InstanceProviderPlugin", "AWS::KMS::Alias=localstack.services.kms.resource_providers.aws_kms_alias_plugin:KMSAliasProviderPlugin", "AWS::Kinesis::Stream=localstack.services.kinesis.resource_providers.aws_kinesis_stream_plugin:KinesisStreamProviderPlugin", "AWS::EC2::InternetGateway=localstack.services.ec2.resource_providers.aws_ec2_internetgateway_plugin:EC2InternetGatewayProviderPlugin", "AWS::EC2::Route=localstack.services.ec2.resource_providers.aws_ec2_route_plugin:EC2RouteProviderPlugin", "AWS::SQS::Queue=localstack.services.sqs.resource_providers.aws_sqs_queue_plugin:SQSQueueProviderPlugin", "AWS::EC2::KeyPair=localstack.services.ec2.resource_providers.aws_ec2_keypair_plugin:EC2KeyPairProviderPlugin", "AWS::Lambda::CodeSigningConfig=localstack.services.lambda_.resource_providers.aws_lambda_codesigningconfig_plugin:LambdaCodeSigningConfigProviderPlugin", "AWS::SecretsManager::RotationSchedule=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_rotationschedule_plugin:SecretsManagerRotationScheduleProviderPlugin", "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::SSM::PatchBaseline=localstack.services.ssm.resource_providers.aws_ssm_patchbaseline_plugin:SSMPatchBaselineProviderPlugin", "AWS::Lambda::EventInvokeConfig=localstack.services.lambda_.resource_providers.aws_lambda_eventinvokeconfig_plugin:LambdaEventInvokeConfigProviderPlugin", "AWS::ApiGateway::RequestValidator=localstack.services.apigateway.resource_providers.aws_apigateway_requestvalidator_plugin:ApiGatewayRequestValidatorProviderPlugin", "AWS::CDK::Metadata=localstack.services.cdk.resource_providers.cdk_metadata_plugin:LambdaAliasProviderPlugin", "AWS::EC2::VPCGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_vpcgatewayattachment_plugin:EC2VPCGatewayAttachmentProviderPlugin", "AWS::CertificateManager::Certificate=localstack.services.certificatemanager.resource_providers.aws_certificatemanager_certificate_plugin:CertificateManagerCertificateProviderPlugin", "AWS::EC2::NetworkAcl=localstack.services.ec2.resource_providers.aws_ec2_networkacl_plugin:EC2NetworkAclProviderPlugin", "AWS::KinesisFirehose::DeliveryStream=localstack.services.kinesisfirehose.resource_providers.aws_kinesisfirehose_deliverystream_plugin:KinesisFirehoseDeliveryStreamProviderPlugin", "AWS::SES::EmailIdentity=localstack.services.ses.resource_providers.aws_ses_emailidentity_plugin:SESEmailIdentityProviderPlugin", "AWS::StepFunctions::Activity=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_activity_plugin:StepFunctionsActivityProviderPlugin", "AWS::Logs::SubscriptionFilter=localstack.services.logs.resource_providers.aws_logs_subscriptionfilter_plugin:LogsSubscriptionFilterProviderPlugin", "AWS::Lambda::Function=localstack.services.lambda_.resource_providers.aws_lambda_function_plugin:LambdaFunctionProviderPlugin", "AWS::ApiGateway::BasePathMapping=localstack.services.apigateway.resource_providers.aws_apigateway_basepathmapping_plugin:ApiGatewayBasePathMappingProviderPlugin", "AWS::Events::EventBus=localstack.services.events.resource_providers.aws_events_eventbus_plugin:EventsEventBusProviderPlugin", "AWS::IAM::InstanceProfile=localstack.services.iam.resource_providers.aws_iam_instanceprofile_plugin:IAMInstanceProfileProviderPlugin", "AWS::CloudFormation::WaitConditionHandle=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitconditionhandle_plugin:CloudFormationWaitConditionHandleProviderPlugin", "AWS::IAM::ServerCertificate=localstack.services.iam.resource_providers.aws_iam_servercertificate_plugin:IAMServerCertificateProviderPlugin", "AWS::CloudWatch::Alarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_alarm_plugin:CloudWatchAlarmProviderPlugin", "AWS::Lambda::Alias=localstack.services.lambda_.resource_providers.lambda_alias_plugin:LambdaAliasProviderPlugin", "AWS::Events::ApiDestination=localstack.services.events.resource_providers.aws_events_apidestination_plugin:EventsApiDestinationProviderPlugin", "AWS::SSM::MaintenanceWindow=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindow_plugin:SSMMaintenanceWindowProviderPlugin", "AWS::ApiGateway::UsagePlan=localstack.services.apigateway.resource_providers.aws_apigateway_usageplan_plugin:ApiGatewayUsagePlanProviderPlugin", "AWS::ApiGateway::Resource=localstack.services.apigateway.resource_providers.aws_apigateway_resource_plugin:ApiGatewayResourceProviderPlugin", "AWS::SNS::Subscription=localstack.services.sns.resource_providers.aws_sns_subscription_plugin:SNSSubscriptionProviderPlugin", "AWS::Route53::RecordSet=localstack.services.route53.resource_providers.aws_route53_recordset_plugin:Route53RecordSetProviderPlugin", "AWS::EC2::NatGateway=localstack.services.ec2.resource_providers.aws_ec2_natgateway_plugin:EC2NatGatewayProviderPlugin", "AWS::SSM::MaintenanceWindowTask=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtask_plugin:SSMMaintenanceWindowTaskProviderPlugin", "AWS::ResourceGroups::Group=localstack.services.resource_groups.resource_providers.aws_resourcegroups_group_plugin:ResourceGroupsGroupProviderPlugin", "AWS::Events::Connection=localstack.services.events.resource_providers.aws_events_connection_plugin:EventsConnectionProviderPlugin", "AWS::OpenSearchService::Domain=localstack.services.opensearch.resource_providers.aws_opensearchservice_domain_plugin:OpenSearchServiceDomainProviderPlugin", "AWS::ApiGateway::Model=localstack.services.apigateway.resource_providers.aws_apigateway_model_plugin:ApiGatewayModelProviderPlugin", "AWS::Kinesis::StreamConsumer=localstack.services.kinesis.resource_providers.aws_kinesis_streamconsumer_plugin:KinesisStreamConsumerProviderPlugin", "AWS::S3::Bucket=localstack.services.s3.resource_providers.aws_s3_bucket_plugin:S3BucketProviderPlugin", "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::Events::Rule=localstack.services.events.resource_providers.aws_events_rule_plugin:EventsRuleProviderPlugin", "AWS::Redshift::Cluster=localstack.services.redshift.resource_providers.aws_redshift_cluster_plugin:RedshiftClusterProviderPlugin", "AWS::Logs::LogStream=localstack.services.logs.resource_providers.aws_logs_logstream_plugin:LogsLogStreamProviderPlugin", "AWS::EC2::PrefixList=localstack.services.ec2.resource_providers.aws_ec2_prefixlist_plugin:EC2PrefixListProviderPlugin", "AWS::IAM::Role=localstack.services.iam.resource_providers.aws_iam_role_plugin:IAMRoleProviderPlugin", "AWS::SSM::Parameter=localstack.services.ssm.resource_providers.aws_ssm_parameter_plugin:SSMParameterProviderPlugin", "AWS::IAM::Group=localstack.services.iam.resource_providers.aws_iam_group_plugin:IAMGroupProviderPlugin", "AWS::Lambda::LayerVersion=localstack.services.lambda_.resource_providers.aws_lambda_layerversion_plugin:LambdaLayerVersionProviderPlugin", "AWS::SQS::QueuePolicy=localstack.services.sqs.resource_providers.aws_sqs_queuepolicy_plugin:SQSQueuePolicyProviderPlugin", "AWS::S3::BucketPolicy=localstack.services.s3.resource_providers.aws_s3_bucketpolicy_plugin:S3BucketPolicyProviderPlugin", "AWS::Scheduler::ScheduleGroup=localstack.services.scheduler.resource_providers.aws_scheduler_schedulegroup_plugin:SchedulerScheduleGroupProviderPlugin", "AWS::Route53::HealthCheck=localstack.services.route53.resource_providers.aws_route53_healthcheck_plugin:Route53HealthCheckProviderPlugin", "AWS::EC2::RouteTable=localstack.services.ec2.resource_providers.aws_ec2_routetable_plugin:EC2RouteTableProviderPlugin", "AWS::Scheduler::Schedule=localstack.services.scheduler.resource_providers.aws_scheduler_schedule_plugin:SchedulerScheduleProviderPlugin", "AWS::ApiGateway::GatewayResponse=localstack.services.apigateway.resource_providers.aws_apigateway_gatewayresponse_plugin:ApiGatewayGatewayResponseProviderPlugin", "AWS::EC2::TransitGateway=localstack.services.ec2.resource_providers.aws_ec2_transitgateway_plugin:EC2TransitGatewayProviderPlugin", "AWS::EC2::SubnetRouteTableAssociation=localstack.services.ec2.resource_providers.aws_ec2_subnetroutetableassociation_plugin:EC2SubnetRouteTableAssociationProviderPlugin", "AWS::ApiGateway::Method=localstack.services.apigateway.resource_providers.aws_apigateway_method_plugin:ApiGatewayMethodProviderPlugin", "AWS::Lambda::EventSourceMapping=localstack.services.lambda_.resource_providers.aws_lambda_eventsourcemapping_plugin:LambdaEventSourceMappingProviderPlugin", "AWS::SecretsManager::SecretTargetAttachment=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secrettargetattachment_plugin:SecretsManagerSecretTargetAttachmentProviderPlugin", "AWS::EC2::VPC=localstack.services.ec2.resource_providers.aws_ec2_vpc_plugin:EC2VPCProviderPlugin", "AWS::Logs::LogGroup=localstack.services.logs.resource_providers.aws_logs_loggroup_plugin:LogsLogGroupProviderPlugin", "AWS::CloudFormation::Macro=localstack.services.cloudformation.resource_providers.aws_cloudformation_macro_plugin:CloudFormationMacroProviderPlugin", "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::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", "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.packages": ["jpype-jsonata/community=localstack.services.stepfunctions.plugins:jpype_jsonata_package", "dynamodb-local/community=localstack.services.dynamodb.plugins:dynamodb_local_package", "kinesis-mock/community=localstack.services.kinesis.plugins:kinesismock_package", "ffmpeg/community=localstack.packages.plugins:ffmpeg_package", "java/community=localstack.packages.plugins:java_package", "terraform/community=localstack.packages.plugins:terraform_package", "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", "opensearch/community=localstack.services.opensearch.plugins:opensearch_package"], "localstack.lambda.runtime_executor": ["docker=localstack.services.lambda_.invocation.plugins:DockerRuntimeExecutorPlugin"], "localstack.hooks.on_infra_shutdown": ["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", "_run_init_scripts_on_shutdown=localstack.runtime.init:_run_init_scripts_on_shutdown", "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.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.runtime.components": ["aws=localstack.aws.components:AwsComponents"], "localstack.openapi.spec": ["localstack=localstack.plugins:CoreOASPlugin"]}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"localstack.cloudformation.resource_providers": ["AWS::ApiGateway::DomainName=localstack.services.apigateway.resource_providers.aws_apigateway_domainname_plugin:ApiGatewayDomainNameProviderPlugin", "AWS::ApiGateway::Model=localstack.services.apigateway.resource_providers.aws_apigateway_model_plugin:ApiGatewayModelProviderPlugin", "AWS::KMS::Key=localstack.services.kms.resource_providers.aws_kms_key_plugin:KMSKeyProviderPlugin", "AWS::Lambda::EventInvokeConfig=localstack.services.lambda_.resource_providers.aws_lambda_eventinvokeconfig_plugin:LambdaEventInvokeConfigProviderPlugin", "AWS::IAM::InstanceProfile=localstack.services.iam.resource_providers.aws_iam_instanceprofile_plugin:IAMInstanceProfileProviderPlugin", "AWS::CertificateManager::Certificate=localstack.services.certificatemanager.resource_providers.aws_certificatemanager_certificate_plugin:CertificateManagerCertificateProviderPlugin", "AWS::SNS::Subscription=localstack.services.sns.resource_providers.aws_sns_subscription_plugin:SNSSubscriptionProviderPlugin", "AWS::Events::ApiDestination=localstack.services.events.resource_providers.aws_events_apidestination_plugin:EventsApiDestinationProviderPlugin", "AWS::ApiGateway::ApiKey=localstack.services.apigateway.resource_providers.aws_apigateway_apikey_plugin:ApiGatewayApiKeyProviderPlugin", "AWS::ResourceGroups::Group=localstack.services.resource_groups.resource_providers.aws_resourcegroups_group_plugin:ResourceGroupsGroupProviderPlugin", "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::EC2::Route=localstack.services.ec2.resource_providers.aws_ec2_route_plugin:EC2RouteProviderPlugin", "AWS::EC2::SecurityGroup=localstack.services.ec2.resource_providers.aws_ec2_securitygroup_plugin:EC2SecurityGroupProviderPlugin", "AWS::SecretsManager::SecretTargetAttachment=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secrettargetattachment_plugin:SecretsManagerSecretTargetAttachmentProviderPlugin", "AWS::Events::EventBusPolicy=localstack.services.events.resource_providers.aws_events_eventbuspolicy_plugin:EventsEventBusPolicyProviderPlugin", "AWS::EC2::RouteTable=localstack.services.ec2.resource_providers.aws_ec2_routetable_plugin:EC2RouteTableProviderPlugin", "AWS::CloudFormation::Stack=localstack.services.cloudformation.resource_providers.aws_cloudformation_stack_plugin:CloudFormationStackProviderPlugin", "AWS::IAM::Group=localstack.services.iam.resource_providers.aws_iam_group_plugin:IAMGroupProviderPlugin", "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::KMS::Alias=localstack.services.kms.resource_providers.aws_kms_alias_plugin:KMSAliasProviderPlugin", "AWS::ApiGateway::RestApi=localstack.services.apigateway.resource_providers.aws_apigateway_restapi_plugin:ApiGatewayRestApiProviderPlugin", "AWS::EC2::KeyPair=localstack.services.ec2.resource_providers.aws_ec2_keypair_plugin:EC2KeyPairProviderPlugin", "AWS::Lambda::Permission=localstack.services.lambda_.resource_providers.aws_lambda_permission_plugin:LambdaPermissionProviderPlugin", "AWS::IAM::Role=localstack.services.iam.resource_providers.aws_iam_role_plugin:IAMRoleProviderPlugin", "AWS::EC2::VPCEndpoint=localstack.services.ec2.resource_providers.aws_ec2_vpcendpoint_plugin:EC2VPCEndpointProviderPlugin", "AWS::Scheduler::Schedule=localstack.services.scheduler.resource_providers.aws_scheduler_schedule_plugin:SchedulerScheduleProviderPlugin", "AWS::ApiGateway::BasePathMapping=localstack.services.apigateway.resource_providers.aws_apigateway_basepathmapping_plugin:ApiGatewayBasePathMappingProviderPlugin", "AWS::SQS::Queue=localstack.services.sqs.resource_providers.aws_sqs_queue_plugin:SQSQueueProviderPlugin", "AWS::SES::EmailIdentity=localstack.services.ses.resource_providers.aws_ses_emailidentity_plugin:SESEmailIdentityProviderPlugin", "AWS::CDK::Metadata=localstack.services.cdk.resource_providers.cdk_metadata_plugin:LambdaAliasProviderPlugin", "AWS::Events::EventBus=localstack.services.events.resource_providers.aws_events_eventbus_plugin:EventsEventBusProviderPlugin", "AWS::Elasticsearch::Domain=localstack.services.opensearch.resource_providers.aws_elasticsearch_domain_plugin:ElasticsearchDomainProviderPlugin", "AWS::Logs::SubscriptionFilter=localstack.services.logs.resource_providers.aws_logs_subscriptionfilter_plugin:LogsSubscriptionFilterProviderPlugin", "AWS::SecretsManager::Secret=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secret_plugin:SecretsManagerSecretProviderPlugin", "AWS::ApiGateway::Account=localstack.services.apigateway.resource_providers.aws_apigateway_account_plugin:ApiGatewayAccountProviderPlugin", "AWS::S3::BucketPolicy=localstack.services.s3.resource_providers.aws_s3_bucketpolicy_plugin:S3BucketPolicyProviderPlugin", "AWS::Lambda::Alias=localstack.services.lambda_.resource_providers.lambda_alias_plugin:LambdaAliasProviderPlugin", "AWS::SSM::MaintenanceWindow=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindow_plugin:SSMMaintenanceWindowProviderPlugin", "AWS::EC2::PrefixList=localstack.services.ec2.resource_providers.aws_ec2_prefixlist_plugin:EC2PrefixListProviderPlugin", "AWS::CloudFormation::WaitCondition=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitcondition_plugin:CloudFormationWaitConditionProviderPlugin", "AWS::SSM::PatchBaseline=localstack.services.ssm.resource_providers.aws_ssm_patchbaseline_plugin:SSMPatchBaselineProviderPlugin", "AWS::EC2::VPC=localstack.services.ec2.resource_providers.aws_ec2_vpc_plugin:EC2VPCProviderPlugin", "AWS::CloudWatch::Alarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_alarm_plugin:CloudWatchAlarmProviderPlugin", "AWS::ApiGateway::Method=localstack.services.apigateway.resource_providers.aws_apigateway_method_plugin:ApiGatewayMethodProviderPlugin", "AWS::Logs::LogStream=localstack.services.logs.resource_providers.aws_logs_logstream_plugin:LogsLogStreamProviderPlugin", "AWS::EC2::SubnetRouteTableAssociation=localstack.services.ec2.resource_providers.aws_ec2_subnetroutetableassociation_plugin:EC2SubnetRouteTableAssociationProviderPlugin", "AWS::StepFunctions::StateMachine=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_statemachine_plugin:StepFunctionsStateMachineProviderPlugin", "AWS::ApiGateway::Resource=localstack.services.apigateway.resource_providers.aws_apigateway_resource_plugin:ApiGatewayResourceProviderPlugin", "AWS::SSM::MaintenanceWindowTask=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtask_plugin:SSMMaintenanceWindowTaskProviderPlugin", "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::EC2::VPCGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_vpcgatewayattachment_plugin:EC2VPCGatewayAttachmentProviderPlugin", "AWS::Lambda::Function=localstack.services.lambda_.resource_providers.aws_lambda_function_plugin:LambdaFunctionProviderPlugin", "AWS::Route53::HealthCheck=localstack.services.route53.resource_providers.aws_route53_healthcheck_plugin:Route53HealthCheckProviderPlugin", "AWS::EC2::Instance=localstack.services.ec2.resource_providers.aws_ec2_instance_plugin:EC2InstanceProviderPlugin", "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::IAM::ServerCertificate=localstack.services.iam.resource_providers.aws_iam_servercertificate_plugin:IAMServerCertificateProviderPlugin", "AWS::SSM::Parameter=localstack.services.ssm.resource_providers.aws_ssm_parameter_plugin:SSMParameterProviderPlugin", "AWS::ApiGateway::Deployment=localstack.services.apigateway.resource_providers.aws_apigateway_deployment_plugin:ApiGatewayDeploymentProviderPlugin", "AWS::Lambda::Version=localstack.services.lambda_.resource_providers.aws_lambda_version_plugin:LambdaVersionProviderPlugin", "AWS::SecretsManager::RotationSchedule=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_rotationschedule_plugin:SecretsManagerRotationScheduleProviderPlugin", "AWS::IAM::User=localstack.services.iam.resource_providers.aws_iam_user_plugin:IAMUserProviderPlugin", "AWS::IAM::Policy=localstack.services.iam.resource_providers.aws_iam_policy_plugin:IAMPolicyProviderPlugin", "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::ServiceLinkedRole=localstack.services.iam.resource_providers.aws_iam_servicelinkedrole_plugin:IAMServiceLinkedRoleProviderPlugin", "AWS::Kinesis::StreamConsumer=localstack.services.kinesis.resource_providers.aws_kinesis_streamconsumer_plugin:KinesisStreamConsumerProviderPlugin", "AWS::Scheduler::ScheduleGroup=localstack.services.scheduler.resource_providers.aws_scheduler_schedulegroup_plugin:SchedulerScheduleGroupProviderPlugin", "AWS::IAM::AccessKey=localstack.services.iam.resource_providers.aws_iam_accesskey_plugin:IAMAccessKeyProviderPlugin", "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::SNS::TopicPolicy=localstack.services.sns.resource_providers.aws_sns_topicpolicy_plugin:SNSTopicPolicyProviderPlugin", "AWS::S3::Bucket=localstack.services.s3.resource_providers.aws_s3_bucket_plugin:S3BucketProviderPlugin", "AWS::CloudFormation::Macro=localstack.services.cloudformation.resource_providers.aws_cloudformation_macro_plugin:CloudFormationMacroProviderPlugin", "AWS::ApiGateway::UsagePlan=localstack.services.apigateway.resource_providers.aws_apigateway_usageplan_plugin:ApiGatewayUsagePlanProviderPlugin", "AWS::EC2::InternetGateway=localstack.services.ec2.resource_providers.aws_ec2_internetgateway_plugin:EC2InternetGatewayProviderPlugin", "AWS::Route53::RecordSet=localstack.services.route53.resource_providers.aws_route53_recordset_plugin:Route53RecordSetProviderPlugin", "AWS::Logs::LogGroup=localstack.services.logs.resource_providers.aws_logs_loggroup_plugin:LogsLogGroupProviderPlugin", "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::SQS::QueuePolicy=localstack.services.sqs.resource_providers.aws_sqs_queuepolicy_plugin:SQSQueuePolicyProviderPlugin", "AWS::CloudWatch::CompositeAlarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_compositealarm_plugin:CloudWatchCompositeAlarmProviderPlugin", "AWS::DynamoDB::GlobalTable=localstack.services.dynamodb.resource_providers.aws_dynamodb_globaltable_plugin:DynamoDBGlobalTableProviderPlugin", "AWS::Lambda::EventSourceMapping=localstack.services.lambda_.resource_providers.aws_lambda_eventsourcemapping_plugin:LambdaEventSourceMappingProviderPlugin", "AWS::EC2::TransitGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_transitgatewayattachment_plugin:EC2TransitGatewayAttachmentProviderPlugin", "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::StepFunctions::Activity=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_activity_plugin:StepFunctionsActivityProviderPlugin", "AWS::OpenSearchService::Domain=localstack.services.opensearch.resource_providers.aws_opensearchservice_domain_plugin:OpenSearchServiceDomainProviderPlugin", "AWS::Lambda::CodeSigningConfig=localstack.services.lambda_.resource_providers.aws_lambda_codesigningconfig_plugin:LambdaCodeSigningConfigProviderPlugin", "AWS::EC2::NatGateway=localstack.services.ec2.resource_providers.aws_ec2_natgateway_plugin:EC2NatGatewayProviderPlugin", "AWS::EC2::Subnet=localstack.services.ec2.resource_providers.aws_ec2_subnet_plugin:EC2SubnetProviderPlugin", "AWS::Lambda::Url=localstack.services.lambda_.resource_providers.aws_lambda_url_plugin:LambdaUrlProviderPlugin", "AWS::DynamoDB::Table=localstack.services.dynamodb.resource_providers.aws_dynamodb_table_plugin:DynamoDBTableProviderPlugin", "AWS::IAM::ManagedPolicy=localstack.services.iam.resource_providers.aws_iam_managedpolicy_plugin:IAMManagedPolicyProviderPlugin", "AWS::EC2::NetworkAcl=localstack.services.ec2.resource_providers.aws_ec2_networkacl_plugin:EC2NetworkAclProviderPlugin", "AWS::ApiGateway::RequestValidator=localstack.services.apigateway.resource_providers.aws_apigateway_requestvalidator_plugin:ApiGatewayRequestValidatorProviderPlugin", "AWS::ApiGateway::UsagePlanKey=localstack.services.apigateway.resource_providers.aws_apigateway_usageplankey_plugin:ApiGatewayUsagePlanKeyProviderPlugin"], "localstack.hooks.on_infra_start": ["register_swagger_endpoints=localstack.http.resources.swagger.plugins:register_swagger_endpoints", "_run_init_scripts_on_start=localstack.runtime.init:_run_init_scripts_on_start", "register_cloudformation_deploy_ui=localstack.services.cloudformation.plugins:register_cloudformation_deploy_ui", "setup_dns_configuration_on_host=localstack.dns.plugins:setup_dns_configuration_on_host", "start_dns_server=localstack.dns.plugins:start_dns_server", "_patch_botocore_endpoint_in_memory=localstack.aws.client:_patch_botocore_endpoint_in_memory", "_patch_botocore_json_parser=localstack.aws.client:_patch_botocore_json_parser", "_patch_cbor2=localstack.aws.client:_patch_cbor2", "apply_runtime_patches=localstack.runtime.patches:apply_runtime_patches", "conditionally_enable_debugger=localstack.dev.debugger.plugins:conditionally_enable_debugger", "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", "_publish_config_as_analytics_event=localstack.runtime.analytics:_publish_config_as_analytics_event", "_publish_container_info=localstack.runtime.analytics:_publish_container_info", "register_custom_endpoints=localstack.services.lambda_.plugins:register_custom_endpoints", "validate_configuration=localstack.services.lambda_.plugins:validate_configuration"], "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.on_infra_shutdown": ["_run_init_scripts_on_shutdown=localstack.runtime.init:_run_init_scripts_on_shutdown", "stop_server=localstack.dns.plugins:stop_server", "publish_metrics=localstack.utils.analytics.metrics: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", "remove_custom_endpoints=localstack.services.lambda_.plugins:remove_custom_endpoints"], "localstack.packages": ["jpype-jsonata/community=localstack.services.stepfunctions.plugins:jpype_jsonata_package", "ffmpeg/community=localstack.packages.plugins:ffmpeg_package", "java/community=localstack.packages.plugins:java_package", "terraform/community=localstack.packages.plugins:terraform_package", "vosk/community=localstack.services.transcribe.plugins:vosk_package", "opensearch/community=localstack.services.opensearch.plugins:opensearch_package", "elasticsearch/community=localstack.services.es.plugins:elasticsearch_package", "kinesis-mock/community=localstack.services.kinesis.plugins:kinesismock_package", "dynamodb-local/community=localstack.services.dynamodb.plugins:dynamodb_local_package", "lambda-java-libs/community=localstack.services.lambda_.plugins:lambda_java_libs", "lambda-runtime/community=localstack.services.lambda_.plugins:lambda_runtime_package"], "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.lambda.runtime_executor": ["docker=localstack.services.lambda_.invocation.plugins:DockerRuntimeExecutorPlugin"], "localstack.runtime.components": ["aws=localstack.aws.components:AwsComponents"], "localstack.openapi.spec": ["localstack=localstack.plugins:CoreOASPlugin"]}
|
File without changes
|
{localstack_core-4.4.1.dev64.data → localstack_core-4.4.1.dev66.data}/scripts/localstack-supervisor
RENAMED
File without changes
|
{localstack_core-4.4.1.dev64.data → localstack_core-4.4.1.dev66.data}/scripts/localstack.bat
RENAMED
File without changes
|
File without changes
|
{localstack_core-4.4.1.dev64.dist-info → localstack_core-4.4.1.dev66.dist-info}/entry_points.txt
RENAMED
File without changes
|
{localstack_core-4.4.1.dev64.dist-info → localstack_core-4.4.1.dev66.dist-info}/licenses/LICENSE.txt
RENAMED
File without changes
|
{localstack_core-4.4.1.dev64.dist-info → localstack_core-4.4.1.dev66.dist-info}/top_level.txt
RENAMED
File without changes
|