1---
2- name: 'Run tagging tests'
3  block:
4
5    # ============================================================
6    - name: 'Create simple s3_bucket for testing tagging'
7      s3_bucket:
8        name: '{{ bucket_name }}'
9        state: present
10      register: output
11
12    - assert:
13        that:
14          - output.changed
15          - output.name == '{{ bucket_name }}'
16
17    # ============================================================
18
19    - name: 'Add tags to s3 bucket'
20      s3_bucket:
21        name: '{{ bucket_name }}'
22        state: present
23        tags:
24          example: tag1
25          another: tag2
26      register: output
27
28    - assert:
29        that:
30          - output.changed
31          - output.name == '{{ bucket_name }}'
32          - output.tags.example == 'tag1'
33          - output.tags.another == 'tag2'
34
35    - name: 'Re-Add tags to s3 bucket'
36      s3_bucket:
37        name: '{{ bucket_name }}'
38        state: present
39        tags:
40          example: tag1
41          another: tag2
42      register: output
43
44    - assert:
45        that:
46          - output is not changed
47          - output.name == '{{ bucket_name }}'
48          - output.tags.example == 'tag1'
49          - output.tags.another == 'tag2'
50
51    # ============================================================
52
53    - name: Remove a tag from an s3_bucket
54      s3_bucket:
55        name: '{{ bucket_name }}'
56        state: present
57        tags:
58          example: tag1
59      register: output
60
61    - assert:
62        that:
63          - output.changed
64          - output.name == '{{ bucket_name }}'
65          - output.tags.example == 'tag1'
66          - "'another' not in output.tags"
67
68    - name: Re-remove the tag from an s3_bucket
69      s3_bucket:
70        name: '{{ bucket_name }}'
71        state: present
72        tags:
73          example: tag1
74      register: output
75
76    - assert:
77        that:
78          - output is not changed
79          - output.name == '{{ bucket_name }}'
80          - output.tags.example == 'tag1'
81          - "'another' not in output.tags"
82
83    ## ============================================================
84
85    #- name: 'Pause to help with s3 bucket eventual consistency'
86    #  wait_for:
87    #    timeout: 10
88    #  delegate_to: localhost
89
90    ## ============================================================
91
92    - name: 'Add a tag for s3_bucket with purge_tags False'
93      s3_bucket:
94        name: '{{ bucket_name }}'
95        state: present
96        purge_tags: no
97        tags:
98          anewtag: here
99      register: output
100
101    - assert:
102        that:
103          - output.changed
104          - output.name == '{{ bucket_name }}'
105          - output.tags.example == 'tag1'
106          - output.tags.anewtag == 'here'
107
108    - name: 'Re-add a tag for s3_bucket with purge_tags False'
109      s3_bucket:
110        name: '{{ bucket_name }}'
111        state: present
112        purge_tags: no
113        tags:
114          anewtag: here
115      register: output
116
117    - assert:
118        that:
119          - output is not changed
120          - output.name == '{{ bucket_name }}'
121          - output.tags.example == 'tag1'
122          - output.tags.anewtag == 'here'
123
124    ## ============================================================
125
126    #- name: 'Pause to help with s3 bucket eventual consistency'
127    #  wait_for:
128    #    timeout: 10
129    #  delegate_to: localhost
130
131    ## ============================================================
132
133    - name: Update a tag for s3_bucket with purge_tags False
134      s3_bucket:
135        name: '{{ bucket_name }}'
136        state: present
137        purge_tags: no
138        tags:
139          anewtag: next
140      register: output
141
142    - assert:
143        that:
144          - output.changed
145          - output.name == '{{ bucket_name }}'
146          - output.tags.example == 'tag1'
147          - output.tags.anewtag == 'next'
148
149    - name: Re-update a tag for s3_bucket with purge_tags False
150      s3_bucket:
151        name: '{{ bucket_name }}'
152        state: present
153        purge_tags: no
154        tags:
155          anewtag: next
156      register: output
157
158    - assert:
159        that:
160          - output is not changed
161          - output.name == '{{ bucket_name }}'
162          - output.tags.example == 'tag1'
163          - output.tags.anewtag == 'next'
164
165    ## ============================================================
166
167    #- name: 'Pause to help with s3 bucket eventual consistency'
168    #  wait_for:
169    #    timeout: 10
170    #  delegate_to: localhost
171
172    ## ============================================================
173
174    - name: Pass empty tags dict for s3_bucket with purge_tags False
175      s3_bucket:
176        name: '{{ bucket_name }}'
177        state: present
178        purge_tags: no
179        tags: {}
180      register: output
181
182    - assert:
183        that:
184          - output is not changed
185          - output.name == '{{ bucket_name }}'
186          - output.tags.example == 'tag1'
187          - output.tags.anewtag == 'next'
188
189    ## ============================================================
190
191    #- name: 'Pause to help with s3 bucket eventual consistency'
192    #  wait_for:
193    #    timeout: 10
194    #  delegate_to: localhost
195
196    ## ============================================================
197
198    - name: Do not specify any tag to ensure previous tags are not removed
199      s3_bucket:
200        name: '{{ bucket_name }}'
201        state: present
202      register: output
203
204    - assert:
205        that:
206          - not output.changed
207          - output.name == '{{ bucket_name }}'
208          - output.tags.example == 'tag1'
209
210    # ============================================================
211
212    - name: Remove all tags
213      s3_bucket:
214        name: '{{ bucket_name }}'
215        state: present
216        tags: {}
217      register: output
218
219    - assert:
220        that:
221          - output.changed
222          - output.name == '{{ bucket_name }}'
223          - output.tags == {}
224
225    - name: Re-remove all tags
226      s3_bucket:
227        name: '{{ bucket_name }}'
228        state: present
229        tags: {}
230      register: output
231
232    - assert:
233        that:
234          - output is not changed
235          - output.name == '{{ bucket_name }}'
236          - output.tags == {}
237
238    # ============================================================
239
240    - name: Delete bucket
241      s3_bucket:
242        name: '{{ bucket_name }}'
243        state: absent
244      register: output
245
246    - assert:
247        that:
248          - output.changed
249
250  # ============================================================
251  always:
252    - name: Ensure all buckets are deleted
253      s3_bucket:
254        name: '{{ bucket_name }}'
255        state: absent
256      ignore_errors: yes
257