Prep Release 3.1.14 (#5242)
This commit is contained in:
parent
48186924ae
commit
d03891e805
45
CHANGELOG.md
45
CHANGELOG.md
@ -1,6 +1,51 @@
|
|||||||
Moto Changelog
|
Moto Changelog
|
||||||
==============
|
==============
|
||||||
|
|
||||||
|
3.1.14
|
||||||
|
-----
|
||||||
|
Docker Digest for 3.1.14: <autopopulateddigest>
|
||||||
|
|
||||||
|
New Methods:
|
||||||
|
* Greengrass:
|
||||||
|
* create_function_definition()
|
||||||
|
* create_resource_definition()
|
||||||
|
* create_function_definition_version()
|
||||||
|
* create_resource_definition_version()
|
||||||
|
* create_subscription_definition()
|
||||||
|
* create_subscription_definition_version()
|
||||||
|
* delete_function_definition()
|
||||||
|
* delete_resource_definition()
|
||||||
|
* delete_subscription_definition()
|
||||||
|
* get_function_definition()
|
||||||
|
* get_function_definition_version()
|
||||||
|
* get_resource_definition()
|
||||||
|
* get_resource_definition_version()
|
||||||
|
* get_subscription_definition()
|
||||||
|
* get_subscription_definition_version()
|
||||||
|
* list_function_definitions()
|
||||||
|
* list_function_definition_versions()
|
||||||
|
* list_resource_definitions()
|
||||||
|
* list_resource_definition_versions()
|
||||||
|
* list_subscription_definitions()
|
||||||
|
* list_subscription_definition_versions()
|
||||||
|
* update_function_definition()
|
||||||
|
* update_resource_definition()
|
||||||
|
* update_subscription_definition()
|
||||||
|
* EKS:
|
||||||
|
* list_tags_for_resources()
|
||||||
|
* tag_resource()
|
||||||
|
* untag_resource()
|
||||||
|
* Route53:
|
||||||
|
* associate_vpc()
|
||||||
|
* disassociate_vpc_from_hosted_zone()
|
||||||
|
* update_health_check()
|
||||||
|
* update_hosted_zone_comment()
|
||||||
|
|
||||||
|
Miscellaneous:
|
||||||
|
* APIGateway:put_integration() now supports the requestParameters-parameter
|
||||||
|
* EC2:create_route() now validates whether a route already exists
|
||||||
|
|
||||||
|
|
||||||
3.1.13
|
3.1.13
|
||||||
-----
|
-----
|
||||||
Docker Digest for 3.1.13: _sha256:d7f6c779c79f03b686747ae26b52bdca26fd81a50c6a41a8a6cba50c96982abf_
|
Docker Digest for 3.1.13: _sha256:d7f6c779c79f03b686747ae26b52bdca26fd81a50c6a41a8a6cba50c96982abf_
|
||||||
|
@ -2114,7 +2114,7 @@
|
|||||||
|
|
||||||
## eks
|
## eks
|
||||||
<details>
|
<details>
|
||||||
<summary>35% implemented</summary>
|
<summary>44% implemented</summary>
|
||||||
|
|
||||||
- [ ] associate_encryption_config
|
- [ ] associate_encryption_config
|
||||||
- [ ] associate_identity_provider_config
|
- [ ] associate_identity_provider_config
|
||||||
@ -2140,11 +2140,11 @@
|
|||||||
- [X] list_fargate_profiles
|
- [X] list_fargate_profiles
|
||||||
- [ ] list_identity_provider_configs
|
- [ ] list_identity_provider_configs
|
||||||
- [X] list_nodegroups
|
- [X] list_nodegroups
|
||||||
- [ ] list_tags_for_resource
|
- [X] list_tags_for_resource
|
||||||
- [ ] list_updates
|
- [ ] list_updates
|
||||||
- [ ] register_cluster
|
- [ ] register_cluster
|
||||||
- [ ] tag_resource
|
- [X] tag_resource
|
||||||
- [ ] untag_resource
|
- [X] untag_resource
|
||||||
- [ ] update_addon
|
- [ ] update_addon
|
||||||
- [ ] update_cluster_config
|
- [ ] update_cluster_config
|
||||||
- [ ] update_cluster_version
|
- [ ] update_cluster_version
|
||||||
@ -2867,7 +2867,7 @@
|
|||||||
|
|
||||||
## greengrass
|
## greengrass
|
||||||
<details>
|
<details>
|
||||||
<summary>17% implemented</summary>
|
<summary>43% implemented</summary>
|
||||||
|
|
||||||
- [ ] associate_role_to_group
|
- [ ] associate_role_to_group
|
||||||
- [ ] associate_service_role_to_account
|
- [ ] associate_service_role_to_account
|
||||||
@ -2878,26 +2878,26 @@
|
|||||||
- [ ] create_deployment
|
- [ ] create_deployment
|
||||||
- [X] create_device_definition
|
- [X] create_device_definition
|
||||||
- [X] create_device_definition_version
|
- [X] create_device_definition_version
|
||||||
- [ ] create_function_definition
|
- [X] create_function_definition
|
||||||
- [ ] create_function_definition_version
|
- [X] create_function_definition_version
|
||||||
- [ ] create_group
|
- [ ] create_group
|
||||||
- [ ] create_group_certificate_authority
|
- [ ] create_group_certificate_authority
|
||||||
- [ ] create_group_version
|
- [ ] create_group_version
|
||||||
- [ ] create_logger_definition
|
- [ ] create_logger_definition
|
||||||
- [ ] create_logger_definition_version
|
- [ ] create_logger_definition_version
|
||||||
- [ ] create_resource_definition
|
- [X] create_resource_definition
|
||||||
- [ ] create_resource_definition_version
|
- [X] create_resource_definition_version
|
||||||
- [ ] create_software_update_job
|
- [ ] create_software_update_job
|
||||||
- [ ] create_subscription_definition
|
- [X] create_subscription_definition
|
||||||
- [ ] create_subscription_definition_version
|
- [X] create_subscription_definition_version
|
||||||
- [ ] delete_connector_definition
|
- [ ] delete_connector_definition
|
||||||
- [X] delete_core_definition
|
- [X] delete_core_definition
|
||||||
- [X] delete_device_definition
|
- [X] delete_device_definition
|
||||||
- [ ] delete_function_definition
|
- [X] delete_function_definition
|
||||||
- [ ] delete_group
|
- [ ] delete_group
|
||||||
- [ ] delete_logger_definition
|
- [ ] delete_logger_definition
|
||||||
- [ ] delete_resource_definition
|
- [X] delete_resource_definition
|
||||||
- [ ] delete_subscription_definition
|
- [X] delete_subscription_definition
|
||||||
- [ ] disassociate_role_from_group
|
- [ ] disassociate_role_from_group
|
||||||
- [ ] disassociate_service_role_from_account
|
- [ ] disassociate_service_role_from_account
|
||||||
- [ ] get_associated_role
|
- [ ] get_associated_role
|
||||||
@ -2910,19 +2910,19 @@
|
|||||||
- [ ] get_deployment_status
|
- [ ] get_deployment_status
|
||||||
- [X] get_device_definition
|
- [X] get_device_definition
|
||||||
- [X] get_device_definition_version
|
- [X] get_device_definition_version
|
||||||
- [ ] get_function_definition
|
- [X] get_function_definition
|
||||||
- [ ] get_function_definition_version
|
- [X] get_function_definition_version
|
||||||
- [ ] get_group
|
- [ ] get_group
|
||||||
- [ ] get_group_certificate_authority
|
- [ ] get_group_certificate_authority
|
||||||
- [ ] get_group_certificate_configuration
|
- [ ] get_group_certificate_configuration
|
||||||
- [ ] get_group_version
|
- [ ] get_group_version
|
||||||
- [ ] get_logger_definition
|
- [ ] get_logger_definition
|
||||||
- [ ] get_logger_definition_version
|
- [ ] get_logger_definition_version
|
||||||
- [ ] get_resource_definition
|
- [X] get_resource_definition
|
||||||
- [ ] get_resource_definition_version
|
- [X] get_resource_definition_version
|
||||||
- [ ] get_service_role_for_account
|
- [ ] get_service_role_for_account
|
||||||
- [ ] get_subscription_definition
|
- [X] get_subscription_definition
|
||||||
- [ ] get_subscription_definition_version
|
- [X] get_subscription_definition_version
|
||||||
- [ ] get_thing_runtime_configuration
|
- [ ] get_thing_runtime_configuration
|
||||||
- [ ] list_bulk_deployment_detailed_reports
|
- [ ] list_bulk_deployment_detailed_reports
|
||||||
- [ ] list_bulk_deployments
|
- [ ] list_bulk_deployments
|
||||||
@ -2933,17 +2933,17 @@
|
|||||||
- [ ] list_deployments
|
- [ ] list_deployments
|
||||||
- [X] list_device_definition_versions
|
- [X] list_device_definition_versions
|
||||||
- [X] list_device_definitions
|
- [X] list_device_definitions
|
||||||
- [ ] list_function_definition_versions
|
- [X] list_function_definition_versions
|
||||||
- [ ] list_function_definitions
|
- [X] list_function_definitions
|
||||||
- [ ] list_group_certificate_authorities
|
- [ ] list_group_certificate_authorities
|
||||||
- [ ] list_group_versions
|
- [ ] list_group_versions
|
||||||
- [ ] list_groups
|
- [ ] list_groups
|
||||||
- [ ] list_logger_definition_versions
|
- [ ] list_logger_definition_versions
|
||||||
- [ ] list_logger_definitions
|
- [ ] list_logger_definitions
|
||||||
- [ ] list_resource_definition_versions
|
- [X] list_resource_definition_versions
|
||||||
- [ ] list_resource_definitions
|
- [X] list_resource_definitions
|
||||||
- [ ] list_subscription_definition_versions
|
- [X] list_subscription_definition_versions
|
||||||
- [ ] list_subscription_definitions
|
- [X] list_subscription_definitions
|
||||||
- [ ] list_tags_for_resource
|
- [ ] list_tags_for_resource
|
||||||
- [ ] reset_deployments
|
- [ ] reset_deployments
|
||||||
- [ ] start_bulk_deployment
|
- [ ] start_bulk_deployment
|
||||||
@ -2954,19 +2954,20 @@
|
|||||||
- [ ] update_connector_definition
|
- [ ] update_connector_definition
|
||||||
- [X] update_core_definition
|
- [X] update_core_definition
|
||||||
- [X] update_device_definition
|
- [X] update_device_definition
|
||||||
- [ ] update_function_definition
|
- [X] update_function_definition
|
||||||
- [ ] update_group
|
- [ ] update_group
|
||||||
- [ ] update_group_certificate_configuration
|
- [ ] update_group_certificate_configuration
|
||||||
- [ ] update_logger_definition
|
- [ ] update_logger_definition
|
||||||
- [ ] update_resource_definition
|
- [X] update_resource_definition
|
||||||
- [ ] update_subscription_definition
|
- [X] update_subscription_definition
|
||||||
- [ ] update_thing_runtime_configuration
|
- [ ] update_thing_runtime_configuration
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## guardduty
|
## guardduty
|
||||||
<details>
|
<details>
|
||||||
<summary>18% implemented</summary>
|
<summary>17% implemented</summary>
|
||||||
|
|
||||||
|
- [ ] accept_administrator_invitation
|
||||||
- [ ] accept_invitation
|
- [ ] accept_invitation
|
||||||
- [ ] archive_findings
|
- [ ] archive_findings
|
||||||
- [X] create_detector
|
- [X] create_detector
|
||||||
@ -2987,9 +2988,11 @@
|
|||||||
- [ ] describe_organization_configuration
|
- [ ] describe_organization_configuration
|
||||||
- [ ] describe_publishing_destination
|
- [ ] describe_publishing_destination
|
||||||
- [ ] disable_organization_admin_account
|
- [ ] disable_organization_admin_account
|
||||||
|
- [ ] disassociate_from_administrator_account
|
||||||
- [ ] disassociate_from_master_account
|
- [ ] disassociate_from_master_account
|
||||||
- [ ] disassociate_members
|
- [ ] disassociate_members
|
||||||
- [X] enable_organization_admin_account
|
- [X] enable_organization_admin_account
|
||||||
|
- [ ] get_administrator_account
|
||||||
- [X] get_detector
|
- [X] get_detector
|
||||||
- [X] get_filter
|
- [X] get_filter
|
||||||
- [ ] get_findings
|
- [ ] get_findings
|
||||||
@ -2999,6 +3002,7 @@
|
|||||||
- [ ] get_master_account
|
- [ ] get_master_account
|
||||||
- [ ] get_member_detectors
|
- [ ] get_member_detectors
|
||||||
- [ ] get_members
|
- [ ] get_members
|
||||||
|
- [ ] get_remaining_free_trial_days
|
||||||
- [ ] get_threat_intel_set
|
- [ ] get_threat_intel_set
|
||||||
- [ ] get_usage_statistics
|
- [ ] get_usage_statistics
|
||||||
- [ ] invite_members
|
- [ ] invite_members
|
||||||
@ -4733,10 +4737,10 @@
|
|||||||
|
|
||||||
## route53
|
## route53
|
||||||
<details>
|
<details>
|
||||||
<summary>34% implemented</summary>
|
<summary>40% implemented</summary>
|
||||||
|
|
||||||
- [ ] activate_key_signing_key
|
- [ ] activate_key_signing_key
|
||||||
- [ ] associate_vpc_with_hosted_zone
|
- [X] associate_vpc_with_hosted_zone
|
||||||
- [ ] change_cidr_collection
|
- [ ] change_cidr_collection
|
||||||
- [X] change_resource_record_sets
|
- [X] change_resource_record_sets
|
||||||
- [X] change_tags_for_resource
|
- [X] change_tags_for_resource
|
||||||
@ -4761,7 +4765,7 @@
|
|||||||
- [ ] delete_traffic_policy_instance
|
- [ ] delete_traffic_policy_instance
|
||||||
- [ ] delete_vpc_association_authorization
|
- [ ] delete_vpc_association_authorization
|
||||||
- [ ] disable_hosted_zone_dnssec
|
- [ ] disable_hosted_zone_dnssec
|
||||||
- [ ] disassociate_vpc_from_hosted_zone
|
- [X] disassociate_vpc_from_hosted_zone
|
||||||
- [ ] enable_hosted_zone_dnssec
|
- [ ] enable_hosted_zone_dnssec
|
||||||
- [ ] get_account_limit
|
- [ ] get_account_limit
|
||||||
- [ ] get_change
|
- [ ] get_change
|
||||||
@ -4801,8 +4805,8 @@
|
|||||||
- [ ] list_traffic_policy_versions
|
- [ ] list_traffic_policy_versions
|
||||||
- [ ] list_vpc_association_authorizations
|
- [ ] list_vpc_association_authorizations
|
||||||
- [ ] test_dns_answer
|
- [ ] test_dns_answer
|
||||||
- [ ] update_health_check
|
- [X] update_health_check
|
||||||
- [ ] update_hosted_zone_comment
|
- [X] update_hosted_zone_comment
|
||||||
- [ ] update_traffic_policy_comment
|
- [ ] update_traffic_policy_comment
|
||||||
- [ ] update_traffic_policy_instance
|
- [ ] update_traffic_policy_instance
|
||||||
</details>
|
</details>
|
||||||
@ -5998,6 +6002,7 @@
|
|||||||
- compute-optimizer
|
- compute-optimizer
|
||||||
- connect
|
- connect
|
||||||
- connect-contact-lens
|
- connect-contact-lens
|
||||||
|
- connectcampaigns
|
||||||
- connectparticipant
|
- connectparticipant
|
||||||
- cur
|
- cur
|
||||||
- customer-profiles
|
- customer-profiles
|
||||||
@ -6110,6 +6115,7 @@
|
|||||||
- qldb-session
|
- qldb-session
|
||||||
- rbin
|
- rbin
|
||||||
- rds-data
|
- rds-data
|
||||||
|
- redshiftserverless
|
||||||
- resiliencehub
|
- resiliencehub
|
||||||
- robomaker
|
- robomaker
|
||||||
- route53-recovery-cluster
|
- route53-recovery-cluster
|
||||||
|
@ -12,6 +12,8 @@
|
|||||||
cognito-idp
|
cognito-idp
|
||||||
===========
|
===========
|
||||||
|
|
||||||
|
.. autoclass:: moto.cognitoidp.models.CognitoIdpBackend
|
||||||
|
|
||||||
|start-h3| Example usage |end-h3|
|
|start-h3| Example usage |end-h3|
|
||||||
|
|
||||||
.. sourcecode:: python
|
.. sourcecode:: python
|
||||||
@ -145,10 +147,3 @@ cognito-idp
|
|||||||
|
|
||||||
- [ ] verify_user_attribute
|
- [ ] verify_user_attribute
|
||||||
|
|
||||||
|
|
||||||
|start-h3| Stable Cognito User Pool Id |end-h3|
|
|
||||||
|
|
||||||
In some cases, you need to have reproducible IDs for the user pool.
|
|
||||||
For example, a single initialization before the start of integration tests.
|
|
||||||
|
|
||||||
This behavior can be enabled by passing the environment variable: MOTO_COGNITO_IDP_USER_POOL_ID_STRATEGY=HASH.
|
|
||||||
|
@ -50,10 +50,22 @@ eks
|
|||||||
- [ ] list_identity_provider_configs
|
- [ ] list_identity_provider_configs
|
||||||
- [X] list_nodegroups
|
- [X] list_nodegroups
|
||||||
- [X] list_tags_for_resource
|
- [X] list_tags_for_resource
|
||||||
|
|
||||||
|
This function currently will list tags on an EKS cluster only. It does not list tags from a managed node group
|
||||||
|
|
||||||
|
|
||||||
- [ ] list_updates
|
- [ ] list_updates
|
||||||
- [ ] register_cluster
|
- [ ] register_cluster
|
||||||
- [X] tag_resource
|
- [X] tag_resource
|
||||||
|
|
||||||
|
This function currently will tag an EKS cluster only. It does not tag a managed node group
|
||||||
|
|
||||||
|
|
||||||
- [X] untag_resource
|
- [X] untag_resource
|
||||||
|
|
||||||
|
This function currently will remove tags on an EKS cluster only. It does not remove tags from a managed node group
|
||||||
|
|
||||||
|
|
||||||
- [ ] update_addon
|
- [ ] update_addon
|
||||||
- [ ] update_cluster_config
|
- [ ] update_cluster_config
|
||||||
- [ ] update_cluster_version
|
- [ ] update_cluster_version
|
||||||
|
@ -34,26 +34,26 @@ greengrass
|
|||||||
- [ ] create_deployment
|
- [ ] create_deployment
|
||||||
- [X] create_device_definition
|
- [X] create_device_definition
|
||||||
- [X] create_device_definition_version
|
- [X] create_device_definition_version
|
||||||
- [ ] create_function_definition
|
- [X] create_function_definition
|
||||||
- [ ] create_function_definition_version
|
- [X] create_function_definition_version
|
||||||
- [ ] create_group
|
- [ ] create_group
|
||||||
- [ ] create_group_certificate_authority
|
- [ ] create_group_certificate_authority
|
||||||
- [ ] create_group_version
|
- [ ] create_group_version
|
||||||
- [ ] create_logger_definition
|
- [ ] create_logger_definition
|
||||||
- [ ] create_logger_definition_version
|
- [ ] create_logger_definition_version
|
||||||
- [ ] create_resource_definition
|
- [X] create_resource_definition
|
||||||
- [ ] create_resource_definition_version
|
- [X] create_resource_definition_version
|
||||||
- [ ] create_software_update_job
|
- [ ] create_software_update_job
|
||||||
- [ ] create_subscription_definition
|
- [X] create_subscription_definition
|
||||||
- [ ] create_subscription_definition_version
|
- [X] create_subscription_definition_version
|
||||||
- [ ] delete_connector_definition
|
- [ ] delete_connector_definition
|
||||||
- [X] delete_core_definition
|
- [X] delete_core_definition
|
||||||
- [X] delete_device_definition
|
- [X] delete_device_definition
|
||||||
- [ ] delete_function_definition
|
- [X] delete_function_definition
|
||||||
- [ ] delete_group
|
- [ ] delete_group
|
||||||
- [ ] delete_logger_definition
|
- [ ] delete_logger_definition
|
||||||
- [ ] delete_resource_definition
|
- [X] delete_resource_definition
|
||||||
- [ ] delete_subscription_definition
|
- [X] delete_subscription_definition
|
||||||
- [ ] disassociate_role_from_group
|
- [ ] disassociate_role_from_group
|
||||||
- [ ] disassociate_service_role_from_account
|
- [ ] disassociate_service_role_from_account
|
||||||
- [ ] get_associated_role
|
- [ ] get_associated_role
|
||||||
@ -66,19 +66,19 @@ greengrass
|
|||||||
- [ ] get_deployment_status
|
- [ ] get_deployment_status
|
||||||
- [X] get_device_definition
|
- [X] get_device_definition
|
||||||
- [X] get_device_definition_version
|
- [X] get_device_definition_version
|
||||||
- [ ] get_function_definition
|
- [X] get_function_definition
|
||||||
- [ ] get_function_definition_version
|
- [X] get_function_definition_version
|
||||||
- [ ] get_group
|
- [ ] get_group
|
||||||
- [ ] get_group_certificate_authority
|
- [ ] get_group_certificate_authority
|
||||||
- [ ] get_group_certificate_configuration
|
- [ ] get_group_certificate_configuration
|
||||||
- [ ] get_group_version
|
- [ ] get_group_version
|
||||||
- [ ] get_logger_definition
|
- [ ] get_logger_definition
|
||||||
- [ ] get_logger_definition_version
|
- [ ] get_logger_definition_version
|
||||||
- [ ] get_resource_definition
|
- [X] get_resource_definition
|
||||||
- [ ] get_resource_definition_version
|
- [X] get_resource_definition_version
|
||||||
- [ ] get_service_role_for_account
|
- [ ] get_service_role_for_account
|
||||||
- [ ] get_subscription_definition
|
- [X] get_subscription_definition
|
||||||
- [ ] get_subscription_definition_version
|
- [X] get_subscription_definition_version
|
||||||
- [ ] get_thing_runtime_configuration
|
- [ ] get_thing_runtime_configuration
|
||||||
- [ ] list_bulk_deployment_detailed_reports
|
- [ ] list_bulk_deployment_detailed_reports
|
||||||
- [ ] list_bulk_deployments
|
- [ ] list_bulk_deployments
|
||||||
@ -89,17 +89,17 @@ greengrass
|
|||||||
- [ ] list_deployments
|
- [ ] list_deployments
|
||||||
- [X] list_device_definition_versions
|
- [X] list_device_definition_versions
|
||||||
- [X] list_device_definitions
|
- [X] list_device_definitions
|
||||||
- [ ] list_function_definition_versions
|
- [X] list_function_definition_versions
|
||||||
- [ ] list_function_definitions
|
- [X] list_function_definitions
|
||||||
- [ ] list_group_certificate_authorities
|
- [ ] list_group_certificate_authorities
|
||||||
- [ ] list_group_versions
|
- [ ] list_group_versions
|
||||||
- [ ] list_groups
|
- [ ] list_groups
|
||||||
- [ ] list_logger_definition_versions
|
- [ ] list_logger_definition_versions
|
||||||
- [ ] list_logger_definitions
|
- [ ] list_logger_definitions
|
||||||
- [ ] list_resource_definition_versions
|
- [X] list_resource_definition_versions
|
||||||
- [ ] list_resource_definitions
|
- [X] list_resource_definitions
|
||||||
- [ ] list_subscription_definition_versions
|
- [X] list_subscription_definition_versions
|
||||||
- [ ] list_subscription_definitions
|
- [X] list_subscription_definitions
|
||||||
- [ ] list_tags_for_resource
|
- [ ] list_tags_for_resource
|
||||||
- [ ] reset_deployments
|
- [ ] reset_deployments
|
||||||
- [ ] start_bulk_deployment
|
- [ ] start_bulk_deployment
|
||||||
@ -110,11 +110,11 @@ greengrass
|
|||||||
- [ ] update_connector_definition
|
- [ ] update_connector_definition
|
||||||
- [X] update_core_definition
|
- [X] update_core_definition
|
||||||
- [X] update_device_definition
|
- [X] update_device_definition
|
||||||
- [ ] update_function_definition
|
- [X] update_function_definition
|
||||||
- [ ] update_group
|
- [ ] update_group
|
||||||
- [ ] update_group_certificate_configuration
|
- [ ] update_group_certificate_configuration
|
||||||
- [ ] update_logger_definition
|
- [ ] update_logger_definition
|
||||||
- [ ] update_resource_definition
|
- [X] update_resource_definition
|
||||||
- [ ] update_subscription_definition
|
- [X] update_subscription_definition
|
||||||
- [ ] update_thing_runtime_configuration
|
- [ ] update_thing_runtime_configuration
|
||||||
|
|
||||||
|
@ -25,6 +25,7 @@ guardduty
|
|||||||
|
|
||||||
|start-h3| Implemented features for this service |end-h3|
|
|start-h3| Implemented features for this service |end-h3|
|
||||||
|
|
||||||
|
- [ ] accept_administrator_invitation
|
||||||
- [ ] accept_invitation
|
- [ ] accept_invitation
|
||||||
- [ ] archive_findings
|
- [ ] archive_findings
|
||||||
- [X] create_detector
|
- [X] create_detector
|
||||||
@ -45,9 +46,11 @@ guardduty
|
|||||||
- [ ] describe_organization_configuration
|
- [ ] describe_organization_configuration
|
||||||
- [ ] describe_publishing_destination
|
- [ ] describe_publishing_destination
|
||||||
- [ ] disable_organization_admin_account
|
- [ ] disable_organization_admin_account
|
||||||
|
- [ ] disassociate_from_administrator_account
|
||||||
- [ ] disassociate_from_master_account
|
- [ ] disassociate_from_master_account
|
||||||
- [ ] disassociate_members
|
- [ ] disassociate_members
|
||||||
- [X] enable_organization_admin_account
|
- [X] enable_organization_admin_account
|
||||||
|
- [ ] get_administrator_account
|
||||||
- [X] get_detector
|
- [X] get_detector
|
||||||
- [X] get_filter
|
- [X] get_filter
|
||||||
- [ ] get_findings
|
- [ ] get_findings
|
||||||
@ -57,6 +60,7 @@ guardduty
|
|||||||
- [ ] get_master_account
|
- [ ] get_master_account
|
||||||
- [ ] get_member_detectors
|
- [ ] get_member_detectors
|
||||||
- [ ] get_members
|
- [ ] get_members
|
||||||
|
- [ ] get_remaining_free_trial_days
|
||||||
- [ ] get_threat_intel_set
|
- [ ] get_threat_intel_set
|
||||||
- [ ] get_usage_statistics
|
- [ ] get_usage_statistics
|
||||||
- [ ] invite_members
|
- [ ] invite_members
|
||||||
|
@ -26,7 +26,7 @@ route53
|
|||||||
|start-h3| Implemented features for this service |end-h3|
|
|start-h3| Implemented features for this service |end-h3|
|
||||||
|
|
||||||
- [ ] activate_key_signing_key
|
- [ ] activate_key_signing_key
|
||||||
- [ ] associate_vpc_with_hosted_zone
|
- [X] associate_vpc_with_hosted_zone
|
||||||
- [ ] change_cidr_collection
|
- [ ] change_cidr_collection
|
||||||
- [X] change_resource_record_sets
|
- [X] change_resource_record_sets
|
||||||
- [X] change_tags_for_resource
|
- [X] change_tags_for_resource
|
||||||
@ -55,7 +55,7 @@ route53
|
|||||||
- [ ] delete_traffic_policy_instance
|
- [ ] delete_traffic_policy_instance
|
||||||
- [ ] delete_vpc_association_authorization
|
- [ ] delete_vpc_association_authorization
|
||||||
- [ ] disable_hosted_zone_dnssec
|
- [ ] disable_hosted_zone_dnssec
|
||||||
- [ ] disassociate_vpc_from_hosted_zone
|
- [X] disassociate_vpc_from_hosted_zone
|
||||||
- [ ] enable_hosted_zone_dnssec
|
- [ ] enable_hosted_zone_dnssec
|
||||||
- [ ] get_account_limit
|
- [ ] get_account_limit
|
||||||
- [ ] get_change
|
- [ ] get_change
|
||||||
@ -111,8 +111,8 @@ route53
|
|||||||
- [ ] list_traffic_policy_versions
|
- [ ] list_traffic_policy_versions
|
||||||
- [ ] list_vpc_association_authorizations
|
- [ ] list_vpc_association_authorizations
|
||||||
- [ ] test_dns_answer
|
- [ ] test_dns_answer
|
||||||
- [ ] update_health_check
|
- [X] update_health_check
|
||||||
- [ ] update_hosted_zone_comment
|
- [X] update_hosted_zone_comment
|
||||||
- [ ] update_traffic_policy_comment
|
- [ ] update_traffic_policy_comment
|
||||||
- [ ] update_traffic_policy_instance
|
- [ ] update_traffic_policy_instance
|
||||||
|
|
||||||
|
@ -6,3 +6,4 @@ readthedocs-sphinx-search==0.1.1
|
|||||||
docker
|
docker
|
||||||
openapi_spec_validator
|
openapi_spec_validator
|
||||||
PyYAML>=5.1
|
PyYAML>=5.1
|
||||||
|
python-jose[cryptography]>=3.1.0,<4.0.0
|
||||||
|
@ -831,6 +831,13 @@ class CognitoResourceServer(BaseModel):
|
|||||||
|
|
||||||
|
|
||||||
class CognitoIdpBackend(BaseBackend):
|
class CognitoIdpBackend(BaseBackend):
|
||||||
|
"""
|
||||||
|
In some cases, you need to have reproducible IDs for the user pool.
|
||||||
|
For example, a single initialization before the start of integration tests.
|
||||||
|
|
||||||
|
This behavior can be enabled by passing the environment variable: MOTO_COGNITO_IDP_USER_POOL_ID_STRATEGY=HASH.
|
||||||
|
"""
|
||||||
|
|
||||||
def __init__(self, region_name, account_id):
|
def __init__(self, region_name, account_id):
|
||||||
super().__init__(region_name, account_id)
|
super().__init__(region_name, account_id)
|
||||||
self.user_pools = OrderedDict()
|
self.user_pools = OrderedDict()
|
||||||
|
@ -470,14 +470,14 @@ class Route53Backend(BaseBackend):
|
|||||||
# check if hosted zone exists
|
# check if hosted zone exists
|
||||||
self.get_hosted_zone(zone_id)
|
self.get_hosted_zone(zone_id)
|
||||||
|
|
||||||
def associate_vpc(self, zone_id, vpcid, vpcregion):
|
def associate_vpc_with_hosted_zone(self, zone_id, vpcid, vpcregion):
|
||||||
zone = self.get_hosted_zone(zone_id)
|
zone = self.get_hosted_zone(zone_id)
|
||||||
if not zone.private_zone:
|
if not zone.private_zone:
|
||||||
raise PublicZoneVPCAssociation()
|
raise PublicZoneVPCAssociation()
|
||||||
zone.add_vpc(vpcid, vpcregion)
|
zone.add_vpc(vpcid, vpcregion)
|
||||||
return zone
|
return zone
|
||||||
|
|
||||||
def disassociate_vpc(self, zone_id, vpcid):
|
def disassociate_vpc_from_hosted_zone(self, zone_id, vpcid):
|
||||||
zone = self.get_hosted_zone(zone_id)
|
zone = self.get_hosted_zone(zone_id)
|
||||||
if len(zone.vpcs) <= 1:
|
if len(zone.vpcs) <= 1:
|
||||||
raise LastVPCAssociation()
|
raise LastVPCAssociation()
|
||||||
|
@ -151,7 +151,7 @@ class Route53(BaseResponse):
|
|||||||
vpcid = vpc.get("VPCId", None)
|
vpcid = vpc.get("VPCId", None)
|
||||||
vpcregion = vpc.get("VPCRegion", None)
|
vpcregion = vpc.get("VPCRegion", None)
|
||||||
|
|
||||||
route53_backend.associate_vpc(zoneid, vpcid, vpcregion)
|
route53_backend.associate_vpc_with_hosted_zone(zoneid, vpcid, vpcregion)
|
||||||
|
|
||||||
template = Template(ASSOCIATE_VPC_RESPONSE)
|
template = Template(ASSOCIATE_VPC_RESPONSE)
|
||||||
return 200, headers, template.render(comment=comment)
|
return 200, headers, template.render(comment=comment)
|
||||||
@ -169,7 +169,7 @@ class Route53(BaseResponse):
|
|||||||
vpc = elements.get("DisassociateVPCFromHostedZoneRequest", {}).get("VPC", {})
|
vpc = elements.get("DisassociateVPCFromHostedZoneRequest", {}).get("VPC", {})
|
||||||
vpcid = vpc.get("VPCId", None)
|
vpcid = vpc.get("VPCId", None)
|
||||||
|
|
||||||
route53_backend.disassociate_vpc(zoneid, vpcid)
|
route53_backend.disassociate_vpc_from_hosted_zone(zoneid, vpcid)
|
||||||
|
|
||||||
template = Template(DISASSOCIATE_VPC_RESPONSE)
|
template = Template(DISASSOCIATE_VPC_RESPONSE)
|
||||||
return 200, headers, template.render(comment=comment)
|
return 200, headers, template.render(comment=comment)
|
||||||
|
@ -261,7 +261,7 @@ def write_implementation_coverage_to_docs(coverage):
|
|||||||
file.write(" ...\n")
|
file.write(" ...\n")
|
||||||
file.write("\n\n")
|
file.write("\n\n")
|
||||||
file.write(".. sourcecode:: python\n\n")
|
file.write(".. sourcecode:: python\n\n")
|
||||||
file.write(" @mock_all\n")
|
file.write(" @mock_all()\n")
|
||||||
file.write(" def test_all_supported_services_at_the_same_time():\n")
|
file.write(" def test_all_supported_services_at_the_same_time():\n")
|
||||||
file.write(" ...\n")
|
file.write(" ...\n")
|
||||||
file.write("\n")
|
file.write("\n")
|
||||||
|
@ -161,6 +161,20 @@ def test_get_unknown_hosted_zone():
|
|||||||
err["Message"].should.equal("No hosted zone found with ID: unknown")
|
err["Message"].should.equal("No hosted zone found with ID: unknown")
|
||||||
|
|
||||||
|
|
||||||
|
@mock_route53
|
||||||
|
def test_update_hosted_zone_comment():
|
||||||
|
conn = boto3.client("route53", region_name="us-east-1")
|
||||||
|
response = conn.create_hosted_zone(
|
||||||
|
Name="testdns.aws.com.", CallerReference=str(hash("foo"))
|
||||||
|
)
|
||||||
|
zone_id = response["HostedZone"]["Id"].split("/")[-1]
|
||||||
|
|
||||||
|
conn.update_hosted_zone_comment(Id=zone_id, Comment="yolo")
|
||||||
|
|
||||||
|
resp = conn.get_hosted_zone(Id=zone_id)["HostedZone"]
|
||||||
|
resp["Config"].should.have.key("Comment").equals("yolo")
|
||||||
|
|
||||||
|
|
||||||
@mock_route53
|
@mock_route53
|
||||||
def test_list_resource_record_set_unknown_zone():
|
def test_list_resource_record_set_unknown_zone():
|
||||||
conn = boto3.client("route53", region_name="us-east-1")
|
conn = boto3.client("route53", region_name="us-east-1")
|
||||||
@ -188,90 +202,6 @@ def test_list_resource_record_set_unknown_type():
|
|||||||
err["Message"].should.equal("Bad Request")
|
err["Message"].should.equal("Bad Request")
|
||||||
|
|
||||||
|
|
||||||
@mock_route53
|
|
||||||
def test_create_health_check():
|
|
||||||
conn = boto3.client("route53", region_name="us-east-1")
|
|
||||||
|
|
||||||
check = conn.create_health_check(
|
|
||||||
CallerReference="?",
|
|
||||||
HealthCheckConfig={
|
|
||||||
"IPAddress": "10.0.0.25",
|
|
||||||
"Port": 80,
|
|
||||||
"Type": "HTTP",
|
|
||||||
"ResourcePath": "/",
|
|
||||||
"FullyQualifiedDomainName": "example.com",
|
|
||||||
"SearchString": "a good response",
|
|
||||||
"RequestInterval": 10,
|
|
||||||
"FailureThreshold": 2,
|
|
||||||
},
|
|
||||||
)["HealthCheck"]
|
|
||||||
check.should.have.key("Id").match("[a-z0-9-]+")
|
|
||||||
check.should.have.key("CallerReference")
|
|
||||||
check.should.have.key("HealthCheckConfig")
|
|
||||||
check["HealthCheckConfig"].should.have.key("IPAddress").equal("10.0.0.25")
|
|
||||||
check["HealthCheckConfig"].should.have.key("Port").equal(80)
|
|
||||||
check["HealthCheckConfig"].should.have.key("Type").equal("HTTP")
|
|
||||||
check["HealthCheckConfig"].should.have.key("ResourcePath").equal("/")
|
|
||||||
check["HealthCheckConfig"].should.have.key("FullyQualifiedDomainName").equal(
|
|
||||||
"example.com"
|
|
||||||
)
|
|
||||||
check["HealthCheckConfig"].should.have.key("SearchString").equal("a good response")
|
|
||||||
check["HealthCheckConfig"].should.have.key("RequestInterval").equal(10)
|
|
||||||
check["HealthCheckConfig"].should.have.key("FailureThreshold").equal(2)
|
|
||||||
check.should.have.key("HealthCheckVersion").equal(1)
|
|
||||||
|
|
||||||
|
|
||||||
@mock_route53
|
|
||||||
def test_list_health_checks():
|
|
||||||
conn = boto3.client("route53", region_name="us-east-1")
|
|
||||||
|
|
||||||
conn.list_health_checks()["HealthChecks"].should.have.length_of(0)
|
|
||||||
|
|
||||||
check = conn.create_health_check(
|
|
||||||
CallerReference="?",
|
|
||||||
HealthCheckConfig={
|
|
||||||
"IPAddress": "10.0.0.25",
|
|
||||||
"Port": 80,
|
|
||||||
"Type": "HTTP",
|
|
||||||
"ResourcePath": "/",
|
|
||||||
"FullyQualifiedDomainName": "example.com",
|
|
||||||
"SearchString": "a good response",
|
|
||||||
"RequestInterval": 10,
|
|
||||||
"FailureThreshold": 2,
|
|
||||||
},
|
|
||||||
)["HealthCheck"]
|
|
||||||
|
|
||||||
checks = conn.list_health_checks()["HealthChecks"]
|
|
||||||
checks.should.have.length_of(1)
|
|
||||||
checks.should.contain(check)
|
|
||||||
|
|
||||||
|
|
||||||
@mock_route53
|
|
||||||
def test_delete_health_checks():
|
|
||||||
conn = boto3.client("route53", region_name="us-east-1")
|
|
||||||
|
|
||||||
conn.list_health_checks()["HealthChecks"].should.have.length_of(0)
|
|
||||||
|
|
||||||
check = conn.create_health_check(
|
|
||||||
CallerReference="?",
|
|
||||||
HealthCheckConfig={
|
|
||||||
"IPAddress": "10.0.0.25",
|
|
||||||
"Port": 80,
|
|
||||||
"Type": "HTTP",
|
|
||||||
"ResourcePath": "/",
|
|
||||||
"FullyQualifiedDomainName": "example.com",
|
|
||||||
"SearchString": "a good response",
|
|
||||||
"RequestInterval": 10,
|
|
||||||
"FailureThreshold": 2,
|
|
||||||
},
|
|
||||||
)["HealthCheck"]
|
|
||||||
|
|
||||||
conn.delete_health_check(HealthCheckId=check["Id"])
|
|
||||||
|
|
||||||
checks = conn.list_health_checks()["HealthChecks"]
|
|
||||||
checks.should.have.length_of(0)
|
|
||||||
|
|
||||||
|
|
||||||
@mock_route53
|
@mock_route53
|
||||||
def test_use_health_check_in_resource_record_set():
|
def test_use_health_check_in_resource_record_set():
|
||||||
conn = boto3.client("route53", region_name="us-east-1")
|
conn = boto3.client("route53", region_name="us-east-1")
|
||||||
@ -457,70 +387,6 @@ def test_deleting_latency_route():
|
|||||||
cnames[1]["Region"].should.equal("us-west-1")
|
cnames[1]["Region"].should.equal("us-west-1")
|
||||||
|
|
||||||
|
|
||||||
@mock_ec2
|
|
||||||
@mock_route53
|
|
||||||
def test_hosted_zone_private_zone_preserved():
|
|
||||||
# Create mock VPC so we can get a VPC ID
|
|
||||||
region = "us-east-1"
|
|
||||||
ec2c = boto3.client("ec2", region_name=region)
|
|
||||||
vpc_id = ec2c.create_vpc(CidrBlock="10.1.0.0/16").get("Vpc").get("VpcId")
|
|
||||||
|
|
||||||
# Create hosted_zone as a Private VPC Hosted Zone
|
|
||||||
conn = boto3.client("route53", region_name=region)
|
|
||||||
new_zone = conn.create_hosted_zone(
|
|
||||||
Name="testdns.aws.com.",
|
|
||||||
CallerReference=str(hash("foo")),
|
|
||||||
HostedZoneConfig=dict(PrivateZone=True, Comment="Test"),
|
|
||||||
VPC={"VPCRegion": region, "VPCId": vpc_id},
|
|
||||||
)
|
|
||||||
|
|
||||||
zone_id = new_zone["HostedZone"]["Id"].split("/")[-1]
|
|
||||||
hosted_zone = conn.get_hosted_zone(Id=zone_id)
|
|
||||||
hosted_zone["HostedZone"]["Config"]["PrivateZone"].should.equal(True)
|
|
||||||
hosted_zone.should.have.key("VPCs")
|
|
||||||
hosted_zone["VPCs"].should.have.length_of(1)
|
|
||||||
hosted_zone["VPCs"][0].should.have.key("VPCId")
|
|
||||||
hosted_zone["VPCs"][0].should.have.key("VPCRegion")
|
|
||||||
hosted_zone["VPCs"][0]["VPCId"].should_not.equal(None)
|
|
||||||
hosted_zone["VPCs"][0]["VPCRegion"].should_not.equal(None)
|
|
||||||
hosted_zone["VPCs"][0]["VPCId"].should.be.equal(vpc_id)
|
|
||||||
hosted_zone["VPCs"][0]["VPCRegion"].should.be.equal(region)
|
|
||||||
|
|
||||||
hosted_zones = conn.list_hosted_zones()
|
|
||||||
hosted_zones["HostedZones"][0]["Config"]["PrivateZone"].should.equal(True)
|
|
||||||
|
|
||||||
hosted_zones = conn.list_hosted_zones_by_name(DNSName="testdns.aws.com.")
|
|
||||||
hosted_zones["HostedZones"].should.have.length_of(1)
|
|
||||||
hosted_zones["HostedZones"][0]["Config"]["PrivateZone"].should.equal(True)
|
|
||||||
|
|
||||||
# create_hosted_zone statements with PrivateZone=True,
|
|
||||||
# but without a _valid_ vpc-id should NOT fail.
|
|
||||||
zone2_name = "testdns2.aws.com."
|
|
||||||
no_vpc_zone = conn.create_hosted_zone(
|
|
||||||
Name=zone2_name,
|
|
||||||
CallerReference=str(hash("foo")),
|
|
||||||
HostedZoneConfig=dict(PrivateZone=True, Comment="Test without VPC"),
|
|
||||||
)
|
|
||||||
|
|
||||||
zone_id = no_vpc_zone["HostedZone"]["Id"].split("/")[-1]
|
|
||||||
hosted_zone = conn.get_hosted_zone(Id=zone_id)
|
|
||||||
hosted_zone["HostedZone"]["Config"]["PrivateZone"].should.equal(True)
|
|
||||||
hosted_zone.should.have.key("VPCs")
|
|
||||||
hosted_zone["VPCs"].should.have.length_of(0)
|
|
||||||
|
|
||||||
hosted_zones = conn.list_hosted_zones()
|
|
||||||
hosted_zones["HostedZones"].should.have.length_of(2)
|
|
||||||
hosted_zones["HostedZones"][0]["Config"]["PrivateZone"].should.equal(True)
|
|
||||||
hosted_zones["HostedZones"][1]["Config"]["PrivateZone"].should.equal(True)
|
|
||||||
|
|
||||||
hosted_zones = conn.list_hosted_zones_by_name(DNSName=zone2_name)
|
|
||||||
hosted_zones["HostedZones"].should.have.length_of(1)
|
|
||||||
hosted_zones["HostedZones"][0]["Config"]["PrivateZone"].should.equal(True)
|
|
||||||
hosted_zones["HostedZones"][0]["Name"].should.equal(zone2_name)
|
|
||||||
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
@mock_route53
|
@mock_route53
|
||||||
def test_list_or_change_tags_for_resource_request():
|
def test_list_or_change_tags_for_resource_request():
|
||||||
conn = boto3.client("route53", region_name="us-east-1")
|
conn = boto3.client("route53", region_name="us-east-1")
|
||||||
@ -737,69 +603,6 @@ def test_list_hosted_zones_by_dns_name():
|
|||||||
zones["HostedZones"][3]["Name"].should.equal("test.a.org.")
|
zones["HostedZones"][3]["Name"].should.equal("test.a.org.")
|
||||||
|
|
||||||
|
|
||||||
@mock_ec2
|
|
||||||
@mock_route53
|
|
||||||
def test_list_hosted_zones_by_vpc():
|
|
||||||
# Create mock VPC so we can get a VPC ID
|
|
||||||
ec2c = boto3.client("ec2", region_name="us-east-1")
|
|
||||||
vpc_id = ec2c.create_vpc(CidrBlock="10.1.0.0/16").get("Vpc").get("VpcId")
|
|
||||||
region = "us-east-1"
|
|
||||||
|
|
||||||
conn = boto3.client("route53", region_name=region)
|
|
||||||
zone_b = conn.create_hosted_zone(
|
|
||||||
Name="test.b.com.",
|
|
||||||
CallerReference=str(hash("foo")),
|
|
||||||
HostedZoneConfig=dict(PrivateZone=True, Comment="test com"),
|
|
||||||
VPC={"VPCRegion": region, "VPCId": vpc_id},
|
|
||||||
)
|
|
||||||
zone_id = zone_b["HostedZone"]["Id"].split("/")[2]
|
|
||||||
response = conn.list_hosted_zones_by_vpc(VPCId=vpc_id, VPCRegion=region)
|
|
||||||
response.should.have.key("ResponseMetadata")
|
|
||||||
response.should.have.key("HostedZoneSummaries")
|
|
||||||
response["HostedZoneSummaries"].should.have.length_of(1)
|
|
||||||
response["HostedZoneSummaries"][0].should.have.key("HostedZoneId")
|
|
||||||
retured_zone = response["HostedZoneSummaries"][0]
|
|
||||||
retured_zone["HostedZoneId"].should.equal(zone_id)
|
|
||||||
retured_zone["Name"].should.equal(zone_b["HostedZone"]["Name"])
|
|
||||||
|
|
||||||
|
|
||||||
@mock_ec2
|
|
||||||
@mock_route53
|
|
||||||
def test_list_hosted_zones_by_vpc_with_multiple_vpcs():
|
|
||||||
# Create mock VPC so we can get a VPC ID
|
|
||||||
ec2c = boto3.client("ec2", region_name="us-east-1")
|
|
||||||
vpc_id = ec2c.create_vpc(CidrBlock="10.1.0.0/16").get("Vpc").get("VpcId")
|
|
||||||
region = "us-east-1"
|
|
||||||
|
|
||||||
# Create 3 Zones associate with the VPC.
|
|
||||||
zones = {}
|
|
||||||
conn = boto3.client("route53", region_name=region)
|
|
||||||
for zone in ["a", "b", "c"]:
|
|
||||||
zone_name = f"test.{zone}.com."
|
|
||||||
zones[zone] = conn.create_hosted_zone(
|
|
||||||
Name=zone_name,
|
|
||||||
CallerReference=str(hash("foo")),
|
|
||||||
HostedZoneConfig=dict(PrivateZone=True, Comment=f"test {zone} com"),
|
|
||||||
VPC={"VPCRegion": region, "VPCId": vpc_id},
|
|
||||||
)
|
|
||||||
|
|
||||||
# List the zones associated with this vpc
|
|
||||||
response = conn.list_hosted_zones_by_vpc(VPCId=vpc_id, VPCRegion=region)
|
|
||||||
response.should.have.key("ResponseMetadata")
|
|
||||||
response.should.have.key("HostedZoneSummaries")
|
|
||||||
response["HostedZoneSummaries"].should.have.length_of(3)
|
|
||||||
|
|
||||||
# Loop through all zone summaries and verify they match what was created
|
|
||||||
for summary in response["HostedZoneSummaries"]:
|
|
||||||
# use the zone name as the index
|
|
||||||
index = summary["Name"].split(".")[1]
|
|
||||||
zone_id = zones[index]["HostedZone"]["Id"].split("/")[2]
|
|
||||||
summary.should.have.key("HostedZoneId")
|
|
||||||
summary["HostedZoneId"].should.equal(zone_id)
|
|
||||||
summary.should.have.key("Name")
|
|
||||||
summary["Name"].should.equal(zones[index]["HostedZone"]["Name"])
|
|
||||||
|
|
||||||
|
|
||||||
@mock_route53
|
@mock_route53
|
||||||
def test_change_resource_record_sets_crud_valid():
|
def test_change_resource_record_sets_crud_valid():
|
||||||
conn = boto3.client("route53", region_name="us-east-1")
|
conn = boto3.client("route53", region_name="us-east-1")
|
||||||
@ -1568,3 +1371,14 @@ def test_list_resource_recordset_pagination():
|
|||||||
response.should.have.key("MaxItems").equals("300")
|
response.should.have.key("MaxItems").equals("300")
|
||||||
response.shouldnt.have.key("NextRecordName")
|
response.shouldnt.have.key("NextRecordName")
|
||||||
response.shouldnt.have.key("NextRecordType")
|
response.shouldnt.have.key("NextRecordType")
|
||||||
|
|
||||||
|
|
||||||
|
@mock_route53
|
||||||
|
def test_get_dns_sec():
|
||||||
|
client = boto3.client("route53", region_name="us-east-1")
|
||||||
|
|
||||||
|
hosted_zone_id = client.create_hosted_zone(
|
||||||
|
Name="testdns.aws.com.", CallerReference=str(hash("foo"))
|
||||||
|
)["HostedZone"]["Id"]
|
||||||
|
dns_sec = client.get_dnssec(HostedZoneId=hosted_zone_id)
|
||||||
|
dns_sec.should.have.key("Status").equals({"ServeSignature": "NOT_SIGNING"})
|
||||||
|
@ -59,6 +59,7 @@ def test_create_health_check_with_additional_options():
|
|||||||
"Type": "HTTP",
|
"Type": "HTTP",
|
||||||
"ResourcePath": "/",
|
"ResourcePath": "/",
|
||||||
"FullyQualifiedDomainName": "example.com",
|
"FullyQualifiedDomainName": "example.com",
|
||||||
|
"SearchString": "a good response",
|
||||||
"RequestInterval": 10,
|
"RequestInterval": 10,
|
||||||
"FailureThreshold": 2,
|
"FailureThreshold": 2,
|
||||||
"MeasureLatency": True,
|
"MeasureLatency": True,
|
||||||
@ -73,9 +74,11 @@ def test_create_health_check_with_additional_options():
|
|||||||
check.should.have.key("CallerReference").being.equal(
|
check.should.have.key("CallerReference").being.equal(
|
||||||
"test-route53-health-HealthCheck-asdf"
|
"test-route53-health-HealthCheck-asdf"
|
||||||
)
|
)
|
||||||
|
check.should.have.key("HealthCheckVersion").equal(1)
|
||||||
check.should.have.key("HealthCheckConfig")
|
check.should.have.key("HealthCheckConfig")
|
||||||
#
|
#
|
||||||
config = check["HealthCheckConfig"]
|
config = check["HealthCheckConfig"]
|
||||||
|
check["HealthCheckConfig"].should.have.key("SearchString").equal("a good response")
|
||||||
config.should.have.key("MeasureLatency").being.equal(True)
|
config.should.have.key("MeasureLatency").being.equal(True)
|
||||||
config.should.have.key("Inverted").being.equal(True)
|
config.should.have.key("Inverted").being.equal(True)
|
||||||
config.should.have.key("Disabled").being.equal(True)
|
config.should.have.key("Disabled").being.equal(True)
|
||||||
@ -203,11 +206,93 @@ def test_get_unknown_health_check():
|
|||||||
|
|
||||||
|
|
||||||
@mock_route53
|
@mock_route53
|
||||||
def test_get_dns_sec():
|
def test_list_health_checks():
|
||||||
|
conn = boto3.client("route53", region_name="us-east-1")
|
||||||
|
|
||||||
|
conn.list_health_checks()["HealthChecks"].should.have.length_of(0)
|
||||||
|
|
||||||
|
check = conn.create_health_check(
|
||||||
|
CallerReference="?",
|
||||||
|
HealthCheckConfig={
|
||||||
|
"IPAddress": "10.0.0.25",
|
||||||
|
"Port": 80,
|
||||||
|
"Type": "HTTP",
|
||||||
|
"ResourcePath": "/",
|
||||||
|
"FullyQualifiedDomainName": "example.com",
|
||||||
|
"SearchString": "a good response",
|
||||||
|
"RequestInterval": 10,
|
||||||
|
"FailureThreshold": 2,
|
||||||
|
},
|
||||||
|
)["HealthCheck"]
|
||||||
|
|
||||||
|
checks = conn.list_health_checks()["HealthChecks"]
|
||||||
|
checks.should.have.length_of(1)
|
||||||
|
checks.should.contain(check)
|
||||||
|
|
||||||
|
|
||||||
|
@mock_route53
|
||||||
|
def test_delete_health_checks():
|
||||||
|
conn = boto3.client("route53", region_name="us-east-1")
|
||||||
|
|
||||||
|
conn.list_health_checks()["HealthChecks"].should.have.length_of(0)
|
||||||
|
|
||||||
|
check = conn.create_health_check(
|
||||||
|
CallerReference="?",
|
||||||
|
HealthCheckConfig={
|
||||||
|
"IPAddress": "10.0.0.25",
|
||||||
|
"Port": 80,
|
||||||
|
"Type": "HTTP",
|
||||||
|
"ResourcePath": "/",
|
||||||
|
"FullyQualifiedDomainName": "example.com",
|
||||||
|
"SearchString": "a good response",
|
||||||
|
"RequestInterval": 10,
|
||||||
|
"FailureThreshold": 2,
|
||||||
|
},
|
||||||
|
)["HealthCheck"]
|
||||||
|
|
||||||
|
conn.delete_health_check(HealthCheckId=check["Id"])
|
||||||
|
|
||||||
|
checks = conn.list_health_checks()["HealthChecks"]
|
||||||
|
checks.should.have.length_of(0)
|
||||||
|
|
||||||
|
|
||||||
|
@mock_route53
|
||||||
|
def test_update_health_check():
|
||||||
client = boto3.client("route53", region_name="us-east-1")
|
client = boto3.client("route53", region_name="us-east-1")
|
||||||
|
|
||||||
hosted_zone_id = client.create_hosted_zone(
|
hc_id = client.create_health_check(
|
||||||
Name="testdns.aws.com.", CallerReference=str(hash("foo"))
|
CallerReference="callref",
|
||||||
)["HostedZone"]["Id"]
|
HealthCheckConfig={
|
||||||
dns_sec = client.get_dnssec(HostedZoneId=hosted_zone_id)
|
"Type": "CALCULATED",
|
||||||
dns_sec.should.have.key("Status").equals({"ServeSignature": "NOT_SIGNING"})
|
"Inverted": False,
|
||||||
|
"Disabled": False,
|
||||||
|
"HealthThreshold": 1,
|
||||||
|
},
|
||||||
|
)["HealthCheck"]["Id"]
|
||||||
|
|
||||||
|
client.update_health_check(
|
||||||
|
HealthCheckId=hc_id,
|
||||||
|
IPAddress="0.0.0.0",
|
||||||
|
Port=80,
|
||||||
|
ResourcePath="rp",
|
||||||
|
FullyQualifiedDomainName="example.com",
|
||||||
|
SearchString="search",
|
||||||
|
FailureThreshold=123,
|
||||||
|
Inverted=False,
|
||||||
|
Disabled=False,
|
||||||
|
HealthThreshold=13,
|
||||||
|
ChildHealthChecks=["child"],
|
||||||
|
Regions=["us-east-1", "us-east-2", "us-west-1"],
|
||||||
|
)
|
||||||
|
|
||||||
|
config = client.get_health_check(HealthCheckId=hc_id)["HealthCheck"][
|
||||||
|
"HealthCheckConfig"
|
||||||
|
]
|
||||||
|
config.should.have.key("Type").equals("CALCULATED")
|
||||||
|
config.should.have.key("ResourcePath").equals("rp")
|
||||||
|
config.should.have.key("FullyQualifiedDomainName").equals("example.com")
|
||||||
|
config.should.have.key("SearchString").equals("search")
|
||||||
|
config.should.have.key("Inverted").equals(False)
|
||||||
|
config.should.have.key("Disabled").equals(False)
|
||||||
|
config.should.have.key("ChildHealthChecks").equals(["child"])
|
||||||
|
config.should.have.key("Regions").equals(["us-east-1", "us-east-2", "us-west-1"])
|
236
tests/test_route53/test_route53_vpcs.py
Normal file
236
tests/test_route53/test_route53_vpcs.py
Normal file
@ -0,0 +1,236 @@
|
|||||||
|
import boto3
|
||||||
|
import sure # noqa # pylint: disable=unused-import
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from botocore.exceptions import ClientError
|
||||||
|
from moto import mock_ec2, mock_route53
|
||||||
|
|
||||||
|
|
||||||
|
@mock_ec2
|
||||||
|
@mock_route53
|
||||||
|
def test_hosted_zone_private_zone_preserved():
|
||||||
|
# Create mock VPC so we can get a VPC ID
|
||||||
|
region = "us-east-1"
|
||||||
|
ec2c = boto3.client("ec2", region_name=region)
|
||||||
|
vpc_id = ec2c.create_vpc(CidrBlock="10.1.0.0/16").get("Vpc").get("VpcId")
|
||||||
|
|
||||||
|
# Create hosted_zone as a Private VPC Hosted Zone
|
||||||
|
conn = boto3.client("route53", region_name=region)
|
||||||
|
new_zone = conn.create_hosted_zone(
|
||||||
|
Name="testdns.aws.com.",
|
||||||
|
CallerReference=str(hash("foo")),
|
||||||
|
HostedZoneConfig=dict(PrivateZone=True, Comment="Test"),
|
||||||
|
VPC={"VPCRegion": region, "VPCId": vpc_id},
|
||||||
|
)
|
||||||
|
|
||||||
|
zone_id = new_zone["HostedZone"]["Id"].split("/")[-1]
|
||||||
|
hosted_zone = conn.get_hosted_zone(Id=zone_id)
|
||||||
|
hosted_zone["HostedZone"]["Config"]["PrivateZone"].should.equal(True)
|
||||||
|
hosted_zone.should.have.key("VPCs")
|
||||||
|
hosted_zone["VPCs"].should.have.length_of(1)
|
||||||
|
hosted_zone["VPCs"][0].should.have.key("VPCId")
|
||||||
|
hosted_zone["VPCs"][0].should.have.key("VPCRegion")
|
||||||
|
hosted_zone["VPCs"][0]["VPCId"].should.be.equal(vpc_id)
|
||||||
|
hosted_zone["VPCs"][0]["VPCRegion"].should.be.equal(region)
|
||||||
|
|
||||||
|
hosted_zones = conn.list_hosted_zones()
|
||||||
|
hosted_zones["HostedZones"][0]["Config"]["PrivateZone"].should.equal(True)
|
||||||
|
|
||||||
|
hosted_zones = conn.list_hosted_zones_by_name(DNSName="testdns.aws.com.")
|
||||||
|
hosted_zones["HostedZones"].should.have.length_of(1)
|
||||||
|
hosted_zones["HostedZones"][0]["Config"]["PrivateZone"].should.equal(True)
|
||||||
|
|
||||||
|
# create_hosted_zone statements with PrivateZone=True,
|
||||||
|
# but without a _valid_ vpc-id should NOT fail.
|
||||||
|
zone2_name = "testdns2.aws.com."
|
||||||
|
no_vpc_zone = conn.create_hosted_zone(
|
||||||
|
Name=zone2_name,
|
||||||
|
CallerReference=str(hash("foo")),
|
||||||
|
HostedZoneConfig=dict(PrivateZone=True, Comment="Test without VPC"),
|
||||||
|
)
|
||||||
|
|
||||||
|
zone_id = no_vpc_zone["HostedZone"]["Id"].split("/")[-1]
|
||||||
|
hosted_zone = conn.get_hosted_zone(Id=zone_id)
|
||||||
|
hosted_zone["HostedZone"]["Config"]["PrivateZone"].should.equal(True)
|
||||||
|
hosted_zone.should.have.key("VPCs")
|
||||||
|
hosted_zone["VPCs"].should.have.length_of(0)
|
||||||
|
|
||||||
|
hosted_zones = conn.list_hosted_zones()
|
||||||
|
hosted_zones["HostedZones"].should.have.length_of(2)
|
||||||
|
hosted_zones["HostedZones"][0]["Config"]["PrivateZone"].should.equal(True)
|
||||||
|
hosted_zones["HostedZones"][1]["Config"]["PrivateZone"].should.equal(True)
|
||||||
|
|
||||||
|
hosted_zones = conn.list_hosted_zones_by_name(DNSName=zone2_name)
|
||||||
|
hosted_zones["HostedZones"].should.have.length_of(1)
|
||||||
|
hosted_zones["HostedZones"][0]["Config"]["PrivateZone"].should.equal(True)
|
||||||
|
hosted_zones["HostedZones"][0]["Name"].should.equal(zone2_name)
|
||||||
|
|
||||||
|
|
||||||
|
@mock_ec2
|
||||||
|
@mock_route53
|
||||||
|
def test_list_hosted_zones_by_vpc_with_multiple_vpcs():
|
||||||
|
# Create mock VPC so we can get a VPC ID
|
||||||
|
ec2c = boto3.client("ec2", region_name="us-east-1")
|
||||||
|
vpc_id = ec2c.create_vpc(CidrBlock="10.1.0.0/16").get("Vpc").get("VpcId")
|
||||||
|
region = "us-east-1"
|
||||||
|
|
||||||
|
# Create 3 Zones associate with the VPC.
|
||||||
|
zones = {}
|
||||||
|
conn = boto3.client("route53", region_name=region)
|
||||||
|
for zone in ["a", "b", "c"]:
|
||||||
|
zone_name = f"test.{zone}.com."
|
||||||
|
zones[zone] = conn.create_hosted_zone(
|
||||||
|
Name=zone_name,
|
||||||
|
CallerReference=str(hash("foo")),
|
||||||
|
HostedZoneConfig=dict(PrivateZone=True, Comment=f"test {zone} com"),
|
||||||
|
VPC={"VPCRegion": region, "VPCId": vpc_id},
|
||||||
|
)
|
||||||
|
|
||||||
|
# List the zones associated with this vpc
|
||||||
|
response = conn.list_hosted_zones_by_vpc(VPCId=vpc_id, VPCRegion=region)
|
||||||
|
response.should.have.key("ResponseMetadata")
|
||||||
|
response.should.have.key("HostedZoneSummaries")
|
||||||
|
response["HostedZoneSummaries"].should.have.length_of(3)
|
||||||
|
|
||||||
|
# Loop through all zone summaries and verify they match what was created
|
||||||
|
for summary in response["HostedZoneSummaries"]:
|
||||||
|
# use the zone name as the index
|
||||||
|
index = summary["Name"].split(".")[1]
|
||||||
|
zone_id = zones[index]["HostedZone"]["Id"].split("/")[2]
|
||||||
|
summary.should.have.key("HostedZoneId")
|
||||||
|
summary["HostedZoneId"].should.equal(zone_id)
|
||||||
|
summary.should.have.key("Name")
|
||||||
|
summary["Name"].should.equal(zones[index]["HostedZone"]["Name"])
|
||||||
|
|
||||||
|
|
||||||
|
@mock_ec2
|
||||||
|
@mock_route53
|
||||||
|
def test_list_hosted_zones_by_vpc():
|
||||||
|
# Create mock VPC so we can get a VPC ID
|
||||||
|
ec2c = boto3.client("ec2", region_name="us-east-1")
|
||||||
|
vpc_id = ec2c.create_vpc(CidrBlock="10.1.0.0/16").get("Vpc").get("VpcId")
|
||||||
|
region = "us-east-1"
|
||||||
|
|
||||||
|
conn = boto3.client("route53", region_name=region)
|
||||||
|
zone_b = conn.create_hosted_zone(
|
||||||
|
Name="test.b.com.",
|
||||||
|
CallerReference=str(hash("foo")),
|
||||||
|
HostedZoneConfig=dict(PrivateZone=True, Comment="test com"),
|
||||||
|
VPC={"VPCRegion": region, "VPCId": vpc_id},
|
||||||
|
)
|
||||||
|
zone_id = zone_b["HostedZone"]["Id"].split("/")[2]
|
||||||
|
|
||||||
|
response = conn.list_hosted_zones_by_vpc(VPCId=vpc_id, VPCRegion=region)
|
||||||
|
response.should.have.key("ResponseMetadata")
|
||||||
|
response.should.have.key("HostedZoneSummaries")
|
||||||
|
response["HostedZoneSummaries"].should.have.length_of(1)
|
||||||
|
response["HostedZoneSummaries"][0].should.have.key("HostedZoneId")
|
||||||
|
retured_zone = response["HostedZoneSummaries"][0]
|
||||||
|
retured_zone["HostedZoneId"].should.equal(zone_id)
|
||||||
|
retured_zone["Name"].should.equal(zone_b["HostedZone"]["Name"])
|
||||||
|
|
||||||
|
|
||||||
|
@mock_ec2
|
||||||
|
@mock_route53
|
||||||
|
def test_route53_associate_vpc():
|
||||||
|
ec2c = boto3.client("ec2", region_name="us-east-1")
|
||||||
|
vpc_id = ec2c.create_vpc(CidrBlock="10.1.0.0/16")["Vpc"]["VpcId"]
|
||||||
|
conn = boto3.client("route53", region_name="us-east-1")
|
||||||
|
zone = conn.create_hosted_zone(
|
||||||
|
Name="test.b.com.",
|
||||||
|
CallerReference=str(hash("foo")),
|
||||||
|
HostedZoneConfig=dict(PrivateZone=True, Comment=""),
|
||||||
|
)
|
||||||
|
zone_id = zone["HostedZone"]["Id"].split("/")[2]
|
||||||
|
|
||||||
|
resp = conn.associate_vpc_with_hosted_zone(
|
||||||
|
HostedZoneId=zone_id,
|
||||||
|
VPC={"VPCId": vpc_id, "VPCRegion": "us-east-1"},
|
||||||
|
Comment="yolo",
|
||||||
|
)
|
||||||
|
resp.should.have.key("ChangeInfo")
|
||||||
|
resp["ChangeInfo"].should.have.key("Comment").equals("yolo")
|
||||||
|
|
||||||
|
|
||||||
|
@mock_ec2
|
||||||
|
@mock_route53
|
||||||
|
def test_route53_associate_vpc_with_public_Zone():
|
||||||
|
ec2c = boto3.client("ec2", region_name="us-east-1")
|
||||||
|
vpc_id = ec2c.create_vpc(CidrBlock="10.1.0.0/16")["Vpc"]["VpcId"]
|
||||||
|
conn = boto3.client("route53", region_name="us-east-1")
|
||||||
|
zone = conn.create_hosted_zone(
|
||||||
|
Name="test.b.com.",
|
||||||
|
CallerReference=str(hash("foo")),
|
||||||
|
)
|
||||||
|
zone_id = zone["HostedZone"]["Id"].split("/")[2]
|
||||||
|
|
||||||
|
with pytest.raises(ClientError) as exc:
|
||||||
|
conn.associate_vpc_with_hosted_zone(
|
||||||
|
HostedZoneId=zone_id,
|
||||||
|
VPC={"VPCId": vpc_id, "VPCRegion": "us-east-1"},
|
||||||
|
Comment="yolo",
|
||||||
|
)
|
||||||
|
err = exc.value.response["Error"]
|
||||||
|
err["Code"].should.equal("PublicZoneVPCAssociation")
|
||||||
|
err["Message"].should.equal(
|
||||||
|
"You're trying to associate a VPC with a public hosted zone. Amazon Route 53 doesn't support associating a VPC with a public hosted zone."
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@mock_ec2
|
||||||
|
@mock_route53
|
||||||
|
def test_route53_associate_and_disassociate_vpc():
|
||||||
|
ec2c = boto3.client("ec2", region_name="us-east-1")
|
||||||
|
vpc_id1 = ec2c.create_vpc(CidrBlock="10.1.0.0/16").get("Vpc").get("VpcId")
|
||||||
|
vpc_id2 = ec2c.create_vpc(CidrBlock="10.1.0.1/16").get("Vpc").get("VpcId")
|
||||||
|
region = "us-east-1"
|
||||||
|
|
||||||
|
conn = boto3.client("route53", region_name=region)
|
||||||
|
zone = conn.create_hosted_zone(
|
||||||
|
Name="test.b.com.",
|
||||||
|
CallerReference=str(hash("foo")),
|
||||||
|
HostedZoneConfig=dict(PrivateZone=True, Comment="test com"),
|
||||||
|
VPC={"VPCRegion": region, "VPCId": vpc_id1},
|
||||||
|
)
|
||||||
|
zone_id = zone["HostedZone"]["Id"].split("/")[2]
|
||||||
|
|
||||||
|
conn.associate_vpc_with_hosted_zone(
|
||||||
|
HostedZoneId=zone_id,
|
||||||
|
VPC={"VPCId": vpc_id2, "VPCRegion": region},
|
||||||
|
)
|
||||||
|
|
||||||
|
zone_vpcs = conn.get_hosted_zone(Id=zone_id)["VPCs"]
|
||||||
|
zone_vpcs.should.have.length_of(2)
|
||||||
|
zone_vpcs.should.contain({"VPCRegion": region, "VPCId": vpc_id1})
|
||||||
|
zone_vpcs.should.contain({"VPCRegion": region, "VPCId": vpc_id2})
|
||||||
|
|
||||||
|
conn.disassociate_vpc_from_hosted_zone(HostedZoneId=zone_id, VPC={"VPCId": vpc_id1})
|
||||||
|
|
||||||
|
zone_vpcs = conn.get_hosted_zone(Id=zone_id)["VPCs"]
|
||||||
|
zone_vpcs.should.have.length_of(1)
|
||||||
|
zone_vpcs.should.contain({"VPCRegion": region, "VPCId": vpc_id2})
|
||||||
|
|
||||||
|
|
||||||
|
@mock_ec2
|
||||||
|
@mock_route53
|
||||||
|
def test_route53_disassociate_last_vpc():
|
||||||
|
ec2c = boto3.client("ec2", region_name="us-east-1")
|
||||||
|
vpc_id = ec2c.create_vpc(CidrBlock="10.1.0.0/16")["Vpc"]["VpcId"]
|
||||||
|
conn = boto3.client("route53", region_name="us-east-1")
|
||||||
|
zone = conn.create_hosted_zone(
|
||||||
|
Name="test.b.com.",
|
||||||
|
CallerReference=str(hash("foo")),
|
||||||
|
HostedZoneConfig=dict(PrivateZone=True, Comment="test com"),
|
||||||
|
VPC={"VPCRegion": "us-east-1", "VPCId": vpc_id},
|
||||||
|
)
|
||||||
|
zone_id = zone["HostedZone"]["Id"].split("/")[2]
|
||||||
|
|
||||||
|
with pytest.raises(ClientError) as exc:
|
||||||
|
conn.disassociate_vpc_from_hosted_zone(
|
||||||
|
HostedZoneId=zone_id, VPC={"VPCId": vpc_id}
|
||||||
|
)
|
||||||
|
err = exc.value.response["Error"]
|
||||||
|
err["Code"].should.equal("LastVPCAssociation")
|
||||||
|
err["Message"].should.equal(
|
||||||
|
"The VPC that you're trying to disassociate from the private hosted zone is the last VPC that is associated with the hosted zone. Amazon Route 53 doesn't support disassociating the last VPC from a hosted zone."
|
||||||
|
)
|
Loading…
Reference in New Issue
Block a user