ec2_tag: Fix removing tags without specifying a value (#47228)

This commit is contained in:
flowerysong 2018-10-18 10:13:08 -04:00 committed by Ryan Brown
parent 3f629c426c
commit 0fc639e755
2 changed files with 52 additions and 5 deletions

View file

@ -32,7 +32,8 @@ options:
choices: ['present', 'absent', 'list'] choices: ['present', 'absent', 'list']
tags: tags:
description: description:
- a hash/dictionary of tags to add to the resource; '{"key":"value"}' and '{"key":"value","key":"value"}' - A dictionary of tags to add or remove from the resource.
- If the value provided for a tag is null and C(state) is I(absent), the tag will be removed regardless of its current value.
required: true required: true
purge_tags: purge_tags:
description: description:
@ -77,6 +78,22 @@ EXAMPLES = '''
state: list state: list
register: ec2_tags register: ec2_tags
- name: Remove the Env tag
ec2_tag:
region: eu-west-1
resource: i-xxxxxxxxxxxxxxxxx
tags:
Env:
state: absent
- name: Remove the Env tag if it's currently 'development'
ec2_tag:
region: eu-west-1
resource: i-xxxxxxxxxxxxxxxxx
tags:
Env: development
state: absent
- name: Remove all tags except for Name from an instance - name: Remove all tags except for Name from an instance
ec2_tag: ec2_tag:
region: eu-west-1 region: eu-west-1
@ -149,8 +166,8 @@ def main():
remove_tags = {} remove_tags = {}
if state == 'absent': if state == 'absent':
for key in tags: for key in tags:
if key in current_tags and current_tags[key] == tags[key]: if key in current_tags and (tags[key] is None or current_tags[key] == tags[key]):
remove_tags[key] = tags[key] remove_tags[key] = current_tags[key]
for key in remove: for key in remove:
remove_tags[key] = current_tags[key] remove_tags[key] = current_tags[key]

View file

@ -38,17 +38,47 @@
tags: tags:
foo: foo foo: foo
bar: baz bar: baz
baz: also baz
<<: *aws_connection_info <<: *aws_connection_info
register: result register: result
- assert: - assert:
that: that:
- result is changed - result is changed
- result.tags | length == 3 - result.tags | length == 4
- result.added_tags | length == 2 - result.added_tags | length == 3
- result.tags.Name == '{{ resource_prefix }} ec2_tag volume' - result.tags.Name == '{{ resource_prefix }} ec2_tag volume'
- result.tags.foo == 'foo' - result.tags.foo == 'foo'
- result.tags.bar == 'baz' - result.tags.bar == 'baz'
- result.tags.baz == 'also baz'
- name: Remove a tag by name
ec2_tag:
resource: "{{ volume.volume_id }}"
state: absent
tags:
baz:
<<: *aws_connection_info
register: result
- assert:
that:
- result is changed
- result.removed_tags | length == 1
- "'baz' in result.removed_tags"
- name: Don't remove a tag
ec2_tag:
resource: "{{ volume.volume_id }}"
state: absent
tags:
foo: baz
<<: *aws_connection_info
register: result
- assert:
that:
- result is not changed
- name: Remove a tag - name: Remove a tag
ec2_tag: ec2_tag: