Docker swarm service integration tests (#45674)

* integration test for docker_swarm_service

* ensure stack de-initialization

* Set default value for 'configs' parameter to None

Docker-py uses None as a default value for configs.
Using the same default here allows to create services on older docker
setups (docker_api<1.30).

* Set default value for 'update_order' parameter to None

Docker-py uses None as a default value for update_order.
Using the same default here allows to create services on older docker
setups (docker_api<1.29)

* Set default value for 'publish.mode' parameter to None

Docker-py uses None as a default value for publish_mode.
Using the same default here allows to create services on older docker
setups (docker_api<1.32)

* Allow tests to run on older version of docker.

* remove workarounds for old docker versions

* test correct swarm cleanup

* changelog fragment for docker_swarm_service defaults change
This commit is contained in:
Dario Zanzico
2018-10-29 12:28:51 +01:00
committed by John R Barker
parent bba8c23585
commit 2162d7d4de
7 changed files with 221 additions and 38 deletions

View File

@@ -0,0 +1,4 @@
shippable/posix/group2
skip/osx
skip/freebsd
destructive

View File

@@ -0,0 +1,3 @@
---
dependencies:
- setup_docker

View File

@@ -0,0 +1,4 @@
- include_tasks: test_swarm_service.yml
when:
- ansible_os_family != 'RedHat' or ansible_distribution_major_version != '6'
- ansible_distribution != 'Fedora' or ansible_distribution_major_version|int >= 26

View File

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

View File

@@ -0,0 +1,38 @@
service_expected_output:
args: [sleep, '1800']
configs: null
constraints: []
container_labels: {}
dns: []
dns_options: []
dns_search: []
endpoint_mode: vip
env: []
force_update: null
hostname: ''
image: busybox
labels: {}
limit_cpu: 0.0
limit_memory: 0
log_driver: json-file
log_driver_options: {}
mode: global
mounts: []
networks: []
publish:
- {mode: null, protocol: tcp, published_port: 60001, target_port: 60001}
- {mode: null, protocol: udp, published_port: 60001, target_port: 60001}
replicas: null
reserve_cpu: 0.0
reserve_memory: 0
restart_policy: none
restart_policy_attempts: 0
restart_policy_delay: 0
restart_policy_window: 0
tty: false
update_delay: 10
update_failure_action: continue
update_max_failure_ratio: 0.0
update_monitor: 5000000000
update_order: null
update_parallelism: 1