commit
						1f6b600d49
					
				
							
								
								
									
										183
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										183
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@ -1,6 +1,189 @@
 | 
				
			|||||||
Moto Changelog
 | 
					Moto Changelog
 | 
				
			||||||
===================
 | 
					===================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1.3.14
 | 
				
			||||||
 | 
					-----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    General Changes:
 | 
				
			||||||
 | 
					        * Support for Python 3.8
 | 
				
			||||||
 | 
					        * Linting: Black is now enforced.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    New Services:
 | 
				
			||||||
 | 
					        * Athena
 | 
				
			||||||
 | 
					        * Config
 | 
				
			||||||
 | 
					        * DataSync
 | 
				
			||||||
 | 
					        * Step Functions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    New methods:
 | 
				
			||||||
 | 
					        * Athena:
 | 
				
			||||||
 | 
					            * create_work_group()
 | 
				
			||||||
 | 
					            * list_work_groups()
 | 
				
			||||||
 | 
					        * API Gateway:
 | 
				
			||||||
 | 
					            * delete_stage()
 | 
				
			||||||
 | 
					            * update_api_key()
 | 
				
			||||||
 | 
					        * CloudWatch Logs
 | 
				
			||||||
 | 
					            * list_tags_log_group()
 | 
				
			||||||
 | 
					            * tag_log_group()
 | 
				
			||||||
 | 
					            * untag_log_group()
 | 
				
			||||||
 | 
					        * Config
 | 
				
			||||||
 | 
					            * batch_get_resource_config()
 | 
				
			||||||
 | 
					            * delete_aggregation_authorization()
 | 
				
			||||||
 | 
					            * delete_configuration_aggregator()
 | 
				
			||||||
 | 
					            * describe_aggregation_authorizations()
 | 
				
			||||||
 | 
					            * describe_configuration_aggregators()
 | 
				
			||||||
 | 
					            * describe_identity_pool()
 | 
				
			||||||
 | 
					            * get_resource_config_history()
 | 
				
			||||||
 | 
					            * list_aggregate_discovered_resources() (For S3)
 | 
				
			||||||
 | 
					            * list_discovered_resources() (For S3)
 | 
				
			||||||
 | 
					            * put_aggregation_authorization()
 | 
				
			||||||
 | 
					            * put_configuration_aggregator()
 | 
				
			||||||
 | 
					        * Cognito
 | 
				
			||||||
 | 
					            * assume_role_with_web_identity()
 | 
				
			||||||
 | 
					            * get_open_id_token()
 | 
				
			||||||
 | 
					            * update_user_pool_domain()
 | 
				
			||||||
 | 
					        * DataSync:
 | 
				
			||||||
 | 
					            * cancel_task_execution()
 | 
				
			||||||
 | 
					            * create_location()
 | 
				
			||||||
 | 
					            * create_task()
 | 
				
			||||||
 | 
					            * start_task_execution()
 | 
				
			||||||
 | 
					        * EC2:
 | 
				
			||||||
 | 
					            * create_launch_template()
 | 
				
			||||||
 | 
					            * create_launch_template_version()
 | 
				
			||||||
 | 
					            * describe_launch_template_versions()
 | 
				
			||||||
 | 
					            * describe_launch_templates()
 | 
				
			||||||
 | 
					        * ECS
 | 
				
			||||||
 | 
					            * decrypt()
 | 
				
			||||||
 | 
					            * encrypt()
 | 
				
			||||||
 | 
					            * generate_data_key_without_plaintext()
 | 
				
			||||||
 | 
					            * generate_random()
 | 
				
			||||||
 | 
					            * re_encrypt()
 | 
				
			||||||
 | 
					        * Glue
 | 
				
			||||||
 | 
					            * batch_get_partition()
 | 
				
			||||||
 | 
					        * IAM
 | 
				
			||||||
 | 
					            * create_open_id_connect_provider()
 | 
				
			||||||
 | 
					            * create_virtual_mfa_device()
 | 
				
			||||||
 | 
					            * delete_account_password_policy()
 | 
				
			||||||
 | 
					            * delete_open_id_connect_provider()
 | 
				
			||||||
 | 
					            * delete_policy()
 | 
				
			||||||
 | 
					            * delete_virtual_mfa_device()
 | 
				
			||||||
 | 
					            * get_account_password_policy()
 | 
				
			||||||
 | 
					            * get_open_id_connect_provider()
 | 
				
			||||||
 | 
					            * list_open_id_connect_providers()
 | 
				
			||||||
 | 
					            * list_virtual_mfa_devices()
 | 
				
			||||||
 | 
					            * update_account_password_policy()
 | 
				
			||||||
 | 
					        * Lambda
 | 
				
			||||||
 | 
					            * create_event_source_mapping()
 | 
				
			||||||
 | 
					            * delete_event_source_mapping()
 | 
				
			||||||
 | 
					            * get_event_source_mapping()
 | 
				
			||||||
 | 
					            * list_event_source_mappings()
 | 
				
			||||||
 | 
					            * update_configuration()
 | 
				
			||||||
 | 
					            * update_event_source_mapping()
 | 
				
			||||||
 | 
					            * update_function_code()
 | 
				
			||||||
 | 
					        * KMS
 | 
				
			||||||
 | 
					            * decrypt()
 | 
				
			||||||
 | 
					            * encrypt()
 | 
				
			||||||
 | 
					            * generate_data_key_without_plaintext()
 | 
				
			||||||
 | 
					            * generate_random()
 | 
				
			||||||
 | 
					            * re_encrypt()
 | 
				
			||||||
 | 
					        * SES
 | 
				
			||||||
 | 
					            * send_templated_email()
 | 
				
			||||||
 | 
					        * SNS
 | 
				
			||||||
 | 
					            * add_permission()
 | 
				
			||||||
 | 
					            * list_tags_for_resource()
 | 
				
			||||||
 | 
					            * remove_permission()
 | 
				
			||||||
 | 
					            * tag_resource()
 | 
				
			||||||
 | 
					            * untag_resource()
 | 
				
			||||||
 | 
					        * SSM
 | 
				
			||||||
 | 
					            * describe_parameters()
 | 
				
			||||||
 | 
					            * get_parameter_history()
 | 
				
			||||||
 | 
					        * Step Functions
 | 
				
			||||||
 | 
					            * create_state_machine()
 | 
				
			||||||
 | 
					            * delete_state_machine()
 | 
				
			||||||
 | 
					            * describe_execution()
 | 
				
			||||||
 | 
					            * describe_state_machine()
 | 
				
			||||||
 | 
					            * describe_state_machine_for_execution()
 | 
				
			||||||
 | 
					            * list_executions()
 | 
				
			||||||
 | 
					            * list_state_machines()
 | 
				
			||||||
 | 
					            * list_tags_for_resource()
 | 
				
			||||||
 | 
					            * start_execution()
 | 
				
			||||||
 | 
					            * stop_execution()
 | 
				
			||||||
 | 
					        SQS
 | 
				
			||||||
 | 
					            * list_queue_tags()
 | 
				
			||||||
 | 
					            * send_message_batch()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    General updates:
 | 
				
			||||||
 | 
					        * API Gateway:
 | 
				
			||||||
 | 
					            * Now generates valid IDs
 | 
				
			||||||
 | 
					            * API Keys, Usage Plans now support tags
 | 
				
			||||||
 | 
					        * ACM:
 | 
				
			||||||
 | 
					            * list_certificates() accepts the status parameter
 | 
				
			||||||
 | 
					        * Batch:
 | 
				
			||||||
 | 
					            * submit_job() can now be called with job name
 | 
				
			||||||
 | 
					        * CloudWatch Events
 | 
				
			||||||
 | 
					            * Multi-region support
 | 
				
			||||||
 | 
					        * CloudWatch Logs
 | 
				
			||||||
 | 
					            * get_log_events() now supports pagination
 | 
				
			||||||
 | 
					        * Cognito:
 | 
				
			||||||
 | 
					            * Now throws UsernameExistsException for known users
 | 
				
			||||||
 | 
					        * DynamoDB
 | 
				
			||||||
 | 
					            * update_item() now supports lists, the list_append-operator and removing nested items
 | 
				
			||||||
 | 
					            * delete_item() now supports condition expressions
 | 
				
			||||||
 | 
					            * get_item() now supports projection expression
 | 
				
			||||||
 | 
					            * Enforces 400KB item size
 | 
				
			||||||
 | 
					            * Validation on duplicate keys in batch_get_item()
 | 
				
			||||||
 | 
					            * Validation on AttributeDefinitions on create_table()
 | 
				
			||||||
 | 
					            * Validation on Query Key Expression
 | 
				
			||||||
 | 
					            * Projection Expressions now support nested attributes
 | 
				
			||||||
 | 
					        * EC2:
 | 
				
			||||||
 | 
					            * Change DesiredCapacity behaviour for AutoScaling groups
 | 
				
			||||||
 | 
					            * Extend list of supported EC2 ENI properties
 | 
				
			||||||
 | 
					            * Create ASG from Instance now supported
 | 
				
			||||||
 | 
					            * ASG attached to a terminated instance now recreate the instance of required
 | 
				
			||||||
 | 
					            * Unify OwnerIDs
 | 
				
			||||||
 | 
					        * ECS
 | 
				
			||||||
 | 
					            * Task definition revision deregistration: remaining revisions now remain unchanged
 | 
				
			||||||
 | 
					            * Fix created_at/updated_at format for deployments
 | 
				
			||||||
 | 
					            * Support multiple regions
 | 
				
			||||||
 | 
					        * ELB
 | 
				
			||||||
 | 
					            * Return correct response then describing target health of stopped instances
 | 
				
			||||||
 | 
					            * Target groups now longer show terminated instances
 | 
				
			||||||
 | 
					            * 'fixed-response' now a supported action-type
 | 
				
			||||||
 | 
					            * Now supports redirect: authenticate-cognito
 | 
				
			||||||
 | 
					        * Kinesis FireHose
 | 
				
			||||||
 | 
					            * Now supports ExtendedS3DestinationConfiguration
 | 
				
			||||||
 | 
					        * KMS
 | 
				
			||||||
 | 
					            * Now supports tags
 | 
				
			||||||
 | 
					        * Organizations
 | 
				
			||||||
 | 
					            * create_organization() now creates Master account
 | 
				
			||||||
 | 
					        * Redshift
 | 
				
			||||||
 | 
					            * Fix timezone problems when creating a cluster
 | 
				
			||||||
 | 
					            * Support for enhanced_vpc_routing-parameter
 | 
				
			||||||
 | 
					        * Route53
 | 
				
			||||||
 | 
					            * Implemented UPSERT for change_resource_records
 | 
				
			||||||
 | 
					        * S3:
 | 
				
			||||||
 | 
					            * Support partNumber for head_object
 | 
				
			||||||
 | 
					            * Support for INTELLIGENT_TIERING, GLACIER and DEEP_ARCHIVE
 | 
				
			||||||
 | 
					            * Fix KeyCount attribute
 | 
				
			||||||
 | 
					            * list_objects now supports pagination (next_marker)
 | 
				
			||||||
 | 
					            * Support tagging for versioned objects
 | 
				
			||||||
 | 
					        * STS
 | 
				
			||||||
 | 
					            * Implement validation on policy length
 | 
				
			||||||
 | 
					        * Lambda
 | 
				
			||||||
 | 
					            * Support EventSourceMappings for SQS, DynamoDB
 | 
				
			||||||
 | 
					            * get_function(), delete_function() now both support ARNs as parameters
 | 
				
			||||||
 | 
					        * IAM
 | 
				
			||||||
 | 
					            * Roles now support tags
 | 
				
			||||||
 | 
					            * Policy Validation: SID can be empty
 | 
				
			||||||
 | 
					            * Validate roles have no attachments when deleting
 | 
				
			||||||
 | 
					        * SecretsManager
 | 
				
			||||||
 | 
					            * Now supports binary secrets
 | 
				
			||||||
 | 
					        * IOT
 | 
				
			||||||
 | 
					            * update_thing_shadow validation
 | 
				
			||||||
 | 
					            * delete_thing now also removed principals
 | 
				
			||||||
 | 
					        * SQS
 | 
				
			||||||
 | 
					            * Tags supported for create_queue()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1.3.7
 | 
					1.3.7
 | 
				
			||||||
-----
 | 
					-----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										3
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								Makefile
									
									
									
									
									
								
							@ -31,7 +31,8 @@ aws_managed_policies:
 | 
				
			|||||||
	scripts/update_managed_policies.py
 | 
						scripts/update_managed_policies.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
upload_pypi_artifact:
 | 
					upload_pypi_artifact:
 | 
				
			||||||
	python setup.py sdist bdist_wheel upload
 | 
						python setup.py sdist bdist_wheel
 | 
				
			||||||
 | 
						twine upload dist/*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
push_dockerhub_image:
 | 
					push_dockerhub_image:
 | 
				
			||||||
	docker build -t motoserver/moto .
 | 
						docker build -t motoserver/moto .
 | 
				
			||||||
 | 
				
			|||||||
@ -58,7 +58,7 @@ from .xray import XRaySegment, mock_xray, mock_xray_client  # noqa
 | 
				
			|||||||
# logging.getLogger('boto').setLevel(logging.CRITICAL)
 | 
					# logging.getLogger('boto').setLevel(logging.CRITICAL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
__title__ = "moto"
 | 
					__title__ = "moto"
 | 
				
			||||||
__version__ = "1.3.14.dev"
 | 
					__version__ = "1.3.15.dev"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
try:
 | 
					try:
 | 
				
			||||||
 | 
				
			|||||||
@ -719,7 +719,7 @@ class AccountPasswordPolicy(BaseModel):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    def _format_error(self, key, value, constraint):
 | 
					    def _format_error(self, key, value, constraint):
 | 
				
			||||||
        return 'Value "{value}" at "{key}" failed to satisfy constraint: {constraint}'.format(
 | 
					        return 'Value "{value}" at "{key}" failed to satisfy constraint: {constraint}'.format(
 | 
				
			||||||
            constraint=constraint, key=key, value=value,
 | 
					            constraint=constraint, key=key, value=value
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def _raise_errors(self):
 | 
					    def _raise_errors(self):
 | 
				
			||||||
@ -731,7 +731,7 @@ class AccountPasswordPolicy(BaseModel):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            raise ValidationError(
 | 
					            raise ValidationError(
 | 
				
			||||||
                "{count} validation error{plural} detected: {errors}".format(
 | 
					                "{count} validation error{plural} detected: {errors}".format(
 | 
				
			||||||
                    count=count, plural=plural, errors=errors,
 | 
					                    count=count, plural=plural, errors=errors
 | 
				
			||||||
                )
 | 
					                )
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1104,11 +1104,17 @@ class IAMBackend(BaseBackend):
 | 
				
			|||||||
        raise IAMNotFoundException("Policy not found")
 | 
					        raise IAMNotFoundException("Policy not found")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def create_instance_profile(self, name, path, role_ids):
 | 
					    def create_instance_profile(self, name, path, role_ids):
 | 
				
			||||||
 | 
					        if self.instance_profiles.get(name):
 | 
				
			||||||
 | 
					            raise IAMConflictException(
 | 
				
			||||||
 | 
					                code="EntityAlreadyExists",
 | 
				
			||||||
 | 
					                message="Instance Profile {0} already exists.".format(name),
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        instance_profile_id = random_resource_id()
 | 
					        instance_profile_id = random_resource_id()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        roles = [iam_backend.get_role_by_id(role_id) for role_id in role_ids]
 | 
					        roles = [iam_backend.get_role_by_id(role_id) for role_id in role_ids]
 | 
				
			||||||
        instance_profile = InstanceProfile(instance_profile_id, name, path, roles)
 | 
					        instance_profile = InstanceProfile(instance_profile_id, name, path, roles)
 | 
				
			||||||
        self.instance_profiles[instance_profile_id] = instance_profile
 | 
					        self.instance_profiles[name] = instance_profile
 | 
				
			||||||
        return instance_profile
 | 
					        return instance_profile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_instance_profile(self, profile_name):
 | 
					    def get_instance_profile(self, profile_name):
 | 
				
			||||||
 | 
				
			|||||||
@ -169,6 +169,14 @@ def test_create_role_and_instance_profile():
 | 
				
			|||||||
    profile.path.should.equal("/")
 | 
					    profile.path.should.equal("/")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@mock_iam
 | 
				
			||||||
 | 
					def test_create_instance_profile_should_throw_when_name_is_not_unique():
 | 
				
			||||||
 | 
					    conn = boto3.client("iam", region_name="us-east-1")
 | 
				
			||||||
 | 
					    conn.create_instance_profile(InstanceProfileName="unique-instance-profile")
 | 
				
			||||||
 | 
					    with assert_raises(ClientError):
 | 
				
			||||||
 | 
					        conn.create_instance_profile(InstanceProfileName="unique-instance-profile")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@mock_iam_deprecated()
 | 
					@mock_iam_deprecated()
 | 
				
			||||||
def test_remove_role_from_instance_profile():
 | 
					def test_remove_role_from_instance_profile():
 | 
				
			||||||
    conn = boto.connect_iam()
 | 
					    conn = boto.connect_iam()
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user