localstack-core 4.7.1.dev22__py3-none-any.whl → 4.7.1.dev24__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/core.py +2 -3
- localstack/aws/api/events/__init__.py +12 -16
- localstack/aws/api/logs/__init__.py +5 -8
- localstack/aws/api/pipes/__init__.py +24 -32
- localstack/aws/api/scheduler/__init__.py +14 -16
- localstack/aws/api/stepfunctions/__init__.py +88 -114
- localstack/aws/api/support/__init__.py +8 -9
- localstack/aws/chain.py +2 -2
- localstack/aws/client.py +7 -9
- localstack/aws/connect.py +40 -39
- localstack/aws/forwarder.py +5 -4
- localstack/aws/gateway.py +1 -3
- localstack/aws/handlers/analytics.py +1 -2
- localstack/aws/handlers/cors.py +4 -5
- localstack/aws/handlers/logging.py +1 -2
- localstack/aws/handlers/metric_handler.py +3 -4
- localstack/aws/handlers/service.py +5 -5
- localstack/aws/mocking.py +15 -24
- localstack/aws/protocol/op_router.py +11 -10
- localstack/aws/protocol/parser.py +16 -17
- localstack/aws/protocol/serializer.py +37 -40
- localstack/aws/protocol/service_router.py +13 -13
- localstack/aws/protocol/validate.py +5 -5
- localstack/aws/scaffold.py +8 -9
- 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 +7 -8
- localstack/aws/spec.py +29 -30
- localstack/cli/localstack.py +6 -6
- localstack/cli/lpm.py +2 -2
- localstack/config.py +14 -15
- localstack/deprecations.py +5 -5
- localstack/dev/run/__main__.py +4 -4
- localstack/dev/run/paths.py +5 -5
- localstack/dns/models.py +2 -1
- localstack/dns/server.py +3 -2
- 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 +3 -3
- localstack/packages/api.py +5 -5
- localstack/packages/core.py +3 -3
- localstack/packages/debugpy.py +1 -3
- localstack/packages/ffmpeg.py +1 -2
- localstack/packages/java.py +1 -2
- localstack/packages/terraform.py +1 -2
- localstack/runtime/init.py +6 -7
- localstack/runtime/shutdown.py +2 -1
- localstack/services/apigateway/exporter.py +1 -2
- localstack/services/apigateway/helpers.py +6 -6
- localstack/services/apigateway/legacy/context.py +21 -21
- localstack/services/apigateway/legacy/helpers.py +20 -20
- localstack/services/apigateway/legacy/integration.py +7 -7
- localstack/services/apigateway/legacy/router_asf.py +2 -2
- localstack/services/apigateway/legacy/templates.py +5 -5
- 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/parse.py +1 -2
- localstack/services/apigateway/next_gen/execute_api/handlers/resource_router.py +1 -1
- 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 +6 -6
- localstack/services/apigateway/next_gen/execute_api/integrations/http.py +9 -9
- localstack/services/apigateway/next_gen/execute_api/variables.py +63 -63
- 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 +5 -5
- 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 +2 -2
- 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/cfn_utils.py +1 -1
- localstack/services/cloudformation/deployment_utils.py +2 -2
- localstack/services/cloudformation/engine/changes.py +3 -3
- localstack/services/cloudformation/engine/entities.py +12 -12
- localstack/services/cloudformation/engine/parameters.py +3 -3
- localstack/services/cloudformation/engine/template_deployer.py +9 -10
- localstack/services/cloudformation/engine/transformers.py +5 -4
- localstack/services/cloudformation/engine/types.py +5 -4
- localstack/services/cloudformation/engine/v2/change_set_model.py +31 -9
- localstack/services/cloudformation/engine/v2/change_set_model_describer.py +6 -6
- localstack/services/cloudformation/engine/v2/change_set_model_executor.py +62 -80
- localstack/services/cloudformation/engine/v2/change_set_model_preproc.py +15 -14
- localstack/services/cloudformation/engine/v2/change_set_model_transform.py +5 -5
- localstack/services/cloudformation/provider_utils.py +2 -2
- localstack/services/cloudformation/resource_provider.py +10 -9
- 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/scaffolding/__main__.py +8 -7
- localstack/services/cloudformation/scaffolding/propgen.py +2 -2
- localstack/services/cloudformation/stores.py +2 -3
- localstack/services/cloudformation/v2/entities.py +57 -36
- localstack/services/cloudformation/v2/provider.py +155 -29
- localstack/services/cloudwatch/alarm_scheduler.py +7 -7
- localstack/services/cloudwatch/cloudwatch_database_helper.py +4 -5
- localstack/services/cloudwatch/models.py +5 -7
- localstack/services/cloudwatch/provider.py +12 -12
- localstack/services/cloudwatch/provider_v2.py +2 -4
- 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 +1 -2
- localstack/services/dynamodb/provider.py +7 -8
- 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/utils.py +13 -14
- localstack/services/dynamodb/v2/provider.py +6 -7
- localstack/services/dynamodbstreams/dynamodbstreams_api.py +2 -2
- localstack/services/dynamodbstreams/models.py +1 -3
- localstack/services/ec2/patches.py +4 -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 +13 -13
- 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 +17 -17
- localstack/services/ecr/resource_providers/aws_ecr_repository_plugin.py +1 -3
- localstack/services/edge.py +5 -5
- localstack/services/es/provider.py +19 -19
- 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/models.py +25 -25
- localstack/services/events/provider.py +12 -12
- 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 +5 -5
- localstack/services/events/utils.py +7 -7
- localstack/services/events/v1/models.py +1 -3
- localstack/services/events/v1/provider.py +10 -10
- localstack/services/firehose/models.py +1 -3
- localstack/services/firehose/provider.py +11 -12
- localstack/services/iam/iam_patches.py +5 -6
- localstack/services/iam/provider.py +4 -4
- 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/kinesis/kinesis_mock_server.py +7 -8
- localstack/services/kinesis/models.py +2 -3
- localstack/services/kinesis/packages.py +3 -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 +14 -17
- localstack/services/kms/provider.py +2 -3
- 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 +3 -2
- localstack/services/lambda_/api_utils.py +12 -12
- localstack/services/lambda_/custom_endpoints.py +2 -2
- localstack/services/lambda_/event_source_mapping/esm_worker_factory.py +1 -1
- 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_/invocation/assignment.py +1 -2
- localstack/services/lambda_/invocation/docker_runtime_executor.py +5 -4
- localstack/services/lambda_/invocation/execution_environment.py +4 -4
- localstack/services/lambda_/invocation/executor_endpoint.py +5 -5
- localstack/services/lambda_/invocation/internal_sqs_queue.py +1 -1
- localstack/services/lambda_/invocation/lambda_models.py +23 -23
- localstack/services/lambda_/invocation/lambda_service.py +4 -4
- localstack/services/lambda_/invocation/logs.py +2 -3
- localstack/services/lambda_/invocation/runtime_executor.py +3 -3
- localstack/services/lambda_/ldm.py +2 -3
- localstack/services/lambda_/packages.py +2 -3
- localstack/services/lambda_/provider.py +3 -3
- 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 +14 -14
- 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/logs/models.py +1 -3
- localstack/services/logs/provider.py +3 -3
- 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 +3 -3
- localstack/services/opensearch/cluster.py +13 -13
- localstack/services/opensearch/cluster_manager.py +13 -14
- localstack/services/opensearch/models.py +1 -3
- localstack/services/opensearch/packages.py +1 -2
- localstack/services/opensearch/provider.py +7 -8
- 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 +1 -3
- localstack/services/plugins.py +26 -25
- 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/cors.py +4 -4
- localstack/services/s3/models.py +72 -72
- localstack/services/s3/notifications.py +19 -19
- localstack/services/s3/presigned_url.py +6 -5
- localstack/services/s3/provider.py +13 -14
- 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 +11 -11
- localstack/services/s3/validation.py +1 -1
- localstack/services/s3/website_hosting.py +5 -5
- 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 +9 -11
- 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/provider.py +8 -8
- 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/models.py +25 -25
- localstack/services/sns/provider.py +1 -2
- localstack/services/sns/publisher.py +6 -7
- 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/sqs/models.py +21 -22
- localstack/services/sqs/provider.py +19 -18
- localstack/services/sqs/query_api.py +2 -3
- 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 +4 -4
- localstack/services/sqs/resource_providers/aws_sqs_queuepolicy_plugin.py +1 -3
- localstack/services/sqs/utils.py +3 -3
- localstack/services/ssm/provider.py +2 -3
- 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/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/jsonata/jsonata_template_binding.py +2 -2
- localstack/services/stepfunctions/asl/component/common/path/input_path.py +3 -3
- localstack/services/stepfunctions/asl/component/common/path/output_path.py +3 -3
- localstack/services/stepfunctions/asl/component/common/path/result_path.py +3 -3
- localstack/services/stepfunctions/asl/component/common/payload/payloadvalue/payloadbinding/payload_binding.py +3 -3
- localstack/services/stepfunctions/asl/component/common/retry/retrier_decl.py +8 -8
- localstack/services/stepfunctions/asl/component/common/string/string_expression.py +2 -2
- 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 +3 -3
- localstack/services/stepfunctions/asl/component/intrinsic/jsonata.py +2 -2
- localstack/services/stepfunctions/asl/component/program/program.py +8 -8
- 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/operator/implementations/is_operator.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_choice/state_choice.py +1 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/execute_state.py +8 -8
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/item_reader_decl.py +6 -6
- 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/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 +10 -11
- 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 +4 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/state_parallel.py +1 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/lambda_eval_utils.py +6 -6
- 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 +15 -15
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_batch.py +5 -4
- 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 +2 -2
- 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 +2 -4
- localstack/services/stepfunctions/asl/component/state/state_pass/state_pass.py +3 -5
- 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 +15 -17
- localstack/services/stepfunctions/asl/eval/evaluation_details.py +3 -5
- localstack/services/stepfunctions/asl/eval/event/event_manager.py +9 -9
- 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 +11 -11
- localstack/services/stepfunctions/asl/eval/test_state/environment.py +3 -5
- localstack/services/stepfunctions/asl/eval/variable_store.py +3 -3
- localstack/services/stepfunctions/asl/jsonata/jsonata.py +5 -4
- localstack/services/stepfunctions/asl/parse/intrinsic/preprocessor.py +1 -2
- localstack/services/stepfunctions/asl/parse/preprocessor.py +30 -30
- localstack/services/stepfunctions/asl/parse/typed_props.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 +6 -6
- localstack/services/stepfunctions/backend/execution.py +25 -27
- localstack/services/stepfunctions/backend/execution_worker.py +7 -7
- localstack/services/stepfunctions/backend/state_machine.py +26 -26
- 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 +5 -5
- localstack/services/stepfunctions/mocking/mock_config_file.py +10 -10
- localstack/services/stepfunctions/provider.py +27 -37
- 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 +7 -7
- localstack/services/transcribe/packages.py +1 -3
- localstack/services/transcribe/provider.py +2 -2
- localstack/state/inspect.py +4 -4
- localstack/state/pickle.py +16 -15
- localstack/testing/aws/asf_utils.py +3 -2
- localstack/testing/aws/lambda_utils.py +15 -14
- localstack/testing/aws/util.py +3 -2
- localstack/testing/pytest/cloudformation/fixtures.py +13 -3
- localstack/testing/pytest/container.py +5 -4
- localstack/testing/pytest/filters.py +1 -3
- localstack/testing/pytest/fixtures.py +11 -11
- localstack/testing/pytest/marking.py +6 -6
- localstack/testing/pytest/path_filter.py +1 -1
- localstack/testing/pytest/stepfunctions/utils.py +1 -1
- localstack/testing/pytest/validation_tracking.py +3 -3
- localstack/testing/scenario/provisioning.py +11 -10
- localstack/testing/snapshots/transformer_utility.py +2 -2
- 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/metrics/registry.py +1 -1
- localstack/utils/analytics/publisher.py +4 -4
- localstack/utils/analytics/service_request_aggregator.py +3 -3
- localstack/utils/aws/arns.py +2 -2
- localstack/utils/aws/aws_responses.py +14 -21
- localstack/utils/aws/aws_stack.py +7 -11
- localstack/utils/aws/dead_letter_queue.py +3 -4
- localstack/utils/aws/message_forwarding.py +9 -11
- localstack/utils/aws/request_context.py +4 -4
- localstack/utils/aws/templating.py +3 -3
- localstack/utils/batch_policy.py +2 -2
- localstack/utils/bootstrap.py +19 -20
- localstack/utils/collections.py +16 -23
- localstack/utils/config_listener.py +2 -2
- localstack/utils/container_networking.py +3 -3
- localstack/utils/container_utils/container_client.py +72 -75
- localstack/utils/container_utils/docker_cmd_client.py +33 -33
- localstack/utils/container_utils/docker_sdk_client.py +35 -35
- localstack/utils/crypto.py +2 -3
- localstack/utils/diagnose.py +11 -11
- localstack/utils/docker_utils.py +4 -4
- localstack/utils/files.py +1 -2
- localstack/utils/functions.py +2 -2
- localstack/utils/http.py +6 -6
- localstack/utils/iputils.py +2 -1
- localstack/utils/json.py +1 -1
- localstack/utils/net.py +10 -9
- localstack/utils/objects.py +10 -10
- localstack/utils/patch.py +5 -5
- localstack/utils/platform.py +2 -2
- localstack/utils/run.py +7 -7
- localstack/utils/scheduler.py +3 -2
- localstack/utils/strings.py +2 -2
- localstack/utils/tagging.py +3 -3
- localstack/utils/testutil.py +9 -9
- localstack/utils/threads.py +2 -2
- localstack/utils/xml.py +1 -1
- localstack/version.py +2 -2
- {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/METADATA +1 -1
- {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/RECORD +544 -544
- localstack_core-4.7.1.dev24.dist-info/plux.json +1 -0
- localstack_core-4.7.1.dev22.dist-info/plux.json +0 -1
- {localstack_core-4.7.1.dev22.data → localstack_core-4.7.1.dev24.data}/scripts/localstack +0 -0
- {localstack_core-4.7.1.dev22.data → localstack_core-4.7.1.dev24.data}/scripts/localstack-supervisor +0 -0
- {localstack_core-4.7.1.dev22.data → localstack_core-4.7.1.dev24.data}/scripts/localstack.bat +0 -0
- {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/WHEEL +0 -0
- {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/entry_points.txt +0 -0
- {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/licenses/LICENSE.txt +0 -0
- {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/top_level.txt +0 -0
|
@@ -13,13 +13,10 @@ from enum import Enum, unique
|
|
|
13
13
|
from pathlib import Path
|
|
14
14
|
from typing import (
|
|
15
15
|
Callable,
|
|
16
|
-
Dict,
|
|
17
|
-
List,
|
|
18
16
|
Literal,
|
|
19
17
|
NamedTuple,
|
|
20
18
|
Optional,
|
|
21
19
|
Protocol,
|
|
22
|
-
Tuple,
|
|
23
20
|
TypedDict,
|
|
24
21
|
Union,
|
|
25
22
|
get_args,
|
|
@@ -157,7 +154,7 @@ class Ulimit:
|
|
|
157
154
|
|
|
158
155
|
|
|
159
156
|
# defines the type for port mappings (source->target port range)
|
|
160
|
-
PortRange = Union[
|
|
157
|
+
PortRange = Union[list, HashableList]
|
|
161
158
|
# defines the protocol for a port range ("tcp" or "udp")
|
|
162
159
|
PortProtocol = str
|
|
163
160
|
|
|
@@ -176,7 +173,7 @@ class PortMappings:
|
|
|
176
173
|
# bind host to be used for defining port mappings
|
|
177
174
|
bind_host: str
|
|
178
175
|
# maps `from` port range to `to` port range for port mappings
|
|
179
|
-
mappings:
|
|
176
|
+
mappings: dict[tuple[PortRange, PortProtocol], list]
|
|
180
177
|
|
|
181
178
|
def __init__(self, bind_host: str = None):
|
|
182
179
|
self.bind_host = bind_host if bind_host else ""
|
|
@@ -253,7 +250,7 @@ class PortMappings:
|
|
|
253
250
|
|
|
254
251
|
return " ".join([entry(k, v) for k, v in self.mappings.items()])
|
|
255
252
|
|
|
256
|
-
def to_list(self) ->
|
|
253
|
+
def to_list(self) -> list[str]: # TODO test
|
|
257
254
|
bind_address = f"{self.bind_host}:" if self.bind_host else ""
|
|
258
255
|
|
|
259
256
|
def entry(k, v):
|
|
@@ -269,7 +266,7 @@ class PortMappings:
|
|
|
269
266
|
|
|
270
267
|
return [item for k, v in self.mappings.items() for item in entry(k, v)]
|
|
271
268
|
|
|
272
|
-
def to_dict(self) ->
|
|
269
|
+
def to_dict(self) -> dict[str, Union[tuple[str, Union[int, list[int]]], int]]:
|
|
273
270
|
bind_address = self.bind_host or ""
|
|
274
271
|
|
|
275
272
|
def bind_port(bind_address, host_port):
|
|
@@ -367,7 +364,7 @@ class PortMappings:
|
|
|
367
364
|
return f"<PortMappings: {self.to_dict()}>"
|
|
368
365
|
|
|
369
366
|
|
|
370
|
-
SimpleVolumeBind =
|
|
367
|
+
SimpleVolumeBind = tuple[str, str]
|
|
371
368
|
"""Type alias for a simple version of VolumeBind"""
|
|
372
369
|
|
|
373
370
|
|
|
@@ -455,9 +452,9 @@ class VolumeDirMount:
|
|
|
455
452
|
|
|
456
453
|
|
|
457
454
|
class VolumeMappings:
|
|
458
|
-
mappings:
|
|
455
|
+
mappings: list[Union[SimpleVolumeBind, BindMount]]
|
|
459
456
|
|
|
460
|
-
def __init__(self, mappings:
|
|
457
|
+
def __init__(self, mappings: list[Union[SimpleVolumeBind, BindMount, VolumeDirMount]] = None):
|
|
461
458
|
self.mappings = mappings if mappings is not None else []
|
|
462
459
|
|
|
463
460
|
def add(self, mapping: Union[SimpleVolumeBind, BindMount, VolumeDirMount]):
|
|
@@ -521,7 +518,7 @@ class VolumeInfo(NamedTuple):
|
|
|
521
518
|
@dataclasses.dataclass
|
|
522
519
|
class LogConfig:
|
|
523
520
|
type: Literal["json-file", "syslog", "journald", "gelf", "fluentd", "none", "awslogs", "splunk"]
|
|
524
|
-
config:
|
|
521
|
+
config: dict[str, str] = dataclasses.field(default_factory=dict)
|
|
525
522
|
|
|
526
523
|
|
|
527
524
|
@dataclasses.dataclass
|
|
@@ -530,11 +527,11 @@ class ContainerConfiguration:
|
|
|
530
527
|
name: Optional[str] = None
|
|
531
528
|
volumes: VolumeMappings = dataclasses.field(default_factory=VolumeMappings)
|
|
532
529
|
ports: PortMappings = dataclasses.field(default_factory=PortMappings)
|
|
533
|
-
exposed_ports:
|
|
534
|
-
entrypoint: Optional[Union[
|
|
530
|
+
exposed_ports: list[str] = dataclasses.field(default_factory=list)
|
|
531
|
+
entrypoint: Optional[Union[list[str], str]] = None
|
|
535
532
|
additional_flags: Optional[str] = None
|
|
536
|
-
command: Optional[
|
|
537
|
-
env_vars:
|
|
533
|
+
command: Optional[list[str]] = None
|
|
534
|
+
env_vars: dict[str, str] = dataclasses.field(default_factory=dict)
|
|
538
535
|
|
|
539
536
|
privileged: bool = False
|
|
540
537
|
remove: bool = False
|
|
@@ -544,15 +541,15 @@ class ContainerConfiguration:
|
|
|
544
541
|
|
|
545
542
|
stdin: Optional[str] = None
|
|
546
543
|
user: Optional[str] = None
|
|
547
|
-
cap_add: Optional[
|
|
548
|
-
cap_drop: Optional[
|
|
549
|
-
security_opt: Optional[
|
|
544
|
+
cap_add: Optional[list[str]] = None
|
|
545
|
+
cap_drop: Optional[list[str]] = None
|
|
546
|
+
security_opt: Optional[list[str]] = None
|
|
550
547
|
network: Optional[str] = None
|
|
551
548
|
dns: Optional[str] = None
|
|
552
549
|
workdir: Optional[str] = None
|
|
553
550
|
platform: Optional[str] = None
|
|
554
|
-
ulimits: Optional[
|
|
555
|
-
labels: Optional[
|
|
551
|
+
ulimits: Optional[list[Ulimit]] = None
|
|
552
|
+
labels: Optional[dict[str, str]] = None
|
|
556
553
|
init: Optional[bool] = None
|
|
557
554
|
log_config: Optional[LogConfig] = None
|
|
558
555
|
|
|
@@ -577,17 +574,17 @@ class DockerRunFlags:
|
|
|
577
574
|
create: https://docs.docker.com/engine/reference/commandline/create/
|
|
578
575
|
"""
|
|
579
576
|
|
|
580
|
-
env_vars: Optional[
|
|
581
|
-
extra_hosts: Optional[
|
|
582
|
-
labels: Optional[
|
|
583
|
-
volumes: Optional[
|
|
577
|
+
env_vars: Optional[dict[str, str]]
|
|
578
|
+
extra_hosts: Optional[dict[str, str]]
|
|
579
|
+
labels: Optional[dict[str, str]]
|
|
580
|
+
volumes: Optional[list[SimpleVolumeBind]]
|
|
584
581
|
network: Optional[str]
|
|
585
582
|
platform: Optional[DockerPlatform]
|
|
586
583
|
privileged: Optional[bool]
|
|
587
584
|
ports: Optional[PortMappings]
|
|
588
|
-
ulimits: Optional[
|
|
585
|
+
ulimits: Optional[list[Ulimit]]
|
|
589
586
|
user: Optional[str]
|
|
590
|
-
dns: Optional[
|
|
587
|
+
dns: Optional[list[str]]
|
|
591
588
|
|
|
592
589
|
|
|
593
590
|
class RegistryResolverStrategy(Protocol):
|
|
@@ -621,7 +618,7 @@ class ContainerClient(metaclass=ABCMeta):
|
|
|
621
618
|
"""Returns the usage statistics of the container with the given name"""
|
|
622
619
|
pass
|
|
623
620
|
|
|
624
|
-
def get_networks(self, container_name: str) ->
|
|
621
|
+
def get_networks(self, container_name: str) -> list[str]:
|
|
625
622
|
LOG.debug("Getting networks for container: %s", container_name)
|
|
626
623
|
container_attrs = self.inspect_container(container_name_or_id=container_name)
|
|
627
624
|
return list(container_attrs["NetworkSettings"].get("Networks", {}).keys())
|
|
@@ -701,13 +698,13 @@ class ContainerClient(metaclass=ABCMeta):
|
|
|
701
698
|
"""
|
|
702
699
|
|
|
703
700
|
@abstractmethod
|
|
704
|
-
def list_containers(self, filter: Union[
|
|
701
|
+
def list_containers(self, filter: Union[list[str], str, None] = None, all=True) -> list[dict]:
|
|
705
702
|
"""List all containers matching the given filters
|
|
706
703
|
|
|
707
704
|
:return: A list of dicts with keys id, image, name, labels, status
|
|
708
705
|
"""
|
|
709
706
|
|
|
710
|
-
def get_running_container_names(self) ->
|
|
707
|
+
def get_running_container_names(self) -> list[str]:
|
|
711
708
|
"""Returns a list of the names of all running containers"""
|
|
712
709
|
result = self.list_containers(all=False)
|
|
713
710
|
result = [container["name"] for container in result]
|
|
@@ -798,7 +795,7 @@ class ContainerClient(metaclass=ABCMeta):
|
|
|
798
795
|
strip_latest: bool = True,
|
|
799
796
|
include_tags: bool = True,
|
|
800
797
|
strip_wellknown_repo_prefixes: bool = True,
|
|
801
|
-
) ->
|
|
798
|
+
) -> list[str]:
|
|
802
799
|
"""
|
|
803
800
|
Get all names of docker images available to the container engine
|
|
804
801
|
:param strip_latest: return images both with and without :latest tag
|
|
@@ -817,13 +814,13 @@ class ContainerClient(metaclass=ABCMeta):
|
|
|
817
814
|
"""Returns a blocking generator you can iterate over to retrieve log output as it happens."""
|
|
818
815
|
|
|
819
816
|
@abstractmethod
|
|
820
|
-
def inspect_container(self, container_name_or_id: str) ->
|
|
817
|
+
def inspect_container(self, container_name_or_id: str) -> dict[str, Union[dict, str]]:
|
|
821
818
|
"""Get detailed attributes of a container.
|
|
822
819
|
|
|
823
820
|
:return: Dict containing docker attributes as returned by the daemon
|
|
824
821
|
"""
|
|
825
822
|
|
|
826
|
-
def inspect_container_volumes(self, container_name_or_id) ->
|
|
823
|
+
def inspect_container_volumes(self, container_name_or_id) -> list[VolumeInfo]:
|
|
827
824
|
"""Return information about the volumes mounted into the given container.
|
|
828
825
|
|
|
829
826
|
:param container_name_or_id: the container name or id
|
|
@@ -838,7 +835,7 @@ class ContainerClient(metaclass=ABCMeta):
|
|
|
838
835
|
@abstractmethod
|
|
839
836
|
def inspect_image(
|
|
840
837
|
self, image_name: str, pull: bool = True, strip_wellknown_repo_prefixes: bool = True
|
|
841
|
-
) ->
|
|
838
|
+
) -> dict[str, Union[dict, list, str]]:
|
|
842
839
|
"""Get detailed attributes of an image.
|
|
843
840
|
|
|
844
841
|
:param image_name: Image name to inspect
|
|
@@ -864,7 +861,7 @@ class ContainerClient(metaclass=ABCMeta):
|
|
|
864
861
|
"""
|
|
865
862
|
|
|
866
863
|
@abstractmethod
|
|
867
|
-
def inspect_network(self, network_name: str) ->
|
|
864
|
+
def inspect_network(self, network_name: str) -> dict[str, Union[dict, str]]:
|
|
868
865
|
"""Get detailed attributes of an network.
|
|
869
866
|
|
|
870
867
|
:return: Dict containing docker attributes as returned by the daemon
|
|
@@ -875,8 +872,8 @@ class ContainerClient(metaclass=ABCMeta):
|
|
|
875
872
|
self,
|
|
876
873
|
network_name: str,
|
|
877
874
|
container_name_or_id: str,
|
|
878
|
-
aliases: Optional[
|
|
879
|
-
link_local_ips:
|
|
875
|
+
aliases: Optional[list] = None,
|
|
876
|
+
link_local_ips: list[str] = None,
|
|
880
877
|
) -> None:
|
|
881
878
|
"""
|
|
882
879
|
Connects a container to a given network
|
|
@@ -911,7 +908,7 @@ class ContainerClient(metaclass=ABCMeta):
|
|
|
911
908
|
If container has multiple networks, it will return the IP of the first
|
|
912
909
|
"""
|
|
913
910
|
|
|
914
|
-
def get_image_cmd(self, docker_image: str, pull: bool = True) ->
|
|
911
|
+
def get_image_cmd(self, docker_image: str, pull: bool = True) -> list[str]:
|
|
915
912
|
"""Get the command for the given image
|
|
916
913
|
:param docker_image: Docker image to inspect
|
|
917
914
|
:param pull: Whether to pull if image is not present
|
|
@@ -988,28 +985,28 @@ class ContainerClient(metaclass=ABCMeta):
|
|
|
988
985
|
image_name: str,
|
|
989
986
|
*,
|
|
990
987
|
name: Optional[str] = None,
|
|
991
|
-
entrypoint: Optional[Union[
|
|
988
|
+
entrypoint: Optional[Union[list[str], str]] = None,
|
|
992
989
|
remove: bool = False,
|
|
993
990
|
interactive: bool = False,
|
|
994
991
|
tty: bool = False,
|
|
995
992
|
detach: bool = False,
|
|
996
|
-
command: Optional[Union[
|
|
997
|
-
volumes: Optional[Union[VolumeMappings,
|
|
993
|
+
command: Optional[Union[list[str], str]] = None,
|
|
994
|
+
volumes: Optional[Union[VolumeMappings, list[SimpleVolumeBind]]] = None,
|
|
998
995
|
ports: Optional[PortMappings] = None,
|
|
999
|
-
exposed_ports: Optional[
|
|
1000
|
-
env_vars: Optional[
|
|
996
|
+
exposed_ports: Optional[list[str]] = None,
|
|
997
|
+
env_vars: Optional[dict[str, str]] = None,
|
|
1001
998
|
user: Optional[str] = None,
|
|
1002
|
-
cap_add: Optional[
|
|
1003
|
-
cap_drop: Optional[
|
|
1004
|
-
security_opt: Optional[
|
|
999
|
+
cap_add: Optional[list[str]] = None,
|
|
1000
|
+
cap_drop: Optional[list[str]] = None,
|
|
1001
|
+
security_opt: Optional[list[str]] = None,
|
|
1005
1002
|
network: Optional[str] = None,
|
|
1006
|
-
dns: Optional[Union[str,
|
|
1003
|
+
dns: Optional[Union[str, list[str]]] = None,
|
|
1007
1004
|
additional_flags: Optional[str] = None,
|
|
1008
1005
|
workdir: Optional[str] = None,
|
|
1009
1006
|
privileged: Optional[bool] = None,
|
|
1010
|
-
labels: Optional[
|
|
1007
|
+
labels: Optional[dict[str, str]] = None,
|
|
1011
1008
|
platform: Optional[DockerPlatform] = None,
|
|
1012
|
-
ulimits: Optional[
|
|
1009
|
+
ulimits: Optional[list[Ulimit]] = None,
|
|
1013
1010
|
init: Optional[bool] = None,
|
|
1014
1011
|
log_config: Optional[LogConfig] = None,
|
|
1015
1012
|
) -> str:
|
|
@@ -1030,26 +1027,26 @@ class ContainerClient(metaclass=ABCMeta):
|
|
|
1030
1027
|
interactive: bool = False,
|
|
1031
1028
|
tty: bool = False,
|
|
1032
1029
|
detach: bool = False,
|
|
1033
|
-
command: Optional[Union[
|
|
1034
|
-
volumes: Optional[Union[VolumeMappings,
|
|
1030
|
+
command: Optional[Union[list[str], str]] = None,
|
|
1031
|
+
volumes: Optional[Union[VolumeMappings, list[SimpleVolumeBind]]] = None,
|
|
1035
1032
|
ports: Optional[PortMappings] = None,
|
|
1036
|
-
exposed_ports: Optional[
|
|
1037
|
-
env_vars: Optional[
|
|
1033
|
+
exposed_ports: Optional[list[str]] = None,
|
|
1034
|
+
env_vars: Optional[dict[str, str]] = None,
|
|
1038
1035
|
user: Optional[str] = None,
|
|
1039
|
-
cap_add: Optional[
|
|
1040
|
-
cap_drop: Optional[
|
|
1041
|
-
security_opt: Optional[
|
|
1036
|
+
cap_add: Optional[list[str]] = None,
|
|
1037
|
+
cap_drop: Optional[list[str]] = None,
|
|
1038
|
+
security_opt: Optional[list[str]] = None,
|
|
1042
1039
|
network: Optional[str] = None,
|
|
1043
1040
|
dns: Optional[str] = None,
|
|
1044
1041
|
additional_flags: Optional[str] = None,
|
|
1045
1042
|
workdir: Optional[str] = None,
|
|
1046
|
-
labels: Optional[
|
|
1043
|
+
labels: Optional[dict[str, str]] = None,
|
|
1047
1044
|
platform: Optional[DockerPlatform] = None,
|
|
1048
1045
|
privileged: Optional[bool] = None,
|
|
1049
|
-
ulimits: Optional[
|
|
1046
|
+
ulimits: Optional[list[Ulimit]] = None,
|
|
1050
1047
|
init: Optional[bool] = None,
|
|
1051
1048
|
log_config: Optional[LogConfig] = None,
|
|
1052
|
-
) ->
|
|
1049
|
+
) -> tuple[bytes, bytes]:
|
|
1053
1050
|
"""Creates and runs a given docker container
|
|
1054
1051
|
|
|
1055
1052
|
:return: A tuple (stdout, stderr)
|
|
@@ -1057,7 +1054,7 @@ class ContainerClient(metaclass=ABCMeta):
|
|
|
1057
1054
|
|
|
1058
1055
|
def run_container_from_config(
|
|
1059
1056
|
self, container_config: ContainerConfiguration
|
|
1060
|
-
) ->
|
|
1057
|
+
) -> tuple[bytes, bytes]:
|
|
1061
1058
|
"""Like ``run_container`` but uses the parameters from the configuration."""
|
|
1062
1059
|
|
|
1063
1060
|
return self.run_container(
|
|
@@ -1093,14 +1090,14 @@ class ContainerClient(metaclass=ABCMeta):
|
|
|
1093
1090
|
def exec_in_container(
|
|
1094
1091
|
self,
|
|
1095
1092
|
container_name_or_id: str,
|
|
1096
|
-
command: Union[
|
|
1093
|
+
command: Union[list[str], str],
|
|
1097
1094
|
interactive: bool = False,
|
|
1098
1095
|
detach: bool = False,
|
|
1099
|
-
env_vars: Optional[
|
|
1096
|
+
env_vars: Optional[dict[str, Optional[str]]] = None,
|
|
1100
1097
|
stdin: Optional[bytes] = None,
|
|
1101
1098
|
user: Optional[str] = None,
|
|
1102
1099
|
workdir: Optional[str] = None,
|
|
1103
|
-
) ->
|
|
1100
|
+
) -> tuple[bytes, bytes]:
|
|
1104
1101
|
"""Execute a given command in a container
|
|
1105
1102
|
|
|
1106
1103
|
:return: A tuple (stdout, stderr)
|
|
@@ -1114,7 +1111,7 @@ class ContainerClient(metaclass=ABCMeta):
|
|
|
1114
1111
|
interactive: bool = False,
|
|
1115
1112
|
attach: bool = False,
|
|
1116
1113
|
flags: Optional[str] = None,
|
|
1117
|
-
) ->
|
|
1114
|
+
) -> tuple[bytes, bytes]:
|
|
1118
1115
|
"""Start a given, already created container
|
|
1119
1116
|
|
|
1120
1117
|
:return: A tuple (stdout, stderr) if attach or interactive is set, otherwise a tuple (b"container_name_or_id", b"")
|
|
@@ -1147,7 +1144,7 @@ class Util:
|
|
|
1147
1144
|
return f"{key}={value}"
|
|
1148
1145
|
|
|
1149
1146
|
@classmethod
|
|
1150
|
-
def create_env_vars_file_flag(cls, env_vars:
|
|
1147
|
+
def create_env_vars_file_flag(cls, env_vars: dict) -> tuple[list[str], Optional[str]]:
|
|
1151
1148
|
if not env_vars:
|
|
1152
1149
|
return [], None
|
|
1153
1150
|
result = []
|
|
@@ -1185,14 +1182,14 @@ class Util:
|
|
|
1185
1182
|
return f
|
|
1186
1183
|
|
|
1187
1184
|
@staticmethod
|
|
1188
|
-
def append_without_latest(image_names:
|
|
1185
|
+
def append_without_latest(image_names: list[str]):
|
|
1189
1186
|
suffix = ":latest"
|
|
1190
1187
|
for image in list(image_names):
|
|
1191
1188
|
if image.endswith(suffix):
|
|
1192
1189
|
image_names.append(image[: -len(suffix)])
|
|
1193
1190
|
|
|
1194
1191
|
@staticmethod
|
|
1195
|
-
def strip_wellknown_repo_prefixes(image_names:
|
|
1192
|
+
def strip_wellknown_repo_prefixes(image_names: list[str]) -> list[str]:
|
|
1196
1193
|
"""
|
|
1197
1194
|
Remove well-known repo prefixes like `localhost/` or `docker.io/library/` from the list of given
|
|
1198
1195
|
image names. This is mostly to ensure compatibility of our Docker client with Podman API responses.
|
|
@@ -1238,7 +1235,7 @@ class Util:
|
|
|
1238
1235
|
LOG.debug("File to copy empty, ignoring...")
|
|
1239
1236
|
|
|
1240
1237
|
@staticmethod
|
|
1241
|
-
def _read_docker_cli_env_file(env_file: str) ->
|
|
1238
|
+
def _read_docker_cli_env_file(env_file: str) -> dict[str, str]:
|
|
1242
1239
|
"""
|
|
1243
1240
|
Read an environment file in docker CLI format, specified here:
|
|
1244
1241
|
https://docs.docker.com/reference/cli/docker/container/run/#env
|
|
@@ -1247,7 +1244,7 @@ class Util:
|
|
|
1247
1244
|
"""
|
|
1248
1245
|
env_vars = {}
|
|
1249
1246
|
try:
|
|
1250
|
-
with open(env_file
|
|
1247
|
+
with open(env_file) as f:
|
|
1251
1248
|
env_file_lines = f.readlines()
|
|
1252
1249
|
except FileNotFoundError as e:
|
|
1253
1250
|
LOG.error(
|
|
@@ -1280,16 +1277,16 @@ class Util:
|
|
|
1280
1277
|
@staticmethod
|
|
1281
1278
|
def parse_additional_flags(
|
|
1282
1279
|
additional_flags: str,
|
|
1283
|
-
env_vars: Optional[
|
|
1284
|
-
labels: Optional[
|
|
1285
|
-
volumes: Optional[
|
|
1280
|
+
env_vars: Optional[dict[str, str]] = None,
|
|
1281
|
+
labels: Optional[dict[str, str]] = None,
|
|
1282
|
+
volumes: Optional[list[SimpleVolumeBind]] = None,
|
|
1286
1283
|
network: Optional[str] = None,
|
|
1287
1284
|
platform: Optional[DockerPlatform] = None,
|
|
1288
1285
|
ports: Optional[PortMappings] = None,
|
|
1289
1286
|
privileged: Optional[bool] = None,
|
|
1290
1287
|
user: Optional[str] = None,
|
|
1291
|
-
ulimits: Optional[
|
|
1292
|
-
dns: Optional[Union[str,
|
|
1288
|
+
ulimits: Optional[list[Ulimit]] = None,
|
|
1289
|
+
dns: Optional[Union[str, list[str]]] = None,
|
|
1293
1290
|
) -> DockerRunFlags:
|
|
1294
1291
|
"""Parses additional CLI-formatted Docker flags, which could overwrite provided defaults.
|
|
1295
1292
|
:param additional_flags: String which contains the flag definitions inspired by the Docker CLI reference:
|
|
@@ -1510,8 +1507,8 @@ class Util:
|
|
|
1510
1507
|
|
|
1511
1508
|
@staticmethod
|
|
1512
1509
|
def convert_mount_list_to_dict(
|
|
1513
|
-
volumes: Union[
|
|
1514
|
-
) ->
|
|
1510
|
+
volumes: Union[list[SimpleVolumeBind], VolumeMappings],
|
|
1511
|
+
) -> dict[str, dict[str, str]]:
|
|
1515
1512
|
"""Converts a List of (host_path, container_path) tuples to a Dict suitable as volume argument for docker sdk"""
|
|
1516
1513
|
|
|
1517
1514
|
def _map_to_dict(paths: SimpleVolumeBind | BindMount | VolumeDirMount):
|
|
@@ -6,7 +6,7 @@ import os
|
|
|
6
6
|
import re
|
|
7
7
|
import shlex
|
|
8
8
|
import subprocess
|
|
9
|
-
from typing import Callable,
|
|
9
|
+
from typing import Callable, Optional, Union
|
|
10
10
|
|
|
11
11
|
from localstack import config
|
|
12
12
|
from localstack.utils.collections import ensure_list
|
|
@@ -98,7 +98,7 @@ class CmdDockerClient(ContainerClient):
|
|
|
98
98
|
|
|
99
99
|
default_run_outfile: Optional[str] = None
|
|
100
100
|
|
|
101
|
-
def _docker_cmd(self) ->
|
|
101
|
+
def _docker_cmd(self) -> list[str]:
|
|
102
102
|
"""
|
|
103
103
|
Get the configured, tested Docker CMD.
|
|
104
104
|
:return: string to be used for running Docker commands
|
|
@@ -281,7 +281,7 @@ class CmdDockerClient(ContainerClient):
|
|
|
281
281
|
"Docker process returned with errorcode %s" % e.returncode, e.stdout, e.stderr
|
|
282
282
|
) from e
|
|
283
283
|
|
|
284
|
-
def list_containers(self, filter: Union[
|
|
284
|
+
def list_containers(self, filter: Union[list[str], str, None] = None, all=True) -> list[dict]:
|
|
285
285
|
filter = [filter] if isinstance(filter, str) else filter
|
|
286
286
|
cmd = self._docker_cmd()
|
|
287
287
|
cmd.append("ps")
|
|
@@ -489,7 +489,7 @@ class CmdDockerClient(ContainerClient):
|
|
|
489
489
|
|
|
490
490
|
return CancellableProcessStream(process)
|
|
491
491
|
|
|
492
|
-
def _inspect_object(self, object_name_or_id: str) ->
|
|
492
|
+
def _inspect_object(self, object_name_or_id: str) -> dict[str, Union[dict, list, str]]:
|
|
493
493
|
cmd = self._docker_cmd()
|
|
494
494
|
cmd += ["inspect", "--format", "{{json .}}", object_name_or_id]
|
|
495
495
|
try:
|
|
@@ -516,7 +516,7 @@ class CmdDockerClient(ContainerClient):
|
|
|
516
516
|
)
|
|
517
517
|
return object_data
|
|
518
518
|
|
|
519
|
-
def inspect_container(self, container_name_or_id: str) ->
|
|
519
|
+
def inspect_container(self, container_name_or_id: str) -> dict[str, Union[dict, str]]:
|
|
520
520
|
try:
|
|
521
521
|
return self._inspect_object(container_name_or_id)
|
|
522
522
|
except NoSuchObject as e:
|
|
@@ -527,7 +527,7 @@ class CmdDockerClient(ContainerClient):
|
|
|
527
527
|
image_name: str,
|
|
528
528
|
pull: bool = True,
|
|
529
529
|
strip_wellknown_repo_prefixes: bool = True,
|
|
530
|
-
) ->
|
|
530
|
+
) -> dict[str, Union[dict, list, str]]:
|
|
531
531
|
image_name = self.registry_resolver_strategy.resolve(image_name)
|
|
532
532
|
try:
|
|
533
533
|
result = self._inspect_object(image_name)
|
|
@@ -569,7 +569,7 @@ class CmdDockerClient(ContainerClient):
|
|
|
569
569
|
"Docker process returned with errorcode %s" % e.returncode, e.stdout, e.stderr
|
|
570
570
|
) from e
|
|
571
571
|
|
|
572
|
-
def inspect_network(self, network_name: str) ->
|
|
572
|
+
def inspect_network(self, network_name: str) -> dict[str, Union[dict, str]]:
|
|
573
573
|
try:
|
|
574
574
|
return self._inspect_object(network_name)
|
|
575
575
|
except NoSuchObject as e:
|
|
@@ -579,8 +579,8 @@ class CmdDockerClient(ContainerClient):
|
|
|
579
579
|
self,
|
|
580
580
|
network_name: str,
|
|
581
581
|
container_name_or_id: str,
|
|
582
|
-
aliases: Optional[
|
|
583
|
-
link_local_ips:
|
|
582
|
+
aliases: Optional[list] = None,
|
|
583
|
+
link_local_ips: list[str] = None,
|
|
584
584
|
) -> None:
|
|
585
585
|
LOG.debug(
|
|
586
586
|
"Connecting container '%s' to network '%s' with aliases '%s'",
|
|
@@ -657,7 +657,7 @@ class CmdDockerClient(ContainerClient):
|
|
|
657
657
|
"Docker process returned with errorcode %s" % e.returncode, e.stdout, e.stderr
|
|
658
658
|
) from e
|
|
659
659
|
|
|
660
|
-
@functools.
|
|
660
|
+
@functools.cache
|
|
661
661
|
def has_docker(self) -> bool:
|
|
662
662
|
try:
|
|
663
663
|
# do not use self._docker_cmd here (would result in a loop)
|
|
@@ -685,7 +685,7 @@ class CmdDockerClient(ContainerClient):
|
|
|
685
685
|
finally:
|
|
686
686
|
Util.rm_env_vars_file(env_file)
|
|
687
687
|
|
|
688
|
-
def run_container(self, image_name: str, stdin=None, **kwargs) ->
|
|
688
|
+
def run_container(self, image_name: str, stdin=None, **kwargs) -> tuple[bytes, bytes]:
|
|
689
689
|
image_name = self.registry_resolver_strategy.resolve(image_name)
|
|
690
690
|
cmd, env_file = self._build_run_create_cmd("run", image_name, **kwargs)
|
|
691
691
|
LOG.debug("Run container with cmd: %s", cmd)
|
|
@@ -701,14 +701,14 @@ class CmdDockerClient(ContainerClient):
|
|
|
701
701
|
def exec_in_container(
|
|
702
702
|
self,
|
|
703
703
|
container_name_or_id: str,
|
|
704
|
-
command: Union[
|
|
704
|
+
command: Union[list[str], str],
|
|
705
705
|
interactive=False,
|
|
706
706
|
detach=False,
|
|
707
|
-
env_vars: Optional[
|
|
707
|
+
env_vars: Optional[dict[str, Optional[str]]] = None,
|
|
708
708
|
stdin: Optional[bytes] = None,
|
|
709
709
|
user: Optional[str] = None,
|
|
710
710
|
workdir: Optional[str] = None,
|
|
711
|
-
) ->
|
|
711
|
+
) -> tuple[bytes, bytes]:
|
|
712
712
|
env_file = None
|
|
713
713
|
cmd = self._docker_cmd()
|
|
714
714
|
cmd.append("exec")
|
|
@@ -724,7 +724,7 @@ class CmdDockerClient(ContainerClient):
|
|
|
724
724
|
env_flag, env_file = Util.create_env_vars_file_flag(env_vars)
|
|
725
725
|
cmd += env_flag
|
|
726
726
|
cmd.append(container_name_or_id)
|
|
727
|
-
cmd += command if isinstance(command,
|
|
727
|
+
cmd += command if isinstance(command, list) else [command]
|
|
728
728
|
LOG.debug("Execute command in container: %s", cmd)
|
|
729
729
|
try:
|
|
730
730
|
return self._run_async_cmd(cmd, stdin, container_name_or_id)
|
|
@@ -738,7 +738,7 @@ class CmdDockerClient(ContainerClient):
|
|
|
738
738
|
interactive: bool = False,
|
|
739
739
|
attach: bool = False,
|
|
740
740
|
flags: Optional[str] = None,
|
|
741
|
-
) ->
|
|
741
|
+
) -> tuple[bytes, bytes]:
|
|
742
742
|
cmd = self._docker_cmd() + ["start"]
|
|
743
743
|
if flags:
|
|
744
744
|
cmd.append(flags)
|
|
@@ -756,8 +756,8 @@ class CmdDockerClient(ContainerClient):
|
|
|
756
756
|
return self._run_async_cmd(cmd, stdin=None, container_name=container_name_or_id)
|
|
757
757
|
|
|
758
758
|
def _run_async_cmd(
|
|
759
|
-
self, cmd:
|
|
760
|
-
) ->
|
|
759
|
+
self, cmd: list[str], stdin: bytes, container_name: str, image_name=None
|
|
760
|
+
) -> tuple[bytes, bytes]:
|
|
761
761
|
kwargs = {
|
|
762
762
|
"inherit_env": True,
|
|
763
763
|
"asynchronous": True,
|
|
@@ -796,31 +796,31 @@ class CmdDockerClient(ContainerClient):
|
|
|
796
796
|
image_name: str,
|
|
797
797
|
*,
|
|
798
798
|
name: Optional[str] = None,
|
|
799
|
-
entrypoint: Optional[Union[
|
|
799
|
+
entrypoint: Optional[Union[list[str], str]] = None,
|
|
800
800
|
remove: bool = False,
|
|
801
801
|
interactive: bool = False,
|
|
802
802
|
tty: bool = False,
|
|
803
803
|
detach: bool = False,
|
|
804
|
-
command: Optional[Union[
|
|
805
|
-
volumes: Optional[
|
|
804
|
+
command: Optional[Union[list[str], str]] = None,
|
|
805
|
+
volumes: Optional[list[SimpleVolumeBind]] = None,
|
|
806
806
|
ports: Optional[PortMappings] = None,
|
|
807
|
-
exposed_ports: Optional[
|
|
808
|
-
env_vars: Optional[
|
|
807
|
+
exposed_ports: Optional[list[str]] = None,
|
|
808
|
+
env_vars: Optional[dict[str, str]] = None,
|
|
809
809
|
user: Optional[str] = None,
|
|
810
|
-
cap_add: Optional[
|
|
811
|
-
cap_drop: Optional[
|
|
812
|
-
security_opt: Optional[
|
|
810
|
+
cap_add: Optional[list[str]] = None,
|
|
811
|
+
cap_drop: Optional[list[str]] = None,
|
|
812
|
+
security_opt: Optional[list[str]] = None,
|
|
813
813
|
network: Optional[str] = None,
|
|
814
|
-
dns: Optional[Union[str,
|
|
814
|
+
dns: Optional[Union[str, list[str]]] = None,
|
|
815
815
|
additional_flags: Optional[str] = None,
|
|
816
816
|
workdir: Optional[str] = None,
|
|
817
817
|
privileged: Optional[bool] = None,
|
|
818
|
-
labels: Optional[
|
|
818
|
+
labels: Optional[dict[str, str]] = None,
|
|
819
819
|
platform: Optional[DockerPlatform] = None,
|
|
820
|
-
ulimits: Optional[
|
|
820
|
+
ulimits: Optional[list[Ulimit]] = None,
|
|
821
821
|
init: Optional[bool] = None,
|
|
822
822
|
log_config: Optional[LogConfig] = None,
|
|
823
|
-
) ->
|
|
823
|
+
) -> tuple[list[str], str]:
|
|
824
824
|
env_file = None
|
|
825
825
|
cmd = self._docker_cmd() + [action]
|
|
826
826
|
if remove:
|
|
@@ -888,7 +888,7 @@ class CmdDockerClient(ContainerClient):
|
|
|
888
888
|
cmd += shlex.split(additional_flags)
|
|
889
889
|
cmd.append(image_name)
|
|
890
890
|
if command:
|
|
891
|
-
cmd += command if isinstance(command,
|
|
891
|
+
cmd += command if isinstance(command, list) else [command]
|
|
892
892
|
return cmd, env_file
|
|
893
893
|
|
|
894
894
|
@staticmethod
|
|
@@ -922,13 +922,13 @@ class CmdDockerClient(ContainerClient):
|
|
|
922
922
|
if any(msg.lower() in process_stdout_lower for msg in error_messages):
|
|
923
923
|
raise NoSuchContainer(container_name_or_id, stdout=error.stdout, stderr=error.stderr)
|
|
924
924
|
|
|
925
|
-
def _transform_container_labels(self, labels: Union[str,
|
|
925
|
+
def _transform_container_labels(self, labels: Union[str, dict[str, str]]) -> dict[str, str]:
|
|
926
926
|
"""
|
|
927
927
|
Transforms the container labels returned by the docker command from the key-value pair format to a dict
|
|
928
928
|
:param labels: Input string, comma separated key value pairs. Example: key1=value1,key2=value2
|
|
929
929
|
:return: Dict representation of the passed values, example: {"key1": "value1", "key2": "value2"}
|
|
930
930
|
"""
|
|
931
|
-
if isinstance(labels,
|
|
931
|
+
if isinstance(labels, dict):
|
|
932
932
|
return labels
|
|
933
933
|
|
|
934
934
|
labels = labels.split(",")
|