1---
2
3- name: Registering service name
4  set_fact:
5    service_name: "{{ name_prefix ~ '-options' }}"
6
7- name: Registering service name
8  set_fact:
9    service_names: "{{ service_names + [service_name] }}"
10
11####################################################################
12## args ############################################################
13####################################################################
14
15- name: args
16  docker_swarm_service:
17    name: "{{ service_name }}"
18    image: "{{ docker_test_image_alpine }}"
19    resolve_image: no
20    args:
21      - sleep
22      - "3600"
23  register: args_1
24
25- name: args (idempotency)
26  docker_swarm_service:
27    name: "{{ service_name }}"
28    image: "{{ docker_test_image_alpine }}"
29    resolve_image: no
30    args:
31      - sleep
32      - "3600"
33  register: args_2
34
35- name: args (change)
36  docker_swarm_service:
37    name: "{{ service_name }}"
38    image: "{{ docker_test_image_alpine }}"
39    resolve_image: no
40    args:
41      - sleep
42      - "3400"
43  register: args_3
44
45- name: args (empty)
46  docker_swarm_service:
47    name: "{{ service_name }}"
48    image: "{{ docker_test_image_alpine }}"
49    resolve_image: no
50    args: []
51  register: args_4
52
53- name: args (empty idempotency)
54  docker_swarm_service:
55    name: "{{ service_name }}"
56    image: "{{ docker_test_image_alpine }}"
57    resolve_image: no
58    args: []
59  register: args_5
60
61- name: cleanup
62  docker_swarm_service:
63    name: "{{ service_name }}"
64    state: absent
65  diff: no
66
67- assert:
68    that:
69      - args_1 is changed
70      - args_2 is not changed
71      - args_3 is changed
72      - args_4 is changed
73      - args_5 is not changed
74
75####################################################################
76## command #########################################################
77####################################################################
78
79- name: command
80  docker_swarm_service:
81    name: "{{ service_name }}"
82    image: "{{ docker_test_image_alpine }}"
83    resolve_image: no
84    command: '/bin/sh -v -c "sleep 10m"'
85  register: command_1
86
87- name: command (idempotency)
88  docker_swarm_service:
89    name: "{{ service_name }}"
90    image: "{{ docker_test_image_alpine }}"
91    resolve_image: no
92    command: '/bin/sh -v -c "sleep 10m"'
93  register: command_2
94
95- name: command (less parameters)
96  docker_swarm_service:
97    name: "{{ service_name }}"
98    image: "{{ docker_test_image_alpine }}"
99    resolve_image: no
100    command: '/bin/sh -c "sleep 10m"'
101  register: command_3
102
103- name: command (as list)
104  docker_swarm_service:
105    name: "{{ service_name }}"
106    image: "{{ docker_test_image_alpine }}"
107    resolve_image: no
108    command:
109      - "/bin/sh"
110      - "-c"
111      - "sleep 10m"
112  register: command_4
113
114- name: command (empty)
115  docker_swarm_service:
116    name: "{{ service_name }}"
117    image: "{{ docker_test_image_alpine }}"
118    resolve_image: no
119    command: []
120  register: command_5
121
122- name: command (empty idempotency)
123  docker_swarm_service:
124    name: "{{ service_name }}"
125    image: "{{ docker_test_image_alpine }}"
126    resolve_image: no
127    command: []
128  register: command_6
129
130- name: command (string failure)
131  docker_swarm_service:
132    name: "{{ service_name }}"
133    image: "{{ docker_test_image_alpine }}"
134    resolve_image: no
135    command: yes
136  register: command_7
137  ignore_errors: yes
138
139- name: command (list failure)
140  docker_swarm_service:
141    name: "{{ service_name }}"
142    image: "{{ docker_test_image_alpine }}"
143    resolve_image: no
144    command:
145      - "/bin/sh"
146      - yes
147  register: command_8
148  ignore_errors: yes
149
150- name: cleanup
151  docker_swarm_service:
152    name: "{{ service_name }}"
153    state: absent
154  diff: no
155
156- assert:
157    that:
158      - command_1 is changed
159      - command_2 is not changed
160      - command_3 is changed
161      - command_4 is not changed
162      - command_5 is changed
163      - command_6 is not changed
164      - command_7 is failed
165      - command_8 is failed
166
167####################################################################
168## container_labels ################################################
169####################################################################
170
171- name: container_labels
172  docker_swarm_service:
173    name: "{{ service_name }}"
174    image: "{{ docker_test_image_alpine }}"
175    resolve_image: no
176    command: '/bin/sh -v -c "sleep 10m"'
177    container_labels:
178      test_1: "1"
179      test_2: "2"
180  register: container_labels_1
181
182- name: container_labels (idempotency)
183  docker_swarm_service:
184    name: "{{ service_name }}"
185    image: "{{ docker_test_image_alpine }}"
186    resolve_image: no
187    command: '/bin/sh -v -c "sleep 10m"'
188    container_labels:
189      test_1: "1"
190      test_2: "2"
191  register: container_labels_2
192
193- name: container_labels (change)
194  docker_swarm_service:
195    name: "{{ service_name }}"
196    image: "{{ docker_test_image_alpine }}"
197    resolve_image: no
198    command: '/bin/sh -v -c "sleep 10m"'
199    container_labels:
200      test_1: "1"
201      test_2: "3"
202  register: container_labels_3
203
204- name: container_labels (empty)
205  docker_swarm_service:
206    name: "{{ service_name }}"
207    image: "{{ docker_test_image_alpine }}"
208    resolve_image: no
209    command: '/bin/sh -v -c "sleep 10m"'
210    container_labels: {}
211  register: container_labels_4
212
213- name: container_labels (empty idempotency)
214  docker_swarm_service:
215    name: "{{ service_name }}"
216    image: "{{ docker_test_image_alpine }}"
217    resolve_image: no
218    command: '/bin/sh -v -c "sleep 10m"'
219    container_labels: {}
220  register: container_labels_5
221
222- name: cleanup
223  docker_swarm_service:
224    name: "{{ service_name }}"
225    state: absent
226  diff: no
227
228- assert:
229    that:
230      - container_labels_1 is changed
231      - container_labels_2 is not changed
232      - container_labels_3 is changed
233      - container_labels_4 is changed
234      - container_labels_5 is not changed
235
236####################################################################
237## dns #############################################################
238####################################################################
239
240- name: dns
241  docker_swarm_service:
242    name: "{{ service_name }}"
243    image: "{{ docker_test_image_alpine }}"
244    resolve_image: no
245    command: '/bin/sh -v -c "sleep 10m"'
246    dns:
247      - 1.1.1.1
248      - 8.8.8.8
249  register: dns_1
250  ignore_errors: yes
251
252- name: dns (idempotency)
253  docker_swarm_service:
254    name: "{{ service_name }}"
255    image: "{{ docker_test_image_alpine }}"
256    resolve_image: no
257    command: '/bin/sh -v -c "sleep 10m"'
258    dns:
259      - 1.1.1.1
260      - 8.8.8.8
261  register: dns_2
262  ignore_errors: yes
263
264- name: dns_servers (changed order)
265  docker_swarm_service:
266    name: "{{ service_name }}"
267    image: "{{ docker_test_image_alpine }}"
268    resolve_image: no
269    command: '/bin/sh -v -c "sleep 10m"'
270    dns:
271      - 8.8.8.8
272      - 1.1.1.1
273  register: dns_3
274  ignore_errors: yes
275
276- name: dns_servers (changed elements)
277  docker_swarm_service:
278    name: "{{ service_name }}"
279    image: "{{ docker_test_image_alpine }}"
280    resolve_image: no
281    command: '/bin/sh -v -c "sleep 10m"'
282    dns:
283      - 8.8.8.8
284      - 9.9.9.9
285  register: dns_4
286  ignore_errors: yes
287
288- name: dns_servers (empty)
289  docker_swarm_service:
290    name: "{{ service_name }}"
291    image: "{{ docker_test_image_alpine }}"
292    resolve_image: no
293    command: '/bin/sh -v -c "sleep 10m"'
294    dns: []
295  register: dns_5
296  ignore_errors: yes
297
298- name: dns_servers (empty idempotency)
299  docker_swarm_service:
300    name: "{{ service_name }}"
301    image: "{{ docker_test_image_alpine }}"
302    resolve_image: no
303    command: '/bin/sh -v -c "sleep 10m"'
304    dns: []
305  register: dns_6
306  ignore_errors: yes
307
308- name: cleanup
309  docker_swarm_service:
310    name: "{{ service_name }}"
311    state: absent
312  diff: no
313
314- assert:
315    that:
316      - dns_1 is changed
317      - dns_2 is not changed
318      - dns_3 is changed
319      - dns_4 is changed
320      - dns_5 is changed
321      - dns_6 is not changed
322  when: docker_api_version is version('1.25', '>=') and docker_py_version is version('2.6.0', '>=')
323- assert:
324    that:
325    - dns_1 is failed
326    - "'Minimum version required' in dns_1.msg"
327  when: docker_api_version is version('1.25', '<') or docker_py_version is version('2.6.0', '<')
328
329####################################################################
330## dns_options #####################################################
331####################################################################
332
333- name: dns_options
334  docker_swarm_service:
335    name: "{{ service_name }}"
336    image: "{{ docker_test_image_alpine }}"
337    resolve_image: no
338    command: '/bin/sh -v -c "sleep 10m"'
339    dns_options:
340      - "timeout:10"
341      - rotate
342  register: dns_options_1
343  ignore_errors: yes
344
345- name: dns_options (idempotency)
346  docker_swarm_service:
347    name: "{{ service_name }}"
348    image: "{{ docker_test_image_alpine }}"
349    resolve_image: no
350    command: '/bin/sh -v -c "sleep 10m"'
351    dns_options:
352      - "timeout:10"
353      - rotate
354  register: dns_options_2
355  ignore_errors: yes
356
357- name: dns_options (change)
358  docker_swarm_service:
359    name: "{{ service_name }}"
360    image: "{{ docker_test_image_alpine }}"
361    resolve_image: no
362    command: '/bin/sh -v -c "sleep 10m"'
363    dns_options:
364      - "timeout:10"
365      - no-check-names
366  register: dns_options_3
367  ignore_errors: yes
368
369- name: dns_options (order idempotency)
370  docker_swarm_service:
371    name: "{{ service_name }}"
372    image: "{{ docker_test_image_alpine }}"
373    resolve_image: no
374    command: '/bin/sh -v -c "sleep 10m"'
375    dns_options:
376      - no-check-names
377      - "timeout:10"
378  register: dns_options_4
379  ignore_errors: yes
380
381- name: dns_options (empty)
382  docker_swarm_service:
383    name: "{{ service_name }}"
384    image: "{{ docker_test_image_alpine }}"
385    resolve_image: no
386    command: '/bin/sh -v -c "sleep 10m"'
387    dns_options: []
388  register: dns_options_5
389  ignore_errors: yes
390
391- name: dns_options (empty idempotency)
392  docker_swarm_service:
393    name: "{{ service_name }}"
394    image: "{{ docker_test_image_alpine }}"
395    resolve_image: no
396    command: '/bin/sh -v -c "sleep 10m"'
397    dns_options: []
398  register: dns_options_6
399  ignore_errors: yes
400
401- name: cleanup
402  docker_swarm_service:
403    name: "{{ service_name }}"
404    state: absent
405  diff: no
406
407- assert:
408    that:
409      - dns_options_1 is changed
410      - dns_options_2 is not changed
411      - dns_options_3 is changed
412      - dns_options_4 is not changed
413      - dns_options_5 is changed
414      - dns_options_6 is not changed
415  when: docker_api_version is version('1.25', '>=') and docker_py_version is version('2.6.0', '>=')
416- assert:
417    that:
418    - dns_options_1 is failed
419    - "'Minimum version required' in dns_options_1.msg"
420  when: docker_api_version is version('1.25', '<') or docker_py_version is version('2.6.0', '<')
421
422####################################################################
423## dns_search ######################################################
424####################################################################
425
426- name: dns_search
427  docker_swarm_service:
428    name: "{{ service_name }}"
429    image: "{{ docker_test_image_alpine }}"
430    resolve_image: no
431    command: '/bin/sh -v -c "sleep 10m"'
432    dns_search:
433      - example.com
434      - example.org
435  register: dns_search_1
436  ignore_errors: yes
437
438- name: dns_search (idempotency)
439  docker_swarm_service:
440    name: "{{ service_name }}"
441    image: "{{ docker_test_image_alpine }}"
442    resolve_image: no
443    command: '/bin/sh -v -c "sleep 10m"'
444    dns_search:
445      - example.com
446      - example.org
447  register: dns_search_2
448  ignore_errors: yes
449
450- name: dns_search (different order)
451  docker_swarm_service:
452    name: "{{ service_name }}"
453    image: "{{ docker_test_image_alpine }}"
454    resolve_image: no
455    command: '/bin/sh -v -c "sleep 10m"'
456    dns_search:
457      - example.org
458      - example.com
459  register: dns_search_3
460  ignore_errors: yes
461
462- name: dns_search (changed elements)
463  docker_swarm_service:
464    name: "{{ service_name }}"
465    image: "{{ docker_test_image_alpine }}"
466    resolve_image: no
467    command: '/bin/sh -v -c "sleep 10m"'
468    dns_search:
469      - ansible.com
470      - example.com
471  register: dns_search_4
472  ignore_errors: yes
473
474- name: dns_search (empty)
475  docker_swarm_service:
476    name: "{{ service_name }}"
477    image: "{{ docker_test_image_alpine }}"
478    resolve_image: no
479    command: '/bin/sh -v -c "sleep 10m"'
480    dns_search: []
481  register: dns_search_5
482  ignore_errors: yes
483
484- name: dns_search (empty idempotency)
485  docker_swarm_service:
486    name: "{{ service_name }}"
487    image: "{{ docker_test_image_alpine }}"
488    resolve_image: no
489    command: '/bin/sh -v -c "sleep 10m"'
490    dns_search: []
491  register: dns_search_6
492  ignore_errors: yes
493
494- name: cleanup
495  docker_swarm_service:
496    name: "{{ service_name }}"
497    state: absent
498  diff: no
499
500- assert:
501    that:
502      - dns_search_1 is changed
503      - dns_search_2 is not changed
504      - dns_search_3 is changed
505      - dns_search_4 is changed
506      - dns_search_5 is changed
507      - dns_search_6 is not changed
508  when: docker_api_version is version('1.25', '>=') and docker_py_version is version('2.6.0', '>=')
509- assert:
510    that:
511    - dns_search_1 is failed
512    - "'Minimum version required' in dns_search_1.msg"
513  when: docker_api_version is version('1.25', '<') or docker_py_version is version('2.6.0', '<')
514
515####################################################################
516## endpoint_mode ###################################################
517####################################################################
518
519- name: endpoint_mode
520  docker_swarm_service:
521    name: "{{ service_name }}"
522    image: "{{ docker_test_image_alpine }}"
523    resolve_image: no
524    command: '/bin/sh -v -c "sleep 10m"'
525    endpoint_mode: "dnsrr"
526  register: endpoint_mode_1
527  ignore_errors: yes
528
529- name: endpoint_mode (idempotency)
530  docker_swarm_service:
531    name: "{{ service_name }}"
532    image: "{{ docker_test_image_alpine }}"
533    resolve_image: no
534    command: '/bin/sh -v -c "sleep 10m"'
535    endpoint_mode: "dnsrr"
536  register: endpoint_mode_2
537  ignore_errors: yes
538
539- name: endpoint_mode (changes)
540  docker_swarm_service:
541    name: "{{ service_name }}"
542    image: "{{ docker_test_image_alpine }}"
543    resolve_image: no
544    command: '/bin/sh -v -c "sleep 10m"'
545    endpoint_mode: "vip"
546  register: endpoint_mode_3
547  ignore_errors: yes
548
549- name: cleanup
550  docker_swarm_service:
551    name: "{{ service_name }}"
552    state: absent
553  diff: no
554
555- assert:
556    that:
557      - endpoint_mode_1 is changed
558      - endpoint_mode_2 is not changed
559      - endpoint_mode_3 is changed
560  when: docker_api_version is version('1.25', '>=') and docker_py_version is version('3.0.0', '>=')
561- assert:
562    that:
563    - endpoint_mode_1 is failed
564    - "'Minimum version required' in endpoint_mode_1.msg"
565  when: docker_api_version is version('1.25', '<') or docker_py_version is version('3.0.0', '<')
566
567####################################################################
568## env #############################################################
569####################################################################
570
571- name: env
572  docker_swarm_service:
573    name: "{{ service_name }}"
574    image: "{{ docker_test_image_alpine }}"
575    resolve_image: no
576    command: '/bin/sh -v -c "sleep 10m"'
577    env:
578      - "TEST1=val1"
579      - "TEST2=val2"
580  register: env_1
581
582- name: env (idempotency)
583  docker_swarm_service:
584    name: "{{ service_name }}"
585    image: "{{ docker_test_image_alpine }}"
586    resolve_image: no
587    command: '/bin/sh -v -c "sleep 10m"'
588    env:
589      TEST1: val1
590      TEST2: val2
591  register: env_2
592
593- name: env (changes)
594  docker_swarm_service:
595    name: "{{ service_name }}"
596    image: "{{ docker_test_image_alpine }}"
597    resolve_image: no
598    command: '/bin/sh -v -c "sleep 10m"'
599    env:
600      - "TEST1=val1"
601      - "TEST2=val3"
602  register: env_3
603
604- name: env (order idempotency)
605  docker_swarm_service:
606    name: "{{ service_name }}"
607    image: "{{ docker_test_image_alpine }}"
608    resolve_image: no
609    command: '/bin/sh -v -c "sleep 10m"'
610    env:
611      - "TEST2=val3"
612      - "TEST1=val1"
613  register: env_4
614
615- name: env (empty)
616  docker_swarm_service:
617    name: "{{ service_name }}"
618    image: "{{ docker_test_image_alpine }}"
619    resolve_image: no
620    command: '/bin/sh -v -c "sleep 10m"'
621    env: []
622  register: env_5
623
624- name: env (empty idempotency)
625  docker_swarm_service:
626    name: "{{ service_name }}"
627    image: "{{ docker_test_image_alpine }}"
628    resolve_image: no
629    command: '/bin/sh -v -c "sleep 10m"'
630    env: []
631  register: env_6
632
633- name: env (fail unwrapped values)
634  docker_swarm_service:
635    name: "{{ service_name }}"
636    image: "{{ docker_test_image_alpine }}"
637    resolve_image: no
638    env:
639      TEST1: true
640  register: env_7
641  ignore_errors: yes
642
643- name: env (fail invalid formatted string)
644  docker_swarm_service:
645    name: "{{ service_name }}"
646    image: "{{ docker_test_image_alpine }}"
647    resolve_image: no
648    env:
649      - "TEST1=val3"
650      - "TEST2"
651  register: env_8
652  ignore_errors: yes
653
654- name: cleanup
655  docker_swarm_service:
656    name: "{{ service_name }}"
657    state: absent
658  diff: no
659
660- assert:
661    that:
662      - env_1 is changed
663      - env_2 is not changed
664      - env_3 is changed
665      - env_4 is not changed
666      - env_5 is changed
667      - env_6 is not changed
668      - env_7 is failed
669      - env_8 is failed
670
671####################################################################
672## env_files #######################################################
673####################################################################
674
675- name: Copy env-files
676  copy:
677    src: "{{ item }}"
678    dest: "{{ remote_tmp_dir }}/{{ item }}"
679  loop:
680    - env-file-1
681    - env-file-2
682
683- name: env_files
684  docker_swarm_service:
685    name: "{{ service_name }}"
686    image: "{{ docker_test_image_alpine }}"
687    resolve_image: no
688    env_files:
689      - "{{ remote_tmp_dir }}/env-file-1"
690  register: env_file_1
691
692- name: env_files (idempotency)
693  docker_swarm_service:
694    name: "{{ service_name }}"
695    image: "{{ docker_test_image_alpine }}"
696    resolve_image: no
697    env_files:
698      - "{{ remote_tmp_dir }}/env-file-1"
699  register: env_file_2
700
701- name: env_files (more items)
702  docker_swarm_service:
703    name: "{{ service_name }}"
704    image: "{{ docker_test_image_alpine }}"
705    resolve_image: no
706    env_files:
707      - "{{ remote_tmp_dir }}/env-file-1"
708      - "{{ remote_tmp_dir }}/env-file-2"
709  register: env_file_3
710
711- name: env_files (order)
712  docker_swarm_service:
713    name: "{{ service_name }}"
714    image: "{{ docker_test_image_alpine }}"
715    resolve_image: no
716    env_files:
717      - "{{ remote_tmp_dir }}/env-file-2"
718      - "{{ remote_tmp_dir }}/env-file-1"
719  register: env_file_4
720
721- name: env_files (multiple idempotency)
722  docker_swarm_service:
723    name: "{{ service_name }}"
724    image: "{{ docker_test_image_alpine }}"
725    resolve_image: no
726    env_files:
727      - "{{ remote_tmp_dir }}/env-file-2"
728      - "{{ remote_tmp_dir }}/env-file-1"
729  register: env_file_5
730
731- name: env_files (empty)
732  docker_swarm_service:
733    name: "{{ service_name }}"
734    image: "{{ docker_test_image_alpine }}"
735    resolve_image: no
736    env_files: []
737  register: env_file_6
738
739- name: env_files (empty idempotency)
740  docker_swarm_service:
741    name: "{{ service_name }}"
742    image: "{{ docker_test_image_alpine }}"
743    resolve_image: no
744    env_files: []
745  register: env_file_7
746
747- name: cleanup
748  docker_swarm_service:
749    name: "{{ service_name }}"
750    state: absent
751  diff: no
752
753- assert:
754    that:
755    - env_file_1 is changed
756    - env_file_2 is not changed
757    - env_file_3 is changed
758    - env_file_4 is changed
759    - env_file_5 is not changed
760    - env_file_6 is changed
761    - env_file_7 is not changed
762
763###################################################################
764## force_update ###################################################
765###################################################################
766
767- name: force_update
768  docker_swarm_service:
769    name: "{{ service_name }}"
770    image: "{{ docker_test_image_alpine }}"
771    resolve_image: no
772    command: '/bin/sh -v -c "sleep 10m"'
773    args:
774      - sleep
775      - "3600"
776    force_update: yes
777  register: force_update_1
778  ignore_errors: yes
779
780- name: force_update (idempotency)
781  docker_swarm_service:
782    name: "{{ service_name }}"
783    image: "{{ docker_test_image_alpine }}"
784    resolve_image: no
785    command: '/bin/sh -v -c "sleep 10m"'
786    args:
787      - sleep
788      - "3600"
789    force_update: yes
790  register: force_update_2
791  ignore_errors: yes
792
793- name: cleanup
794  docker_swarm_service:
795    name: "{{ service_name }}"
796    state: absent
797  diff: no
798
799- assert:
800    that:
801      - force_update_1 is changed
802      - force_update_2 is changed
803  when: docker_api_version is version('1.25', '>=') and docker_py_version is version('2.1.0', '>=')
804- assert:
805    that:
806    - force_update_1 is failed
807    - "'Minimum version required' in force_update_1.msg"
808  when: docker_api_version is version('1.25', '<') or docker_py_version is version('2.1.0', '<')
809
810####################################################################
811## groups ##########################################################
812####################################################################
813
814- name: groups
815  docker_swarm_service:
816    name: "{{ service_name }}"
817    image: "{{ docker_test_image_alpine }}"
818    resolve_image: no
819    command: '/bin/sh -v -c "sleep 10m"'
820    groups:
821      - "1234"
822      - "5678"
823  register: groups_1
824  ignore_errors: yes
825
826- name: groups (idempotency)
827  docker_swarm_service:
828    name: "{{ service_name }}"
829    image: "{{ docker_test_image_alpine }}"
830    resolve_image: no
831    command: '/bin/sh -v -c "sleep 10m"'
832    groups:
833      - "1234"
834      - "5678"
835  register: groups_2
836  ignore_errors: yes
837
838- name: groups (order idempotency)
839  docker_swarm_service:
840    name: "{{ service_name }}"
841    image: "{{ docker_test_image_alpine }}"
842    resolve_image: no
843    command: '/bin/sh -v -c "sleep 10m"'
844    groups:
845      - "5678"
846      - "1234"
847  register: groups_3
848  ignore_errors: yes
849
850- name: groups (change)
851  docker_swarm_service:
852    name: "{{ service_name }}"
853    image: "{{ docker_test_image_alpine }}"
854    resolve_image: no
855    command: '/bin/sh -v -c "sleep 10m"'
856    groups:
857      - "1234"
858  register: groups_4
859  ignore_errors: yes
860
861- name: groups (empty)
862  docker_swarm_service:
863    name: "{{ service_name }}"
864    image: "{{ docker_test_image_alpine }}"
865    resolve_image: no
866    command: '/bin/sh -v -c "sleep 10m"'
867    groups: []
868  register: groups_5
869  ignore_errors: yes
870
871- name: groups (empty idempotency)
872  docker_swarm_service:
873    name: "{{ service_name }}"
874    image: "{{ docker_test_image_alpine }}"
875    resolve_image: no
876    command: '/bin/sh -v -c "sleep 10m"'
877    groups: []
878  register: groups_6
879  ignore_errors: yes
880
881- name: cleanup
882  docker_swarm_service:
883    name: "{{ service_name }}"
884    state: absent
885  diff: no
886
887- assert:
888    that:
889    - groups_1 is changed
890    - groups_2 is not changed
891    - groups_3 is not changed
892    - groups_4 is changed
893    - groups_5 is changed
894    - groups_6 is not changed
895  when: docker_api_version is version('1.25', '>=') and docker_py_version is version('2.6.0', '>=')
896- assert:
897    that:
898    - groups_1 is failed
899    - "'Minimum version required' in groups_1.msg"
900  when: docker_api_version is version('1.25', '<') or docker_py_version is version('2.6.0', '<')
901
902####################################################################
903## healthcheck #####################################################
904####################################################################
905
906- name: healthcheck
907  docker_swarm_service:
908    name: "{{ service_name }}"
909    image: "{{ docker_test_image_alpine }}"
910    resolve_image: no
911    command: '/bin/sh -v -c "sleep 10m"'
912    healthcheck:
913      test:
914        - CMD
915        - sleep
916        - "1"
917      timeout: 2s
918      interval: 0h0m2s3ms4us
919      retries: 2
920      start_period: 20s
921  register: healthcheck_1
922  ignore_errors: yes
923
924- name: healthcheck (idempotency)
925  docker_swarm_service:
926    name: "{{ service_name }}"
927    image: "{{ docker_test_image_alpine }}"
928    resolve_image: no
929    command: '/bin/sh -v -c "sleep 10m"'
930    healthcheck:
931      test:
932        - CMD
933        - sleep
934        - 1
935      timeout: 2s
936      interval: 0h0m2s3ms4us
937      retries: 2
938      start_period: 20s
939  register: healthcheck_2
940  ignore_errors: yes
941
942- name: healthcheck (changed)
943  docker_swarm_service:
944    name: "{{ service_name }}"
945    image: "{{ docker_test_image_alpine }}"
946    resolve_image: no
947    command: '/bin/sh -v -c "sleep 10m"'
948    healthcheck:
949      test:
950        - CMD
951        - sleep
952        - "1"
953      timeout: 3s
954      interval: 0h1m2s3ms4us
955      retries: 3
956  register: healthcheck_3
957  ignore_errors: yes
958
959- name: healthcheck (disabled)
960  docker_swarm_service:
961    name: "{{ service_name }}"
962    image: "{{ docker_test_image_alpine }}"
963    resolve_image: no
964    command: '/bin/sh -v -c "sleep 10m"'
965    healthcheck:
966      test:
967        - NONE
968  register: healthcheck_4
969  ignore_errors: yes
970
971- name: healthcheck (disabled, idempotency)
972  docker_swarm_service:
973    name: "{{ service_name }}"
974    image: "{{ docker_test_image_alpine }}"
975    resolve_image: no
976    command: '/bin/sh -v -c "sleep 10m"'
977    healthcheck:
978      test:
979        - NONE
980  register: healthcheck_5
981  ignore_errors: yes
982
983- name: healthcheck (string in healthcheck test, changed)
984  docker_swarm_service:
985    name: "{{ service_name }}"
986    image: "{{ docker_test_image_alpine }}"
987    resolve_image: no
988    command: '/bin/sh -v -c "sleep 10m"'
989    healthcheck:
990      test: "sleep 1"
991  register: healthcheck_6
992  ignore_errors: yes
993
994- name: healthcheck (string in healthcheck test, idempotency)
995  docker_swarm_service:
996    name: "{{ service_name }}"
997    image: "{{ docker_test_image_alpine }}"
998    resolve_image: no
999    command: '/bin/sh -v -c "sleep 10m"'
1000    healthcheck:
1001      test: "sleep 1"
1002  register: healthcheck_7
1003  ignore_errors: yes
1004
1005- name: healthcheck (empty)
1006  docker_swarm_service:
1007    name: "{{ service_name }}"
1008    image: "{{ docker_test_image_alpine }}"
1009    resolve_image: no
1010    command: '/bin/sh -v -c "sleep 10m"'
1011    healthcheck: {}
1012  register: healthcheck_8
1013  ignore_errors: yes
1014
1015- name: healthcheck (empty idempotency)
1016  docker_swarm_service:
1017    name: "{{ service_name }}"
1018    image: "{{ docker_test_image_alpine }}"
1019    resolve_image: no
1020    command: '/bin/sh -v -c "sleep 10m"'
1021    healthcheck: {}
1022  register: healthcheck_9
1023  ignore_errors: yes
1024
1025- name: cleanup
1026  docker_swarm_service:
1027    name: "{{ service_name }}"
1028    state: absent
1029  diff: no
1030
1031- assert:
1032    that:
1033    - healthcheck_1 is changed
1034    - healthcheck_2 is not changed
1035    - healthcheck_3 is changed
1036    - healthcheck_4 is changed
1037    - healthcheck_5 is not changed
1038    - healthcheck_6 is changed
1039    - healthcheck_7 is not changed
1040    - healthcheck_8 is changed
1041    - healthcheck_9 is not changed
1042  when: docker_api_version is version('1.29', '>=') and docker_py_version is version('2.6.0', '>=')
1043- assert:
1044    that:
1045    - healthcheck_1 is failed
1046    - "'Minimum version required' in healthcheck_1.msg"
1047  when: docker_api_version is version('1.29', '<') or docker_py_version is version('2.6.0', '<')
1048
1049###################################################################
1050## hostname #######################################################
1051###################################################################
1052
1053- name: hostname
1054  docker_swarm_service:
1055    name: "{{ service_name }}"
1056    image: "{{ docker_test_image_alpine }}"
1057    resolve_image: no
1058    command: '/bin/sh -v -c "sleep 10m"'
1059    hostname: me.example.com
1060  register: hostname_1
1061  ignore_errors: yes
1062
1063- name: hostname (idempotency)
1064  docker_swarm_service:
1065    name: "{{ service_name }}"
1066    image: "{{ docker_test_image_alpine }}"
1067    resolve_image: no
1068    command: '/bin/sh -v -c "sleep 10m"'
1069    hostname: me.example.com
1070  register: hostname_2
1071  ignore_errors: yes
1072
1073- name: hostname (change)
1074  docker_swarm_service:
1075    name: "{{ service_name }}"
1076    image: "{{ docker_test_image_alpine }}"
1077    resolve_image: no
1078    command: '/bin/sh -v -c "sleep 10m"'
1079    hostname: me.example.org
1080  register: hostname_3
1081  ignore_errors: yes
1082
1083- name: cleanup
1084  docker_swarm_service:
1085    name: "{{ service_name }}"
1086    state: absent
1087  diff: no
1088
1089- assert:
1090    that:
1091      - hostname_1 is changed
1092      - hostname_2 is not changed
1093      - hostname_3 is changed
1094  when: docker_api_version is version('1.25', '>=') and docker_py_version is version('2.2.0', '>=')
1095- assert:
1096    that:
1097    - hostname_1 is failed
1098    - "'Minimum version required' in hostname_1.msg"
1099  when: docker_api_version is version('1.25', '<') or docker_py_version is version('2.2.0', '<')
1100
1101###################################################################
1102## hosts ##########################################################
1103###################################################################
1104
1105- name: hosts
1106  docker_swarm_service:
1107    name: "{{ service_name }}"
1108    image: "{{ docker_test_image_alpine }}"
1109    resolve_image: no
1110    command: '/bin/sh -v -c "sleep 10m"'
1111    hosts:
1112      example.com: 1.2.3.4
1113      example.org: 4.3.2.1
1114  register: hosts_1
1115  ignore_errors: yes
1116
1117- name: hosts (idempotency)
1118  docker_swarm_service:
1119    name: "{{ service_name }}"
1120    image: "{{ docker_test_image_alpine }}"
1121    resolve_image: no
1122    command: '/bin/sh -v -c "sleep 10m"'
1123    hosts:
1124      example.com: 1.2.3.4
1125      example.org: 4.3.2.1
1126  register: hosts_2
1127  ignore_errors: yes
1128
1129- name: hosts (change)
1130  docker_swarm_service:
1131    name: "{{ service_name }}"
1132    image: "{{ docker_test_image_alpine }}"
1133    resolve_image: no
1134    command: '/bin/sh -v -c "sleep 10m"'
1135    hosts:
1136      example.com: 1.2.3.4
1137  register: hosts_3
1138  ignore_errors: yes
1139
1140- name: cleanup
1141  docker_swarm_service:
1142    name: "{{ service_name }}"
1143    state: absent
1144  diff: no
1145
1146- assert:
1147    that:
1148      - hosts_1 is changed
1149      - hosts_2 is not changed
1150      - hosts_3 is changed
1151  when: docker_api_version is version('1.25', '>=') and docker_py_version is version('2.6.0', '>=')
1152- assert:
1153    that:
1154    - hosts_1 is failed
1155    - "'Minimum version required' in hosts_1.msg"
1156  when: docker_api_version is version('1.25', '<') or docker_py_version is version('2.6.0', '<')
1157
1158
1159###################################################################
1160## image ##########################################################
1161###################################################################
1162
1163- name: image
1164  docker_swarm_service:
1165    name: "{{ service_name }}"
1166    image: "{{ docker_test_image_alpine }}"
1167    resolve_image: no
1168    command: '/bin/sh -v -c "sleep 10m"'
1169  register: image_1
1170
1171- name: image (idempotency)
1172  docker_swarm_service:
1173    name: "{{ service_name }}"
1174    image: "{{ docker_test_image_alpine }}"
1175    resolve_image: no
1176    command: '/bin/sh -v -c "sleep 10m"'
1177  register: image_2
1178
1179- name: image (change)
1180  docker_swarm_service:
1181    name: "{{ service_name }}"
1182    image: "{{ docker_test_image_alpine_different }}"
1183  register: image_3
1184
1185- name: cleanup
1186  docker_swarm_service:
1187    name: "{{ service_name }}"
1188    state: absent
1189  diff: no
1190
1191- assert:
1192    that:
1193      - image_1 is changed
1194      - image_2 is not changed
1195      - image_3 is changed
1196
1197####################################################################
1198## labels ##########################################################
1199####################################################################
1200
1201- name: labels
1202  docker_swarm_service:
1203    name: "{{ service_name }}"
1204    image: "{{ docker_test_image_alpine }}"
1205    resolve_image: no
1206    command: '/bin/sh -v -c "sleep 10m"'
1207    labels:
1208      test_1: "1"
1209      test_2: "2"
1210  register: labels_1
1211
1212- name: labels (idempotency)
1213  docker_swarm_service:
1214    name: "{{ service_name }}"
1215    image: "{{ docker_test_image_alpine }}"
1216    resolve_image: no
1217    command: '/bin/sh -v -c "sleep 10m"'
1218    labels:
1219      test_1: "1"
1220      test_2: "2"
1221  register: labels_2
1222
1223- name: labels (changes)
1224  docker_swarm_service:
1225    name: "{{ service_name }}"
1226    image: "{{ docker_test_image_alpine }}"
1227    resolve_image: no
1228    command: '/bin/sh -v -c "sleep 10m"'
1229    labels:
1230      test_1: "1"
1231      test_2: "2"
1232      test_3: "3"
1233  register: labels_3
1234
1235- name: labels (empty)
1236  docker_swarm_service:
1237    name: "{{ service_name }}"
1238    image: "{{ docker_test_image_alpine }}"
1239    resolve_image: no
1240    command: '/bin/sh -v -c "sleep 10m"'
1241    labels: {}
1242  register: labels_4
1243
1244- name: labels (empty idempotency)
1245  docker_swarm_service:
1246    name: "{{ service_name }}"
1247    image: "{{ docker_test_image_alpine }}"
1248    resolve_image: no
1249    command: '/bin/sh -v -c "sleep 10m"'
1250    labels: {}
1251  register: labels_5
1252
1253- name: cleanup
1254  docker_swarm_service:
1255    name: "{{ service_name }}"
1256    state: absent
1257  diff: no
1258
1259- assert:
1260    that:
1261      - labels_1 is changed
1262      - labels_2 is not changed
1263      - labels_3 is changed
1264      - labels_4 is changed
1265      - labels_5 is not changed
1266
1267###################################################################
1268## mode ###########################################################
1269###################################################################
1270
1271- name: mode
1272  docker_swarm_service:
1273    name: "{{ service_name }}"
1274    image: "{{ docker_test_image_alpine }}"
1275    resolve_image: no
1276    command: '/bin/sh -v -c "sleep 10m"'
1277    mode: "replicated"
1278    replicas: 1
1279  register: mode_1
1280
1281- name: mode (idempotency)
1282  docker_swarm_service:
1283    name: "{{ service_name }}"
1284    image: "{{ docker_test_image_alpine }}"
1285    resolve_image: no
1286    command: '/bin/sh -v -c "sleep 10m"'
1287    mode: "replicated"
1288    replicas: 1
1289  register: mode_2
1290
1291- name: mode (change)
1292  docker_swarm_service:
1293    name: "{{ service_name }}"
1294    image: "{{ docker_test_image_alpine }}"
1295    resolve_image: no
1296    command: '/bin/sh -v -c "sleep 10m"'
1297    mode: "global"
1298    replicas: 1
1299  register: mode_3
1300
1301- name: cleanup
1302  docker_swarm_service:
1303    name: "{{ service_name }}"
1304    state: absent
1305  diff: no
1306
1307- assert:
1308    that:
1309      - mode_1 is changed
1310      - mode_2 is not changed
1311      - mode_3 is changed
1312
1313####################################################################
1314## stop_grace_period ###############################################
1315####################################################################
1316
1317- name: stop_grace_period
1318  docker_swarm_service:
1319    name: "{{ service_name }}"
1320    image: "{{ docker_test_image_alpine }}"
1321    resolve_image: no
1322    command: '/bin/sh -v -c "sleep 10m"'
1323    stop_grace_period: 60s
1324  register: stop_grace_period_1
1325
1326- name: stop_grace_period (idempotency)
1327  docker_swarm_service:
1328    name: "{{ service_name }}"
1329    image: "{{ docker_test_image_alpine }}"
1330    resolve_image: no
1331    command: '/bin/sh -v -c "sleep 10m"'
1332    stop_grace_period: 60s
1333  register: stop_grace_period_2
1334
1335- name: stop_grace_period (change)
1336  docker_swarm_service:
1337    name: "{{ service_name }}"
1338    image: "{{ docker_test_image_alpine }}"
1339    resolve_image: no
1340    command: '/bin/sh -v -c "sleep 10m"'
1341    stop_grace_period: 1m30s
1342  register: stop_grace_period_3
1343
1344- name: cleanup
1345  docker_swarm_service:
1346    name: "{{ service_name }}"
1347    state: absent
1348  diff: no
1349
1350- assert:
1351    that:
1352    - stop_grace_period_1 is changed
1353    - stop_grace_period_2 is not changed
1354    - stop_grace_period_3 is changed
1355
1356####################################################################
1357## stop_signal #####################################################
1358####################################################################
1359
1360- name: stop_signal
1361  docker_swarm_service:
1362    name: "{{ service_name }}"
1363    image: "{{ docker_test_image_alpine }}"
1364    resolve_image: no
1365    command: '/bin/sh -v -c "sleep 10m"'
1366    stop_signal: "30"
1367  register: stop_signal_1
1368  ignore_errors: yes
1369
1370- name: stop_signal (idempotency)
1371  docker_swarm_service:
1372    name: "{{ service_name }}"
1373    image: "{{ docker_test_image_alpine }}"
1374    resolve_image: no
1375    command: '/bin/sh -v -c "sleep 10m"'
1376    stop_signal: "30"
1377  register: stop_signal_2
1378  ignore_errors: yes
1379
1380- name: stop_signal (change)
1381  docker_swarm_service:
1382    name: "{{ service_name }}"
1383    image: "{{ docker_test_image_alpine }}"
1384    resolve_image: no
1385    command: '/bin/sh -v -c "sleep 10m"'
1386    stop_signal: "9"
1387  register: stop_signal_3
1388  ignore_errors: yes
1389
1390- name: cleanup
1391  docker_swarm_service:
1392    name: "{{ service_name }}"
1393    state: absent
1394  diff: no
1395
1396- assert:
1397    that:
1398    - stop_signal_1 is changed
1399    - stop_signal_2 is not changed
1400    - stop_signal_3 is changed
1401  when: docker_api_version is version('1.28', '>=') and docker_py_version is version('2.6.0', '>=')
1402- assert:
1403    that:
1404    - stop_signal_1 is failed
1405    - "'Minimum version required' in stop_signal_1.msg"
1406  when: docker_api_version is version('1.28', '<') or docker_py_version is version('2.6.0', '<')
1407
1408####################################################################
1409## publish #########################################################
1410####################################################################
1411
1412- name: publish
1413  docker_swarm_service:
1414    name: "{{ service_name }}"
1415    image: "{{ docker_test_image_alpine }}"
1416    resolve_image: no
1417    command: '/bin/sh -v -c "sleep 10m"'
1418    publish:
1419      - protocol: tcp
1420        published_port: 60001
1421        target_port: 60001
1422      - protocol: udp
1423        published_port: 60002
1424        target_port: 60002
1425  register: publish_1
1426  ignore_errors: yes
1427
1428- name: publish (idempotency)
1429  docker_swarm_service:
1430    name: "{{ service_name }}"
1431    image: "{{ docker_test_image_alpine }}"
1432    resolve_image: no
1433    command: '/bin/sh -v -c "sleep 10m"'
1434    publish:
1435      - protocol: udp
1436        published_port: 60002
1437        target_port: 60002
1438      - published_port: 60001
1439        target_port: 60001
1440  register: publish_2
1441  ignore_errors: yes
1442
1443- name: publish (change)
1444  docker_swarm_service:
1445    name: "{{ service_name }}"
1446    image: "{{ docker_test_image_alpine }}"
1447    resolve_image: no
1448    command: '/bin/sh -v -c "sleep 10m"'
1449    publish:
1450      - protocol: tcp
1451        published_port: 60002
1452        target_port: 60003
1453      - protocol: udp
1454        published_port: 60001
1455        target_port: 60001
1456  register: publish_3
1457  ignore_errors: yes
1458
1459- name: publish (mode)
1460  docker_swarm_service:
1461    name: "{{ service_name }}"
1462    image: "{{ docker_test_image_alpine }}"
1463    resolve_image: no
1464    command: '/bin/sh -v -c "sleep 10m"'
1465    publish:
1466      - protocol: tcp
1467        published_port: 60002
1468        target_port: 60003
1469        mode: host
1470      - protocol: udp
1471        published_port: 60001
1472        target_port: 60001
1473        mode: host
1474  register: publish_4
1475  ignore_errors: yes
1476
1477- name: publish (mode idempotency)
1478  docker_swarm_service:
1479    name: "{{ service_name }}"
1480    image: "{{ docker_test_image_alpine }}"
1481    resolve_image: no
1482    command: '/bin/sh -v -c "sleep 10m"'
1483    publish:
1484      - protocol: udp
1485        published_port: 60001
1486        target_port: 60001
1487        mode: host
1488      - protocol: tcp
1489        published_port: 60002
1490        target_port: 60003
1491        mode: host
1492  register: publish_5
1493  ignore_errors: yes
1494
1495- name: publish (empty)
1496  docker_swarm_service:
1497    name: "{{ service_name }}"
1498    image: "{{ docker_test_image_alpine }}"
1499    resolve_image: no
1500    command: '/bin/sh -v -c "sleep 10m"'
1501    publish: []
1502  register: publish_6
1503  ignore_errors: yes
1504
1505- name: publish (empty idempotency)
1506  docker_swarm_service:
1507    name: "{{ service_name }}"
1508    image: "{{ docker_test_image_alpine }}"
1509    resolve_image: no
1510    command: '/bin/sh -v -c "sleep 10m"'
1511    publish: []
1512  register: publish_7
1513  ignore_errors: yes
1514
1515- name: publish (publishes the same port with both protocols)
1516  docker_swarm_service:
1517    name: "{{ service_name }}"
1518    image: "{{ docker_test_image_alpine }}"
1519    resolve_image: no
1520    command: '/bin/sh -v -c "sleep 10m"'
1521    publish:
1522      - protocol: udp
1523        published_port: 60001
1524        target_port: 60001
1525        mode: host
1526      - protocol: tcp
1527        published_port: 60001
1528        target_port: 60001
1529        mode: host
1530  register: publish_8
1531  ignore_errors: yes
1532- name: gather service info
1533  docker_swarm_service_info:
1534    name: "{{ service_name }}"
1535  register: publish_8_info
1536
1537- name: publish (without published_port)
1538  docker_swarm_service:
1539    name: "{{ service_name }}"
1540    image: "{{ docker_test_image_alpine }}"
1541    resolve_image: no
1542    command: '/bin/sh -v -c "sleep 10m"'
1543    publish:
1544      - protocol: udp
1545        target_port: 60001
1546        mode: host
1547  register: publish_9
1548  ignore_errors: yes
1549- name: gather service info
1550  docker_swarm_service_info:
1551    name: "{{ service_name }}"
1552  register: publish_9_info
1553
1554- name: publish (without published_port, idempotence)
1555  docker_swarm_service:
1556    name: "{{ service_name }}"
1557    image: "{{ docker_test_image_alpine }}"
1558    resolve_image: no
1559    command: '/bin/sh -v -c "sleep 10m"'
1560    publish:
1561      - protocol: udp
1562        target_port: 60001
1563        mode: host
1564  register: publish_10
1565  ignore_errors: yes
1566- name: gather service info
1567  docker_swarm_service_info:
1568    name: "{{ service_name }}"
1569  register: publish_10_info
1570
1571- name: cleanup
1572  docker_swarm_service:
1573    name: "{{ service_name }}"
1574    state: absent
1575  diff: no
1576
1577- assert:
1578    that:
1579      - publish_1 is changed
1580      - publish_2 is not changed
1581      - publish_3 is changed
1582      - publish_4 is changed
1583      - publish_5 is not changed
1584      - publish_6 is changed
1585      - publish_7 is not changed
1586      - publish_8 is changed
1587      - (publish_8_info.service.Endpoint.Ports | length) == 2
1588      - publish_9 is changed
1589      - publish_10 is not changed
1590  when: docker_api_version is version('1.25', '>=') and docker_py_version is version('3.0.0', '>=')
1591- assert:
1592    that:
1593    - publish_1 is failed
1594    - "'Minimum version required' in publish_1.msg"
1595  when: docker_api_version is version('1.25', '<') or docker_py_version is version('3.0.0', '<')
1596
1597###################################################################
1598## read_only ######################################################
1599###################################################################
1600
1601- name: read_only
1602  docker_swarm_service:
1603    name: "{{ service_name }}"
1604    image: "{{ docker_test_image_alpine }}"
1605    resolve_image: no
1606    command: '/bin/sh -v -c "sleep 10m"'
1607    read_only: true
1608  register: read_only_1
1609  ignore_errors: yes
1610
1611- name: read_only (idempotency)
1612  docker_swarm_service:
1613    name: "{{ service_name }}"
1614    image: "{{ docker_test_image_alpine }}"
1615    resolve_image: no
1616    command: '/bin/sh -v -c "sleep 10m"'
1617    read_only: true
1618  register: read_only_2
1619  ignore_errors: yes
1620
1621- name: read_only (change)
1622  docker_swarm_service:
1623    name: "{{ service_name }}"
1624    image: "{{ docker_test_image_alpine }}"
1625    resolve_image: no
1626    command: '/bin/sh -v -c "sleep 10m"'
1627    read_only: false
1628  register: read_only_3
1629  ignore_errors: yes
1630
1631- name: cleanup
1632  docker_swarm_service:
1633    name: "{{ service_name }}"
1634    state: absent
1635  diff: no
1636
1637- assert:
1638    that:
1639      - read_only_1 is changed
1640      - read_only_2 is not changed
1641      - read_only_3 is changed
1642  when: docker_api_version is version('1.28', '>=') and docker_py_version is version('2.6.0', '>=')
1643- assert:
1644    that:
1645    - read_only_1 is failed
1646    - "'Minimum version required' in read_only_1.msg"
1647  when: docker_api_version is version('1.28', '<') or docker_py_version is version('2.6.0', '<')
1648
1649###################################################################
1650## replicas #######################################################
1651###################################################################
1652
1653- name: replicas
1654  docker_swarm_service:
1655    name: "{{ service_name }}"
1656    image: "{{ docker_test_image_alpine }}"
1657    resolve_image: no
1658    command: '/bin/sh -v -c "sleep 10m"'
1659    replicas: 2
1660  register: replicas_1
1661
1662- name: replicas (idempotency)
1663  docker_swarm_service:
1664    name: "{{ service_name }}"
1665    image: "{{ docker_test_image_alpine }}"
1666    resolve_image: no
1667    command: '/bin/sh -v -c "sleep 10m"'
1668    replicas: 2
1669  register: replicas_2
1670
1671- name: replicas (change)
1672  docker_swarm_service:
1673    name: "{{ service_name }}"
1674    image: "{{ docker_test_image_alpine }}"
1675    resolve_image: no
1676    command: '/bin/sh -v -c "sleep 10m"'
1677    replicas: 3
1678  register: replicas_3
1679
1680- name: cleanup
1681  docker_swarm_service:
1682    name: "{{ service_name }}"
1683    state: absent
1684  diff: no
1685
1686- assert:
1687    that:
1688      - replicas_1 is changed
1689      - replicas_2 is not changed
1690      - replicas_3 is changed
1691
1692###################################################################
1693# resolve_image ###################################################
1694###################################################################
1695
1696- name: resolve_image (false)
1697  docker_swarm_service:
1698    name: "{{ service_name }}"
1699    image: "{{ docker_test_image_alpine }}"
1700    command: '/bin/sh -v -c "sleep 10m"'
1701    resolve_image: false
1702  register: resolve_image_1
1703
1704- name: resolve_image (false idempotency)
1705  docker_swarm_service:
1706    name: "{{ service_name }}"
1707    image: "{{ docker_test_image_alpine }}"
1708    command: '/bin/sh -v -c "sleep 10m"'
1709    resolve_image: false
1710  register: resolve_image_2
1711
1712- name: resolve_image (change)
1713  docker_swarm_service:
1714    name: "{{ service_name }}"
1715    image: "{{ docker_test_image_alpine }}"
1716    command: '/bin/sh -v -c "sleep 10m"'
1717    resolve_image: true
1718  register: resolve_image_3
1719  ignore_errors: yes
1720
1721- name: cleanup
1722  docker_swarm_service:
1723    name: "{{ service_name }}"
1724    state: absent
1725  diff: no
1726
1727- assert:
1728    that:
1729      - resolve_image_1 is changed
1730      - resolve_image_2 is not changed
1731      - resolve_image_3 is changed
1732  when: docker_api_version is version('1.30', '>=') and docker_py_version is version('3.2.0', '>=')
1733- assert:
1734    that:
1735      - resolve_image_1 is changed
1736      - resolve_image_2 is not changed
1737      - resolve_image_3 is failed
1738      - "('version is ' ~ docker_py_version ~ ' ') in resolve_image_3.msg"
1739      - "'Minimum version required is 3.2.0 ' in resolve_image_3.msg"
1740  when: docker_api_version is version('1.30', '<') or docker_py_version is version('3.2.0', '<')
1741
1742###################################################################
1743# tty #############################################################
1744###################################################################
1745
1746- name: tty
1747  docker_swarm_service:
1748    name: "{{ service_name }}"
1749    image: "{{ docker_test_image_alpine }}"
1750    resolve_image: no
1751    command: '/bin/sh -v -c "sleep 10m"'
1752    tty: yes
1753  register: tty_1
1754  ignore_errors: yes
1755
1756- name: tty (idempotency)
1757  docker_swarm_service:
1758    name: "{{ service_name }}"
1759    image: "{{ docker_test_image_alpine }}"
1760    resolve_image: no
1761    command: '/bin/sh -v -c "sleep 10m"'
1762    tty: yes
1763  register: tty_2
1764  ignore_errors: yes
1765
1766- name: tty (change)
1767  docker_swarm_service:
1768    name: "{{ service_name }}"
1769    image: "{{ docker_test_image_alpine }}"
1770    resolve_image: no
1771    command: '/bin/sh -v -c "sleep 10m"'
1772    tty: no
1773  register: tty_3
1774  ignore_errors: yes
1775
1776- name: cleanup
1777  docker_swarm_service:
1778    name: "{{ service_name }}"
1779    state: absent
1780  diff: no
1781
1782- assert:
1783    that:
1784      - tty_1 is changed
1785      - tty_2 is not changed
1786      - tty_3 is changed
1787  when: docker_api_version is version('1.25', '>=') and docker_py_version is version('2.4.0', '>=')
1788- assert:
1789    that:
1790    - tty_1 is failed
1791    - "'Minimum version required' in tty_1.msg"
1792  when: docker_api_version is version('1.25', '<') or docker_py_version is version('2.4.0', '<')
1793
1794###################################################################
1795## user ###########################################################
1796###################################################################
1797
1798- name: user
1799  docker_swarm_service:
1800    name: "{{ service_name }}"
1801    image: "{{ docker_test_image_alpine }}"
1802    resolve_image: no
1803    command: '/bin/sh -v -c "sleep 10m"'
1804    user: "operator"
1805  register: user_1
1806
1807- name: user (idempotency)
1808  docker_swarm_service:
1809    name: "{{ service_name }}"
1810    image: "{{ docker_test_image_alpine }}"
1811    resolve_image: no
1812    command: '/bin/sh -v -c "sleep 10m"'
1813    user: "operator"
1814  register: user_2
1815
1816- name: user (change)
1817  docker_swarm_service:
1818    name: "{{ service_name }}"
1819    image: "{{ docker_test_image_alpine }}"
1820    resolve_image: no
1821    command: '/bin/sh -v -c "sleep 10m"'
1822    user: "root"
1823  register: user_3
1824
1825- name: cleanup
1826  docker_swarm_service:
1827    name: "{{ service_name }}"
1828    state: absent
1829  diff: no
1830
1831- assert:
1832    that:
1833      - user_1 is changed
1834      - user_2 is not changed
1835      - user_3 is changed
1836
1837####################################################################
1838## working_dir #####################################################
1839####################################################################
1840
1841- name: working_dir
1842  docker_swarm_service:
1843    name: "{{ service_name }}"
1844    image: "{{ docker_test_image_alpine }}"
1845    resolve_image: no
1846    working_dir: /tmp
1847  register: working_dir_1
1848
1849- name: working_dir (idempotency)
1850  docker_swarm_service:
1851    name: "{{ service_name }}"
1852    image: "{{ docker_test_image_alpine }}"
1853    resolve_image: no
1854    working_dir: /tmp
1855  register: working_dir_2
1856
1857- name: working_dir (change)
1858  docker_swarm_service:
1859    name: "{{ service_name }}"
1860    image: "{{ docker_test_image_alpine }}"
1861    resolve_image: no
1862    working_dir: /
1863  register: working_dir_3
1864
1865- name: cleanup
1866  docker_swarm_service:
1867    name: "{{ service_name }}"
1868    state: absent
1869  diff: no
1870
1871- assert:
1872    that:
1873    - working_dir_1 is changed
1874    - working_dir_2 is not changed
1875    - working_dir_3 is changed
1876
1877####################################################################
1878## init ############################################################
1879####################################################################
1880
1881- name: init
1882  docker_swarm_service:
1883    name: "{{ service_name }}"
1884    image: "{{ docker_test_image_alpine }}"
1885    resolve_image: no
1886    init: true
1887  register: init_1
1888
1889- name: init (idempotency)
1890  docker_swarm_service:
1891    name: "{{ service_name }}"
1892    image: "{{ docker_test_image_alpine }}"
1893    resolve_image: no
1894    init: true
1895  register: init_2
1896
1897- name: init (change)
1898  docker_swarm_service:
1899    name: "{{ service_name }}"
1900    image: "{{ docker_test_image_alpine }}"
1901    resolve_image: no
1902    init: false
1903  register: init_3
1904
1905- name: cleanup
1906  docker_swarm_service:
1907    name: "{{ service_name }}"
1908    state: absent
1909  diff: no
1910
1911- assert:
1912    that:
1913      - init_1 is changed
1914      - init_2 is not changed
1915      - init_3 is changed
1916  when: docker_api_version is version('1.37', '>=')
1917
1918- assert:
1919    that:
1920    - init_1 is failed
1921    - "('version is ' ~ docker_api_version ~'. Minimum version required is 1.37') in hosts_1.msg"
1922  when: docker_api_version is version('1.37', '<')
1923