From 6f5948af33d2a68604da067182a91c3dbba54602 Mon Sep 17 00:00:00 2001 From: acsbendi Date: Sat, 29 Jun 2019 18:55:19 +0200 Subject: [PATCH] Fixed is_default is not reset on old default version. --- moto/iam/models.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/moto/iam/models.py b/moto/iam/models.py index 86eec73f0..5166071f8 100644 --- a/moto/iam/models.py +++ b/moto/iam/models.py @@ -66,6 +66,13 @@ class Policy(BaseModel): self.create_date = create_date if create_date is not None else datetime.utcnow() self.update_date = update_date if update_date is not None else datetime.utcnow() + def update_default_version(self, new_default_version_id): + for version in self.versions: + if version.version_id == self.default_version_id: + version.is_default = False + break + self.default_version_id = new_default_version_id + @property def created_iso_8601(self): return iso_8601_datetime_with_milliseconds(self.create_date) @@ -760,12 +767,13 @@ class IAMBackend(BaseBackend): policy = self.get_policy(policy_arn) if not policy: raise IAMNotFoundException("Policy not found") + set_as_default = (set_as_default == "true") # convert it to python bool version = PolicyVersion(policy_arn, policy_document, set_as_default) policy.versions.append(version) version.version_id = 'v{0}'.format(policy.next_version_num) policy.next_version_num += 1 if set_as_default: - policy.default_version_id = version.version_id + policy.update_default_version(version.version_id) return version def get_policy_version(self, policy_arn, version_id): @@ -788,8 +796,8 @@ class IAMBackend(BaseBackend): if not policy: raise IAMNotFoundException("Policy not found") if version_id == policy.default_version_id: - raise IAMConflictException( - "Cannot delete the default version of a policy") + raise IAMConflictException(code="DeleteConflict", + message="Cannot delete the default version of a policy.") for i, v in enumerate(policy.versions): if v.version_id == version_id: del policy.versions[i]