Add organizations.untag_resource

This commit is contained in:
gruebel 2019-11-17 15:28:38 +01:00
parent c10afa3ab5
commit d0ef72725c
4 changed files with 55 additions and 1 deletions

View File

@ -4767,7 +4767,7 @@
- [X] move_account
- [ ] remove_account_from_organization
- [x] tag_resource
- [ ] untag_resource
- [x] untag_resource
- [ ] update_organizational_unit
- [ ] update_policy

View File

@ -467,5 +467,17 @@ class OrganizationsBackend(BaseBackend):
tags = [{"Key": key, "Value": value} for key, value in account.tags.items()]
return dict(Tags=tags)
def untag_resource(self, **kwargs):
account = next((a for a in self.accounts if a.id == kwargs["ResourceId"]), None)
if account is None:
raise RESTError(
"InvalidInputException",
"You provided a value that does not match the required pattern.",
)
for key in kwargs["TagKeys"]:
account.tags.pop(key, None)
organizations_backend = OrganizationsBackend()

View File

@ -129,3 +129,8 @@ class OrganizationsResponse(BaseResponse):
return json.dumps(
self.organizations_backend.list_tags_for_resource(**self.request_params)
)
def untag_resource(self):
return json.dumps(
self.organizations_backend.untag_resource(**self.request_params)
)

View File

@ -676,3 +676,40 @@ def test_list_tags_for_resource_errors():
ex.response["Error"]["Message"].should.contain(
"You provided a value that does not match the required pattern."
)
@mock_organizations
def test_untag_resource():
client = boto3.client("organizations", region_name="us-east-1")
client.create_organization(FeatureSet="ALL")
account_id = client.create_account(AccountName=mockname, Email=mockemail)[
"CreateAccountStatus"
]["AccountId"]
client.tag_resource(ResourceId=account_id, Tags=[{"Key": "key", "Value": "value"}])
response = client.list_tags_for_resource(ResourceId=account_id)
response["Tags"].should.equal([{"Key": "key", "Value": "value"}])
# removing a non existing tag should not raise any error
client.untag_resource(ResourceId=account_id, TagKeys=["not-existing"])
response = client.list_tags_for_resource(ResourceId=account_id)
response["Tags"].should.equal([{"Key": "key", "Value": "value"}])
client.untag_resource(ResourceId=account_id, TagKeys=["key"])
response = client.list_tags_for_resource(ResourceId=account_id)
response["Tags"].should.have.length_of(0)
@mock_organizations
def test_untag_resource_errors():
client = boto3.client("organizations", region_name="us-east-1")
client.create_organization(FeatureSet="ALL")
with assert_raises(ClientError) as e:
client.untag_resource(ResourceId="000000000000", TagKeys=["key"])
ex = e.exception
ex.operation_name.should.equal("UntagResource")
ex.response["Error"]["Code"].should.equal("400")
ex.response["Error"]["Message"].should.contain("InvalidInputException")
ex.response["Error"]["Message"].should.contain(
"You provided a value that does not match the required pattern."
)