--- - name: Registering container name set_fact: service_name: "{{ name_prefix ~ '-options' }}" network_name_1: "{{ name_prefix ~ '-network-1' }}" network_name_2: "{{ name_prefix ~ '-network-2' }}" config_name_1: "{{ name_prefix ~ '-configs-1' }}" config_name_2: "{{ name_prefix ~ '-configs-2' }}" volume_name_1: "{{ name_prefix ~ '-volume-1' }}" volume_name_2: "{{ name_prefix ~ '-volume-2' }}" secret_name_1: "{{ name_prefix ~ '-secret-1' }}" secret_name_2: "{{ name_prefix ~ '-secret-2' }}" - name: Registering container name set_fact: service_names: "{{ service_names }} + [service_name]" network_names: "{{ network_names }} + [network_name_1, network_name_2]" config_names: "{{ config_names }} + [config_name_1, config_name_2]" volume_names: "{{ volume_names }} + [volume_name_1, volume_name_2]" secret_names: "{{ secret_names }} + [secret_name_1, secret_name_2]" - docker_config: name: "{{ config_name_1 }}" data: "hello" state: present register: "config_result_1" - docker_config: name: "{{ config_name_2 }}" data: "test" state: present register: "config_result_2" - docker_secret: name: "{{ secret_name_1 }}" data: "secret1" state: "present" register: "secret_result_1" - docker_secret: name: "{{ secret_name_2 }}" data: "secret2" state: "present" register: "secret_result_2" - docker_network: name: "{{ network_name }}" driver: "overlay" state: present loop: - "{{ network_name_1 }}" - "{{ network_name_2 }}" loop_control: loop_var: network_name - docker_volume: name: "{{ volume_name }}" state: present loop: - "{{ volume_name_1 }}" - "{{ volume_name_2 }}" loop_control: loop_var: volume_name #################################################################### ## args ############################################################ #################################################################### - name: args docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 args: - sleep - "3600" register: args_1 - name: args (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 args: - sleep - "3600" register: args_2 - name: args (change) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 args: - sleep - "3400" register: args_3 - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - args_1 is changed - args_2 is not changed - args_3 is changed #################################################################### ## configs ######################################################### #################################################################### # FIXME: Broken until #50606 is merged #- name: configs # docker_swarm_service: # name: "{{ service_name }}" # image: alpine:3.8 # configs: # - config_id: "{{ config_result_1.config_id }}" # config_name: "{{ config_name_1 }}" # filename: "/tmp/{{ config_name_1 }}.txt" # register: configs_1 # #- name: configs (idempotency) # docker_swarm_service: # name: "{{ service_name }}" # image: alpine:3.8 # configs: # - config_id: "{{ config_result_1.config_id }}" # config_name: "{{ config_name_1 }}" # filename: "/tmp/{{ config_name_1 }}.txt" # register: configs_2 # #- name: configs (add) # docker_swarm_service: # name: "{{ service_name }}" # image: alpine:3.8 # configs: # - config_id: "{{ config_result_1.config_id }}" # config_name: "{{ config_name_1 }}" # filename: "/tmp/{{ config_name_1 }}.txt" # - config_id: "{{ config_result_2.config_id }}" # config_name: "{{ config_name_2 }}" # filename: "/tmp/{{ config_name_2 }}.txt" # register: configs_3 # #- name: configs (empty) # docker_swarm_service: # name: "{{ service_name }}" # image: alpine:3.8 # configs: [] # register: configs_4 # #- assert: # that: # - configs_1 is changed # - configs_2 is not changed # - configs_3 is changed # - configs_4 is changed # when: docker_api_version is version('1.30', '>=') #- assert: # that: # - configs_1 is failed # - "('version is ' ~ docker_api_version ~'. Minimum version required is 1.30') in configs_1.msg" # when: docker_api_version is version('1.30', '<') #################################################################### ## constraints ##################################################### #################################################################### - name: constraints docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 constraints: - "node.role == manager" register: constraints_1 - name: constraints (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 constraints: - "node.role == manager" register: constraints_2 - name: constraints (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 constraints: - "node.role == worker" register: constraints_3 - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - constraints_1 is changed - constraints_2 is not changed - constraints_3 is changed #################################################################### ## container_labels ################################################ #################################################################### - name: container_labels docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 container_labels: test_1: "1" test_2: "2" register: container_labels_1 - name: container_labels (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 container_labels: test_1: "1" test_2: "2" register: container_labels_2 - name: container_labels (change) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 container_labels: test_1: "1" test_2: "3" register: container_labels_3 - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - container_labels_1 is changed - container_labels_2 is not changed - container_labels_3 is changed #################################################################### ## dns ############################################################# #################################################################### - name: dns docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 dns: - 1.1.1.1 - 8.8.8.8 register: dns_1 - name: dns (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 dns: - 1.1.1.1 - 8.8.8.8 register: dns_2 - name: dns_servers (changed order) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 dns: - 8.8.8.8 - 1.1.1.1 register: dns_3 - name: dns_servers (changed elements) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 dns: - 8.8.8.8 - 9.9.9.9 register: dns_4 - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - dns_1 is changed - dns_2 is not changed - dns_3 is changed - dns_4 is changed when: docker_api_version is version('1.25', '>=') - assert: that: - dns_1 is failed - "('version is ' ~ docker_api_version ~'. Minimum version required is 1.25') in dns_1.msg" when: docker_api_version is version('1.25', '<') #################################################################### ## dns_options ##################################################### #################################################################### - name: dns_options docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 dns_options: - "timeout:10" - rotate register: dns_options_1 ignore_errors: yes - name: dns_options (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 dns_options: - "timeout:10" - rotate register: dns_options_2 ignore_errors: yes - name: dns_options (change) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 dns_options: - "timeout:10" - no-check-names register: dns_options_3 ignore_errors: yes - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - dns_options_1 is changed - dns_options_2 is not changed - dns_options_3 is changed when: docker_api_version is version('1.25', '>=') - assert: that: - dns_options_1 is failed - "('version is ' ~ docker_api_version ~'. Minimum version required is 1.25') in dns_options_1.msg" when: docker_api_version is version('1.25', '<') #################################################################### ## dns_search ###################################################### #################################################################### - name: dns_search docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 dns_search: - example.com - example.org register: dns_search_1 - name: dns_search (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 dns_search: - example.com - example.org register: dns_search_2 - name: dns_search (different order) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 dns_search: - example.org - example.com register: dns_search_3 - name: dns_search (changed elements) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 dns_search: - ansible.com - example.com register: dns_search_4 - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - dns_search_1 is changed - dns_search_2 is not changed - dns_search_3 is changed - dns_search_4 is changed when: docker_api_version is version('1.25', '>=') - assert: that: - dns_search_1 is failed - "('version is ' ~ docker_api_version ~'. Minimum version required is 1.25') in dns_search_1.msg" when: docker_api_version is version('1.25', '<') #################################################################### ## endpoint_mode ################################################### #################################################################### # FIXME: endpoint_mode_2 is not marked as changed #fatal: [testhost]: FAILED! => { # "assertion": "endpoint_mode_2 is not changed", # "changed": false, # "evaluated_to": false, # "msg": "Assertion failed" #} - name: endpoint_mode docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 endpoint_mode: "dnsrr" register: endpoint_mode_1 #- name: endpoint_mode (idempotency) # docker_swarm_service: # name: "{{ service_name }}" # image: alpine:3.8 # endpoint_mode: "dnsrr" # register: endpoint_mode_2 #- name: endpoint_mode (changes) # docker_swarm_service: # name: "{{ service_name }}" # image: alpine:3.8 # endpoint_mode: "vip" # register: endpoint_mode_3 - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - endpoint_mode_1 is changed # - endpoint_mode_2 is not changed # - endpoint_mode_3 is changed #################################################################### ## env ############################################################# #################################################################### - name: env docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 env: - "TEST1=val1" - "TEST2=val2" register: env_1 - name: env (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 env: - "TEST1=val1" - "TEST2=val2" register: env_2 - name: env (changes) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 env: - "TEST1=val1" - "TEST2=val3" register: env_3 - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - env_1 is changed - env_2 is not changed - env_3 is changed ################################################################### # force_update #################################################### ################################################################### - name: force_update docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 args: - sleep - "3600" force_update: yes register: force_update_1 - name: force_update (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 args: - sleep - "3600" force_update: yes register: force_update_2 - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - force_update_1 is changed - force_update_2 is changed when: docker_api_version is version('1.25', '>=') - assert: that: - force_update_1 is failed - "('version is ' ~ docker_api_version ~'. Minimum version required is 1.25') in force_update_1.msg" when: docker_api_version is version('1.25', '<') ################################################################### # hostname ######################################################## ################################################################### - name: hostname docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 hostname: me.example.com register: hostname_1 - name: hostname (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 hostname: me.example.com register: hostname_2 - name: hostname (change) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 hostname: me.example.org register: hostname_3 - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - hostname_1 is changed - hostname_2 is not changed - hostname_3 is changed when: docker_api_version is version('1.25', '>=') - assert: that: - hostname_1 is failed - "('version is ' ~ docker_api_version ~'. Minimum version required is 1.25') in hostname_1.msg" when: docker_api_version is version('1.25', '<') ################################################################### # image ########################################################### ################################################################### - name: image docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 register: image_1 - name: image (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 register: image_2 - name: image (change) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.7 register: image_3 - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - image_1 is changed - image_2 is not changed - image_3 is changed #################################################################### ## labels ########################################################## #################################################################### - name: labels docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 labels: test_1: "1" test_2: "2" register: labels_1 - name: labels (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 labels: test_1: "1" test_2: "2" register: labels_2 - name: labels (changes) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 labels: test_1: "1" test_2: "2" test_3: "3" register: labels_3 - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - labels_1 is changed - labels_2 is not changed - labels_3 is changed ################################################################### # limit_cpu ####################################################### ################################################################### - name: limit_cpu docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 limit_cpu: 1 register: limit_cpu_1 - name: limit_cpu (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 limit_cpu: 1 register: limit_cpu_2 - name: limit_cpu (change) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 limit_cpu: 2 register: limit_cpu_3 - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - limit_cpu_1 is changed - limit_cpu_2 is not changed - limit_cpu_3 is changed ################################################################### # limit_memory #################################################### ################################################################### - name: limit_memory docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 limit_memory: 64000000 register: limit_memory_1 - name: limit_memory (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 limit_memory: 64000000 register: limit_memory_2 - name: limit_memory (change) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 limit_memory: 32000000 register: limit_memory_3 - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - limit_memory_1 is changed - limit_memory_2 is not changed - limit_memory_3 is changed #################################################################### ## log_driver ###################################################### #################################################################### - name: log_driver docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 log_driver: json-file register: log_driver_1 - name: log_driver (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 log_driver: json-file register: log_driver_2 - name: log_driver (change) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 log_driver: syslog register: log_driver_3 - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - log_driver_1 is changed - log_driver_2 is not changed - log_driver_3 is changed #################################################################### ## log_driver_options ############################################## #################################################################### - name: log_driver_options docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 log_driver: json-file log_driver_options: labels: production_status env: os,customer register: log_driver_options_1 - name: log_driver_options (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 log_driver: json-file log_driver_options: env: os,customer labels: production_status register: log_driver_options_2 - name: log_driver_options (change) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 log_driver: json-file log_driver_options: env: os,customer labels: production_status max-file: "1" register: log_driver_options_3 - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - log_driver_options_1 is changed - log_driver_options_2 is not changed - log_driver_options_3 is changed ################################################################### # mode ############################################################ ################################################################### - name: mode docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 mode: "replicated" replicas: 1 register: mode_1 - name: mode (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 mode: "replicated" replicas: 1 register: mode_2 - name: mode (change) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 mode: "global" replicas: 1 register: mode_3 - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - mode_1 is changed - mode_2 is not changed - mode_3 is changed #################################################################### ## mounts ########################################################## #################################################################### - name: mounts docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 mounts: - source: "{{ volume_name_1 }}" target: "/tmp/{{ volume_name_1 }}" type: "volume" register: mounts_1 - name: mounts (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 mounts: - source: "{{ volume_name_1 }}" target: "/tmp/{{ volume_name_1 }}" type: "volume" register: mounts_2 - name: mounts (add) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 mounts: - source: "{{ volume_name_1 }}" target: "/tmp/{{ volume_name_1 }}" type: "volume" - source: "{{ volume_name_2 }}" target: "/tmp/{{ volume_name_2 }}" type: "volume" register: mounts_3 - name: mounts (empty) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 mounts: [] register: mounts_4 - assert: that: - mounts_1 is changed - mounts_2 is not changed - mounts_3 is changed - mounts_4 is changed #################################################################### ## networks ######################################################## #################################################################### - name: networks docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 networks: - "{{ network_name_1 }}" register: networks_1 - name: networks (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 networks: - "{{ network_name_1 }}" register: networks_2 - name: networks (empty) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 networks: [] register: networks_3 - assert: that: - networks_1 is changed - networks_2 is not changed - networks_3 is changed #################################################################### ## placement_preferences ########################################### #################################################################### - name: placement_preferences docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 placement_preferences: - spread: "node.labels.test" register: placement_preferences_1 - name: placement_preferences (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 placement_preferences: - spread: "node.labels.test" register: placement_preferences_2 - name: placement_preferences (change) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 placement_preferences: - spread: "node.labels.test2" register: placement_preferences_3 - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - placement_preferences_1 is changed - placement_preferences_2 is not changed - placement_preferences_3 is changed #################################################################### ## publish ######################################################### #################################################################### - name: publish docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 publish: - protocol: tcp published_port: 60001 target_port: 60001 - protocol: udp published_port: 60002 target_port: 60002 register: publish_1 - name: publish (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 publish: - protocol: udp published_port: 60002 target_port: 60002 - published_port: 60001 target_port: 60001 register: publish_2 - name: publish (change) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 publish: - protocol: tcp published_port: 60002 target_port: 60003 - protocol: udp published_port: 60001 target_port: 60001 register: publish_3 - name: publish (mode) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 publish: - protocol: tcp published_port: 60002 target_port: 60003 mode: host - protocol: udp published_port: 60001 target_port: 60001 mode: host register: publish_4 - name: publish (mode idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 publish: - protocol: udp published_port: 60001 target_port: 60001 mode: host - protocol: tcp published_port: 60002 target_port: 60003 mode: host register: publish_5 - assert: that: - publish_1 is changed - publish_2 is not changed - publish_3 is changed - publish_4 is changed - publish_5 is not changed when: docker_api_version is version('1.25', '>=') - assert: that: - publish_1 is failed - "('version is ' ~ docker_api_version ~'. Minimum version required is 1.25') in publish_1.msg" when: docker_api_version is version('1.25', '<') ################################################################### # replicas ######################################################## ################################################################### - name: replicas docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 replicas: 2 register: replicas_1 - name: replicas (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 replicas: 2 register: replicas_2 - name: replicas (change) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 replicas: 3 register: replicas_3 - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - replicas_1 is changed - replicas_2 is not changed - replicas_3 is changed ################################################################### # reserve_cpu ##################################################### ################################################################### - name: reserve_cpu docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 reserve_cpu: 1 register: reserve_cpu_1 - name: reserve_cpu (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 reserve_cpu: 1 register: reserve_cpu_2 - name: reserve_cpu (change) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 reserve_cpu: 2 register: reserve_cpu_3 - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - reserve_cpu_1 is changed - reserve_cpu_2 is not changed - reserve_cpu_3 is changed ################################################################### # reserve_memory ################################################## ################################################################### - name: reserve_memory docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 reserve_memory: 64000000 register: reserve_memory_1 - name: reserve_memory (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 reserve_memory: 64000000 register: reserve_memory_2 - name: reserve_memory (change) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 reserve_memory: 32000000 register: reserve_memory_3 - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - reserve_memory_1 is changed - reserve_memory_2 is not changed - reserve_memory_3 is changed ################################################################### # restart_policy ################################################## ################################################################### - name: restart_policy docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 restart_policy: "on-failure" register: restart_policy_1 - name: restart_policy (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 restart_policy: "on-failure" register: restart_policy_2 - name: restart_policy (change) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 restart_policy: "any" register: restart_policy_3 - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - restart_policy_1 is changed - restart_policy_2 is not changed - restart_policy_3 is changed ################################################################### # restart_policy_attempts ######################################### ################################################################### - name: restart_policy_attempts docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 restart_policy_attempts: 1 register: restart_policy_attempts_1 - name: restart_policy_attempts (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 restart_policy_attempts: 1 register: restart_policy_attempts_2 - name: restart_policy_attempts (change) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 restart_policy_attempts: 2 register: restart_policy_attempts_3 - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - restart_policy_attempts_1 is changed - restart_policy_attempts_2 is not changed - restart_policy_attempts_3 is changed ################################################################### # restart_policy_delay ############################################ ################################################################### - name: restart_policy_delay docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 restart_policy_delay: 5 register: restart_policy_delay_1 - name: restart_policy_delay (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 restart_policy_delay: 5 register: restart_policy_delay_2 - name: restart_policy_delay (change) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 restart_policy_delay: 10 register: restart_policy_delay_3 - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - restart_policy_delay_1 is changed - restart_policy_delay_2 is not changed - restart_policy_delay_3 is changed ################################################################### # restart_policy_window ########################################### ################################################################### - name: restart_policy_window docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 restart_policy_window: 10 register: restart_policy_window_1 - name: restart_policy_window (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 restart_policy_window: 10 register: restart_policy_window_2 - name: restart_policy_window (change) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 restart_policy_window: 20 register: restart_policy_window_3 - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - restart_policy_window_1 is changed - restart_policy_window_2 is not changed - restart_policy_window_3 is changed #################################################################### ## secrets ######################################################### #################################################################### - name: secrets docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 secrets: - secret_id: "{{ secret_result_1.secret_id }}" secret_name: "{{ secret_name_1 }}" filename: "/run/secrets/{{ secret_name_1 }}.txt" register: secrets_1 - name: secrets (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 secrets: - secret_id: "{{ secret_result_1.secret_id }}" secret_name: "{{ secret_name_1 }}" filename: "/run/secrets/{{ secret_name_1 }}.txt" register: secrets_2 - name: secrets (add) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 secrets: - secret_id: "{{ secret_result_1.secret_id }}" secret_name: "{{ secret_name_1 }}" filename: "/run/secrets/{{ secret_name_1 }}.txt" - secret_id: "{{ secret_result_2.secret_id }}" secret_name: "{{ secret_name_2 }}" filename: "/run/secrets/{{ secret_name_2 }}.txt" register: secrets_3 - name: secrets (empty) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 secrets: [] register: secrets_4 - assert: that: - secrets_1 is changed - secrets_2 is not changed - secrets_3 is changed - secrets_4 is changed when: docker_api_version is version('1.25', '>=') - assert: that: - secrets_1 is failed - "('version is ' ~ docker_api_version ~'. Minimum version required is 1.25') in secrets_1.msg" when: docker_api_version is version('1.25', '<') ################################################################### # tty ############################################################# ################################################################### - name: tty docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 tty: yes register: tty_1 - name: tty (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 tty: yes register: tty_2 - name: tty (change) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 tty: no register: tty_3 - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - tty_1 is changed - tty_2 is not changed - tty_3 is changed when: docker_api_version is version('1.25', '>=') - assert: that: - tty_1 is failed - "('version is ' ~ docker_api_version ~'. Minimum version required is 1.25') in tty_1.msg" when: docker_api_version is version('1.25', '<') ################################################################### # update_delay #################################################### ################################################################### - name: update_delay docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 update_delay: 5 register: update_delay_1 - name: update_delay (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 update_delay: 5 register: update_delay_2 - name: update_delay (change) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 update_delay: 12 register: update_delay_3 - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - update_delay_1 is changed - update_delay_2 is not changed - update_delay_3 is changed ################################################################### # update_failure_action ########################################### ################################################################### - name: update_failure_action docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 update_failure_action: "pause" register: update_failure_action_1 - name: update_failure_action (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 update_failure_action: "pause" register: update_failure_action_2 - name: update_failure_action (change) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 update_failure_action: "continue" register: update_failure_action_3 - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - update_failure_action_1 is changed - update_failure_action_2 is not changed - update_failure_action_3 is changed ################################################################### # update_max_failure_ratio ######################################## ################################################################### - name: update_max_failure_ratio docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 update_max_failure_ratio: 0.25 register: update_max_failure_ratio_1 - name: update_max_failure_ratio (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 update_max_failure_ratio: 0.25 register: update_max_failure_ratio_2 - name: update_max_failure_ratio (change) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 update_max_failure_ratio: 0.50 register: update_max_failure_ratio_3 - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - update_max_failure_ratio_1 is changed - update_max_failure_ratio_2 is not changed - update_max_failure_ratio_3 is changed ################################################################### # update_monitor ################################################## ################################################################### - name: update_monitor docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 update_monitor: 10000000000 register: update_monitor_1 - name: update_monitor (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 update_monitor: 10000000000 register: update_monitor_2 - name: update_monitor (change) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 update_monitor: 6000000000 register: update_monitor_3 - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - update_monitor_1 is changed - update_monitor_2 is not changed - update_monitor_3 is changed ################################################################### # update_order #################################################### ################################################################### - name: update_order docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 update_order: "start-first" register: update_order_1 - name: update_order (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 update_order: "start-first" register: update_order_2 - name: update_order (change) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 update_order: "stop-first" register: update_order_3 - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - update_order_1 is changed - update_order_2 is not changed - update_order_3 is changed when: docker_api_version is version('1.29', '>=') - assert: that: - secrets_1 is failed - "('version is ' ~ docker_api_version ~'. Minimum version required is 1.29') in update_order_1.msg" when: docker_api_version is version('1.29', '<') ################################################################### # update_parallelism ############################################## ################################################################### - name: update_parallelism docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 update_parallelism: 2 register: update_parallelism_1 - name: update_parallelism (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 update_parallelism: 2 register: update_parallelism_2 - name: update_parallelism (change) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 update_parallelism: 1 register: update_parallelism_3 - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - update_parallelism_1 is changed - update_parallelism_2 is not changed - update_parallelism_3 is changed ################################################################### # user ############################################################ ################################################################### - name: user docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 user: "operator" register: user_1 - name: user (idempotency) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 user: "operator" register: user_2 - name: user (change) docker_swarm_service: name: "{{ service_name }}" image: alpine:3.8 user: "root" register: user_3 - name: cleanup docker_swarm_service: name: "{{ service_name }}" state: absent diff: no - assert: that: - user_1 is changed - user_2 is not changed - user_3 is changed #################################################################### #################################################################### #################################################################### - name: Delete networks docker_network: name: "{{ network_name }}" state: absent force: yes loop: - "{{ network_name_1 }}" - "{{ network_name_2 }}" loop_control: loop_var: network_name - name: Delete volumes docker_volume: name: "{{ volume_name }}" state: absent force: yes loop: - "{{ volume_name_1 }}" - "{{ volume_name_2 }}" loop_control: loop_var: volume_name - name: Delete configs docker_network: name: "{{ config_name }}" state: absent force: yes loop: - "{{ config_name_1 }}" - "{{ config_name_2 }}" loop_control: loop_var: config_name - name: Delete secrets docker_network: name: "{{ secret_name }}" state: absent force: yes loop: - "{{ secret_name_1 }}" - "{{ secret_name_2 }}" loop_control: loop_var: secret_name