a096cd08c5
* docker_swarm_service: Sort lists when checking for changes When two lists are checked for changes in this module, the lists are reported changed when the order of the items is different. This PR resolves this issue. * docker_swarm_service: Minor typo fix * docker_swarm_service: Another minor typo * docker_swarm_service: Should use sorted(), not sort() * docker_swarm_service: Sort lists of dictionaries * docker_swarm_service: Fix style issues in tests * docker_swarm_service: Updates to integration tests * docker_swarm_service: Casting string types within lists when comparing * docker_swarm_service: Special handling of unordered networks with ordered aliases * docker_swarm_service: Sorting network lists * docker_swarm_serivce: Better unit test code coverage for lists and networks * docker_swarm_service: Fixed coding style for sanity tests * docker_swarm_service: More coding style fixes * docker_swarm_service: Ignoring test for Python < 3 * docker_swarm_service: Update to version info check for backwards compatibility * docker_swarm_service: Added change fragment #63887 * docker_swarm_service: Better handling of missing sort key for dictionary of lists * docker_swarm_service: Preventing sorts from modifying in-place Co-Authored-By: Felix Fontein <felix@fontein.de> * docker_swarm_service: Removed spurious import in test * docker_swarm_service: Preventing sorts from modifying more data in-place Co-Authored-By: Felix Fontein <felix@fontein.de>
214 lines
5.7 KiB
YAML
214 lines
5.7 KiB
YAML
---
|
|
|
|
- name: Registering service name
|
|
set_fact:
|
|
service_name: "{{ name_prefix ~ '-placement' }}"
|
|
|
|
- name: Registering service name
|
|
set_fact:
|
|
service_names: "{{ service_names + [service_name] }}"
|
|
|
|
|
|
####################################################################
|
|
## placement.preferences ###########################################
|
|
####################################################################
|
|
|
|
- name: placement.preferences
|
|
docker_swarm_service:
|
|
name: "{{ service_name }}"
|
|
image: alpine:3.8
|
|
resolve_image: no
|
|
command: '/bin/sh -v -c "sleep 10m"'
|
|
placement:
|
|
preferences:
|
|
- spread: "node.labels.test"
|
|
register: placement_preferences_1
|
|
ignore_errors: yes
|
|
|
|
- name: placement.preferences (idempotency)
|
|
docker_swarm_service:
|
|
name: "{{ service_name }}"
|
|
image: alpine:3.8
|
|
resolve_image: no
|
|
command: '/bin/sh -v -c "sleep 10m"'
|
|
placement:
|
|
preferences:
|
|
- spread: "node.labels.test"
|
|
register: placement_preferences_2
|
|
ignore_errors: yes
|
|
|
|
- name: placement.preferences (change)
|
|
docker_swarm_service:
|
|
name: "{{ service_name }}"
|
|
image: alpine:3.8
|
|
resolve_image: no
|
|
command: '/bin/sh -v -c "sleep 10m"'
|
|
placement:
|
|
preferences:
|
|
- spread: "node.labels.test2"
|
|
register: placement_preferences_3
|
|
ignore_errors: yes
|
|
|
|
- name: placement.preferences (empty)
|
|
docker_swarm_service:
|
|
name: "{{ service_name }}"
|
|
image: alpine:3.8
|
|
resolve_image: no
|
|
command: '/bin/sh -v -c "sleep 10m"'
|
|
placement:
|
|
preferences: []
|
|
register: placement_preferences_4
|
|
ignore_errors: yes
|
|
|
|
- name: placement.preferences (empty idempotency)
|
|
docker_swarm_service:
|
|
name: "{{ service_name }}"
|
|
image: alpine:3.8
|
|
resolve_image: no
|
|
command: '/bin/sh -v -c "sleep 10m"'
|
|
placement:
|
|
preferences: []
|
|
register: placement_preferences_5
|
|
ignore_errors: yes
|
|
|
|
- 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
|
|
- placement_preferences_4 is changed
|
|
- placement_preferences_5 is not changed
|
|
when: docker_api_version is version('1.27', '>=') and docker_py_version is version('2.4.0', '>=')
|
|
- assert:
|
|
that:
|
|
- placement_preferences_1 is failed
|
|
- "'Minimum version required' in placement_preferences_1.msg"
|
|
when: docker_api_version is version('1.27', '<') or docker_py_version is version('2.4.0', '<')
|
|
|
|
####################################################################
|
|
## placement.constraints #####################################################
|
|
####################################################################
|
|
|
|
- name: placement.constraints
|
|
docker_swarm_service:
|
|
name: "{{ service_name }}"
|
|
image: alpine:3.8
|
|
resolve_image: no
|
|
command: '/bin/sh -v -c "sleep 10m"'
|
|
placement:
|
|
constraints:
|
|
- "node.role == manager"
|
|
register: constraints_1
|
|
ignore_errors: yes
|
|
|
|
- name: placement.constraints (idempotency)
|
|
docker_swarm_service:
|
|
name: "{{ service_name }}"
|
|
image: alpine:3.8
|
|
resolve_image: no
|
|
command: '/bin/sh -v -c "sleep 10m"'
|
|
placement:
|
|
constraints:
|
|
- "node.role == manager"
|
|
register: constraints_2
|
|
ignore_errors: yes
|
|
|
|
- name: constraints (idempotency, old name)
|
|
docker_swarm_service:
|
|
name: "{{ service_name }}"
|
|
image: alpine:3.8
|
|
resolve_image: no
|
|
command: '/bin/sh -v -c "sleep 10m"'
|
|
constraints:
|
|
- "node.role == manager"
|
|
register: constraints_2b
|
|
ignore_errors: yes
|
|
|
|
- name: placement.constraints (change)
|
|
docker_swarm_service:
|
|
name: "{{ service_name }}"
|
|
image: alpine:3.8
|
|
resolve_image: no
|
|
command: '/bin/sh -v -c "sleep 10m"'
|
|
placement:
|
|
constraints:
|
|
- "node.role == worker"
|
|
register: constraints_3
|
|
ignore_errors: yes
|
|
|
|
- name: placement.constraints (add)
|
|
docker_swarm_service:
|
|
name: "{{ service_name }}"
|
|
image: alpine:3.8
|
|
resolve_image: no
|
|
command: '/bin/sh -v -c "sleep 10m"'
|
|
placement:
|
|
constraints:
|
|
- "node.role == worker"
|
|
- "node.label != non_existent_label"
|
|
register: constraints_4
|
|
ignore_errors: yes
|
|
|
|
- name: placement.constraints (order idempotency)
|
|
docker_swarm_service:
|
|
name: "{{ service_name }}"
|
|
image: alpine:3.8
|
|
resolve_image: no
|
|
command: '/bin/sh -v -c "sleep 10m"'
|
|
placement:
|
|
constraints:
|
|
- "node.label != non_existent_label"
|
|
- "node.role == worker"
|
|
register: constraints_5
|
|
ignore_errors: yes
|
|
|
|
- name: placement.constraints (empty)
|
|
docker_swarm_service:
|
|
name: "{{ service_name }}"
|
|
image: alpine:3.8
|
|
resolve_image: no
|
|
command: '/bin/sh -v -c "sleep 10m"'
|
|
placement:
|
|
constraints: []
|
|
register: constraints_6
|
|
ignore_errors: yes
|
|
|
|
- name: placement.constraints (empty idempotency)
|
|
docker_swarm_service:
|
|
name: "{{ service_name }}"
|
|
image: alpine:3.8
|
|
resolve_image: no
|
|
command: '/bin/sh -v -c "sleep 10m"'
|
|
placement:
|
|
constraints: []
|
|
register: constraints_7
|
|
ignore_errors: yes
|
|
|
|
- name: cleanup
|
|
docker_swarm_service:
|
|
name: "{{ service_name }}"
|
|
state: absent
|
|
diff: no
|
|
|
|
- assert:
|
|
that:
|
|
- constraints_1 is changed
|
|
- constraints_2 is not changed
|
|
- constraints_2b is not changed
|
|
- constraints_3 is changed
|
|
- constraints_4 is changed
|
|
- constraints_5 is not changed
|
|
- constraints_6 is changed
|
|
- constraints_7 is not changed
|
|
when: docker_api_version is version('1.27', '>=') and docker_py_version is version('2.4.0', '>=')
|
|
- assert:
|
|
that:
|
|
- constraints_1 is failed
|
|
- "'Minimum version required' in constraints_1.msg"
|
|
when: docker_api_version is version('1.27', '<') or docker_py_version is version('2.4.0', '<')
|