Prep release 4.2.10 (#7064)

This commit is contained in:
Bert Blommers 2023-11-24 19:17:50 -01:00 committed by GitHub
parent 4146737321
commit 9e7295ddef
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
20 changed files with 226 additions and 51 deletions

View File

@ -102,6 +102,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
permissions: permissions:
id-token: write id-token: write
packages: write
needs: [dotnettest, javatest, test, testserver ] needs: [dotnettest, javatest, test, testserver ]
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && github.repository == 'getmoto/moto' }} if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && github.repository == 'getmoto/moto' }}
steps: steps:

View File

@ -1,6 +1,24 @@
Moto Changelog Moto Changelog
============== ==============
4.2.10
-----
Docker Digest for 4.2.10: <autopopulateddigest>
New Methods:
* CognitoIdentity: list_identity_pools()
Miscellaneous:
* Autoscaling: describe_tags() now supports the key/value filters
* CloudFormation: AWS::Logs::LogGroup now supports tags
* CloudWatch: get_metric_data() no longer throws an error when supplying >10 queries
* CognitoIdentity: get_credentials_for_identity() now returns Expiration as a number, fixing compatibility with the GoLang SDK
* EFS: describe_access_points() now supports the FileSystemId-parameter
* LakeFormation: list_permissions() now supports the DataLocation-parameter
* LakeFormation: register_resource() now throws an exception when registering an existing resource
* SQS: Ensure all responses are in JSON-format when required, fixing compatibility with the Ruby SDK
4.2.9 4.2.9
----- -----
Docker Digest for 4.2.9: _sha256:4e9d89322b5ca9196fa7efda78b1269580be7aa6879894950e2728edc946573f_ Docker Digest for 4.2.9: _sha256:4e9d89322b5ca9196fa7efda78b1269580be7aa6879894950e2728edc946573f_

View File

@ -1137,7 +1137,7 @@
## cognito-identity ## cognito-identity
<details> <details>
<summary>34% implemented</summary> <summary>39% implemented</summary>
- [X] create_identity_pool - [X] create_identity_pool
- [ ] delete_identities - [ ] delete_identities
@ -1151,7 +1151,7 @@
- [X] get_open_id_token_for_developer_identity - [X] get_open_id_token_for_developer_identity
- [ ] get_principal_tag_attribute_map - [ ] get_principal_tag_attribute_map
- [X] list_identities - [X] list_identities
- [ ] list_identity_pools - [X] list_identity_pools
- [ ] list_tags_for_resource - [ ] list_tags_for_resource
- [ ] lookup_developer_identity - [ ] lookup_developer_identity
- [ ] merge_developer_identities - [ ] merge_developer_identities
@ -1921,6 +1921,7 @@
- [ ] associate_enclave_certificate_iam_role - [ ] associate_enclave_certificate_iam_role
- [X] associate_iam_instance_profile - [X] associate_iam_instance_profile
- [ ] associate_instance_event_window - [ ] associate_instance_event_window
- [ ] associate_ipam_byoasn
- [ ] associate_ipam_resource_discovery - [ ] associate_ipam_resource_discovery
- [ ] associate_nat_gateway_address - [ ] associate_nat_gateway_address
- [X] associate_route_table - [X] associate_route_table
@ -2111,6 +2112,7 @@
- [ ] delete_vpn_connection_route - [ ] delete_vpn_connection_route
- [X] delete_vpn_gateway - [X] delete_vpn_gateway
- [ ] deprovision_byoip_cidr - [ ] deprovision_byoip_cidr
- [ ] deprovision_ipam_byoasn
- [ ] deprovision_ipam_pool_cidr - [ ] deprovision_ipam_pool_cidr
- [ ] deprovision_public_ipv4_pool_cidr - [ ] deprovision_public_ipv4_pool_cidr
- [X] deregister_image - [X] deregister_image
@ -2173,6 +2175,7 @@
- [X] describe_instance_types - [X] describe_instance_types
- [X] describe_instances - [X] describe_instances
- [X] describe_internet_gateways - [X] describe_internet_gateways
- [ ] describe_ipam_byoasn
- [ ] describe_ipam_pools - [ ] describe_ipam_pools
- [ ] describe_ipam_resource_discoveries - [ ] describe_ipam_resource_discoveries
- [ ] describe_ipam_resource_discovery_associations - [ ] describe_ipam_resource_discovery_associations
@ -2291,6 +2294,7 @@
- [ ] disassociate_enclave_certificate_iam_role - [ ] disassociate_enclave_certificate_iam_role
- [X] disassociate_iam_instance_profile - [X] disassociate_iam_instance_profile
- [ ] disassociate_instance_event_window - [ ] disassociate_instance_event_window
- [ ] disassociate_ipam_byoasn
- [ ] disassociate_ipam_resource_discovery - [ ] disassociate_ipam_resource_discovery
- [ ] disassociate_nat_gateway_address - [ ] disassociate_nat_gateway_address
- [X] disassociate_route_table - [X] disassociate_route_table
@ -2339,6 +2343,7 @@
- [ ] get_instance_uefi_data - [ ] get_instance_uefi_data
- [ ] get_ipam_address_history - [ ] get_ipam_address_history
- [ ] get_ipam_discovered_accounts - [ ] get_ipam_discovered_accounts
- [ ] get_ipam_discovered_public_addresses
- [ ] get_ipam_discovered_resource_cidrs - [ ] get_ipam_discovered_resource_cidrs
- [ ] get_ipam_pool_allocations - [ ] get_ipam_pool_allocations
- [ ] get_ipam_pool_cidrs - [ ] get_ipam_pool_cidrs
@ -2444,6 +2449,7 @@
- [ ] move_address_to_vpc - [ ] move_address_to_vpc
- [ ] move_byoip_cidr_to_ipam - [ ] move_byoip_cidr_to_ipam
- [ ] provision_byoip_cidr - [ ] provision_byoip_cidr
- [ ] provision_ipam_byoasn
- [ ] provision_ipam_pool_cidr - [ ] provision_ipam_pool_cidr
- [ ] provision_public_ipv4_pool_cidr - [ ] provision_public_ipv4_pool_cidr
- [ ] purchase_capacity_block - [ ] purchase_capacity_block
@ -2521,7 +2527,7 @@
## ecr ## ecr
<details> <details>
<summary>68% implemented</summary> <summary>65% implemented</summary>
- [ ] batch_check_layer_availability - [ ] batch_check_layer_availability
- [X] batch_delete_image - [X] batch_delete_image
@ -2563,7 +2569,9 @@
- [ ] start_lifecycle_policy_preview - [ ] start_lifecycle_policy_preview
- [X] tag_resource - [X] tag_resource
- [X] untag_resource - [X] untag_resource
- [ ] update_pull_through_cache_rule
- [ ] upload_layer_part - [ ] upload_layer_part
- [ ] validate_pull_through_cache_rule
</details> </details>
## ecs ## ecs
@ -3286,7 +3294,7 @@
## glue ## glue
<details> <details>
<summary>32% implemented</summary> <summary>31% implemented</summary>
- [X] batch_create_partition - [X] batch_create_partition
- [ ] batch_delete_connection - [ ] batch_delete_connection
@ -3366,6 +3374,8 @@
- [ ] get_classifiers - [ ] get_classifiers
- [ ] get_column_statistics_for_partition - [ ] get_column_statistics_for_partition
- [ ] get_column_statistics_for_table - [ ] get_column_statistics_for_table
- [ ] get_column_statistics_task_run
- [ ] get_column_statistics_task_runs
- [ ] get_connection - [ ] get_connection
- [ ] get_connections - [ ] get_connections
- [X] get_crawler - [X] get_crawler
@ -3426,6 +3436,7 @@
- [ ] get_workflow_runs - [ ] get_workflow_runs
- [ ] import_catalog_to_glue - [ ] import_catalog_to_glue
- [ ] list_blueprints - [ ] list_blueprints
- [ ] list_column_statistics_task_runs
- [X] list_crawlers - [X] list_crawlers
- [ ] list_crawls - [ ] list_crawls
- [ ] list_custom_entity_types - [ ] list_custom_entity_types
@ -3456,6 +3467,7 @@
- [ ] run_statement - [ ] run_statement
- [ ] search_tables - [ ] search_tables
- [ ] start_blueprint_run - [ ] start_blueprint_run
- [ ] start_column_statistics_task_run
- [X] start_crawler - [X] start_crawler
- [ ] start_crawler_schedule - [ ] start_crawler_schedule
- [ ] start_data_quality_rule_recommendation_run - [ ] start_data_quality_rule_recommendation_run
@ -3467,6 +3479,7 @@
- [ ] start_ml_labeling_set_generation_task_run - [ ] start_ml_labeling_set_generation_task_run
- [X] start_trigger - [X] start_trigger
- [ ] start_workflow_run - [ ] start_workflow_run
- [ ] stop_column_statistics_task_run
- [X] stop_crawler - [X] stop_crawler
- [ ] stop_crawler_schedule - [ ] stop_crawler_schedule
- [X] stop_session - [X] stop_session
@ -5331,6 +5344,7 @@
- [X] create_ingestion - [X] create_ingestion
- [ ] create_namespace - [ ] create_namespace
- [ ] create_refresh_schedule - [ ] create_refresh_schedule
- [ ] create_role_membership
- [ ] create_template - [ ] create_template
- [ ] create_template_alias - [ ] create_template_alias
- [ ] create_theme - [ ] create_theme
@ -5352,6 +5366,8 @@
- [ ] delete_iam_policy_assignment - [ ] delete_iam_policy_assignment
- [ ] delete_namespace - [ ] delete_namespace
- [ ] delete_refresh_schedule - [ ] delete_refresh_schedule
- [ ] delete_role_custom_permission
- [ ] delete_role_membership
- [ ] delete_template - [ ] delete_template
- [ ] delete_template_alias - [ ] delete_template_alias
- [ ] delete_theme - [ ] delete_theme
@ -5389,6 +5405,7 @@
- [ ] describe_ip_restriction - [ ] describe_ip_restriction
- [ ] describe_namespace - [ ] describe_namespace
- [ ] describe_refresh_schedule - [ ] describe_refresh_schedule
- [ ] describe_role_custom_permission
- [ ] describe_template - [ ] describe_template
- [ ] describe_template_alias - [ ] describe_template_alias
- [ ] describe_template_definition - [ ] describe_template_definition
@ -5422,6 +5439,7 @@
- [ ] list_ingestions - [ ] list_ingestions
- [ ] list_namespaces - [ ] list_namespaces
- [ ] list_refresh_schedules - [ ] list_refresh_schedules
- [ ] list_role_memberships
- [ ] list_tags_for_resource - [ ] list_tags_for_resource
- [ ] list_template_aliases - [ ] list_template_aliases
- [ ] list_template_versions - [ ] list_template_versions
@ -5466,6 +5484,7 @@
- [ ] update_ip_restriction - [ ] update_ip_restriction
- [ ] update_public_sharing_settings - [ ] update_public_sharing_settings
- [ ] update_refresh_schedule - [ ] update_refresh_schedule
- [ ] update_role_custom_permission
- [ ] update_template - [ ] update_template
- [ ] update_template_alias - [ ] update_template_alias
- [ ] update_template_permissions - [ ] update_template_permissions
@ -5691,7 +5710,7 @@
## redshift ## redshift
<details> <details>
<summary>23% implemented</summary> <summary>22% implemented</summary>
- [ ] accept_reserved_node_exchange - [ ] accept_reserved_node_exchange
- [ ] add_partner - [ ] add_partner
@ -5715,6 +5734,7 @@
- [ ] create_event_subscription - [ ] create_event_subscription
- [ ] create_hsm_client_certificate - [ ] create_hsm_client_certificate
- [ ] create_hsm_configuration - [ ] create_hsm_configuration
- [ ] create_redshift_idc_application
- [ ] create_scheduled_action - [ ] create_scheduled_action
- [X] create_snapshot_copy_grant - [X] create_snapshot_copy_grant
- [ ] create_snapshot_schedule - [ ] create_snapshot_schedule
@ -5733,6 +5753,7 @@
- [ ] delete_hsm_client_certificate - [ ] delete_hsm_client_certificate
- [ ] delete_hsm_configuration - [ ] delete_hsm_configuration
- [ ] delete_partner - [ ] delete_partner
- [ ] delete_redshift_idc_application
- [ ] delete_resource_policy - [ ] delete_resource_policy
- [ ] delete_scheduled_action - [ ] delete_scheduled_action
- [X] delete_snapshot_copy_grant - [X] delete_snapshot_copy_grant
@ -5767,6 +5788,7 @@
- [ ] describe_node_configuration_options - [ ] describe_node_configuration_options
- [ ] describe_orderable_cluster_options - [ ] describe_orderable_cluster_options
- [ ] describe_partners - [ ] describe_partners
- [ ] describe_redshift_idc_applications
- [ ] describe_reserved_node_exchange_status - [ ] describe_reserved_node_exchange_status
- [ ] describe_reserved_node_offerings - [ ] describe_reserved_node_offerings
- [ ] describe_reserved_nodes - [ ] describe_reserved_nodes
@ -5802,6 +5824,7 @@
- [ ] modify_custom_domain_association - [ ] modify_custom_domain_association
- [ ] modify_endpoint_access - [ ] modify_endpoint_access
- [ ] modify_event_subscription - [ ] modify_event_subscription
- [ ] modify_redshift_idc_application
- [ ] modify_scheduled_action - [ ] modify_scheduled_action
- [X] modify_snapshot_copy_retention_period - [X] modify_snapshot_copy_retention_period
- [ ] modify_snapshot_schedule - [ ] modify_snapshot_schedule
@ -7215,31 +7238,59 @@
## sso-admin ## sso-admin
<details> <details>
<summary>21% implemented</summary> <summary>10% implemented</summary>
- [ ] attach_customer_managed_policy_reference_to_permission_set - [ ] attach_customer_managed_policy_reference_to_permission_set
- [ ] attach_managed_policy_to_permission_set - [ ] attach_managed_policy_to_permission_set
- [X] create_account_assignment - [X] create_account_assignment
- [ ] create_application
- [ ] create_application_assignment
- [ ] create_instance
- [ ] create_instance_access_control_attribute_configuration - [ ] create_instance_access_control_attribute_configuration
- [X] create_permission_set - [X] create_permission_set
- [ ] create_trusted_token_issuer
- [X] delete_account_assignment - [X] delete_account_assignment
- [ ] delete_application
- [ ] delete_application_access_scope
- [ ] delete_application_assignment
- [ ] delete_application_authentication_method
- [ ] delete_application_grant
- [ ] delete_inline_policy_from_permission_set - [ ] delete_inline_policy_from_permission_set
- [ ] delete_instance
- [ ] delete_instance_access_control_attribute_configuration - [ ] delete_instance_access_control_attribute_configuration
- [X] delete_permission_set - [X] delete_permission_set
- [ ] delete_permissions_boundary_from_permission_set - [ ] delete_permissions_boundary_from_permission_set
- [ ] delete_trusted_token_issuer
- [ ] describe_account_assignment_creation_status - [ ] describe_account_assignment_creation_status
- [ ] describe_account_assignment_deletion_status - [ ] describe_account_assignment_deletion_status
- [ ] describe_application
- [ ] describe_application_assignment
- [ ] describe_application_provider
- [ ] describe_instance
- [ ] describe_instance_access_control_attribute_configuration - [ ] describe_instance_access_control_attribute_configuration
- [X] describe_permission_set - [X] describe_permission_set
- [ ] describe_permission_set_provisioning_status - [ ] describe_permission_set_provisioning_status
- [ ] describe_trusted_token_issuer
- [ ] detach_customer_managed_policy_reference_from_permission_set - [ ] detach_customer_managed_policy_reference_from_permission_set
- [ ] detach_managed_policy_from_permission_set - [ ] detach_managed_policy_from_permission_set
- [ ] get_application_access_scope
- [ ] get_application_assignment_configuration
- [ ] get_application_authentication_method
- [ ] get_application_grant
- [ ] get_inline_policy_for_permission_set - [ ] get_inline_policy_for_permission_set
- [ ] get_permissions_boundary_for_permission_set - [ ] get_permissions_boundary_for_permission_set
- [ ] list_account_assignment_creation_status - [ ] list_account_assignment_creation_status
- [ ] list_account_assignment_deletion_status - [ ] list_account_assignment_deletion_status
- [X] list_account_assignments - [X] list_account_assignments
- [ ] list_account_assignments_for_principal
- [ ] list_accounts_for_provisioned_permission_set - [ ] list_accounts_for_provisioned_permission_set
- [ ] list_application_access_scopes
- [ ] list_application_assignments
- [ ] list_application_assignments_for_principal
- [ ] list_application_authentication_methods
- [ ] list_application_grants
- [ ] list_application_providers
- [ ] list_applications
- [ ] list_customer_managed_policy_references_in_permission_set - [ ] list_customer_managed_policy_references_in_permission_set
- [ ] list_instances - [ ] list_instances
- [ ] list_managed_policies_in_permission_set - [ ] list_managed_policies_in_permission_set
@ -7247,13 +7298,21 @@
- [X] list_permission_sets - [X] list_permission_sets
- [ ] list_permission_sets_provisioned_to_account - [ ] list_permission_sets_provisioned_to_account
- [ ] list_tags_for_resource - [ ] list_tags_for_resource
- [ ] list_trusted_token_issuers
- [ ] provision_permission_set - [ ] provision_permission_set
- [ ] put_application_access_scope
- [ ] put_application_assignment_configuration
- [ ] put_application_authentication_method
- [ ] put_application_grant
- [ ] put_inline_policy_to_permission_set - [ ] put_inline_policy_to_permission_set
- [ ] put_permissions_boundary_to_permission_set - [ ] put_permissions_boundary_to_permission_set
- [ ] tag_resource - [ ] tag_resource
- [ ] untag_resource - [ ] untag_resource
- [ ] update_application
- [ ] update_instance
- [ ] update_instance_access_control_attribute_configuration - [ ] update_instance_access_control_attribute_configuration
- [X] update_permission_set - [X] update_permission_set
- [ ] update_trusted_token_issuer
</details> </details>
## stepfunctions ## stepfunctions
@ -7675,7 +7734,6 @@
- lookoutvision - lookoutvision
- m2 - m2
- machinelearning - machinelearning
- macie
- macie2 - macie2
- managedblockchain-query - managedblockchain-query
- marketplace-catalog - marketplace-catalog
@ -7763,6 +7821,7 @@
- tnb - tnb
- transfer - transfer
- translate - translate
- trustedadvisor
- verifiedpermissions - verifiedpermissions
- voice-id - voice-id
- vpc-lattice - vpc-lattice

View File

@ -1,7 +1,7 @@
include README.md LICENSE AUTHORS.md include README.md LICENSE AUTHORS.md
include requirements.txt requirements-dev.txt include requirements.txt requirements-dev.txt
include moto/py.typed
include moto/config/resources/aws_managed_rules.json include moto/config/resources/aws_managed_rules.json
include moto/ec2/_models/*.py
include moto/ec2/resources/instance_types.json include moto/ec2/resources/instance_types.json
include moto/ec2/resources/instance_type_offerings/*/*.json include moto/ec2/resources/instance_type_offerings/*/*.json
include moto/ec2/resources/latest_amis/*.json include moto/ec2/resources/latest_amis/*.json
@ -14,7 +14,6 @@ include moto/moto_proxy/*
include moto/moto_proxy/certs/__init__.py include moto/moto_proxy/certs/__init__.py
include moto/moto_proxy/certs/req.conf.tmpl include moto/moto_proxy/certs/req.conf.tmpl
include moto/rds/resources/cluster_options/*.json include moto/rds/resources/cluster_options/*.json
include moto/servicequotas/resources/*/*.json
include moto/ssm/resources/*.json include moto/ssm/resources/*.json
include moto/ssm/resources/ami-amazon-linux-latest/*.json include moto/ssm/resources/ami-amazon-linux-latest/*.json
include moto/ssm/resources/ecs/optimized_amis/*.json include moto/ssm/resources/ecs/optimized_amis/*.json

View File

@ -8,6 +8,12 @@
FAQ FAQ
====== ======
Why is my test data disappearing?
###################################
To prevent state from leaking across different tests, Moto automatically deletes any created data after a Moto-decorator ends.
So make sure that your decorator is active for the entire duration of the test-method.
Is Moto concurrency safe? Is Moto concurrency safe?
############################ ############################

View File

@ -254,23 +254,33 @@ Here is an example:
with mock_s3(): with mock_s3():
yield boto3.client("s3", region_name="us-east-1") yield boto3.client("s3", region_name="us-east-1")
@pytest.fixture
def create_bucket1(s3):
boto3.client("s3").create_bucket(Bucket="b1")
@pytest.fixture
def create_bucket2(s3):
boto3.client("s3").create_bucket(Bucket="b2")
def test_s3_directly(s3):
s3.create_bucket(Bucket="somebucket")
result = s3.list_buckets()
assert len(result["Buckets"]) == 1
def test_bucket_creation(create_bucket1, create_bucket2):
buckets = boto3.client("s3").list_buckets()["Buckets"]
assert len(result["Buckets"]) == 2
In the code sample above, all of the AWS/mocked fixtures take in a parameter of `aws_credentials`, In the code sample above, all of the AWS/mocked fixtures take in a parameter of `aws_credentials`,
which sets the proper fake environment variables. The fake environment variables are used so that `botocore` doesn't try to locate real which sets the proper fake environment variables. The fake environment variables are used so that `botocore` doesn't try to locate real
credentials on your system. credentials on your system.
Next, once you need to do anything with the mocked AWS environment, do something like: With Moto activated within the fixture, we can pass it to a test-method to ensure that any other AWS-calls are also mocked inside that test method.
We can also combine multiple fixtures that use the same Moto-fixture.
.. sourcecode:: python Moto will delete any data after the mock ends, so the state is not shared across methods.
def test_create_bucket(s3):
# s3 is a fixture defined above that yields a boto3 s3 client.
# Feel free to instantiate another boto3 S3 client -- Keep note of the region though.
s3.create_bucket(Bucket="somebucket")
result = s3.list_buckets()
assert len(result["Buckets"]) == 1
assert result["Buckets"][0]["Name"] == "somebucket"
.. _pesky_imports_section: .. _pesky_imports_section:

View File

@ -64,7 +64,6 @@ autoscaling
- [X] describe_tags - [X] describe_tags
Pagination is not yet implemented. Pagination is not yet implemented.
Only the `auto-scaling-group` and `propagate-at-launch` filters are implemented.
- [ ] describe_termination_policy_types - [ ] describe_termination_policy_types

View File

@ -41,7 +41,11 @@ cognito-identity
The MaxResults-parameter has not yet been implemented The MaxResults-parameter has not yet been implemented
- [ ] list_identity_pools - [X] list_identity_pools
The MaxResults-parameter has not yet been implemented
- [ ] list_tags_for_resource - [ ] list_tags_for_resource
- [ ] lookup_developer_identity - [ ] lookup_developer_identity
- [ ] merge_developer_identities - [ ] merge_developer_identities

View File

@ -48,6 +48,7 @@ ec2
- [ ] associate_enclave_certificate_iam_role - [ ] associate_enclave_certificate_iam_role
- [X] associate_iam_instance_profile - [X] associate_iam_instance_profile
- [ ] associate_instance_event_window - [ ] associate_instance_event_window
- [ ] associate_ipam_byoasn
- [ ] associate_ipam_resource_discovery - [ ] associate_ipam_resource_discovery
- [ ] associate_nat_gateway_address - [ ] associate_nat_gateway_address
- [X] associate_route_table - [X] associate_route_table
@ -242,6 +243,7 @@ ec2
- [ ] delete_vpn_connection_route - [ ] delete_vpn_connection_route
- [X] delete_vpn_gateway - [X] delete_vpn_gateway
- [ ] deprovision_byoip_cidr - [ ] deprovision_byoip_cidr
- [ ] deprovision_ipam_byoasn
- [ ] deprovision_ipam_pool_cidr - [ ] deprovision_ipam_pool_cidr
- [ ] deprovision_public_ipv4_pool_cidr - [ ] deprovision_public_ipv4_pool_cidr
- [X] deregister_image - [X] deregister_image
@ -312,6 +314,7 @@ ec2
- [X] describe_instance_types - [X] describe_instance_types
- [X] describe_instances - [X] describe_instances
- [X] describe_internet_gateways - [X] describe_internet_gateways
- [ ] describe_ipam_byoasn
- [ ] describe_ipam_pools - [ ] describe_ipam_pools
- [ ] describe_ipam_resource_discoveries - [ ] describe_ipam_resource_discoveries
- [ ] describe_ipam_resource_discovery_associations - [ ] describe_ipam_resource_discovery_associations
@ -449,6 +452,7 @@ ec2
- [ ] disassociate_enclave_certificate_iam_role - [ ] disassociate_enclave_certificate_iam_role
- [X] disassociate_iam_instance_profile - [X] disassociate_iam_instance_profile
- [ ] disassociate_instance_event_window - [ ] disassociate_instance_event_window
- [ ] disassociate_ipam_byoasn
- [ ] disassociate_ipam_resource_discovery - [ ] disassociate_ipam_resource_discovery
- [ ] disassociate_nat_gateway_address - [ ] disassociate_nat_gateway_address
- [X] disassociate_route_table - [X] disassociate_route_table
@ -497,6 +501,7 @@ ec2
- [ ] get_instance_uefi_data - [ ] get_instance_uefi_data
- [ ] get_ipam_address_history - [ ] get_ipam_address_history
- [ ] get_ipam_discovered_accounts - [ ] get_ipam_discovered_accounts
- [ ] get_ipam_discovered_public_addresses
- [ ] get_ipam_discovered_resource_cidrs - [ ] get_ipam_discovered_resource_cidrs
- [ ] get_ipam_pool_allocations - [ ] get_ipam_pool_allocations
- [ ] get_ipam_pool_cidrs - [ ] get_ipam_pool_cidrs
@ -606,6 +611,7 @@ ec2
- [ ] move_address_to_vpc - [ ] move_address_to_vpc
- [ ] move_byoip_cidr_to_ipam - [ ] move_byoip_cidr_to_ipam
- [ ] provision_byoip_cidr - [ ] provision_byoip_cidr
- [ ] provision_ipam_byoasn
- [ ] provision_ipam_pool_cidr - [ ] provision_ipam_pool_cidr
- [ ] provision_public_ipv4_pool_cidr - [ ] provision_public_ipv4_pool_cidr
- [ ] purchase_capacity_block - [ ] purchase_capacity_block

View File

@ -77,5 +77,7 @@ ecr
- [ ] start_lifecycle_policy_preview - [ ] start_lifecycle_policy_preview
- [X] tag_resource - [X] tag_resource
- [X] untag_resource - [X] untag_resource
- [ ] update_pull_through_cache_rule
- [ ] upload_layer_part - [ ] upload_layer_part
- [ ] validate_pull_through_cache_rule

View File

@ -107,6 +107,8 @@ glue
- [ ] get_classifiers - [ ] get_classifiers
- [ ] get_column_statistics_for_partition - [ ] get_column_statistics_for_partition
- [ ] get_column_statistics_for_table - [ ] get_column_statistics_for_table
- [ ] get_column_statistics_task_run
- [ ] get_column_statistics_task_runs
- [ ] get_connection - [ ] get_connection
- [ ] get_connections - [ ] get_connections
- [X] get_crawler - [X] get_crawler
@ -179,6 +181,7 @@ glue
- [ ] get_workflow_runs - [ ] get_workflow_runs
- [ ] import_catalog_to_glue - [ ] import_catalog_to_glue
- [ ] list_blueprints - [ ] list_blueprints
- [ ] list_column_statistics_task_runs
- [X] list_crawlers - [X] list_crawlers
- [ ] list_crawls - [ ] list_crawls
- [ ] list_custom_entity_types - [ ] list_custom_entity_types
@ -209,6 +212,7 @@ glue
- [ ] run_statement - [ ] run_statement
- [ ] search_tables - [ ] search_tables
- [ ] start_blueprint_run - [ ] start_blueprint_run
- [ ] start_column_statistics_task_run
- [X] start_crawler - [X] start_crawler
- [ ] start_crawler_schedule - [ ] start_crawler_schedule
- [ ] start_data_quality_rule_recommendation_run - [ ] start_data_quality_rule_recommendation_run
@ -220,6 +224,7 @@ glue
- [ ] start_ml_labeling_set_generation_task_run - [ ] start_ml_labeling_set_generation_task_run
- [X] start_trigger - [X] start_trigger
- [ ] start_workflow_run - [ ] start_workflow_run
- [ ] stop_column_statistics_task_run
- [X] stop_crawler - [X] stop_crawler
- [ ] stop_crawler_schedule - [ ] stop_crawler_schedule
- [X] stop_session - [X] stop_session

View File

@ -64,7 +64,7 @@ lakeformation
- [X] list_lf_tags - [X] list_lf_tags
- [X] list_permissions - [X] list_permissions
No parameters have been implemented yet No pagination has been implemented yet.
- [X] list_resources - [X] list_resources

View File

@ -42,6 +42,7 @@ quicksight
- [X] create_ingestion - [X] create_ingestion
- [ ] create_namespace - [ ] create_namespace
- [ ] create_refresh_schedule - [ ] create_refresh_schedule
- [ ] create_role_membership
- [ ] create_template - [ ] create_template
- [ ] create_template_alias - [ ] create_template_alias
- [ ] create_theme - [ ] create_theme
@ -63,6 +64,8 @@ quicksight
- [ ] delete_iam_policy_assignment - [ ] delete_iam_policy_assignment
- [ ] delete_namespace - [ ] delete_namespace
- [ ] delete_refresh_schedule - [ ] delete_refresh_schedule
- [ ] delete_role_custom_permission
- [ ] delete_role_membership
- [ ] delete_template - [ ] delete_template
- [ ] delete_template_alias - [ ] delete_template_alias
- [ ] delete_theme - [ ] delete_theme
@ -100,6 +103,7 @@ quicksight
- [ ] describe_ip_restriction - [ ] describe_ip_restriction
- [ ] describe_namespace - [ ] describe_namespace
- [ ] describe_refresh_schedule - [ ] describe_refresh_schedule
- [ ] describe_role_custom_permission
- [ ] describe_template - [ ] describe_template
- [ ] describe_template_alias - [ ] describe_template_alias
- [ ] describe_template_definition - [ ] describe_template_definition
@ -141,6 +145,7 @@ quicksight
- [ ] list_ingestions - [ ] list_ingestions
- [ ] list_namespaces - [ ] list_namespaces
- [ ] list_refresh_schedules - [ ] list_refresh_schedules
- [ ] list_role_memberships
- [ ] list_tags_for_resource - [ ] list_tags_for_resource
- [ ] list_template_aliases - [ ] list_template_aliases
- [ ] list_template_versions - [ ] list_template_versions
@ -194,6 +199,7 @@ quicksight
- [ ] update_ip_restriction - [ ] update_ip_restriction
- [ ] update_public_sharing_settings - [ ] update_public_sharing_settings
- [ ] update_refresh_schedule - [ ] update_refresh_schedule
- [ ] update_role_custom_permission
- [ ] update_template - [ ] update_template
- [ ] update_template_alias - [ ] update_template_alias
- [ ] update_template_permissions - [ ] update_template_permissions

View File

@ -47,6 +47,7 @@ redshift
- [ ] create_event_subscription - [ ] create_event_subscription
- [ ] create_hsm_client_certificate - [ ] create_hsm_client_certificate
- [ ] create_hsm_configuration - [ ] create_hsm_configuration
- [ ] create_redshift_idc_application
- [ ] create_scheduled_action - [ ] create_scheduled_action
- [X] create_snapshot_copy_grant - [X] create_snapshot_copy_grant
- [ ] create_snapshot_schedule - [ ] create_snapshot_schedule
@ -65,6 +66,7 @@ redshift
- [ ] delete_hsm_client_certificate - [ ] delete_hsm_client_certificate
- [ ] delete_hsm_configuration - [ ] delete_hsm_configuration
- [ ] delete_partner - [ ] delete_partner
- [ ] delete_redshift_idc_application
- [ ] delete_resource_policy - [ ] delete_resource_policy
- [ ] delete_scheduled_action - [ ] delete_scheduled_action
- [X] delete_snapshot_copy_grant - [X] delete_snapshot_copy_grant
@ -99,6 +101,7 @@ redshift
- [ ] describe_node_configuration_options - [ ] describe_node_configuration_options
- [ ] describe_orderable_cluster_options - [ ] describe_orderable_cluster_options
- [ ] describe_partners - [ ] describe_partners
- [ ] describe_redshift_idc_applications
- [ ] describe_reserved_node_exchange_status - [ ] describe_reserved_node_exchange_status
- [ ] describe_reserved_node_offerings - [ ] describe_reserved_node_offerings
- [ ] describe_reserved_nodes - [ ] describe_reserved_nodes
@ -134,6 +137,7 @@ redshift
- [ ] modify_custom_domain_association - [ ] modify_custom_domain_association
- [ ] modify_endpoint_access - [ ] modify_endpoint_access
- [ ] modify_event_subscription - [ ] modify_event_subscription
- [ ] modify_redshift_idc_application
- [ ] modify_scheduled_action - [ ] modify_scheduled_action
- [X] modify_snapshot_copy_retention_period - [X] modify_snapshot_copy_retention_period
- [ ] modify_snapshot_schedule - [ ] modify_snapshot_schedule

View File

@ -30,20 +30,40 @@ sso-admin
- [ ] attach_customer_managed_policy_reference_to_permission_set - [ ] attach_customer_managed_policy_reference_to_permission_set
- [ ] attach_managed_policy_to_permission_set - [ ] attach_managed_policy_to_permission_set
- [X] create_account_assignment - [X] create_account_assignment
- [ ] create_application
- [ ] create_application_assignment
- [ ] create_instance
- [ ] create_instance_access_control_attribute_configuration - [ ] create_instance_access_control_attribute_configuration
- [X] create_permission_set - [X] create_permission_set
- [ ] create_trusted_token_issuer
- [X] delete_account_assignment - [X] delete_account_assignment
- [ ] delete_application
- [ ] delete_application_access_scope
- [ ] delete_application_assignment
- [ ] delete_application_authentication_method
- [ ] delete_application_grant
- [ ] delete_inline_policy_from_permission_set - [ ] delete_inline_policy_from_permission_set
- [ ] delete_instance
- [ ] delete_instance_access_control_attribute_configuration - [ ] delete_instance_access_control_attribute_configuration
- [X] delete_permission_set - [X] delete_permission_set
- [ ] delete_permissions_boundary_from_permission_set - [ ] delete_permissions_boundary_from_permission_set
- [ ] delete_trusted_token_issuer
- [ ] describe_account_assignment_creation_status - [ ] describe_account_assignment_creation_status
- [ ] describe_account_assignment_deletion_status - [ ] describe_account_assignment_deletion_status
- [ ] describe_application
- [ ] describe_application_assignment
- [ ] describe_application_provider
- [ ] describe_instance
- [ ] describe_instance_access_control_attribute_configuration - [ ] describe_instance_access_control_attribute_configuration
- [X] describe_permission_set - [X] describe_permission_set
- [ ] describe_permission_set_provisioning_status - [ ] describe_permission_set_provisioning_status
- [ ] describe_trusted_token_issuer
- [ ] detach_customer_managed_policy_reference_from_permission_set - [ ] detach_customer_managed_policy_reference_from_permission_set
- [ ] detach_managed_policy_from_permission_set - [ ] detach_managed_policy_from_permission_set
- [ ] get_application_access_scope
- [ ] get_application_assignment_configuration
- [ ] get_application_authentication_method
- [ ] get_application_grant
- [ ] get_inline_policy_for_permission_set - [ ] get_inline_policy_for_permission_set
- [ ] get_permissions_boundary_for_permission_set - [ ] get_permissions_boundary_for_permission_set
- [ ] list_account_assignment_creation_status - [ ] list_account_assignment_creation_status
@ -53,7 +73,15 @@ sso-admin
Pagination has not yet been implemented Pagination has not yet been implemented
- [ ] list_account_assignments_for_principal
- [ ] list_accounts_for_provisioned_permission_set - [ ] list_accounts_for_provisioned_permission_set
- [ ] list_application_access_scopes
- [ ] list_application_assignments
- [ ] list_application_assignments_for_principal
- [ ] list_application_authentication_methods
- [ ] list_application_grants
- [ ] list_application_providers
- [ ] list_applications
- [ ] list_customer_managed_policy_references_in_permission_set - [ ] list_customer_managed_policy_references_in_permission_set
- [ ] list_instances - [ ] list_instances
- [ ] list_managed_policies_in_permission_set - [ ] list_managed_policies_in_permission_set
@ -61,11 +89,19 @@ sso-admin
- [X] list_permission_sets - [X] list_permission_sets
- [ ] list_permission_sets_provisioned_to_account - [ ] list_permission_sets_provisioned_to_account
- [ ] list_tags_for_resource - [ ] list_tags_for_resource
- [ ] list_trusted_token_issuers
- [ ] provision_permission_set - [ ] provision_permission_set
- [ ] put_application_access_scope
- [ ] put_application_assignment_configuration
- [ ] put_application_authentication_method
- [ ] put_application_grant
- [ ] put_inline_policy_to_permission_set - [ ] put_inline_policy_to_permission_set
- [ ] put_permissions_boundary_to_permission_set - [ ] put_permissions_boundary_to_permission_set
- [ ] tag_resource - [ ] tag_resource
- [ ] untag_resource - [ ] untag_resource
- [ ] update_application
- [ ] update_instance
- [ ] update_instance_access_control_attribute_configuration - [ ] update_instance_access_control_attribute_configuration
- [X] update_permission_set - [X] update_permission_set
- [ ] update_trusted_token_issuer

View File

@ -472,10 +472,10 @@ class FakeAutoScalingGroup(CloudFormationModel):
@tags.setter @tags.setter
def tags(self, tags: List[Dict[str, str]]) -> None: def tags(self, tags: List[Dict[str, str]]) -> None:
for tag in tags: for tag in tags:
if "resource_id" not in tag or not tag["resource_id"]: if "ResourceId" not in tag or not tag["ResourceId"]:
tag["resource_id"] = self.name tag["ResourceId"] = self.name
if "resource_type" not in tag or not tag["resource_type"]: if "ResourceType" not in tag or not tag["ResourceType"]:
tag["resource_type"] = "auto-scaling-group" tag["ResourceType"] = "auto-scaling-group"
self._tags = tags self._tags = tags
@property @property
@ -1376,31 +1376,31 @@ class AutoScalingBackend(BaseBackend):
def create_or_update_tags(self, tags: List[Dict[str, str]]) -> None: def create_or_update_tags(self, tags: List[Dict[str, str]]) -> None:
for tag in tags: for tag in tags:
group_name = tag["resource_id"] group_name = tag["ResourceId"]
group = self.autoscaling_groups[group_name] group = self.autoscaling_groups[group_name]
old_tags = group.tags old_tags = group.tags
new_tags = [] new_tags = []
# if key was in old_tags, update old tag # if key was in old_tags, update old tag
for old_tag in old_tags: for old_tag in old_tags:
if old_tag["key"] == tag["key"]: if old_tag["Key"] == tag["Key"]:
new_tags.append(tag) new_tags.append(tag)
else: else:
new_tags.append(old_tag) new_tags.append(old_tag)
# if key was never in old_tag's add it (create tag) # if key was never in old_tag's add it (create tag)
if not any(new_tag["key"] == tag["key"] for new_tag in new_tags): if not any(new_tag["Key"] == tag["Key"] for new_tag in new_tags):
new_tags.append(tag) new_tags.append(tag)
group.tags = new_tags group.tags = new_tags
def delete_tags(self, tags: List[Dict[str, str]]) -> None: def delete_tags(self, tags: List[Dict[str, str]]) -> None:
for tag_to_delete in tags: for tag_to_delete in tags:
group_name = tag_to_delete["resource_id"] group_name = tag_to_delete["ResourceId"]
key_to_delete = tag_to_delete["key"] key_to_delete = tag_to_delete["Key"]
group = self.autoscaling_groups[group_name] group = self.autoscaling_groups[group_name]
old_tags = group.tags old_tags = group.tags
group.tags = [x for x in old_tags if x["key"] != key_to_delete] group.tags = [x for x in old_tags if x["Key"] != key_to_delete]
def attach_load_balancers( def attach_load_balancers(
self, group_name: str, load_balancer_names: List[str] self, group_name: str, load_balancer_names: List[str]
@ -1563,18 +1563,16 @@ class AutoScalingBackend(BaseBackend):
tags = list(itertools.chain(*[r.tags for r in resources])) tags = list(itertools.chain(*[r.tags for r in resources]))
for f in filters: for f in filters:
if f["Name"] == "auto-scaling-group": if f["Name"] == "auto-scaling-group":
tags = [t for t in tags if t["resource_id"] in f["Values"]] tags = [t for t in tags if t["ResourceId"] in f["Values"]]
if f["Name"] == "propagate-at-launch": if f["Name"] == "propagate-at-launch":
values = [v.lower() for v in f["Values"]] values = [v.lower() for v in f["Values"]]
tags = [ tags = [
t t for t in tags if t.get("PropagateAtLaunch", "").lower() in values
for t in tags
if t.get("propagate_at_launch", "").lower() in values
] ]
if f["Name"] == "key": if f["Name"] == "key":
tags = [t for t in tags if t["key"] in f["Values"]] tags = [t for t in tags if t["Key"] in f["Values"]]
if f["Name"] == "value": if f["Name"] == "value":
tags = [t for t in tags if t["value"] in f["Values"]] tags = [t for t in tags if t["Value"] in f["Values"]]
return tags return tags
def enable_metrics_collection(self, group_name: str, metrics: List[str]) -> None: def enable_metrics_collection(self, group_name: str, metrics: List[str]) -> None:

View File

@ -93,7 +93,7 @@ class AutoScalingResponse(BaseResponse):
target_group_arns=self._get_multi_param("TargetGroupARNs.member"), target_group_arns=self._get_multi_param("TargetGroupARNs.member"),
placement_group=self._get_param("PlacementGroup"), placement_group=self._get_param("PlacementGroup"),
termination_policies=self._get_multi_param("TerminationPolicies.member"), termination_policies=self._get_multi_param("TerminationPolicies.member"),
tags=self._get_list_prefix("Tags.member"), tags=params.get("Tags", []),
capacity_rebalance=self._get_bool_param("CapacityRebalance", False), capacity_rebalance=self._get_bool_param("CapacityRebalance", False),
new_instances_protected_from_scale_in=self._get_bool_param( new_instances_protected_from_scale_in=self._get_bool_param(
"NewInstancesProtectedFromScaleIn", False "NewInstancesProtectedFromScaleIn", False
@ -260,16 +260,14 @@ class AutoScalingResponse(BaseResponse):
return template.render() return template.render()
def create_or_update_tags(self) -> str: def create_or_update_tags(self) -> str:
tags = self._get_list_prefix("Tags.member") self.autoscaling_backend.create_or_update_tags(
self._get_params().get("Tags", [])
self.autoscaling_backend.create_or_update_tags(tags) )
template = self.response_template(UPDATE_AUTOSCALING_GROUP_TEMPLATE) template = self.response_template(UPDATE_AUTOSCALING_GROUP_TEMPLATE)
return template.render() return template.render()
def delete_tags(self) -> str: def delete_tags(self) -> str:
tags = self._get_list_prefix("Tags.member") self.autoscaling_backend.delete_tags(self._get_params().get("Tags", []))
self.autoscaling_backend.delete_tags(tags)
template = self.response_template(UPDATE_AUTOSCALING_GROUP_TEMPLATE) template = self.response_template(UPDATE_AUTOSCALING_GROUP_TEMPLATE)
return template.render() return template.render()
@ -1427,11 +1425,11 @@ DESCRIBE_TAGS_TEMPLATE = """<DescribeTagsResponse xmlns="http://autoscaling.amaz
<Tags> <Tags>
{% for tag in tags %} {% for tag in tags %}
<member> <member>
<ResourceId>{{ tag.resource_id }}</ResourceId> <ResourceId>{{ tag.resource_id or tag.ResourceId }}</ResourceId>
<ResourceType>{{ tag.resource_type }}</ResourceType> <ResourceType>{{ tag.resource_type or tag.ResourceType }}</ResourceType>
<Key>{{ tag.key }}</Key> <Key>{{ tag.key or tag.Key }}</Key>
<Value>{{ tag.value }}</Value> <Value>{{ tag.value or tag.Value }}</Value>
<PropagateAtLaunch>{{ tag.propagate_at_launch }}</PropagateAtLaunch> <PropagateAtLaunch>{{ tag.propagate_at_launch or tag.PropagateAtLaunch }}</PropagateAtLaunch>
</member> </member>
{% endfor %} {% endfor %}
</Tags> </Tags>

0
moto/py.typed Normal file
View File

View File

@ -41,6 +41,9 @@ package_dir =
moto = moto moto = moto
include_package_data = True include_package_data = True
[options.package_data]
moto = py.typed
[options.extras_require] [options.extras_require]
all = all =
python-jose[cryptography]>=3.1.0,<4.0.0 python-jose[cryptography]>=3.1.0,<4.0.0

View File

@ -355,8 +355,29 @@ def test_autoscaling_group_with_elb():
cf.create_stack(StackName="web_stack", TemplateBody=web_setup_template_json) cf.create_stack(StackName="web_stack", TemplateBody=web_setup_template_json)
autoscale_group = client.describe_auto_scaling_groups()["AutoScalingGroups"][0] autoscale_group = client.describe_auto_scaling_groups()["AutoScalingGroups"][0]
asg_name = autoscale_group["AutoScalingGroupName"]
assert "my-launch-config" in autoscale_group["LaunchConfigurationName"] assert "my-launch-config" in autoscale_group["LaunchConfigurationName"]
assert autoscale_group["LoadBalancerNames"] == ["my-elb"] assert autoscale_group["LoadBalancerNames"] == ["my-elb"]
assert len(autoscale_group["Tags"]) == 2
assert {
"ResourceId": asg_name,
"ResourceType": "auto-scaling-group",
"Key": "propagated-test-tag",
"Value": "propagated-test-tag-value",
"PropagateAtLaunch": True,
} in autoscale_group["Tags"]
assert {
"ResourceId": asg_name,
"ResourceType": "auto-scaling-group",
"Key": "not-propagated-test-tag",
"Value": "not-propagated-test-tag-value",
"PropagateAtLaunch": False,
} in autoscale_group["Tags"]
tags = client.describe_tags(
Filters=[{"Name": "auto-scaling-group", "Values": [asg_name]}]
)["Tags"]
assert tags == autoscale_group["Tags"]
# Confirm the Launch config was actually created # Confirm the Launch config was actually created
assert len(client.describe_launch_configurations()["LaunchConfigurations"]) == 1 assert len(client.describe_launch_configurations()["LaunchConfigurations"]) == 1