localstack-core 4.6.1.dev60__py3-none-any.whl → 4.10.1.dev12__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/aws/api/apigateway/__init__.py +87 -110
- localstack/aws/api/cloudformation/__init__.py +18 -4
- localstack/aws/api/cloudwatch/__init__.py +41 -1
- localstack/aws/api/config/__init__.py +4 -0
- localstack/aws/api/core.py +8 -5
- localstack/aws/api/dynamodb/__init__.py +30 -0
- localstack/aws/api/ec2/__init__.py +1545 -66
- localstack/aws/api/events/__init__.py +12 -16
- localstack/aws/api/iam/__init__.py +7 -0
- localstack/aws/api/kinesis/__init__.py +19 -0
- localstack/aws/api/kms/__init__.py +6 -0
- localstack/aws/api/lambda_/__init__.py +36 -23
- localstack/aws/api/logs/__init__.py +20 -8
- localstack/aws/api/opensearch/__init__.py +16 -0
- localstack/aws/api/pipes/__init__.py +24 -32
- localstack/aws/api/redshift/__init__.py +9 -3
- localstack/aws/api/route53/__init__.py +5 -0
- localstack/aws/api/s3/__init__.py +12 -0
- localstack/aws/api/s3control/__init__.py +56 -0
- localstack/aws/api/scheduler/__init__.py +14 -16
- localstack/aws/api/ssm/__init__.py +2 -0
- localstack/aws/api/stepfunctions/__init__.py +88 -114
- localstack/aws/api/support/__init__.py +8 -9
- localstack/aws/api/transcribe/__init__.py +17 -0
- localstack/aws/chain.py +2 -2
- localstack/aws/client.py +14 -11
- localstack/aws/connect.py +42 -41
- localstack/aws/forwarder.py +57 -9
- localstack/aws/gateway.py +1 -3
- localstack/aws/handlers/analytics.py +2 -3
- localstack/aws/handlers/cors.py +4 -5
- localstack/aws/handlers/internal_requests.py +6 -1
- localstack/aws/handlers/logging.py +13 -4
- localstack/aws/handlers/metric_handler.py +44 -5
- localstack/aws/handlers/service.py +48 -28
- localstack/aws/mocking.py +18 -27
- localstack/aws/patches.py +2 -2
- localstack/aws/protocol/op_router.py +11 -10
- localstack/aws/protocol/parser.py +475 -49
- localstack/aws/protocol/serializer.py +723 -106
- localstack/aws/protocol/service_router.py +133 -33
- localstack/aws/protocol/validate.py +6 -6
- localstack/aws/scaffold.py +9 -10
- localstack/aws/serving/edge.py +5 -6
- localstack/aws/serving/hypercorn.py +2 -2
- localstack/aws/serving/twisted.py +1 -2
- localstack/aws/serving/werkzeug.py +2 -2
- localstack/aws/skeleton.py +12 -11
- localstack/aws/spec-patches.json +58 -0
- localstack/aws/spec.py +66 -46
- localstack/cli/exceptions.py +1 -1
- localstack/cli/localstack.py +11 -11
- localstack/cli/lpm.py +4 -5
- localstack/cli/plugins.py +1 -1
- localstack/cli/profiles.py +1 -2
- localstack/config.py +44 -30
- localstack/constants.py +4 -29
- localstack/deprecations.py +5 -5
- localstack/dev/kubernetes/__main__.py +130 -7
- localstack/dev/run/__main__.py +5 -5
- localstack/dev/run/configurators.py +1 -4
- localstack/dev/run/paths.py +6 -6
- localstack/dns/models.py +2 -1
- localstack/dns/plugins.py +5 -1
- localstack/dns/server.py +16 -6
- localstack/http/dispatcher.py +1 -2
- localstack/http/response.py +2 -2
- localstack/http/router.py +1 -1
- localstack/http/trace.py +2 -1
- localstack/logging/format.py +6 -6
- localstack/packages/api.py +13 -12
- localstack/packages/core.py +4 -4
- localstack/packages/debugpy.py +1 -3
- localstack/packages/ffmpeg.py +1 -2
- localstack/packages/java.py +38 -12
- localstack/packages/plugins.py +0 -8
- localstack/runtime/analytics.py +3 -0
- localstack/runtime/hooks.py +1 -1
- localstack/runtime/init.py +8 -9
- localstack/runtime/main.py +5 -5
- localstack/runtime/patches.py +2 -2
- localstack/runtime/shutdown.py +2 -1
- localstack/services/apigateway/exporter.py +1 -2
- localstack/services/apigateway/helpers.py +7 -10
- localstack/services/apigateway/legacy/context.py +21 -21
- localstack/services/apigateway/legacy/helpers.py +27 -28
- localstack/services/apigateway/legacy/integration.py +11 -10
- localstack/services/apigateway/legacy/invocations.py +6 -5
- localstack/services/apigateway/legacy/provider.py +148 -68
- localstack/services/apigateway/legacy/router_asf.py +2 -2
- localstack/services/apigateway/legacy/templates.py +6 -6
- localstack/services/apigateway/models.py +16 -16
- localstack/services/apigateway/next_gen/execute_api/api.py +2 -2
- localstack/services/apigateway/next_gen/execute_api/context.py +25 -25
- localstack/services/apigateway/next_gen/execute_api/handlers/api_key_validation.py +2 -5
- localstack/services/apigateway/next_gen/execute_api/handlers/method_request.py +7 -2
- localstack/services/apigateway/next_gen/execute_api/handlers/parse.py +1 -2
- localstack/services/apigateway/next_gen/execute_api/handlers/resource_router.py +2 -3
- localstack/services/apigateway/next_gen/execute_api/header_utils.py +1 -1
- localstack/services/apigateway/next_gen/execute_api/helpers.py +2 -2
- localstack/services/apigateway/next_gen/execute_api/integrations/aws.py +9 -6
- localstack/services/apigateway/next_gen/execute_api/integrations/http.py +12 -12
- localstack/services/apigateway/next_gen/execute_api/router.py +31 -0
- localstack/services/apigateway/next_gen/execute_api/template_mapping.py +2 -2
- localstack/services/apigateway/next_gen/execute_api/test_invoke.py +114 -9
- localstack/services/apigateway/next_gen/execute_api/variables.py +63 -63
- localstack/services/apigateway/next_gen/provider.py +5 -0
- localstack/services/apigateway/resource_providers/aws_apigateway_account.py +3 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_account_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_apikey.py +14 -14
- localstack/services/apigateway/resource_providers/aws_apigateway_apikey_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_basepathmapping.py +5 -5
- localstack/services/apigateway/resource_providers/aws_apigateway_basepathmapping_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_deployment.py +46 -46
- localstack/services/apigateway/resource_providers/aws_apigateway_deployment_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_domainname.py +18 -18
- localstack/services/apigateway/resource_providers/aws_apigateway_domainname_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_gatewayresponse.py +7 -7
- localstack/services/apigateway/resource_providers/aws_apigateway_gatewayresponse_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_method.py +36 -36
- localstack/services/apigateway/resource_providers/aws_apigateway_method_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_model.py +6 -6
- localstack/services/apigateway/resource_providers/aws_apigateway_model_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_requestvalidator.py +6 -6
- localstack/services/apigateway/resource_providers/aws_apigateway_requestvalidator_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_resource.py +6 -6
- localstack/services/apigateway/resource_providers/aws_apigateway_resource_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_restapi.py +26 -26
- localstack/services/apigateway/resource_providers/aws_apigateway_restapi_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_stage.py +33 -33
- localstack/services/apigateway/resource_providers/aws_apigateway_stage_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_usageplan.py +18 -18
- localstack/services/apigateway/resource_providers/aws_apigateway_usageplan_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_usageplankey.py +5 -5
- localstack/services/apigateway/resource_providers/aws_apigateway_usageplankey_plugin.py +1 -3
- localstack/services/cdk/resource_providers/cdk_metadata.py +4 -3
- localstack/services/cdk/resource_providers/cdk_metadata_plugin.py +1 -3
- localstack/services/certificatemanager/resource_providers/aws_certificatemanager_certificate.py +14 -14
- localstack/services/certificatemanager/resource_providers/aws_certificatemanager_certificate_plugin.py +1 -3
- localstack/services/cloudformation/api_utils.py +4 -8
- localstack/services/cloudformation/cfn_utils.py +2 -2
- localstack/services/cloudformation/deployment_utils.py +14 -12
- localstack/services/cloudformation/engine/changes.py +3 -3
- localstack/services/cloudformation/engine/entities.py +27 -17
- localstack/services/cloudformation/engine/parameters.py +4 -4
- localstack/services/cloudformation/engine/template_deployer.py +15 -14
- localstack/services/cloudformation/engine/template_utils.py +34 -12
- localstack/services/cloudformation/engine/transformers.py +11 -8
- localstack/services/cloudformation/engine/types.py +5 -4
- localstack/services/cloudformation/engine/v2/change_set_model.py +336 -39
- localstack/services/cloudformation/engine/v2/change_set_model_describer.py +96 -17
- localstack/services/cloudformation/engine/v2/change_set_model_executor.py +289 -136
- localstack/services/cloudformation/engine/v2/change_set_model_preproc.py +315 -146
- localstack/services/cloudformation/engine/v2/change_set_model_transform.py +380 -105
- localstack/services/cloudformation/engine/v2/change_set_model_validator.py +183 -0
- localstack/services/cloudformation/engine/v2/change_set_model_visitor.py +6 -0
- localstack/services/cloudformation/engine/v2/resolving.py +102 -0
- localstack/services/cloudformation/engine/yaml_parser.py +9 -2
- localstack/services/cloudformation/provider.py +11 -6
- localstack/services/cloudformation/provider_utils.py +34 -4
- localstack/services/cloudformation/resource_provider.py +31 -21
- localstack/services/cloudformation/resource_providers/aws_cloudformation_macro.py +7 -7
- localstack/services/cloudformation/resource_providers/aws_cloudformation_macro_plugin.py +1 -3
- localstack/services/cloudformation/resource_providers/aws_cloudformation_stack.py +9 -9
- localstack/services/cloudformation/resource_providers/aws_cloudformation_stack_plugin.py +1 -3
- localstack/services/cloudformation/resource_providers/aws_cloudformation_waitcondition.py +6 -6
- localstack/services/cloudformation/resource_providers/aws_cloudformation_waitcondition_plugin.py +1 -3
- localstack/services/cloudformation/resource_providers/aws_cloudformation_waitconditionhandle.py +2 -2
- localstack/services/cloudformation/resource_providers/aws_cloudformation_waitconditionhandle_plugin.py +1 -3
- localstack/services/cloudformation/resources.py +24149 -0
- localstack/services/cloudformation/scaffolding/__main__.py +13 -12
- localstack/services/cloudformation/scaffolding/propgen.py +2 -2
- localstack/services/cloudformation/service_models.py +2 -2
- localstack/services/cloudformation/stores.py +33 -22
- localstack/services/cloudformation/v2/entities.py +103 -88
- localstack/services/cloudformation/v2/provider.py +872 -131
- localstack/services/cloudformation/v2/types.py +38 -0
- localstack/services/cloudformation/v2/utils.py +4 -1
- localstack/services/cloudwatch/alarm_scheduler.py +11 -8
- localstack/services/cloudwatch/cloudwatch_database_helper.py +4 -5
- localstack/services/cloudwatch/models.py +5 -7
- localstack/services/cloudwatch/provider.py +30 -25
- localstack/services/cloudwatch/provider_v2.py +27 -32
- localstack/services/cloudwatch/resource_providers/aws_cloudwatch_alarm.py +40 -40
- localstack/services/cloudwatch/resource_providers/aws_cloudwatch_alarm_plugin.py +1 -3
- localstack/services/cloudwatch/resource_providers/aws_cloudwatch_compositealarm.py +12 -12
- localstack/services/cloudwatch/resource_providers/aws_cloudwatch_compositealarm_plugin.py +1 -3
- localstack/services/dynamodb/packages.py +3 -3
- localstack/services/dynamodb/provider.py +159 -18
- localstack/services/dynamodb/resource_providers/aws_dynamodb_globaltable.py +63 -63
- localstack/services/dynamodb/resource_providers/aws_dynamodb_globaltable_plugin.py +1 -3
- localstack/services/dynamodb/resource_providers/aws_dynamodb_table.py +57 -57
- localstack/services/dynamodb/resource_providers/aws_dynamodb_table_plugin.py +1 -3
- localstack/services/dynamodb/server.py +2 -2
- localstack/services/dynamodb/utils.py +13 -14
- localstack/services/dynamodb/v2/provider.py +157 -18
- localstack/services/dynamodbstreams/dynamodbstreams_api.py +2 -2
- localstack/services/dynamodbstreams/models.py +1 -3
- localstack/services/ec2/patches.py +26 -5
- localstack/services/ec2/provider.py +3 -3
- localstack/services/ec2/resource_providers/aws_ec2_dhcpoptions.py +10 -10
- localstack/services/ec2/resource_providers/aws_ec2_dhcpoptions_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_instance.py +96 -96
- localstack/services/ec2/resource_providers/aws_ec2_instance_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_internetgateway.py +5 -5
- localstack/services/ec2/resource_providers/aws_ec2_internetgateway_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_keypair.py +10 -10
- localstack/services/ec2/resource_providers/aws_ec2_keypair_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_natgateway.py +13 -13
- localstack/services/ec2/resource_providers/aws_ec2_natgateway_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_networkacl.py +6 -6
- localstack/services/ec2/resource_providers/aws_ec2_networkacl_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_prefixlist.py +14 -14
- localstack/services/ec2/resource_providers/aws_ec2_prefixlist_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_route.py +15 -15
- localstack/services/ec2/resource_providers/aws_ec2_route_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_routetable.py +6 -6
- localstack/services/ec2/resource_providers/aws_ec2_routetable_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_securitygroup.py +29 -29
- localstack/services/ec2/resource_providers/aws_ec2_securitygroup_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_subnet.py +19 -19
- localstack/services/ec2/resource_providers/aws_ec2_subnet_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_subnetroutetableassociation.py +4 -4
- localstack/services/ec2/resource_providers/aws_ec2_subnetroutetableassociation_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_transitgateway.py +16 -16
- localstack/services/ec2/resource_providers/aws_ec2_transitgateway_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_transitgatewayattachment.py +9 -9
- localstack/services/ec2/resource_providers/aws_ec2_transitgatewayattachment_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_vpc.py +15 -15
- localstack/services/ec2/resource_providers/aws_ec2_vpc_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_vpcendpoint.py +29 -22
- localstack/services/ec2/resource_providers/aws_ec2_vpcendpoint_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_vpcgatewayattachment.py +5 -5
- localstack/services/ec2/resource_providers/aws_ec2_vpcgatewayattachment_plugin.py +1 -3
- localstack/services/ecr/resource_providers/aws_ecr_repository.py +22 -19
- localstack/services/ecr/resource_providers/aws_ecr_repository_plugin.py +1 -3
- localstack/services/edge.py +6 -6
- localstack/services/es/provider.py +21 -21
- localstack/services/events/archive.py +2 -2
- localstack/services/events/connection.py +5 -5
- localstack/services/events/event_bus.py +9 -9
- localstack/services/events/event_rule_engine.py +31 -13
- localstack/services/events/models.py +29 -30
- localstack/services/events/provider.py +29 -26
- localstack/services/events/replay.py +3 -3
- localstack/services/events/resource_providers/aws_events_apidestination.py +8 -8
- localstack/services/events/resource_providers/aws_events_apidestination_plugin.py +1 -3
- localstack/services/events/resource_providers/aws_events_connection.py +27 -27
- localstack/services/events/resource_providers/aws_events_connection_plugin.py +1 -3
- localstack/services/events/resource_providers/aws_events_eventbus.py +9 -9
- localstack/services/events/resource_providers/aws_events_eventbus_plugin.py +1 -3
- localstack/services/events/resource_providers/aws_events_eventbuspolicy.py +11 -11
- localstack/services/events/resource_providers/aws_events_eventbuspolicy_plugin.py +1 -3
- localstack/services/events/resource_providers/aws_events_rule.py +82 -82
- localstack/services/events/resource_providers/aws_events_rule_plugin.py +1 -3
- localstack/services/events/rule.py +15 -15
- localstack/services/events/target.py +21 -13
- localstack/services/events/utils.py +7 -7
- localstack/services/events/v1/models.py +1 -3
- localstack/services/events/v1/provider.py +15 -15
- localstack/services/firehose/models.py +1 -3
- localstack/services/firehose/provider.py +25 -16
- localstack/services/iam/iam_patches.py +5 -6
- localstack/services/iam/provider.py +14 -119
- localstack/services/iam/resource_providers/aws_iam_accesskey.py +6 -6
- localstack/services/iam/resource_providers/aws_iam_accesskey_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_group.py +9 -9
- localstack/services/iam/resource_providers/aws_iam_group_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_instanceprofile.py +5 -5
- localstack/services/iam/resource_providers/aws_iam_instanceprofile_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_managedpolicy.py +9 -9
- localstack/services/iam/resource_providers/aws_iam_managedpolicy_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_policy.py +7 -7
- localstack/services/iam/resource_providers/aws_iam_policy_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_role.py +16 -16
- localstack/services/iam/resource_providers/aws_iam_role_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_servercertificate.py +10 -10
- localstack/services/iam/resource_providers/aws_iam_servercertificate_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_servicelinkedrole.py +5 -5
- localstack/services/iam/resource_providers/aws_iam_servicelinkedrole_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_user.py +17 -17
- localstack/services/iam/resource_providers/aws_iam_user_plugin.py +1 -3
- localstack/services/iam/resources/policy_simulator.py +133 -0
- localstack/services/kinesis/kinesis_mock_server.py +7 -8
- localstack/services/kinesis/models.py +17 -5
- localstack/services/kinesis/packages.py +3 -3
- localstack/services/kinesis/provider.py +86 -3
- localstack/services/kinesis/resource_providers/aws_kinesis_stream.py +13 -13
- localstack/services/kinesis/resource_providers/aws_kinesis_stream_plugin.py +1 -3
- localstack/services/kinesis/resource_providers/aws_kinesis_streamconsumer.py +7 -7
- localstack/services/kinesis/resource_providers/aws_kinesis_streamconsumer_plugin.py +1 -3
- localstack/services/kinesisfirehose/resource_providers/aws_kinesisfirehose_deliverystream.py +191 -191
- localstack/services/kinesisfirehose/resource_providers/aws_kinesisfirehose_deliverystream_plugin.py +1 -3
- localstack/services/kms/models.py +21 -18
- localstack/services/kms/provider.py +62 -26
- localstack/services/kms/resource_providers/aws_kms_alias.py +3 -3
- localstack/services/kms/resource_providers/aws_kms_alias_plugin.py +1 -3
- localstack/services/kms/resource_providers/aws_kms_key.py +14 -14
- localstack/services/kms/resource_providers/aws_kms_key_plugin.py +1 -3
- localstack/services/kms/utils.py +4 -3
- localstack/services/lambda_/api_utils.py +19 -16
- localstack/services/lambda_/custom_endpoints.py +2 -2
- localstack/services/lambda_/event_source_mapping/esm_worker_factory.py +4 -7
- localstack/services/lambda_/event_source_mapping/pipe_utils.py +2 -2
- localstack/services/lambda_/event_source_mapping/pollers/stream_poller.py +1 -1
- localstack/services/lambda_/event_source_mapping/senders/sender_utils.py +2 -1
- localstack/services/lambda_/hooks.py +6 -1
- localstack/services/lambda_/invocation/assignment.py +1 -2
- localstack/services/lambda_/invocation/docker_runtime_executor.py +7 -11
- localstack/services/lambda_/invocation/event_manager.py +1 -1
- localstack/services/lambda_/invocation/execution_environment.py +4 -4
- localstack/services/lambda_/invocation/executor_endpoint.py +8 -11
- localstack/services/lambda_/invocation/internal_sqs_queue.py +6 -10
- localstack/services/lambda_/invocation/lambda_models.py +33 -30
- localstack/services/lambda_/invocation/lambda_service.py +12 -5
- localstack/services/lambda_/invocation/logs.py +2 -3
- localstack/services/lambda_/invocation/runtime_executor.py +3 -3
- localstack/services/lambda_/invocation/version_manager.py +31 -8
- localstack/services/lambda_/ldm.py +14 -0
- localstack/services/lambda_/packages.py +3 -4
- localstack/services/lambda_/provider.py +9 -26
- localstack/services/lambda_/provider_utils.py +1 -1
- localstack/services/lambda_/resource_providers/aws_lambda_codesigningconfig.py +8 -8
- localstack/services/lambda_/resource_providers/aws_lambda_codesigningconfig_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_eventinvokeconfig.py +11 -11
- localstack/services/lambda_/resource_providers/aws_lambda_eventinvokeconfig_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_eventsourcemapping.py +39 -39
- localstack/services/lambda_/resource_providers/aws_lambda_eventsourcemapping_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_function.py +54 -54
- localstack/services/lambda_/resource_providers/aws_lambda_function_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_layerversion.py +11 -11
- localstack/services/lambda_/resource_providers/aws_lambda_layerversion_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_layerversionpermission.py +6 -6
- localstack/services/lambda_/resource_providers/aws_lambda_layerversionpermission_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_permission.py +10 -10
- localstack/services/lambda_/resource_providers/aws_lambda_permission_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_url.py +15 -15
- localstack/services/lambda_/resource_providers/aws_lambda_url_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_version.py +8 -8
- localstack/services/lambda_/resource_providers/aws_lambda_version_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/lambda_alias.py +12 -12
- localstack/services/lambda_/resource_providers/lambda_alias_plugin.py +1 -3
- localstack/services/lambda_/runtimes.py +1 -3
- localstack/services/lambda_/urlrouter.py +14 -1
- localstack/services/logs/models.py +1 -3
- localstack/services/logs/provider.py +39 -22
- localstack/services/logs/resource_providers/aws_logs_loggroup.py +9 -9
- localstack/services/logs/resource_providers/aws_logs_loggroup_plugin.py +1 -3
- localstack/services/logs/resource_providers/aws_logs_logstream.py +4 -4
- localstack/services/logs/resource_providers/aws_logs_logstream_plugin.py +1 -3
- localstack/services/logs/resource_providers/aws_logs_subscriptionfilter.py +7 -7
- localstack/services/logs/resource_providers/aws_logs_subscriptionfilter_plugin.py +1 -3
- localstack/services/moto.py +5 -4
- localstack/services/opensearch/cluster.py +28 -20
- localstack/services/opensearch/cluster_manager.py +13 -14
- localstack/services/opensearch/models.py +1 -3
- localstack/services/opensearch/packages.py +27 -9
- localstack/services/opensearch/provider.py +15 -10
- localstack/services/opensearch/resource_providers/aws_elasticsearch_domain.py +61 -61
- localstack/services/opensearch/resource_providers/aws_elasticsearch_domain_plugin.py +1 -3
- localstack/services/opensearch/resource_providers/aws_opensearchservice_domain.py +89 -89
- localstack/services/opensearch/resource_providers/aws_opensearchservice_domain_plugin.py +1 -3
- localstack/services/opensearch/versions.py +57 -10
- localstack/services/plugins.py +37 -32
- localstack/services/providers.py +10 -2
- localstack/services/redshift/provider.py +0 -21
- localstack/services/redshift/resource_providers/aws_redshift_cluster.py +57 -57
- localstack/services/redshift/resource_providers/aws_redshift_cluster_plugin.py +1 -3
- localstack/services/resource_groups/resource_providers/aws_resourcegroups_group.py +21 -21
- localstack/services/resource_groups/resource_providers/aws_resourcegroups_group_plugin.py +1 -3
- localstack/services/route53/models.py +1 -3
- localstack/services/route53/provider.py +1 -2
- localstack/services/route53/resource_providers/aws_route53_healthcheck.py +6 -6
- localstack/services/route53/resource_providers/aws_route53_healthcheck_plugin.py +1 -3
- localstack/services/route53/resource_providers/aws_route53_recordset.py +27 -27
- localstack/services/route53/resource_providers/aws_route53_recordset_plugin.py +1 -3
- localstack/services/route53resolver/models.py +8 -10
- localstack/services/route53resolver/provider.py +12 -12
- localstack/services/s3/codec.py +2 -2
- localstack/services/s3/constants.py +5 -2
- localstack/services/s3/cors.py +8 -8
- localstack/services/s3/models.py +73 -73
- localstack/services/s3/notifications.py +74 -58
- localstack/services/s3/presigned_url.py +41 -59
- localstack/services/s3/provider.py +86 -29
- localstack/services/s3/resource_providers/aws_s3_bucket.py +180 -180
- localstack/services/s3/resource_providers/aws_s3_bucket_plugin.py +1 -3
- localstack/services/s3/resource_providers/aws_s3_bucketpolicy.py +4 -4
- localstack/services/s3/resource_providers/aws_s3_bucketpolicy_plugin.py +1 -3
- localstack/services/s3/storage/core.py +4 -3
- localstack/services/s3/storage/ephemeral.py +7 -6
- localstack/services/s3/utils.py +51 -31
- localstack/services/s3/validation.py +47 -33
- localstack/services/s3/website_hosting.py +9 -7
- localstack/services/scheduler/resource_providers/aws_scheduler_schedule.py +60 -60
- localstack/services/scheduler/resource_providers/aws_scheduler_schedule_plugin.py +1 -3
- localstack/services/scheduler/resource_providers/aws_scheduler_schedulegroup.py +9 -9
- localstack/services/scheduler/resource_providers/aws_scheduler_schedulegroup_plugin.py +1 -3
- localstack/services/secretsmanager/provider.py +10 -12
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_resourcepolicy.py +5 -5
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_resourcepolicy_plugin.py +1 -3
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_rotationschedule.py +21 -21
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_rotationschedule_plugin.py +1 -3
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secret.py +23 -23
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secret_plugin.py +1 -3
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secrettargetattachment.py +5 -5
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secrettargetattachment_plugin.py +1 -3
- localstack/services/ses/models.py +8 -1
- localstack/services/ses/provider.py +128 -55
- localstack/services/ses/resource_providers/aws_ses_emailidentity.py +21 -21
- localstack/services/ses/resource_providers/aws_ses_emailidentity_plugin.py +1 -3
- localstack/services/sns/constants.py +7 -1
- localstack/services/sns/executor.py +9 -2
- localstack/services/sns/models.py +25 -25
- localstack/services/sns/provider.py +9 -7
- localstack/services/sns/publisher.py +37 -23
- localstack/services/sns/resource_providers/aws_sns_subscription.py +13 -13
- localstack/services/sns/resource_providers/aws_sns_subscription_plugin.py +1 -3
- localstack/services/sns/resource_providers/aws_sns_topic.py +16 -16
- localstack/services/sns/resource_providers/aws_sns_topic_plugin.py +1 -3
- localstack/services/sns/resource_providers/aws_sns_topicpolicy.py +4 -4
- localstack/services/sns/resource_providers/aws_sns_topicpolicy_plugin.py +1 -3
- localstack/services/sns/v2/models.py +167 -0
- localstack/services/sns/v2/provider.py +867 -0
- localstack/services/sns/v2/utils.py +130 -0
- localstack/services/sqs/constants.py +2 -2
- localstack/services/sqs/developer_api.py +205 -0
- localstack/services/sqs/models.py +71 -36
- localstack/services/sqs/provider.py +56 -332
- localstack/services/sqs/query_api.py +8 -5
- localstack/services/sqs/resource_providers/aws_sqs_queue.py +21 -21
- localstack/services/sqs/resource_providers/aws_sqs_queue_plugin.py +1 -3
- localstack/services/sqs/resource_providers/aws_sqs_queuepolicy.py +7 -5
- localstack/services/sqs/resource_providers/aws_sqs_queuepolicy_plugin.py +1 -3
- localstack/services/sqs/utils.py +123 -4
- localstack/services/ssm/provider.py +3 -4
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindow.py +15 -15
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindow_plugin.py +1 -3
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtarget.py +10 -10
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtarget_plugin.py +1 -3
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtask.py +48 -48
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtask_plugin.py +1 -3
- localstack/services/ssm/resource_providers/aws_ssm_parameter.py +10 -10
- localstack/services/ssm/resource_providers/aws_ssm_parameter_plugin.py +1 -3
- localstack/services/ssm/resource_providers/aws_ssm_patchbaseline.py +29 -29
- localstack/services/ssm/resource_providers/aws_ssm_patchbaseline_plugin.py +1 -3
- localstack/services/stepfunctions/asl/antlt4utils/antlr4utils.py +3 -4
- localstack/services/stepfunctions/asl/component/common/assign/assign_decl.py +1 -1
- localstack/services/stepfunctions/asl/component/common/assign/assign_decl_binding.py +1 -1
- localstack/services/stepfunctions/asl/component/common/assign/assign_template_value_array.py +1 -1
- localstack/services/stepfunctions/asl/component/common/assign/assign_template_value_object.py +1 -1
- localstack/services/stepfunctions/asl/component/common/catch/catcher_decl.py +9 -9
- localstack/services/stepfunctions/asl/component/common/error_name/custom_error_name.py +2 -2
- localstack/services/stepfunctions/asl/component/common/error_name/error_name.py +4 -4
- localstack/services/stepfunctions/asl/component/common/error_name/failure_event.py +8 -8
- localstack/services/stepfunctions/asl/component/common/error_name/states_error_name_type.py +1 -1
- localstack/services/stepfunctions/asl/component/common/jsonata/jsonata_template_binding.py +2 -2
- localstack/services/stepfunctions/asl/component/common/jsonata/jsonata_template_value_array.py +1 -1
- localstack/services/stepfunctions/asl/component/common/jsonata/jsonata_template_value_object.py +1 -1
- localstack/services/stepfunctions/asl/component/common/path/input_path.py +4 -4
- localstack/services/stepfunctions/asl/component/common/path/output_path.py +4 -4
- localstack/services/stepfunctions/asl/component/common/path/result_path.py +3 -3
- localstack/services/stepfunctions/asl/component/common/payload/payloadvalue/payloadarr/payload_arr.py +1 -1
- localstack/services/stepfunctions/asl/component/common/payload/payloadvalue/payloadbinding/payload_binding.py +3 -3
- localstack/services/stepfunctions/asl/component/common/payload/payloadvalue/payloadtmpl/payload_tmpl.py +1 -1
- localstack/services/stepfunctions/asl/component/common/retry/retrier_decl.py +8 -8
- localstack/services/stepfunctions/asl/component/common/string/string_expression.py +3 -3
- localstack/services/stepfunctions/asl/component/common/timeouts/timeout.py +3 -3
- localstack/services/stepfunctions/asl/component/eval_component.py +2 -3
- localstack/services/stepfunctions/asl/component/intrinsic/argument/argument.py +4 -4
- localstack/services/stepfunctions/asl/component/intrinsic/function/statesfunction/array/array_partition.py +1 -1
- localstack/services/stepfunctions/asl/component/intrinsic/function/statesfunction/generic/string_format.py +1 -1
- localstack/services/stepfunctions/asl/component/intrinsic/function/statesfunction/states_function_array.py +1 -1
- localstack/services/stepfunctions/asl/component/intrinsic/function/statesfunction/states_function_format.py +1 -1
- localstack/services/stepfunctions/asl/component/intrinsic/jsonata.py +3 -3
- localstack/services/stepfunctions/asl/component/intrinsic/member.py +1 -1
- localstack/services/stepfunctions/asl/component/program/program.py +9 -9
- localstack/services/stepfunctions/asl/component/program/states.py +1 -1
- localstack/services/stepfunctions/asl/component/state/state.py +10 -11
- localstack/services/stepfunctions/asl/component/state/state_choice/choice_rule.py +11 -11
- localstack/services/stepfunctions/asl/component/state/state_choice/comparison/comparison.py +5 -11
- localstack/services/stepfunctions/asl/component/state/state_choice/comparison/operator/implementations/is_operator.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_choice/state_choice.py +3 -5
- localstack/services/stepfunctions/asl/component/state/state_execution/execute_state.py +9 -9
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/item_reader_decl.py +7 -7
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/reader_config/reader_config_decl.py +5 -5
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/resource_eval/resource_eval_s3.py +2 -1
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/resource_eval/resource_output_transformer/resource_output_transformer_csv.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/distributed_iteration_component.py +8 -8
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/inline_iteration_component.py +7 -7
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/distributed_item_processor_worker.py +4 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/inline_item_processor_worker.py +5 -5
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/map_run_record.py +10 -10
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_component.py +3 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_declaration.py +3 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_worker.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/distributed_iterator_worker.py +3 -5
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/inline_iterator.py +1 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/inline_iterator_worker.py +5 -5
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/job.py +9 -9
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/result_writer/resource_eval/resource_eval_s3.py +2 -1
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/state_map.py +12 -13
- localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/branch_worker.py +3 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/branches_decl.py +7 -7
- localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/state_parallel.py +2 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/lambda_eval_utils.py +7 -7
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/resource.py +3 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service.py +10 -10
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_api_gateway.py +18 -18
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_aws_sdk.py +1 -1
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_batch.py +8 -7
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_callback.py +18 -17
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_dynamodb.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_ecs.py +5 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_events.py +4 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_glue.py +7 -6
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_lambda.py +4 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sfn.py +9 -8
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sns.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sqs.py +4 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/state_task.py +5 -5
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/state_task_lambda.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_fail/state_fail.py +3 -5
- localstack/services/stepfunctions/asl/component/state/state_pass/state_pass.py +5 -7
- localstack/services/stepfunctions/asl/component/state/state_succeed/state_succeed.py +1 -1
- localstack/services/stepfunctions/asl/component/state/state_wait/state_wait.py +1 -1
- localstack/services/stepfunctions/asl/component/state/state_wait/wait_function/timestamp.py +2 -2
- localstack/services/stepfunctions/asl/eval/callback/callback.py +18 -18
- localstack/services/stepfunctions/asl/eval/environment.py +22 -24
- localstack/services/stepfunctions/asl/eval/evaluation_details.py +3 -5
- localstack/services/stepfunctions/asl/eval/event/event_manager.py +10 -10
- localstack/services/stepfunctions/asl/eval/event/logging.py +3 -3
- localstack/services/stepfunctions/asl/eval/program_state.py +8 -8
- localstack/services/stepfunctions/asl/eval/states.py +12 -12
- localstack/services/stepfunctions/asl/eval/test_state/environment.py +3 -5
- localstack/services/stepfunctions/asl/eval/variable_store.py +6 -6
- localstack/services/stepfunctions/asl/jsonata/jsonata.py +7 -6
- localstack/services/stepfunctions/asl/parse/asl_parser.py +1 -1
- localstack/services/stepfunctions/asl/parse/intrinsic/preprocessor.py +2 -3
- localstack/services/stepfunctions/asl/parse/preprocessor.py +44 -44
- localstack/services/stepfunctions/asl/parse/typed_props.py +2 -2
- localstack/services/stepfunctions/asl/static_analyser/intrinsic/variable_names_intrinsic_static_analyser.py +1 -1
- localstack/services/stepfunctions/asl/static_analyser/variable_references_static_analyser.py +2 -2
- localstack/services/stepfunctions/asl/utils/encoding.py +2 -2
- localstack/services/stepfunctions/asl/utils/json_path.py +2 -2
- localstack/services/stepfunctions/backend/activity.py +4 -4
- localstack/services/stepfunctions/backend/alias.py +8 -8
- localstack/services/stepfunctions/backend/execution.py +29 -30
- localstack/services/stepfunctions/backend/execution_worker.py +7 -7
- localstack/services/stepfunctions/backend/state_machine.py +28 -28
- localstack/services/stepfunctions/backend/test_state/execution.py +3 -4
- localstack/services/stepfunctions/backend/test_state/execution_worker.py +1 -3
- localstack/services/stepfunctions/mocking/mock_config.py +9 -9
- localstack/services/stepfunctions/mocking/mock_config_file.py +10 -10
- localstack/services/stepfunctions/packages.py +14 -5
- localstack/services/stepfunctions/provider.py +34 -44
- localstack/services/stepfunctions/quotas.py +2 -3
- localstack/services/stepfunctions/resource_providers/aws_stepfunctions_activity.py +6 -6
- localstack/services/stepfunctions/resource_providers/aws_stepfunctions_activity_plugin.py +1 -3
- localstack/services/stepfunctions/resource_providers/aws_stepfunctions_statemachine.py +25 -25
- localstack/services/stepfunctions/resource_providers/aws_stepfunctions_statemachine_plugin.py +1 -3
- localstack/services/stepfunctions/stepfunctions_utils.py +1 -2
- localstack/services/stores.py +8 -8
- localstack/services/transcribe/packages.py +1 -3
- localstack/services/transcribe/provider.py +8 -3
- localstack/state/codecs.py +61 -0
- localstack/state/core.py +11 -5
- localstack/state/inspect.py +4 -4
- localstack/state/pickle.py +36 -23
- localstack/testing/aws/asf_utils.py +3 -2
- localstack/testing/aws/cloudformation_utils.py +1 -1
- localstack/testing/aws/lambda_utils.py +15 -14
- localstack/testing/aws/util.py +3 -2
- localstack/testing/pytest/cloudformation/fixtures.py +68 -18
- localstack/testing/pytest/container.py +5 -5
- localstack/testing/pytest/filters.py +1 -3
- localstack/testing/pytest/fixtures.py +188 -49
- localstack/testing/pytest/in_memory_localstack.py +1 -3
- localstack/testing/pytest/marking.py +42 -15
- localstack/testing/pytest/path_filter.py +1 -1
- localstack/testing/pytest/stepfunctions/fixtures.py +4 -4
- localstack/testing/pytest/stepfunctions/utils.py +11 -10
- localstack/testing/pytest/util.py +1 -1
- localstack/testing/pytest/validation_tracking.py +3 -4
- localstack/testing/scenario/provisioning.py +11 -10
- localstack/testing/snapshots/transformer_utility.py +8 -3
- localstack/testing/testselection/matching.py +2 -2
- localstack/testing/testselection/opt_out.py +1 -1
- localstack/testing/testselection/scripts/filter_by_test_selection.py +1 -1
- localstack/testing/testselection/scripts/generate_test_selection.py +1 -1
- localstack/testing/testselection/testselection.py +2 -2
- localstack/utils/analytics/cli.py +2 -3
- localstack/utils/analytics/client.py +5 -5
- localstack/utils/analytics/events.py +2 -2
- localstack/utils/analytics/metadata.py +6 -4
- localstack/utils/analytics/metrics/counter.py +11 -18
- localstack/utils/analytics/metrics/registry.py +2 -2
- localstack/utils/analytics/publisher.py +4 -5
- localstack/utils/analytics/service_providers.py +19 -0
- localstack/utils/analytics/service_request_aggregator.py +4 -4
- localstack/utils/archives.py +12 -12
- localstack/utils/asyncio.py +2 -2
- localstack/utils/aws/arns.py +26 -31
- localstack/utils/aws/aws_responses.py +21 -28
- localstack/utils/aws/aws_stack.py +7 -12
- localstack/utils/aws/dead_letter_queue.py +4 -9
- localstack/utils/aws/message_forwarding.py +8 -11
- localstack/utils/aws/request_context.py +5 -6
- localstack/utils/aws/resources.py +1 -1
- localstack/utils/aws/templating.py +4 -4
- localstack/utils/batch_policy.py +4 -4
- localstack/utils/bootstrap.py +37 -30
- localstack/utils/catalog/catalog.py +139 -0
- localstack/utils/catalog/catalog_loader.py +119 -0
- localstack/utils/catalog/common.py +58 -0
- localstack/utils/catalog/plugins.py +28 -0
- localstack/utils/cloudwatch/cloudwatch_util.py +5 -5
- localstack/utils/collections.py +33 -27
- localstack/utils/config_listener.py +2 -2
- localstack/utils/container_networking.py +5 -6
- localstack/utils/container_utils/container_client.py +156 -160
- localstack/utils/container_utils/docker_cmd_client.py +97 -81
- localstack/utils/container_utils/docker_sdk_client.py +75 -72
- localstack/utils/crypto.py +12 -13
- localstack/utils/diagnose.py +11 -12
- localstack/utils/docker_utils.py +11 -7
- localstack/utils/files.py +34 -15
- localstack/utils/functions.py +5 -4
- localstack/utils/http.py +14 -14
- localstack/utils/iputils.py +2 -1
- localstack/utils/json.py +21 -7
- localstack/utils/kinesis/kinesis_connector.py +2 -1
- localstack/utils/net.py +25 -17
- localstack/utils/no_exit_argument_parser.py +2 -2
- localstack/utils/numbers.py +9 -2
- localstack/utils/objects.py +15 -14
- localstack/utils/patch.py +14 -7
- localstack/utils/platform.py +2 -2
- localstack/utils/run.py +15 -14
- localstack/utils/scheduler.py +13 -12
- localstack/utils/server/tcp_proxy.py +2 -2
- localstack/utils/serving.py +3 -4
- localstack/utils/strings.py +15 -16
- localstack/utils/sync.py +126 -1
- localstack/utils/tagging.py +10 -8
- localstack/utils/testutil.py +17 -17
- localstack/utils/threads.py +3 -3
- localstack/utils/time.py +12 -4
- localstack/utils/urls.py +1 -3
- localstack/utils/xml.py +1 -1
- localstack/utils/xray/traceid.py +1 -1
- localstack/version.py +16 -3
- {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/METADATA +18 -13
- {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/RECORD +663 -655
- {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/entry_points.txt +8 -4
- localstack_core-4.10.1.dev12.dist-info/plux.json +1 -0
- localstack/packages/terraform.py +0 -47
- localstack/services/cloudformation/deploy.html +0 -144
- localstack/services/cloudformation/deploy_ui.py +0 -47
- localstack/services/cloudformation/plugins.py +0 -12
- localstack/services/lambda_/lambda_debug_mode/ldm.py +0 -375
- localstack/services/lambda_/lambda_debug_mode/ldm_config_file.py +0 -178
- localstack/services/lambda_/lambda_debug_mode/ldm_types.py +0 -11
- localstack/services/lambda_/lambda_debug_mode/ldm_utils.py +0 -43
- localstack_core-4.6.1.dev60.dist-info/plux.json +0 -1
- /localstack/{services/lambda_/lambda_debug_mode/__init__.py → testing/pytest/cloudformation/transformers.py} +0 -0
- {localstack_core-4.6.1.dev60.data → localstack_core-4.10.1.dev12.data}/scripts/localstack +0 -0
- {localstack_core-4.6.1.dev60.data → localstack_core-4.10.1.dev12.data}/scripts/localstack-supervisor +0 -0
- {localstack_core-4.6.1.dev60.data → localstack_core-4.10.1.dev12.data}/scripts/localstack.bat +0 -0
- {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/WHEEL +0 -0
- {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/licenses/LICENSE.txt +0 -0
- {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/top_level.txt +0 -0
localstack/config.py
CHANGED
|
@@ -9,7 +9,8 @@ import tempfile
|
|
|
9
9
|
import time
|
|
10
10
|
import warnings
|
|
11
11
|
from collections import defaultdict
|
|
12
|
-
from
|
|
12
|
+
from collections.abc import Mapping
|
|
13
|
+
from typing import Any, TypeVar
|
|
13
14
|
|
|
14
15
|
from localstack import constants
|
|
15
16
|
from localstack.constants import (
|
|
@@ -18,6 +19,7 @@ from localstack.constants import (
|
|
|
18
19
|
DEFAULT_VOLUME_DIR,
|
|
19
20
|
ENV_INTERNAL_TEST_COLLECT_METRIC,
|
|
20
21
|
ENV_INTERNAL_TEST_RUN,
|
|
22
|
+
ENV_INTERNAL_TEST_STORE_METRICS_IN_LOCALSTACK,
|
|
21
23
|
FALSE_STRINGS,
|
|
22
24
|
LOCALHOST,
|
|
23
25
|
LOCALHOST_IP,
|
|
@@ -207,13 +209,13 @@ class Directories:
|
|
|
207
209
|
return str(self.__dict__)
|
|
208
210
|
|
|
209
211
|
|
|
210
|
-
def eval_log_type(env_var_name: str) ->
|
|
212
|
+
def eval_log_type(env_var_name: str) -> str | bool:
|
|
211
213
|
"""Get the log type from environment variable"""
|
|
212
214
|
ls_log = os.environ.get(env_var_name, "").lower().strip()
|
|
213
215
|
return ls_log if ls_log in LOG_LEVELS else False
|
|
214
216
|
|
|
215
217
|
|
|
216
|
-
def parse_boolean_env(env_var_name: str) ->
|
|
218
|
+
def parse_boolean_env(env_var_name: str) -> bool | None:
|
|
217
219
|
"""Parse the value of the given env variable and return True/False, or None if it is not a boolean value."""
|
|
218
220
|
value = os.environ.get(env_var_name, "").lower().strip()
|
|
219
221
|
if value in TRUE_STRINGS:
|
|
@@ -233,7 +235,7 @@ def is_env_not_false(env_var_name: str) -> bool:
|
|
|
233
235
|
return os.environ.get(env_var_name, "").lower().strip() not in FALSE_STRINGS
|
|
234
236
|
|
|
235
237
|
|
|
236
|
-
def load_environment(profiles: str = None, env=os.environ) ->
|
|
238
|
+
def load_environment(profiles: str = None, env=os.environ) -> list[str]:
|
|
237
239
|
"""Loads the environment variables from ~/.localstack/{profile}.env, for each profile listed in the profiles.
|
|
238
240
|
:param env: environment to load profile to. Defaults to `os.environ`
|
|
239
241
|
:param profiles: a comma separated list of profiles to load (defaults to "default")
|
|
@@ -285,7 +287,7 @@ def ping(host):
|
|
|
285
287
|
"""Returns True if the host responds to a ping request"""
|
|
286
288
|
is_in_windows = is_windows()
|
|
287
289
|
ping_opts = "-n 1 -w 2000" if is_in_windows else "-c 1 -W 2"
|
|
288
|
-
args = "ping
|
|
290
|
+
args = f"ping {ping_opts} {host}"
|
|
289
291
|
return (
|
|
290
292
|
subprocess.call(
|
|
291
293
|
args, shell=not is_in_windows, stdout=subprocess.PIPE, stderr=subprocess.PIPE
|
|
@@ -337,7 +339,7 @@ def in_docker():
|
|
|
337
339
|
return False
|
|
338
340
|
except Exception:
|
|
339
341
|
pass
|
|
340
|
-
with open("/proc/1/cgroup"
|
|
342
|
+
with open("/proc/1/cgroup") as ifh:
|
|
341
343
|
content = ifh.read()
|
|
342
344
|
if "docker" in content or "buildkit" in content:
|
|
343
345
|
return True
|
|
@@ -348,7 +350,7 @@ def in_docker():
|
|
|
348
350
|
# containerd does not set any specific file or config, but it does use
|
|
349
351
|
# io.containerd.snapshotter.v1.overlayfs as the overlay filesystem for `/`.
|
|
350
352
|
try:
|
|
351
|
-
with open("/proc/mounts"
|
|
353
|
+
with open("/proc/mounts") as infile:
|
|
352
354
|
for line in infile:
|
|
353
355
|
line = line.strip()
|
|
354
356
|
|
|
@@ -434,8 +436,8 @@ TMP_FOLDER = os.path.join(tempfile.gettempdir(), "localstack")
|
|
|
434
436
|
VOLUME_DIR = os.environ.get("LOCALSTACK_VOLUME_DIR", "").strip() or TMP_FOLDER
|
|
435
437
|
|
|
436
438
|
# fix for Mac OS, to be able to mount /var/folders in Docker
|
|
437
|
-
if TMP_FOLDER.startswith("/var/folders/") and os.path.exists("/private
|
|
438
|
-
TMP_FOLDER = "/private
|
|
439
|
+
if TMP_FOLDER.startswith("/var/folders/") and os.path.exists(f"/private{TMP_FOLDER}"):
|
|
440
|
+
TMP_FOLDER = f"/private{TMP_FOLDER}"
|
|
439
441
|
|
|
440
442
|
# whether to enable verbose debug logging ("LOG" is used when using the CLI with LOCALSTACK_LOG instead of LS_LOG)
|
|
441
443
|
LS_LOG = eval_log_type("LS_LOG") or eval_log_type("LOG")
|
|
@@ -603,9 +605,7 @@ class HostAndPort:
|
|
|
603
605
|
|
|
604
606
|
def _get_unprivileged_port_range_start(self) -> int:
|
|
605
607
|
try:
|
|
606
|
-
with open(
|
|
607
|
-
"/proc/sys/net/ipv4/ip_unprivileged_port_start", "rt"
|
|
608
|
-
) as unprivileged_port_start:
|
|
608
|
+
with open("/proc/sys/net/ipv4/ip_unprivileged_port_start") as unprivileged_port_start:
|
|
609
609
|
port = unprivileged_port_start.read()
|
|
610
610
|
return int(port.strip())
|
|
611
611
|
except Exception:
|
|
@@ -637,7 +637,7 @@ class HostAndPort:
|
|
|
637
637
|
return f"HostAndPort(host={self.host}, port={self.port})"
|
|
638
638
|
|
|
639
639
|
|
|
640
|
-
class UniqueHostAndPortList(
|
|
640
|
+
class UniqueHostAndPortList(list[HostAndPort]):
|
|
641
641
|
"""
|
|
642
642
|
Container type that ensures that ports added to the list are unique based
|
|
643
643
|
on these rules:
|
|
@@ -650,7 +650,7 @@ class UniqueHostAndPortList(List[HostAndPort]):
|
|
|
650
650
|
- Identical identical hosts and ports are de-duped
|
|
651
651
|
"""
|
|
652
652
|
|
|
653
|
-
def __init__(self, iterable:
|
|
653
|
+
def __init__(self, iterable: list[HostAndPort] | None = None):
|
|
654
654
|
super().__init__(iterable or [])
|
|
655
655
|
self._ensure_unique()
|
|
656
656
|
|
|
@@ -661,10 +661,10 @@ class UniqueHostAndPortList(List[HostAndPort]):
|
|
|
661
661
|
if len(self) <= 1:
|
|
662
662
|
return
|
|
663
663
|
|
|
664
|
-
unique:
|
|
664
|
+
unique: list[HostAndPort] = []
|
|
665
665
|
|
|
666
666
|
# Build a dictionary of hosts by port
|
|
667
|
-
hosts_by_port:
|
|
667
|
+
hosts_by_port: dict[int, list[str]] = defaultdict(list)
|
|
668
668
|
for item in self:
|
|
669
669
|
hosts_by_port[item.port].append(item.host)
|
|
670
670
|
|
|
@@ -696,7 +696,7 @@ class UniqueHostAndPortList(List[HostAndPort]):
|
|
|
696
696
|
|
|
697
697
|
def populate_edge_configuration(
|
|
698
698
|
environment: Mapping[str, str],
|
|
699
|
-
) ->
|
|
699
|
+
) -> tuple[HostAndPort, UniqueHostAndPortList]:
|
|
700
700
|
"""Populate the LocalStack edge configuration from environment variables."""
|
|
701
701
|
localstack_host_raw = environment.get("LOCALSTACK_HOST")
|
|
702
702
|
gateway_listen_raw = environment.get("GATEWAY_LISTEN")
|
|
@@ -824,6 +824,9 @@ OPENAPI_VALIDATE_RESPONSE = is_env_true("OPENAPI_VALIDATE_RESPONSE")
|
|
|
824
824
|
# Flag to enable the validation of the requests made to the LocalStack internal endpoints. Active by default.
|
|
825
825
|
OPENAPI_VALIDATE_REQUEST = is_env_true("OPENAPI_VALIDATE_REQUEST")
|
|
826
826
|
|
|
827
|
+
# environment variable to determine whether to include stack traces in http responses
|
|
828
|
+
INCLUDE_STACK_TRACES_IN_HTTP_RESPONSE = is_env_true("INCLUDE_STACK_TRACES_IN_HTTP_RESPONSE")
|
|
829
|
+
|
|
827
830
|
# whether to skip waiting for the infrastructure to shut down, or exit immediately
|
|
828
831
|
FORCE_SHUTDOWN = is_env_not_false("FORCE_SHUTDOWN")
|
|
829
832
|
|
|
@@ -1182,6 +1185,8 @@ elif _override_dynamodb_v2 == "v2":
|
|
|
1182
1185
|
os.environ["PROVIDER_OVERRIDE_DYNAMODBSTREAMS"] = "v2"
|
|
1183
1186
|
DDB_STREAMS_PROVIDER_V2 = True
|
|
1184
1187
|
|
|
1188
|
+
SNS_PROVIDER_V2 = os.environ.get("PROVIDER_OVERRIDE_SNS", "") == "v2"
|
|
1189
|
+
|
|
1185
1190
|
# TODO remove fallback to LAMBDA_DOCKER_NETWORK with next minor version
|
|
1186
1191
|
MAIN_DOCKER_NETWORK = os.environ.get("MAIN_DOCKER_NETWORK", "") or LAMBDA_DOCKER_NETWORK
|
|
1187
1192
|
|
|
@@ -1235,8 +1240,8 @@ def use_custom_dns():
|
|
|
1235
1240
|
|
|
1236
1241
|
|
|
1237
1242
|
# s3 virtual host name
|
|
1238
|
-
S3_VIRTUAL_HOSTNAME = "s3
|
|
1239
|
-
S3_STATIC_WEBSITE_HOSTNAME = "s3-website
|
|
1243
|
+
S3_VIRTUAL_HOSTNAME = f"s3.{LOCALSTACK_HOST.host}"
|
|
1244
|
+
S3_STATIC_WEBSITE_HOSTNAME = f"s3-website.{LOCALSTACK_HOST.host}"
|
|
1240
1245
|
|
|
1241
1246
|
BOTO_WAITER_DELAY = int(os.environ.get("BOTO_WAITER_DELAY") or "1")
|
|
1242
1247
|
BOTO_WAITER_MAX_ATTEMPTS = int(os.environ.get("BOTO_WAITER_MAX_ATTEMPTS") or "120")
|
|
@@ -1254,6 +1259,9 @@ IN_MEMORY_CLIENT = is_env_true("IN_MEMORY_CLIENT")
|
|
|
1254
1259
|
# This flag enables all responses from LocalStack to contain a `x-localstack` HTTP header.
|
|
1255
1260
|
LOCALSTACK_RESPONSE_HEADER_ENABLED = is_env_not_false("LOCALSTACK_RESPONSE_HEADER_ENABLED")
|
|
1256
1261
|
|
|
1262
|
+
# Serialization backend for the LocalStack internal state (`dill` is used by default`).
|
|
1263
|
+
STATE_SERIALIZATION_BACKEND = os.environ.get("STATE_SERIALIZATION_BACKEND", "").strip() or "dill"
|
|
1264
|
+
|
|
1257
1265
|
# List of environment variable names used for configuration that are passed from the host into the LocalStack container.
|
|
1258
1266
|
# => Synchronize this list with the above and the configuration docs:
|
|
1259
1267
|
# https://docs.localstack.cloud/references/configuration/
|
|
@@ -1390,6 +1398,7 @@ CONFIG_ENV_VARS = [
|
|
|
1390
1398
|
"SQS_ENDPOINT_STRATEGY",
|
|
1391
1399
|
"SQS_DISABLE_CLOUDWATCH_METRICS",
|
|
1392
1400
|
"SQS_CLOUDWATCH_METRICS_REPORT_INTERVAL",
|
|
1401
|
+
"STATE_SERIALIZATION_BACKEND",
|
|
1393
1402
|
"STRICT_SERVICE_LOADING",
|
|
1394
1403
|
"TF_COMPAT_MODE",
|
|
1395
1404
|
"USE_SSL",
|
|
@@ -1443,7 +1452,12 @@ def is_collect_metrics_mode() -> bool:
|
|
|
1443
1452
|
return is_env_true(ENV_INTERNAL_TEST_COLLECT_METRIC)
|
|
1444
1453
|
|
|
1445
1454
|
|
|
1446
|
-
def
|
|
1455
|
+
def store_test_metrics_in_local_filesystem() -> bool:
|
|
1456
|
+
"""Returns True if test metrics should be stored in the local filesystem (instead of the system that runs pytest)."""
|
|
1457
|
+
return is_env_true(ENV_INTERNAL_TEST_STORE_METRICS_IN_LOCALSTACK)
|
|
1458
|
+
|
|
1459
|
+
|
|
1460
|
+
def collect_config_items() -> list[tuple[str, Any]]:
|
|
1447
1461
|
"""Returns a list of key-value tuples of LocalStack configuration values."""
|
|
1448
1462
|
none = object() # sentinel object
|
|
1449
1463
|
|
|
@@ -1495,10 +1509,10 @@ def get_protocol() -> str:
|
|
|
1495
1509
|
|
|
1496
1510
|
|
|
1497
1511
|
def external_service_url(
|
|
1498
|
-
host:
|
|
1499
|
-
port:
|
|
1500
|
-
protocol:
|
|
1501
|
-
subdomains:
|
|
1512
|
+
host: str | None = None,
|
|
1513
|
+
port: int | None = None,
|
|
1514
|
+
protocol: str | None = None,
|
|
1515
|
+
subdomains: str | None = None,
|
|
1502
1516
|
) -> str:
|
|
1503
1517
|
"""Returns a service URL (e.g., SQS queue URL) to an external client (e.g., boto3) potentially running on another
|
|
1504
1518
|
machine than LocalStack. The configurations LOCALSTACK_HOST and USE_SSL can customize these returned URLs.
|
|
@@ -1515,10 +1529,10 @@ def external_service_url(
|
|
|
1515
1529
|
|
|
1516
1530
|
|
|
1517
1531
|
def internal_service_url(
|
|
1518
|
-
host:
|
|
1519
|
-
port:
|
|
1520
|
-
protocol:
|
|
1521
|
-
subdomains:
|
|
1532
|
+
host: str | None = None,
|
|
1533
|
+
port: int | None = None,
|
|
1534
|
+
protocol: str | None = None,
|
|
1535
|
+
subdomains: str | None = None,
|
|
1522
1536
|
) -> str:
|
|
1523
1537
|
"""Returns a service URL for internal use within LocalStack (i.e., same host).
|
|
1524
1538
|
The configuration USE_SSL can customize these returned URLs but LOCALSTACK_HOST has no effect.
|
|
@@ -1593,7 +1607,7 @@ def get_edge_url(localstack_hostname=None, protocol=None):
|
|
|
1593
1607
|
|
|
1594
1608
|
|
|
1595
1609
|
class ServiceProviderConfig(Mapping[str, str]):
|
|
1596
|
-
_provider_config:
|
|
1610
|
+
_provider_config: dict[str, str]
|
|
1597
1611
|
default_value: str
|
|
1598
1612
|
override_prefix: str = "PROVIDER_OVERRIDE_"
|
|
1599
1613
|
|
|
@@ -1618,7 +1632,7 @@ class ServiceProviderConfig(Mapping[str, str]):
|
|
|
1618
1632
|
def set_provider(self, service: str, provider: str):
|
|
1619
1633
|
self._provider_config[service] = provider
|
|
1620
1634
|
|
|
1621
|
-
def bulk_set_provider_if_not_exists(self, services:
|
|
1635
|
+
def bulk_set_provider_if_not_exists(self, services: list[str], provider: str):
|
|
1622
1636
|
for service in services:
|
|
1623
1637
|
self.set_provider_if_not_exists(service, provider)
|
|
1624
1638
|
|
localstack/constants.py
CHANGED
|
@@ -80,6 +80,10 @@ ENV_INTERNAL_TEST_RUN = "LOCALSTACK_INTERNAL_TEST_RUN"
|
|
|
80
80
|
# environment variable name to tag collect metrics during a test run
|
|
81
81
|
ENV_INTERNAL_TEST_COLLECT_METRIC = "LOCALSTACK_INTERNAL_TEST_COLLECT_METRIC"
|
|
82
82
|
|
|
83
|
+
# environment variable name to indicate that metrics should be stored within the container
|
|
84
|
+
ENV_INTERNAL_TEST_STORE_METRICS_IN_LOCALSTACK = "LOCALSTACK_INTERNAL_TEST_METRICS_IN_LOCALSTACK"
|
|
85
|
+
ENV_INTERNAL_TEST_STORE_METRICS_PATH = "LOCALSTACK_INTERNAL_TEST_STORE_METRICS_PATH"
|
|
86
|
+
|
|
83
87
|
# environment variable that flags whether pro was activated. do not use it for security purposes!
|
|
84
88
|
ENV_PRO_ACTIVATED = "PRO_ACTIVATED"
|
|
85
89
|
|
|
@@ -102,32 +106,6 @@ FALSE_STRINGS = ("0", "false", "False")
|
|
|
102
106
|
# strings with valid log levels for LS_LOG
|
|
103
107
|
LOG_LEVELS = ("trace-internal", "trace", "debug", "info", "warn", "error", "warning")
|
|
104
108
|
|
|
105
|
-
# the version of elasticsearch that is pre-seeded into the base image (sync with Dockerfile.base)
|
|
106
|
-
ELASTICSEARCH_DEFAULT_VERSION = "Elasticsearch_7.10"
|
|
107
|
-
# See https://docs.aws.amazon.com/ja_jp/elasticsearch-service/latest/developerguide/aes-supported-plugins.html
|
|
108
|
-
ELASTICSEARCH_PLUGIN_LIST = [
|
|
109
|
-
"analysis-icu",
|
|
110
|
-
"ingest-attachment",
|
|
111
|
-
"analysis-kuromoji",
|
|
112
|
-
"mapper-murmur3",
|
|
113
|
-
"mapper-size",
|
|
114
|
-
"analysis-phonetic",
|
|
115
|
-
"analysis-smartcn",
|
|
116
|
-
"analysis-stempel",
|
|
117
|
-
"analysis-ukrainian",
|
|
118
|
-
]
|
|
119
|
-
# Default ES modules to exclude (save apprx 66MB in the final image)
|
|
120
|
-
ELASTICSEARCH_DELETE_MODULES = ["ingest-geoip"]
|
|
121
|
-
|
|
122
|
-
# the version of opensearch which is used by default
|
|
123
|
-
OPENSEARCH_DEFAULT_VERSION = "OpenSearch_2.11"
|
|
124
|
-
|
|
125
|
-
# See https://docs.aws.amazon.com/opensearch-service/latest/developerguide/supported-plugins.html
|
|
126
|
-
OPENSEARCH_PLUGIN_LIST = [
|
|
127
|
-
"ingest-attachment",
|
|
128
|
-
"analysis-kuromoji",
|
|
129
|
-
]
|
|
130
|
-
|
|
131
109
|
# API endpoint for analytics events
|
|
132
110
|
API_ENDPOINT = os.environ.get("API_ENDPOINT") or "https://api.localstack.cloud/v1"
|
|
133
111
|
# new analytics API endpoint
|
|
@@ -171,9 +149,6 @@ DEFAULT_DEVELOP_PORT = 5678
|
|
|
171
149
|
DEFAULT_BUCKET_MARKER_LOCAL = "hot-reload"
|
|
172
150
|
LEGACY_DEFAULT_BUCKET_MARKER_LOCAL = "__local__"
|
|
173
151
|
|
|
174
|
-
# user that starts the opensearch process if the current user is root
|
|
175
|
-
OS_USER_OPENSEARCH = "localstack"
|
|
176
|
-
|
|
177
152
|
# output string that indicates that the stack is ready
|
|
178
153
|
READY_MARKER_OUTPUT = "Ready."
|
|
179
154
|
|
localstack/deprecations.py
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# A simple module to track deprecations over time / versions, and some simple functions guiding the affected users.
|
|
2
2
|
import logging
|
|
3
3
|
import os
|
|
4
|
+
from collections.abc import Callable
|
|
4
5
|
from dataclasses import dataclass
|
|
5
|
-
from typing import Callable, List, Optional
|
|
6
6
|
|
|
7
7
|
from localstack.utils.analytics import log
|
|
8
8
|
|
|
@@ -329,8 +329,8 @@ DEPRECATIONS = [
|
|
|
329
329
|
|
|
330
330
|
|
|
331
331
|
def collect_affected_deprecations(
|
|
332
|
-
deprecations:
|
|
333
|
-
) ->
|
|
332
|
+
deprecations: list[EnvVarDeprecation] | None = None,
|
|
333
|
+
) -> list[EnvVarDeprecation]:
|
|
334
334
|
"""
|
|
335
335
|
Collects all deprecations which are used in the OS environ.
|
|
336
336
|
:param deprecations: List of deprecations to check. Uses DEPRECATIONS list by default.
|
|
@@ -341,7 +341,7 @@ def collect_affected_deprecations(
|
|
|
341
341
|
return [deprecation for deprecation in deprecations if deprecation.is_affected]
|
|
342
342
|
|
|
343
343
|
|
|
344
|
-
def log_env_warning(deprecations:
|
|
344
|
+
def log_env_warning(deprecations: list[EnvVarDeprecation]) -> None:
|
|
345
345
|
"""
|
|
346
346
|
Logs warnings for the given deprecations.
|
|
347
347
|
:param deprecations: list of affected deprecations to show a warning for
|
|
@@ -368,7 +368,7 @@ def log_env_warning(deprecations: List[EnvVarDeprecation]) -> None:
|
|
|
368
368
|
log.event(event="deprecated_env_usage", payload={"deprecated_env_vars": env_vars})
|
|
369
369
|
|
|
370
370
|
|
|
371
|
-
def log_deprecation_warnings(deprecations:
|
|
371
|
+
def log_deprecation_warnings(deprecations: list[EnvVarDeprecation] | None = None) -> None:
|
|
372
372
|
affected_deprecations = collect_affected_deprecations(deprecations)
|
|
373
373
|
log_env_warning(affected_deprecations)
|
|
374
374
|
|
|
@@ -5,6 +5,12 @@ from typing import Literal
|
|
|
5
5
|
import click
|
|
6
6
|
import yaml
|
|
7
7
|
|
|
8
|
+
EDGE_SERVICE_NODE_PORT = 30066
|
|
9
|
+
NODE_PORT_START = 30010
|
|
10
|
+
SERVICE_PORT_START = 4510
|
|
11
|
+
NUMBER_OF_SERVICE_PORTS = 50
|
|
12
|
+
EDGE_SERVICE_DNS_PORT = 31053
|
|
13
|
+
|
|
8
14
|
|
|
9
15
|
@dataclasses.dataclass
|
|
10
16
|
class MountPoint:
|
|
@@ -27,7 +33,7 @@ def generate_mount_points(
|
|
|
27
33
|
|
|
28
34
|
# container paths
|
|
29
35
|
target_path = "/opt/code/localstack/"
|
|
30
|
-
venv_path = os.path.join(target_path, ".venv", "lib", "python3.
|
|
36
|
+
venv_path = os.path.join(target_path, ".venv", "lib", "python3.13", "site-packages")
|
|
31
37
|
|
|
32
38
|
# Community code
|
|
33
39
|
if pro:
|
|
@@ -139,7 +145,12 @@ def generate_mount_points(
|
|
|
139
145
|
return mount_points
|
|
140
146
|
|
|
141
147
|
|
|
142
|
-
def generate_k8s_cluster_config(
|
|
148
|
+
def generate_k8s_cluster_config(
|
|
149
|
+
mount_points: list[MountPoint],
|
|
150
|
+
port: int = 4566,
|
|
151
|
+
expose_dns: bool = False,
|
|
152
|
+
dns_port: int = 53,
|
|
153
|
+
):
|
|
143
154
|
volumes = [
|
|
144
155
|
{
|
|
145
156
|
"volume": f"{mount_point.host_path}:{mount_point.node_path}",
|
|
@@ -148,9 +159,64 @@ def generate_k8s_cluster_config(mount_points: list[MountPoint], port: int = 4566
|
|
|
148
159
|
for mount_point in mount_points
|
|
149
160
|
]
|
|
150
161
|
|
|
151
|
-
ports = [
|
|
162
|
+
ports = [
|
|
163
|
+
# main gateway port
|
|
164
|
+
{
|
|
165
|
+
"nodeFilters": [
|
|
166
|
+
"server:0",
|
|
167
|
+
],
|
|
168
|
+
"port": f"{port}:{EDGE_SERVICE_NODE_PORT}",
|
|
169
|
+
},
|
|
170
|
+
# 443 https port for main gateway
|
|
171
|
+
{
|
|
172
|
+
"nodeFilters": [
|
|
173
|
+
"server:0",
|
|
174
|
+
],
|
|
175
|
+
"port": f"443:{EDGE_SERVICE_NODE_PORT}",
|
|
176
|
+
},
|
|
177
|
+
# Node ports
|
|
178
|
+
{
|
|
179
|
+
"nodeFilters": [
|
|
180
|
+
"server:0",
|
|
181
|
+
],
|
|
182
|
+
"port": f"{SERVICE_PORT_START}-{SERVICE_PORT_START + NUMBER_OF_SERVICE_PORTS - 1}:{NODE_PORT_START}-{NODE_PORT_START + NUMBER_OF_SERVICE_PORTS - 1}",
|
|
183
|
+
},
|
|
184
|
+
]
|
|
152
185
|
|
|
153
|
-
|
|
186
|
+
if expose_dns:
|
|
187
|
+
ports.append(
|
|
188
|
+
{
|
|
189
|
+
"nodeFilters": [
|
|
190
|
+
"server:0",
|
|
191
|
+
],
|
|
192
|
+
"port": f"{dns_port}:{EDGE_SERVICE_DNS_PORT}/udp",
|
|
193
|
+
}
|
|
194
|
+
)
|
|
195
|
+
ports.append(
|
|
196
|
+
{
|
|
197
|
+
"nodeFilters": [
|
|
198
|
+
"server:0",
|
|
199
|
+
],
|
|
200
|
+
"port": f"{dns_port}:{EDGE_SERVICE_DNS_PORT}/tcp",
|
|
201
|
+
}
|
|
202
|
+
)
|
|
203
|
+
|
|
204
|
+
config = {
|
|
205
|
+
"apiVersion": "k3d.io/v1alpha5",
|
|
206
|
+
"kind": "Simple",
|
|
207
|
+
"volumes": volumes,
|
|
208
|
+
"ports": ports,
|
|
209
|
+
"options": {
|
|
210
|
+
"k3s": {
|
|
211
|
+
"extraArgs": [
|
|
212
|
+
{
|
|
213
|
+
"arg": "--kubelet-arg=container-log-max-size=1Gi",
|
|
214
|
+
"nodeFilters": ["server:*"],
|
|
215
|
+
},
|
|
216
|
+
],
|
|
217
|
+
},
|
|
218
|
+
},
|
|
219
|
+
}
|
|
154
220
|
|
|
155
221
|
return config
|
|
156
222
|
|
|
@@ -159,7 +225,7 @@ def snake_to_kebab_case(string: str):
|
|
|
159
225
|
return string.lower().replace("_", "-")
|
|
160
226
|
|
|
161
227
|
|
|
162
|
-
def
|
|
228
|
+
def generate_k8s_helm_overrides(
|
|
163
229
|
mount_points: list[MountPoint], pro: bool = False, env: list[str] | None = None
|
|
164
230
|
):
|
|
165
231
|
volumes = [
|
|
@@ -200,10 +266,48 @@ def generate_k8s_cluster_overrides(
|
|
|
200
266
|
"name": "CONTAINER_RUNTIME",
|
|
201
267
|
"value": "kubernetes",
|
|
202
268
|
},
|
|
269
|
+
{
|
|
270
|
+
"name": "RDS_MYSQL_DOCKER",
|
|
271
|
+
"value": "1",
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
"name": "ENABLE_DMS",
|
|
275
|
+
"value": "1",
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
"name": "ENABLE_BEDROCK",
|
|
279
|
+
"value": "1",
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
"name": "DOCDB_PROXY_CONTAINER",
|
|
283
|
+
"value": "1",
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
"name": "GLUE_JOB_EXECUTOR_PROVIDER",
|
|
287
|
+
"value": "v2",
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
"name": "CLOUDFRONT_LAMBDA_EDGE",
|
|
291
|
+
"value": "1",
|
|
292
|
+
},
|
|
203
293
|
]
|
|
204
294
|
|
|
205
295
|
image_repository = "localstack/localstack-pro" if pro else "localstack/localstack"
|
|
206
296
|
|
|
297
|
+
service = {
|
|
298
|
+
"edgeService": {
|
|
299
|
+
"nodePort": EDGE_SERVICE_NODE_PORT,
|
|
300
|
+
},
|
|
301
|
+
"externalServicePorts": {
|
|
302
|
+
"start": SERVICE_PORT_START,
|
|
303
|
+
"end": SERVICE_PORT_START + NUMBER_OF_SERVICE_PORTS,
|
|
304
|
+
"nodePortStart": NODE_PORT_START,
|
|
305
|
+
},
|
|
306
|
+
"dnsService": {
|
|
307
|
+
"enabled": True,
|
|
308
|
+
"nodePort": EDGE_SERVICE_DNS_PORT,
|
|
309
|
+
},
|
|
310
|
+
}
|
|
207
311
|
overrides = {
|
|
208
312
|
"debug": True,
|
|
209
313
|
"volumes": volumes,
|
|
@@ -211,6 +315,9 @@ def generate_k8s_cluster_overrides(
|
|
|
211
315
|
"extraEnvVars": extra_env_vars,
|
|
212
316
|
"image": {"repository": image_repository},
|
|
213
317
|
"lambda": {"executor": "kubernetes"},
|
|
318
|
+
"service": service,
|
|
319
|
+
"readinessProbe": {"initialDelaySeconds": 10},
|
|
320
|
+
"livenessProbe": {"initialDelaySeconds": 10},
|
|
214
321
|
}
|
|
215
322
|
|
|
216
323
|
return overrides
|
|
@@ -275,6 +382,18 @@ def print_file(content: dict, file_name: str):
|
|
|
275
382
|
help="Port to expose from the kubernetes node",
|
|
276
383
|
type=click.IntRange(0, 65535),
|
|
277
384
|
)
|
|
385
|
+
@click.option(
|
|
386
|
+
"--expose-dns",
|
|
387
|
+
is_flag=True,
|
|
388
|
+
default=False,
|
|
389
|
+
help="Expose DNS port from the kubernetes node.",
|
|
390
|
+
)
|
|
391
|
+
@click.option(
|
|
392
|
+
"--dns-port",
|
|
393
|
+
default=53,
|
|
394
|
+
help="DNS port to expose from the kubernetes node. It is applied only if --expose-dns is set.",
|
|
395
|
+
type=click.IntRange(0, 65535),
|
|
396
|
+
)
|
|
278
397
|
@click.argument("command", nargs=-1, required=False)
|
|
279
398
|
def run(
|
|
280
399
|
pro: bool = None,
|
|
@@ -287,15 +406,19 @@ def run(
|
|
|
287
406
|
command: str = None,
|
|
288
407
|
env: list[str] = None,
|
|
289
408
|
port: int = None,
|
|
409
|
+
expose_dns: bool = False,
|
|
410
|
+
dns_port: int = 53,
|
|
290
411
|
):
|
|
291
412
|
"""
|
|
292
413
|
A tool for localstack developers to generate the kubernetes cluster configuration file and the overrides to mount the localstack code into the cluster.
|
|
293
414
|
"""
|
|
294
415
|
mount_points = generate_mount_points(pro, mount_moto, mount_entrypoints)
|
|
295
416
|
|
|
296
|
-
config = generate_k8s_cluster_config(
|
|
417
|
+
config = generate_k8s_cluster_config(
|
|
418
|
+
mount_points, port=port, expose_dns=expose_dns, dns_port=dns_port
|
|
419
|
+
)
|
|
297
420
|
|
|
298
|
-
overrides =
|
|
421
|
+
overrides = generate_k8s_helm_overrides(mount_points, pro=pro, env=env)
|
|
299
422
|
|
|
300
423
|
output_dir = output_dir or os.getcwd()
|
|
301
424
|
overrides_file = overrides_file or "overrides.yml"
|
localstack/dev/run/__main__.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import dataclasses
|
|
2
2
|
import os
|
|
3
|
-
from
|
|
3
|
+
from collections.abc import Iterable
|
|
4
4
|
|
|
5
5
|
import click
|
|
6
6
|
from rich.rule import Rule
|
|
@@ -133,9 +133,9 @@ def run(
|
|
|
133
133
|
mount_dependencies: bool = False,
|
|
134
134
|
mount_entrypoints: bool = False,
|
|
135
135
|
mount_docker_socket: bool = True,
|
|
136
|
-
env:
|
|
137
|
-
volume:
|
|
138
|
-
publish:
|
|
136
|
+
env: tuple = (),
|
|
137
|
+
volume: tuple = (),
|
|
138
|
+
publish: tuple = (),
|
|
139
139
|
entrypoint: str = None,
|
|
140
140
|
network: str = None,
|
|
141
141
|
local_packages: list[str] | None = None,
|
|
@@ -266,7 +266,7 @@ def run(
|
|
|
266
266
|
remove=True,
|
|
267
267
|
interactive=True,
|
|
268
268
|
tty=True,
|
|
269
|
-
env_vars=
|
|
269
|
+
env_vars={},
|
|
270
270
|
volumes=VolumeMappings(),
|
|
271
271
|
ports=PortMappings(),
|
|
272
272
|
network=network,
|
|
@@ -363,10 +363,7 @@ def _list_files_in_container_image(container_client: ContainerClient, image_name
|
|
|
363
363
|
try:
|
|
364
364
|
# docker export yields paths without prefixed slashes, so we add them here
|
|
365
365
|
# since the file is pretty big (~4MB for community, ~7MB for pro) we gzip it
|
|
366
|
-
cmd = "docker export
|
|
367
|
-
container_id,
|
|
368
|
-
cache_file,
|
|
369
|
-
)
|
|
366
|
+
cmd = f"docker export {container_id} | tar -t | awk '{{ print \"/\" $0 }}' | gzip > {cache_file}"
|
|
370
367
|
run(cmd, shell=True)
|
|
371
368
|
finally:
|
|
372
369
|
container_client.remove_container(container_id)
|
localstack/dev/run/paths.py
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"""Utilities to resolve important paths on the host and in the container."""
|
|
2
2
|
|
|
3
3
|
import os
|
|
4
|
+
from collections.abc import Callable
|
|
4
5
|
from pathlib import Path
|
|
5
|
-
from typing import Callable, Optional, Union
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
class HostPaths:
|
|
@@ -20,9 +20,9 @@ class HostPaths:
|
|
|
20
20
|
|
|
21
21
|
def __init__(
|
|
22
22
|
self,
|
|
23
|
-
workspace_dir:
|
|
24
|
-
volume_dir:
|
|
25
|
-
venv_dir:
|
|
23
|
+
workspace_dir: os.PathLike | str = None,
|
|
24
|
+
volume_dir: os.PathLike | str = None,
|
|
25
|
+
venv_dir: os.PathLike | str = None,
|
|
26
26
|
):
|
|
27
27
|
self.workspace_dir = Path(workspace_dir or os.path.abspath(os.path.join(os.getcwd(), "..")))
|
|
28
28
|
self.localstack_project_dir = self.workspace_dir / "localstack"
|
|
@@ -68,11 +68,11 @@ class ContainerPaths:
|
|
|
68
68
|
"""Important paths in the container"""
|
|
69
69
|
|
|
70
70
|
project_dir: str = "/opt/code/localstack"
|
|
71
|
-
site_packages_target_dir: str = "/opt/code/localstack/.venv/lib/python3.
|
|
71
|
+
site_packages_target_dir: str = "/opt/code/localstack/.venv/lib/python3.13/site-packages"
|
|
72
72
|
docker_entrypoint: str = "/usr/local/bin/docker-entrypoint.sh"
|
|
73
73
|
localstack_supervisor: str = "/usr/local/bin/localstack-supervisor"
|
|
74
74
|
localstack_source_dir: str
|
|
75
|
-
localstack_pro_source_dir:
|
|
75
|
+
localstack_pro_source_dir: str | None
|
|
76
76
|
|
|
77
77
|
def dependency_source(self, name: str) -> str:
|
|
78
78
|
"""Returns path of the given source dependency in the site-packages directory."""
|
localstack/dns/models.py
CHANGED
localstack/dns/plugins.py
CHANGED
|
@@ -11,8 +11,12 @@ DNS_SHUTDOWN_PRIORITY = -30
|
|
|
11
11
|
"""Make sure the DNS server is shut down after the ON_AFTER_SERVICE_SHUTDOWN_HANDLERS, which in turn is after
|
|
12
12
|
SERVICE_SHUTDOWN_PRIORITY. Currently this value needs to be less than -20"""
|
|
13
13
|
|
|
14
|
+
DNS_START_PRIORITY = 20
|
|
15
|
+
"""Make sure the DNS server is started before the pro activation, to ensure proper DNS resolution for the activate call,
|
|
16
|
+
if the resolv.conf is set to localhost from outside the container"""
|
|
14
17
|
|
|
15
|
-
|
|
18
|
+
|
|
19
|
+
@hooks.on_infra_start(priority=DNS_START_PRIORITY)
|
|
16
20
|
def start_dns_server():
|
|
17
21
|
try:
|
|
18
22
|
from localstack.dns import server
|