commit
1f6b600d49
183
CHANGELOG.md
183
CHANGELOG.md
@ -1,6 +1,189 @@
|
||||
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
|
||||
-----
|
||||
|
||||
|
3
Makefile
3
Makefile
@ -31,7 +31,8 @@ aws_managed_policies:
|
||||
scripts/update_managed_policies.py
|
||||
|
||||
upload_pypi_artifact:
|
||||
python setup.py sdist bdist_wheel upload
|
||||
python setup.py sdist bdist_wheel
|
||||
twine upload dist/*
|
||||
|
||||
push_dockerhub_image:
|
||||
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)
|
||||
|
||||
__title__ = "moto"
|
||||
__version__ = "1.3.14.dev"
|
||||
__version__ = "1.3.15.dev"
|
||||
|
||||
|
||||
try:
|
||||
|
@ -719,7 +719,7 @@ class AccountPasswordPolicy(BaseModel):
|
||||
|
||||
def _format_error(self, key, value, constraint):
|
||||
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):
|
||||
@ -731,7 +731,7 @@ class AccountPasswordPolicy(BaseModel):
|
||||
|
||||
raise ValidationError(
|
||||
"{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")
|
||||
|
||||
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()
|
||||
|
||||
roles = [iam_backend.get_role_by_id(role_id) for role_id in role_ids]
|
||||
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
|
||||
|
||||
def get_instance_profile(self, profile_name):
|
||||
|
@ -169,6 +169,14 @@ def test_create_role_and_instance_profile():
|
||||
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()
|
||||
def test_remove_role_from_instance_profile():
|
||||
conn = boto.connect_iam()
|
||||
|
Loading…
Reference in New Issue
Block a user