1---
2- name: Registering network name
3  set_fact:
4    nname_1: "{{ name_prefix ~ '-network-1' }}"
5- name: Registering network name
6  set_fact:
7    dnetworks: "{{ dnetworks + [nname_1] }}"
8
9####################################################################
10## internal ########################################################
11####################################################################
12
13- name: internal
14  docker_network:
15    name: "{{ nname_1 }}"
16    internal: yes
17  register: internal_1
18
19- name: internal (idempotency)
20  docker_network:
21    name: "{{ nname_1 }}"
22    internal: yes
23  register: internal_2
24
25- name: internal (change)
26  docker_network:
27    name: "{{ nname_1 }}"
28    internal: no
29  register: internal_3
30
31- name: cleanup
32  docker_network:
33    name: "{{ nname_1 }}"
34    state: absent
35    force: yes
36
37- assert:
38    that:
39    - internal_1 is changed
40    - internal_2 is not changed
41    - internal_3 is changed
42
43####################################################################
44## driver_options ##################################################
45####################################################################
46
47- name: driver_options
48  docker_network:
49    name: "{{ nname_1 }}"
50    driver_options:
51      com.docker.network.bridge.enable_icc: 'false'
52  register: driver_options_1
53
54- name: driver_options (idempotency)
55  docker_network:
56    name: "{{ nname_1 }}"
57    driver_options:
58      com.docker.network.bridge.enable_icc: 'false'
59  register: driver_options_2
60
61- name: driver_options (idempotency with string translation)
62  docker_network:
63    name: "{{ nname_1 }}"
64    driver_options:
65      com.docker.network.bridge.enable_icc: False
66  register: driver_options_3
67
68- name: driver_options (change)
69  docker_network:
70    name: "{{ nname_1 }}"
71    driver_options:
72      com.docker.network.bridge.enable_icc: 'true'
73  register: driver_options_4
74
75- name: driver_options (idempotency with string translation)
76  docker_network:
77    name: "{{ nname_1 }}"
78    driver_options:
79      com.docker.network.bridge.enable_icc: True
80  register: driver_options_5
81
82- name: cleanup
83  docker_network:
84    name: "{{ nname_1 }}"
85    state: absent
86    force: yes
87
88- assert:
89    that:
90    - driver_options_1 is changed
91    - driver_options_2 is not changed
92    - driver_options_3 is not changed
93    - driver_options_4 is changed
94    - driver_options_5 is not changed
95
96####################################################################
97## scope ###########################################################
98####################################################################
99
100- block:
101  - name: scope
102    docker_network:
103      name: "{{ nname_1 }}"
104      driver: bridge
105      scope: local
106    register: scope_1
107
108  - name: scope (idempotency)
109    docker_network:
110      name: "{{ nname_1 }}"
111      driver: bridge
112      scope: local
113    register: scope_2
114
115  - name: swarm
116    docker_swarm:
117      state: present
118      advertise_addr: "{{ansible_default_ipv4.address}}"
119
120  # Driver change alongside scope is intentional - bridge doesn't appear to support anything but local, and overlay can't downgrade to local. Additionally, overlay reports as swarm for swarm OR global, so no change is reported in that case.
121  # Test output indicates that the scope is altered, at least, so manual inspection will be required to verify this going forward, unless we come up with a test driver that supports multiple scopes.
122  - name: scope (change)
123    docker_network:
124      name: "{{ nname_1 }}"
125      driver: overlay
126      scope: swarm
127    register: scope_3
128
129  - name: cleanup network
130    docker_network:
131      name: "{{ nname_1 }}"
132      state: absent
133      force: yes
134
135  - assert:
136      that:
137      - scope_1 is changed
138      - scope_2 is not changed
139      - scope_3 is changed
140
141  always:
142  - name: cleanup swarm
143    docker_swarm:
144      state: absent
145      force: yes
146
147  # Requirements for docker_swarm
148  when: docker_py_version is version('2.6.0', '>=') and docker_api_version is version('1.25', '>=')
149
150####################################################################
151## attachable ######################################################
152####################################################################
153
154- name: attachable
155  docker_network:
156    name: "{{ nname_1 }}"
157    attachable: true
158  register: attachable_1
159  ignore_errors: yes
160
161- name: attachable (idempotency)
162  docker_network:
163    name: "{{ nname_1 }}"
164    attachable: true
165  register: attachable_2
166  ignore_errors: yes
167
168- name: attachable (change)
169  docker_network:
170    name: "{{ nname_1 }}"
171    attachable: false
172  register: attachable_3
173  ignore_errors: yes
174
175- name: cleanup
176  docker_network:
177    name: "{{ nname_1 }}"
178    state: absent
179    force: yes
180
181- assert:
182    that:
183    - attachable_1 is changed
184    - attachable_2 is not changed
185    - attachable_3 is changed
186  when: docker_py_version is version('2.0.0', '>=')
187- assert:
188    that:
189    - attachable_1 is failed
190    - "('version is ' ~ docker_py_version ~ ' ') in attachable_1.msg"
191    - "'Minimum version required is 2.0.0 ' in attachable_1.msg"
192  when: docker_py_version is version('2.0.0', '<')
193
194####################################################################
195## labels ##########################################################
196####################################################################
197
198- name: labels
199  docker_network:
200    name: "{{ nname_1 }}"
201    labels:
202      ansible.test.1: hello
203      ansible.test.2: world
204  register: labels_1
205
206- name: labels (idempotency)
207  docker_network:
208    name: "{{ nname_1 }}"
209    labels:
210      ansible.test.2: world
211      ansible.test.1: hello
212  register: labels_2
213
214- name: labels (less labels)
215  docker_network:
216    name: "{{ nname_1 }}"
217    labels:
218      ansible.test.1: hello
219  register: labels_3
220
221- name: labels (more labels)
222  docker_network:
223    name: "{{ nname_1 }}"
224    labels:
225      ansible.test.1: hello
226      ansible.test.3: ansible
227  register: labels_4
228
229- name: cleanup
230  docker_network:
231    name: "{{ nname_1 }}"
232    state: absent
233    force: yes
234
235- assert:
236    that:
237    - labels_1 is changed
238    - labels_2 is not changed
239    - labels_3 is not changed
240    - labels_4 is changed
241