docker_* tests: check API version (#48620)

* Check minimal API and docker-py versions for all docker_* tests.

* Improve docker_swarm creation/destruction for tests.

* Fail when conditions aren't met.

* Don't hardcode address for advertise_addr.
This commit is contained in:
Felix Fontein 2018-11-19 11:01:40 +01:00 committed by John R Barker
commit 3bb41ccb8e
20 changed files with 537 additions and 481 deletions

View file

@ -220,7 +220,7 @@ def main():
# Version checks # Version checks
cache_min_version = '3.3.0' cache_min_version = '3.3.0'
if client.module.params['builder_cache'] and LooseVersion(docker_version) < LooseVersion(cache_min_version): if client.module.params['builder_cache'] and client.docker_py_version < LooseVersion(cache_min_version):
msg = "Error: docker version is %s. Minimum version required for builds option is %s. Use `pip install --upgrade docker` to upgrade." msg = "Error: docker version is %s. Minimum version required for builds option is %s. Use `pip install --upgrade docker` to upgrade."
client.module.fail(msg=(msg % (docker_version, cache_min_version))) client.module.fail(msg=(msg % (docker_version, cache_min_version)))

View file

@ -1,3 +1,7 @@
--- ---
- include_tasks: test_docker_config.yml - include_tasks: test_docker_config.yml
when: docker_api_version is version('1.30', '>=') # Maximum of 1.30 (docker API version for docker_config) and 1.35 (docker API version for docker_swarm) is 1.35
when: docker_py_version is version('2.6.0', '>=') and docker_api_version is version('1.35', '>=')
- fail: msg="Too old docker / docker-py version to run docker_config tests!"
when: not(docker_py_version is version('2.6.0', '>=') and docker_api_version is version('1.35', '>=')) and (ansible_distribution != 'CentOS' or ansible_distribution_major_version|int > 6)

View file

@ -1,114 +1,116 @@
--- ---
- name: Make sure we're not already using Docker swarm - block:
docker_swarm: - name: Make sure we're not already using Docker swarm
state: absent docker_swarm:
force: true state: absent
force: true
- name: Create a Swarm cluster - name: Create a Swarm cluster
docker_swarm: docker_swarm:
state: present state: present
advertise_addr: "{{ansible_default_ipv4.address}}" advertise_addr: "{{ansible_default_ipv4.address}}"
- name: Parameter name should be required - name: Parameter name should be required
docker_config: docker_config:
state: present state: present
ignore_errors: yes ignore_errors: yes
register: output register: output
- name: assert failure when called with no name - name: assert failure when called with no name
assert: assert:
that: that:
- 'output.failed' - 'output.failed'
- 'output.msg == "missing required arguments: name"' - 'output.msg == "missing required arguments: name"'
- name: Test parameters - name: Test parameters
docker_config: docker_config:
name: foo name: foo
state: present state: present
ignore_errors: yes ignore_errors: yes
register: output register: output
- name: assert failure when called with no data - name: assert failure when called with no data
assert: assert:
that: that:
- 'output.failed' - 'output.failed'
- 'output.msg == "state is present but all of the following are missing: data"' - 'output.msg == "state is present but all of the following are missing: data"'
- name: Create config - name: Create config
docker_config: docker_config:
name: db_password name: db_password
data: opensesame! data: opensesame!
state: present state: present
register: output register: output
- name: Create variable config_id - name: Create variable config_id
set_fact: set_fact:
config_id: "{{ output.config_id }}" config_id: "{{ output.config_id }}"
- name: Inspect config - name: Inspect config
command: "docker config inspect {{ config_id }}" command: "docker config inspect {{ config_id }}"
register: inspect register: inspect
- debug: var=inspect - debug: var=inspect
- name: assert config creation succeeded - name: assert config creation succeeded
assert: assert:
that: that:
- "'db_password' in inspect.stdout" - "'db_password' in inspect.stdout"
- "'ansible_key' in inspect.stdout" - "'ansible_key' in inspect.stdout"
- name: Create config again - name: Create config again
docker_config: docker_config:
name: db_password name: db_password
data: opensesame! data: opensesame!
state: present state: present
register: output register: output
- name: assert create config is idempotent - name: assert create config is idempotent
assert: assert:
that: that:
- not output.changed - not output.changed
- name: Update config - name: Update config
docker_config: docker_config:
name: db_password name: db_password
data: newpassword! data: newpassword!
state: present state: present
register: output register: output
- name: assert config was updated - name: assert config was updated
assert: assert:
that: that:
- output.changed - output.changed
- output.config_id != config_id - output.config_id != config_id
- name: Remove config - name: Remove config
docker_config: docker_config:
name: db_password name: db_password
state: absent state: absent
- name: Check that config is removed - name: Check that config is removed
command: "docker config inspect {{ config_id }}" command: "docker config inspect {{ config_id }}"
register: output register: output
ignore_errors: yes ignore_errors: yes
- name: assert config was removed - name: assert config was removed
assert: assert:
that: that:
- output.failed - output.failed
- name: Remove config - name: Remove config
docker_config: docker_config:
name: db_password name: db_password
state: absent state: absent
register: output register: output
- name: assert remove config is idempotent - name: assert remove config is idempotent
assert: assert:
that: that:
- not output.changed - not output.changed
- name: Remove a Swarm cluster always:
docker_swarm: - name: Remove a Swarm cluster
state: absent docker_swarm:
force: true state: absent
force: true

View file

@ -33,3 +33,6 @@
diff: no diff: no
when: docker_py_version is version('1.8.0', '>=') and docker_api_version is version('1.20', '>=') when: docker_py_version is version('1.8.0', '>=') and docker_api_version is version('1.20', '>=')
- fail: msg="Too old docker / docker-py version to run all docker_container tests!"
when: not(docker_py_version is version('3.5.0', '>=') and docker_api_version is version('1.25', '>=')) and (ansible_distribution != 'CentOS' or ansible_distribution_major_version|int > 6)

View file

@ -58,5 +58,7 @@
- "result.docker_container" - "result.docker_container"
- "result.docker_container == docker_inspect_result[0]" - "result.docker_container == docker_inspect_result[0]"
# Skip for CentOS 6 when: docker_py_version is version('1.8.0', '>=') and docker_api_version is version('1.20', '>=')
when: ansible_distribution != 'CentOS' or ansible_distribution_major_version|int > 6
- fail: msg="Too old docker / docker-py version to run docker_container_facts tests!"
when: not(docker_py_version is version('1.8.0', '>=') and docker_api_version is version('1.20', '>=')) and (ansible_distribution != 'CentOS' or ansible_distribution_major_version|int > 6)

View file

@ -47,5 +47,7 @@
force_kill: yes force_kill: yes
with_items: "{{ cnames }}" with_items: "{{ cnames }}"
# Skip for CentOS 6 when: docker_py_version is version('1.8.0', '>=') and docker_api_version is version('1.20', '>=')
when: ansible_distribution != 'CentOS' or ansible_distribution_major_version|int > 6
- fail: msg="Too old docker / docker-py version to run docker_image tests!"
when: not(docker_py_version is version('1.8.0', '>=') and docker_api_version is version('1.20', '>=')) and (ansible_distribution != 'CentOS' or ansible_distribution_major_version|int > 6)

View file

@ -48,5 +48,7 @@
- "'hello-world:latest' in result.images[0].RepoTags" - "'hello-world:latest' in result.images[0].RepoTags"
- "'alpine:3.8' in result.images[1].RepoTags" - "'alpine:3.8' in result.images[1].RepoTags"
# Skip for CentOS 6 when: docker_py_version is version('1.8.0', '>=') and docker_api_version is version('1.20', '>=')
when: ansible_distribution != 'CentOS' or ansible_distribution_major_version|int > 6
- fail: msg="Too old docker / docker-py version to run docker_image_facts tests!"
when: not(docker_py_version is version('1.8.0', '>=') and docker_api_version is version('1.20', '>=')) and (ansible_distribution != 'CentOS' or ansible_distribution_major_version|int > 6)

View file

@ -27,5 +27,7 @@
force: yes force: yes
loop: "{{ dnetworks }}" loop: "{{ dnetworks }}"
# Skip for CentOS 6 when: docker_py_version is version('1.10.0', '>=') and docker_api_version is version('1.20', '>=') # FIXME: find out API version!
when: ansible_distribution != 'CentOS' or ansible_distribution_major_version|int > 6
- fail: msg="Too old docker / docker-py version to run docker_network tests!"
when: not(docker_py_version is version('1.10.0', '>=') and docker_api_version is version('1.20', '>=')) and (ansible_distribution != 'CentOS' or ansible_distribution_major_version|int > 6)

View file

@ -10,47 +10,52 @@
## overlay ######################################################### ## overlay #########################################################
#################################################################### ####################################################################
# Overlay networks require swarm initialization before they'll work - block:
- name: swarm # Overlay networks require swarm initialization before they'll work
docker_swarm: - name: swarm
state: present docker_swarm:
advertise_addr: 192.168.1.1 state: present
advertise_addr: "{{ansible_default_ipv4.address}}"
- name: overlay - name: overlay
docker_network: docker_network:
name: "{{ nname_1 }}" name: "{{ nname_1 }}"
driver: overlay driver: overlay
driver_options: driver_options:
com.docker.network.driver.overlay.vxlanid_list: "257" com.docker.network.driver.overlay.vxlanid_list: "257"
register: overlay_1 register: overlay_1
- name: overlay (idempotency) - name: overlay (idempotency)
docker_network: docker_network:
name: "{{ nname_1 }}" name: "{{ nname_1 }}"
driver: overlay driver: overlay
driver_options: driver_options:
com.docker.network.driver.overlay.vxlanid_list: "257" com.docker.network.driver.overlay.vxlanid_list: "257"
register: overlay_2 register: overlay_2
- name: overlay (change) - name: overlay (change)
docker_network: docker_network:
name: "{{ nname_1 }}" name: "{{ nname_1 }}"
driver: bridge driver: bridge
register: overlay_3 register: overlay_3
- name: cleanup network - name: cleanup network
docker_network: docker_network:
name: "{{ nname_1 }}" name: "{{ nname_1 }}"
state: absent state: absent
force: yes force: yes
- name: cleanup swarm - assert:
docker_swarm: that:
state: absent - overlay_1 is changed
force: yes - overlay_2 is not changed
- overlay_3 is changed
- assert: always:
that: - name: cleanup swarm
- overlay_1 is changed docker_swarm:
- overlay_2 is not changed state: absent
- overlay_3 is changed force: yes
# Requirements for docker_swarm
when: docker_py_version is version('2.6.0', '>=') and docker_api_version is version('1.35', '>=')

View file

@ -27,7 +27,7 @@
images: yes images: yes
networks: yes networks: yes
volumes: yes volumes: yes
builder_cache: yes builder_cache: "{{ docker_py_version is version('3.3.0', '>=') }}"
register: result register: result
# Analyze result # Analyze result
@ -56,5 +56,7 @@
- debug: var=result - debug: var=result
# Skip for CentOS 6 when: docker_py_version is version('2.1.0', '>=') and docker_api_version is version('1.25', '>=')
when: ansible_distribution != 'CentOS' or ansible_distribution_major_version|int > 6
- fail: msg="Too old docker / docker-py version to run docker_prune tests!"
when: not(docker_py_version is version('2.1.0', '>=') and docker_api_version is version('1.25', '>=')) and (ansible_distribution != 'CentOS' or ansible_distribution_major_version|int > 6)

View file

@ -1,3 +0,0 @@
- name: disable_swarm
command: docker swarm leave --force
ignore_errors: yes

View file

@ -1,2 +1,7 @@
- include_tasks: test_secrets.yml - include_tasks: test_secrets.yml
when: ansible_os_family != 'RedHat' or ansible_distribution_major_version != '6' # Maximum of 2.1.0 (docker-py version for docker_secrets) and 2.6.0 (docker-py version for docker_swarm) is 2.6.0
# Maximum of 1.25 (docker API version for docker_secrets) and 1.35 (docker API version for docker_swarm) is 1.35
when: docker_py_version is version('2.6.0', '>=') and docker_api_version is version('1.35', '>=')
- fail: msg="Too old docker / docker-py version to run docker_secrets tests!"
when: not(docker_py_version is version('2.6.0', '>=') and docker_api_version is version('1.35', '>=')) and (ansible_distribution != 'CentOS' or ansible_distribution_major_version|int > 6)

View file

@ -1,97 +1,105 @@
- name: Check if already in swarm ---
shell: docker node ls 2>&1 | grep 'docker swarm init' - block:
register: output - name: Make sure we're not already using Docker swarm
ignore_errors: yes docker_swarm:
state: absent
force: true
- name: Enable swarm mode - name: Create a Swarm cluster
command: docker swarm init docker_swarm:
when: output.rc == 0 state: present
notify: disable_swarm advertise_addr: "{{ansible_default_ipv4.address}}"
- name: Parameter name should be required - name: Parameter name should be required
docker_secret: docker_secret:
state: present state: present
ignore_errors: yes ignore_errors: yes
register: output register: output
- name: assert failure when called with no name - name: assert failure when called with no name
assert: assert:
that: that:
- 'output.failed' - 'output.failed'
- 'output.msg == "missing required arguments: name"' - 'output.msg == "missing required arguments: name"'
- name: Test parameters - name: Test parameters
docker_secret: docker_secret:
name: foo name: foo
state: present state: present
ignore_errors: yes ignore_errors: yes
register: output register: output
- name: assert failure when called with no data - name: assert failure when called with no data
assert: assert:
that: that:
- 'output.failed' - 'output.failed'
- 'output.msg == "state is present but all of the following are missing: data"' - 'output.msg == "state is present but all of the following are missing: data"'
- name: Create secret - name: Create secret
docker_secret: docker_secret:
name: db_password name: db_password
data: opensesame! data: opensesame!
state: present state: present
register: output register: output
- name: Create variable secret_id - name: Create variable secret_id
set_fact: set_fact:
secret_id: "{{ output.secret_id }}" secret_id: "{{ output.secret_id }}"
- name: Inspect secret - name: Inspect secret
command: "docker secret inspect {{ secret_id }}" command: "docker secret inspect {{ secret_id }}"
register: inspect register: inspect
- debug: var=inspect - debug: var=inspect
- name: assert secret creation succeeded - name: assert secret creation succeeded
assert: assert:
that: that:
- "'db_password' in inspect.stdout" - "'db_password' in inspect.stdout"
- "'ansible_key' in inspect.stdout" - "'ansible_key' in inspect.stdout"
- name: Create secret again - name: Create secret again
docker_secret: docker_secret:
name: db_password name: db_password
data: opensesame! data: opensesame!
state: present state: present
register: output register: output
- name: assert create secret is idempotent - name: assert create secret is idempotent
assert: assert:
that: that:
- not output.changed - not output.changed
- name: Update secret - name: Update secret
docker_secret: docker_secret:
name: db_password name: db_password
data: newpassword! data: newpassword!
state: present state: present
register: output register: output
- name: assert secret was updated - name: assert secret was updated
assert: assert:
that: that:
- output.changed - output.changed
- output.secret_id != secret_id - output.secret_id != secret_id
- name: Remove secret - name: Remove secret
docker_secret: docker_secret:
name: db_password name: db_password
state: absent state: absent
- name: Check that secret is removed - name: Check that secret is removed
command: "docker secret inspect {{ secret_id }}" command: "docker secret inspect {{ secret_id }}"
register: output register: output
ignore_errors: yes ignore_errors: yes
- name: assert secret was removed - name: assert secret was removed
assert: assert:
that: that:
- output.failed - output.failed
always:
- name: Remove Swarm cluster
docker_swarm:
state: absent
force: true

View file

@ -1,4 +1,5 @@
- include_tasks: test_stack.yml - include_tasks: test_stack.yml
when: when: docker_api_version is version('1.25', '>=')
- ansible_os_family != 'RedHat' or ansible_distribution_major_version != '6'
- ansible_distribution != 'Fedora' or ansible_distribution_major_version|int >= 26 - fail: msg="Too old docker / docker-py version to run docker_stack tests!"
when: not(docker_api_version is version('1.25', '>=')) and (ansible_distribution != 'CentOS' or ansible_distribution_major_version|int > 6)

View file

@ -1,110 +1,113 @@
- name: Make sure we're not already using Docker swarm ---
docker_swarm: - block:
state: absent - name: Make sure we're not already using Docker swarm
force: true docker_swarm:
state: absent
force: true
- name: Create a Swarm cluster - name: Create a Swarm cluster
docker_swarm: docker_swarm:
state: present state: present
advertise_addr: "{{ansible_default_ipv4.address}}" advertise_addr: "{{ansible_default_ipv4.address}}"
- name: install docker_stack python requirements - name: install docker_stack python requirements
pip: pip:
name: jsondiff,pyyaml name: jsondiff,pyyaml
- name: Create a stack without name - name: Create a stack without name
register: output register: output
docker_stack: docker_stack:
state: present state: present
ignore_errors: yes ignore_errors: yes
- name: assert failure when name not set - name: assert failure when name not set
assert: assert:
that: that:
- output is failed - output is failed
- 'output.msg == "missing required arguments: name"' - 'output.msg == "missing required arguments: name"'
- name: Create a stack without compose - name: Create a stack without compose
register: output register: output
docker_stack: docker_stack:
name: test_stack name: test_stack
ignore_errors: yes ignore_errors: yes
- name: assert failure when compose not set - name: assert failure when compose not set
assert: assert:
that: that:
- output is failed - output is failed
- 'output.msg == "compose parameter must be a list containing at least one element"' - 'output.msg == "compose parameter must be a list containing at least one element"'
- name: Ensure stack is absent - name: Ensure stack is absent
register: output register: output
docker_stack: docker_stack:
state: absent state: absent
name: test_stack name: test_stack
absent_retries: 30 absent_retries: 30
- name: Copy compose files - name: Copy compose files
copy: copy:
src: "{{item}}" src: "{{item}}"
dest: "{{output_dir}}/" dest: "{{output_dir}}/"
with_items: with_items:
- stack_compose_base.yml - stack_compose_base.yml
- stack_compose_overrides.yml - stack_compose_overrides.yml
- name: Create stack with compose file - name: Create stack with compose file
register: output register: output
docker_stack: docker_stack:
state: present state: present
name: test_stack name: test_stack
compose: compose:
- "{{output_dir}}/stack_compose_base.yml" - "{{output_dir}}/stack_compose_base.yml"
- name: assert test_stack changed on stack creation with compose file - name: assert test_stack changed on stack creation with compose file
assert: assert:
that: that:
- output is changed - output is changed
# FIXME: updating the stack prevents leaving the swarm on Shippable # FIXME: updating the stack prevents leaving the swarm on Shippable
#- name: Update stack with YAML #- name: Update stack with YAML
# register: output # register: output
# docker_stack: # docker_stack:
# state: present # state: present
# name: test_stack # name: test_stack
# compose: # compose:
# - "{{stack_compose_base}}" # - "{{stack_compose_base}}"
# - "{{stack_compose_overrides}}" # - "{{stack_compose_overrides}}"
# #
#- name: assert test_stack correctly changed on update with yaml #- name: assert test_stack correctly changed on update with yaml
# assert: # assert:
# that: # that:
# - output is changed # - output is changed
# - output.docker_stack_spec_diff == stack_update_expected_diff # - output.docker_stack_spec_diff == stack_update_expected_diff
- name: Delete stack - name: Delete stack
register: output register: output
docker_stack: docker_stack:
state: absent state: absent
name: test_stack name: test_stack
absent_retries: 30 absent_retries: 30
- name: assert delete of existing stack returns changed - name: assert delete of existing stack returns changed
assert: assert:
that: that:
- output is changed - output is changed
- name: Delete stack again - name: Delete stack again
register: output register: output
docker_stack: docker_stack:
state: absent state: absent
name: test_stack name: test_stack
absent_retries: 30 absent_retries: 30
- name: assert state=absent idempotency - name: assert state=absent idempotency
assert: assert:
that: that:
- output is not changed - output is not changed
- name: Remove a Swarm cluster always:
docker_swarm: - name: Remove a Swarm cluster
state: absent docker_swarm:
force: true state: absent
force: true

View file

@ -1,2 +1,5 @@
- include_tasks: test_swarm.yml - include_tasks: test_swarm.yml
when: ansible_os_family != 'RedHat' or ansible_distribution_major_version != '6' when: docker_py_version is version('2.6.0', '>=') and docker_api_version is version('1.35', '>=')
- fail: msg="Too old docker / docker-py version to run docker_swarm tests!"
when: not(docker_py_version is version('2.6.0', '>=') and docker_api_version is version('1.35', '>=')) and (ansible_distribution != 'CentOS' or ansible_distribution_major_version|int > 6)

View file

@ -1,53 +1,61 @@
- name: Make sure we're not already using Docker swarm ---
docker_swarm: - block:
state: absent - name: Make sure we're not already using Docker swarm
force: true docker_swarm:
state: absent
force: true
- name: Test parameters with state=join - name: Test parameters with state=join
docker_swarm: docker_swarm:
state: join state: join
ignore_errors: yes ignore_errors: yes
register: output register: output
- name: assert failure when called with state=join and no advertise_addr,remote_addrs,join_token - name: assert failure when called with state=join and no advertise_addr,remote_addrs,join_token
assert: assert:
that: that:
- 'output.failed' - 'output.failed'
- 'output.msg == "state is join but all of the following are missing: advertise_addr, remote_addrs, join_token"' - 'output.msg == "state is join but all of the following are missing: advertise_addr, remote_addrs, join_token"'
- name: Test parameters with state=remove - name: Test parameters with state=remove
docker_swarm: docker_swarm:
state: remove state: remove
ignore_errors: yes ignore_errors: yes
register: output register: output
- name: assert failure when called with state=remove and no node_id - name: assert failure when called with state=remove and no node_id
assert: assert:
that: that:
- 'output.failed' - 'output.failed'
- 'output.msg == "state is remove but all of the following are missing: node_id"' - 'output.msg == "state is remove but all of the following are missing: node_id"'
- name: Create a Swarm cluster - name: Create a Swarm cluster
docker_swarm: docker_swarm:
state: present state: present
register: output register: output
- name: assert changed when create a new swarm cluster - name: assert changed when create a new swarm cluster
assert: assert:
that: that:
- 'output.changed' - 'output.changed'
- 'output.actions[0] | regex_search("New Swarm cluster created: ")' - 'output.actions[0] | regex_search("New Swarm cluster created: ")'
- 'output.swarm_facts.JoinTokens.Manager' - 'output.swarm_facts.JoinTokens.Manager'
- 'output.swarm_facts.JoinTokens.Worker' - 'output.swarm_facts.JoinTokens.Worker'
- name: Remove a Swarm cluster - name: Remove a Swarm cluster
docker_swarm: docker_swarm:
state: absent state: absent
force: true force: true
register: output register: output
- name: assert changed when remove a swarm cluster - name: assert changed when remove a swarm cluster
assert: assert:
that: that:
- 'output.changed' - 'output.changed'
- 'output.actions[0] == "Node has leaved the swarm cluster"' - 'output.actions[0] == "Node has leaved the swarm cluster"'
always:
- name: Cleanup
docker_swarm:
state: absent
force: true

View file

@ -1,4 +1,6 @@
- include_tasks: test_swarm_service.yml - include_tasks: test_swarm_service.yml
when: # Maximum of 2.0.0 (docker-py version for docker_swarm_service) and 2.6.0 (docker-py version for docker_swarm) is 2.6.0
- ansible_os_family != 'RedHat' or ansible_distribution_major_version != '6' when: docker_py_version is version('2.6.0', '>=') and docker_api_version is version('1.35', '>=')
- ansible_distribution != 'Fedora' or ansible_distribution_major_version|int >= 26
- fail: msg="Too old docker / docker-py version to run docker_swarm_service tests!"
when: not(docker_py_version is version('2.6.0', '>=') and docker_api_version is version('1.35', '>=')) and (ansible_distribution != 'CentOS' or ansible_distribution_major_version|int > 6)

View file

@ -1,122 +1,125 @@
- name: Create a Swarm cluster ---
docker_swarm: - block:
state: present - name: Create a Swarm cluster
advertise_addr: "{{ansible_default_ipv4.address}}" docker_swarm:
state: present
advertise_addr: "{{ansible_default_ipv4.address}}"
- name: Create a swarm service without name - name: Create a swarm service without name
register: output register: output
docker_swarm_service: docker_swarm_service:
state: present state: present
ignore_errors: yes ignore_errors: yes
- name: assert failure when name not set - name: assert failure when name not set
assert: assert:
that: that:
- output is failed - output is failed
- 'output.msg == "missing required arguments: name"' - 'output.msg == "missing required arguments: name"'
- name: Remove an non-existing service - name: Remove an non-existing service
register: output register: output
docker_swarm_service: docker_swarm_service:
state: absent state: absent
name: non_existing_service name: non_existing_service
- name: assert output not changed when deleting non-existing service - name: assert output not changed when deleting non-existing service
assert: assert:
that: that:
- output is not changed - output is not changed
- name: create sample service - name: create sample service
register: output register: output
docker_swarm_service: docker_swarm_service:
name: test_service name: test_service
endpoint_mode: dnsrr endpoint_mode: dnsrr
image: busybox image: busybox
args: args:
- sleep - sleep
- "3600" - "3600"
- name: assert sample service is created - name: assert sample service is created
assert: assert:
that: that:
- output is changed - output is changed
- name: change service args - name: change service args
register: output register: output
docker_swarm_service: docker_swarm_service:
name: test_service name: test_service
image: busybox image: busybox
args: args:
- sleep - sleep
- "1800" - "1800"
- name: assert service args are correct - name: assert service args are correct
assert: assert:
that: that:
- output.ansible_docker_service.args == ['sleep', '1800'] - output.ansible_docker_service.args == ['sleep', '1800']
- name: set service mode to global - name: set service mode to global
register: output register: output
docker_swarm_service: docker_swarm_service:
name: test_service name: test_service
image: busybox image: busybox
endpoint_mode: vip endpoint_mode: vip
mode: global mode: global
args: args:
- sleep - sleep
- "1800" - "1800"
- name: assert service mode changed caused service rebuild - name: assert service mode changed caused service rebuild
assert: assert:
that: that:
- output.rebuilt - output.rebuilt
- name: add published ports to service - name: add published ports to service
register: output register: output
docker_swarm_service: docker_swarm_service:
name: test_service name: test_service
image: busybox image: busybox
mode: global mode: global
args: args:
- sleep - sleep
- "1800" - "1800"
endpoint_mode: vip endpoint_mode: vip
publish: publish:
- protocol: tcp - protocol: tcp
published_port: 60001 published_port: 60001
target_port: 60001 target_port: 60001
- protocol: udp - protocol: udp
published_port: 60001 published_port: 60001
target_port: 60001 target_port: 60001
- name: assert service matches expectations - name: assert service matches expectations
assert: assert:
that: that:
- output.ansible_docker_service == service_expected_output - output.ansible_docker_service == service_expected_output
- name: delete sample service - name: delete sample service
register: output register: output
docker_swarm_service: docker_swarm_service:
name: test_service name: test_service
state: absent state: absent
- name: assert service deletion returns changed - name: assert service deletion returns changed
assert: assert:
that: that:
- output is success - output is success
- output is changed - output is changed
- name: Remove the Swarm cluster - name: Remove the Swarm cluster
docker_swarm: docker_swarm:
state: absent state: absent
force: true force: true
- name: Try reitializing the swarm cluster - name: Try reitializing the swarm cluster
docker_swarm: docker_swarm:
state: present state: present
advertise_addr: "{{ansible_default_ipv4.address}}" advertise_addr: "{{ansible_default_ipv4.address}}"
- name: Clean the docker daemon status always:
docker_swarm: - name: Clean the docker daemon status
state: absent docker_swarm:
force: true state: absent
force: true

View file

@ -20,5 +20,7 @@
force: yes force: yes
with_items: "{{ vnames }}" with_items: "{{ vnames }}"
# Skip for CentOS 6 when: docker_py_version is version('1.10.0', '>=') and docker_api_version is version('1.20', '>=') # FIXME: find out API version!
when: ansible_distribution != 'CentOS' or ansible_distribution_major_version|int > 6
- fail: msg="Too old docker / docker-py version to run docker_volume tests!"
when: not(docker_py_version is version('1.10.0', '>=') and docker_api_version is version('1.20', '>=')) and (ansible_distribution != 'CentOS' or ansible_distribution_major_version|int > 6)