community.docker/tests/integration/targets/docker_node/tasks/test_node.yml
Felix Fontein 95bdce75e6
Add ansible-lint to CI (#1181)
* Improve Ansible code.

* Add some ansible-lint ignores.

* Add ansible-lint to CI.
2025-10-25 11:07:40 +02:00

845 lines
30 KiB
YAML

---
# Copyright (c) Ansible Project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
- block:
- name: Make sure we're not already using Docker swarm
community.docker.docker_swarm:
state: absent
force: true
- name: Try to get docker_node_info when docker is not running in swarm mode
community.docker.docker_node_info:
ignore_errors: true
register: output
- name: assert failure when called when swarm is not in use or not run on manager node
ansible.builtin.assert:
that:
- 'output is failed'
- 'output.msg == "Error running docker swarm module: must run on swarm manager node"'
- name: Create a Swarm cluster
community.docker.docker_swarm:
state: present
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
register: output
- name: assert changed when create a new swarm cluster
ansible.builtin.assert:
that:
- 'output is changed'
- '(output.actions[0] | regex_search("New Swarm cluster created: ")) is truthy'
- 'output.swarm_facts.JoinTokens.Manager is truthy'
- 'output.swarm_facts.JoinTokens.Worker is truthy'
- name: Try to get docker_node_info when docker is running in swarm mode and as manager
community.docker.docker_node_info:
register: output
- name: assert reading docker swarm node facts
ansible.builtin.assert:
that:
- 'output.nodes | length > 0'
- 'output.nodes[0].ID is string'
- name: Register node ID
ansible.builtin.set_fact:
nodeid: "{{ output.nodes[0].ID }}"
####################################################################
## Set node as swarm manager #######################################
####################################################################
- name: Try to set node as manager (check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
role: manager
check_mode: true
register: set_as_manager_1
- name: Try to set node as manager
community.docker.docker_node:
hostname: "{{ nodeid }}"
role: manager
register: set_as_manager_2
- name: Try to set node as manager (idempotent)
community.docker.docker_node:
hostname: "{{ nodeid }}"
role: manager
register: set_as_manager_3
- name: Try to set node as manager (idempotent check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
role: manager
check_mode: true
register: set_as_manager_4
- name: assert that node role does has not changed
ansible.builtin.assert:
that:
- 'set_as_manager_1 is not changed'
- 'set_as_manager_2 is not changed'
- 'set_as_manager_3 is not changed'
- 'set_as_manager_4 is not changed'
- 'set_as_manager_1.node.Spec.Role == "manager"'
- 'set_as_manager_2.node.Spec.Role == "manager"'
- 'set_as_manager_3.node.Spec.Role == "manager"'
- 'set_as_manager_4.node.Spec.Role == "manager"'
####################################################################
## Set node as swarm worker ########################################
####################################################################
- name: Try to set node as worker (check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
role: worker
check_mode: true
register: set_as_worker_1
- name: Try to set node as worker
community.docker.docker_node:
hostname: "{{ nodeid }}"
role: worker
ignore_errors: true
register: set_as_worker_2
- name: assert that node cannot change role to worker
ansible.builtin.assert:
that:
- 'set_as_worker_1 is changed'
- 'set_as_worker_2 is failed'
- '(set_as_worker_2.msg | regex_search("attempting to demote the last manager of the swarm")) is truthy'
####################################################################
## Set node as pasued ##############################################
####################################################################
- name: Try to set node availability as paused (check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
availability: pause
check_mode: true
register: set_as_paused_1
- name: Try to set node availability as paused
community.docker.docker_node:
hostname: "{{ nodeid }}"
availability: pause
register: set_as_paused_2
- name: Try to set node availability as paused (idempotent)
community.docker.docker_node:
hostname: "{{ nodeid }}"
availability: pause
register: set_as_paused_3
- name: Try to set node availability as paused (idempotent check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
availability: pause
check_mode: true
register: set_as_paused_4
- name: assert node changed availability to paused
ansible.builtin.assert:
that:
- 'set_as_paused_1 is changed'
- 'set_as_paused_2 is changed'
- 'set_as_paused_3 is not changed'
- 'set_as_paused_4 is not changed'
- 'set_as_paused_2.node.Spec.Availability == "pause"'
####################################################################
## Set node as drained #############################################
####################################################################
- name: Try to set node availability as drained (check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
availability: drain
check_mode: true
register: output_drain_1
- name: Try to set node availability as drained
community.docker.docker_node:
hostname: "{{ nodeid }}"
availability: drain
register: output_drain_2
- name: Try to set node availability as drained (idempotent)
community.docker.docker_node:
hostname: "{{ nodeid }}"
availability: drain
register: output_drain_3
- name: Try to set node availability as drained (idempotent check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
availability: drain
check_mode: true
register: output_drain_4
- name: assert node changed availability to drained
ansible.builtin.assert:
that:
- 'output_drain_1 is changed'
- 'output_drain_2 is changed'
- 'output_drain_3 is not changed'
- 'output_drain_4 is not changed'
- 'output_drain_2.node.Spec.Availability == "drain"'
####################################################################
## Set node as active ##############################################
####################################################################
- name: Try to set node availability as active (check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
availability: active
check_mode: true
register: output_active_1
- name: Try to set node availability as active
community.docker.docker_node:
hostname: "{{ nodeid }}"
availability: active
register: output_active_2
- name: Try to set node availability as active (idempotent)
community.docker.docker_node:
hostname: "{{ nodeid }}"
availability: active
register: output_active_3
- name: Try to set node availability as active (idempotent check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
availability: active
check_mode: true
register: output_active_4
- name: assert node changed availability to active
ansible.builtin.assert:
that:
- 'output_active_1 is changed'
- 'output_active_2 is changed'
- 'output_active_3 is not changed'
- 'output_active_4 is not changed'
- 'output_active_2.node.Spec.Availability == "active"'
####################################################################
## Add single label ###############################################
####################################################################
- name: Try to add single label to swarm node (check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels:
label1: value1
check_mode: true
register: output_add_single_label_1
- name: Try to add single label to swarm node
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels:
label1: value1
register: output_add_single_label_2
- name: Try to add single label to swarm node (idempotent)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels:
label1: value1
register: output_add_single_label_3
- name: Try to add single label to swarm node (idempotent check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels:
label1: value1
check_mode: true
register: output_add_single_label_4
- name: assert adding single label to swarm node
ansible.builtin.assert:
that:
- 'output_add_single_label_1 is changed'
- 'output_add_single_label_2 is changed'
- 'output_add_single_label_3 is not changed'
- 'output_add_single_label_4 is not changed'
- 'output_add_single_label_2.node.Spec.Labels | length == 1'
- 'output_add_single_label_2.node.Spec.Labels.label1 == "value1"'
####################################################################
## Add multiple labels #############################################
####################################################################
- name: Try to add five labels to swarm node (check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels:
label2: value2
label3: value3
label4: value4
label5: value5
label6: value6
check_mode: true
register: output_add_multiple_labels_1
- name: Try to add five labels to swarm node
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels:
label2: value2
label3: value3
label4: value4
label5: value5
label6: value6
register: output_add_multiple_labels_2
- name: Try to add five labels to swarm node (idempotent)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels:
label2: value2
label3: value3
label4: value4
label5: value5
label6: value6
register: output_add_multiple_labels_3
- name: Try to add five labels to swarm node (idempotent check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels:
label2: value2
label3: value3
label4: value4
label5: value5
label6: value6
check_mode: true
register: output_add_multiple_labels_4
- name: assert adding multiple labels to swarm node
ansible.builtin.assert:
that:
- 'output_add_multiple_labels_1 is changed'
- 'output_add_multiple_labels_2 is changed'
- 'output_add_multiple_labels_3 is not changed'
- 'output_add_multiple_labels_4 is not changed'
- 'output_add_multiple_labels_2.node.Spec.Labels | length == 6'
- 'output_add_multiple_labels_2.node.Spec.Labels.label1 == "value1"'
- 'output_add_multiple_labels_2.node.Spec.Labels.label6 == "value6"'
####################################################################
## Update label value ##############################################
####################################################################
- name: Update value of existing label (check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels:
label1: value1111
check_mode: true
register: output_update_label_1
- name: Update value of existing label
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels:
label1: value1111
register: output_update_label_2
- name: Update value of existing label (idempotent)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels:
label1: value1111
register: output_update_label_3
- name: Update value of existing label (idempotent check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels:
label1: value1111
check_mode: true
register: output_update_label_4
- name: assert updating single label assigned to swarm node
ansible.builtin.assert:
that:
- 'output_update_label_1 is changed'
- 'output_update_label_2 is changed'
- 'output_update_label_3 is not changed'
- 'output_update_label_4 is not changed'
- 'output_update_label_2.node.Spec.Labels | length == 6'
- 'output_update_label_2.node.Spec.Labels.label1 == "value1111"'
- 'output_update_label_2.node.Spec.Labels.label5 == "value5"'
####################################################################
## Update multiple labels values ###################################
####################################################################
- name: Update value of multiple existing label (check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels:
label2: value2222
label3: value3333
check_mode: true
register: output_update_labels_1
- name: Update value of multiple existing label
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels:
label2: value2222
label3: value3333
register: output_update_labels_2
- name: Update value of multiple existing label (idempotent)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels:
label2: value2222
label3: value3333
register: output_update_labels_3
- name: Update value of multiple existing label (idempotent check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels:
label2: value2222
label3: value3333
check_mode: true
register: output_update_labels_4
- name: assert updating multiple labels assigned to swarm node
ansible.builtin.assert:
that:
- 'output_update_labels_1 is changed'
- 'output_update_labels_2 is changed'
- 'output_update_labels_3 is not changed'
- 'output_update_labels_4 is not changed'
- 'output_update_labels_2.node.Spec.Labels | length == 6'
- 'output_update_labels_2.node.Spec.Labels.label1 == "value1111"'
- 'output_update_labels_2.node.Spec.Labels.label3 == "value3333"'
- 'output_update_labels_2.node.Spec.Labels.label5 == "value5"'
####################################################################
## Remove single label #############################################
####################################################################
- name: Try to remove single existing label from swarm node (check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels_to_remove:
- label1
check_mode: true
register: output_remove_label_1
- name: Try to remove single existing label from swarm node
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels_to_remove:
- label1
register: output_remove_label_2
- name: Try to remove single existing label from swarm node (idempotent)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels_to_remove:
- label1
register: output_remove_label_3
- name: Try to remove single existing label from swarm node (idempotent check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels_to_remove:
- label1
check_mode: true
register: output_remove_label_4
- name: assert removing single label from swarm node
ansible.builtin.assert:
that:
- 'output_remove_label_1 is changed'
- 'output_remove_label_2 is changed'
- 'output_remove_label_3 is not changed'
- 'output_remove_label_4 is not changed'
- 'output_remove_label_2.node.Spec.Labels | length == 5'
- '"label1" not in output_remove_label_2.node.Spec.Labels'
- 'output_remove_label_2.node.Spec.Labels.label3 == "value3333"'
- 'output_remove_label_2.node.Spec.Labels.label5 == "value5"'
####################################################################
## Remove single not assigned to swarm label #######################
####################################################################
- name: Try to remove single non-existing label from swarm node (check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels_to_remove:
- labelnotexist
check_mode: true
register: output_remove_nonexist_label_1
- name: Try to remove single non-existing label from swarm node
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels_to_remove:
- labelnotexist
register: output_remove_nonexist_label_2
- name: Try to remove single non-existing label from swarm node (idempotent)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels_to_remove:
- labelnotexist
register: output_remove_nonexist_label_3
- name: Try to remove single non-existing label from swarm node (idempotent check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels_to_remove:
- labelnotexist
check_mode: true
register: output_remove_nonexist_label_4
- name: assert removing single non-existing label from swarm node
ansible.builtin.assert:
that:
- 'output_remove_nonexist_label_1 is not changed'
- 'output_remove_nonexist_label_2 is not changed'
- 'output_remove_nonexist_label_3 is not changed'
- 'output_remove_nonexist_label_4 is not changed'
- 'output_remove_nonexist_label_2.node.Spec.Labels | length == 5'
- '"label1" not in output_remove_nonexist_label_2.node.Spec.Labels'
- 'output_remove_nonexist_label_2.node.Spec.Labels.label3 == "value3333"'
- 'output_remove_nonexist_label_2.node.Spec.Labels.label5 == "value5"'
####################################################################
## Remove multiple labels ##########################################
####################################################################
- name: Try to remove two existing labels from swarm node (check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels_to_remove:
- label2
- label3
check_mode: true
register: output_remove_label_1
- name: Try to remove two existing labels from swarm node
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels_to_remove:
- label2
- label3
register: output_remove_label_2
- name: Try to remove two existing labels from swarm node (idempotent)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels_to_remove:
- label2
- label3
register: output_remove_label_3
- name: Try to remove two existing labels from swarm node (idempotent check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels_to_remove:
- label2
- label3
check_mode: true
register: output_remove_label_4
- name: assert removing multiple labels from swarm node
ansible.builtin.assert:
that:
- 'output_remove_label_1 is changed'
- 'output_remove_label_2 is changed'
- 'output_remove_label_3 is not changed'
- 'output_remove_label_4 is not changed'
- 'output_remove_label_2.node.Spec.Labels | length == 3'
- '"label1" not in output_remove_label_2.node.Spec.Labels'
- '"label2" not in output_remove_label_2.node.Spec.Labels'
- 'output_remove_label_2.node.Spec.Labels.label5 == "value5"'
####################################################################
## Remove multiple labels, mix assigned and not assigned ##########
####################################################################
- name: Try to remove mix of existing amd non-existing labels from swarm node (check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels_to_remove:
- label4
- labelisnotthere
check_mode: true
register: output_remove_mix_labels_1
- name: Try to remove mix of existing amd non-existing labels from swarm node
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels_to_remove:
- label4
- labelisnotthere
register: output_remove_mix_labels_2
- name: Try to remove mix of existing amd non-existing labels from swarm node (idempotent)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels_to_remove:
- label4
- labelisnotthere
register: output_remove_mix_labels_3
- name: Try to remove mix of existing amd non-existing labels from swarm node (idempotent check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels_to_remove:
- label4
- labelisnotthere
check_mode: true
register: output_remove_mix_labels_4
- name: assert removing mix of existing and non-existing labels from swarm node
ansible.builtin.assert:
that:
- 'output_remove_mix_labels_1 is changed'
- 'output_remove_mix_labels_2 is changed'
- 'output_remove_mix_labels_3 is not changed'
- 'output_remove_mix_labels_4 is not changed'
- 'output_remove_mix_labels_2.node.Spec.Labels | length == 2'
- '"label1" not in output_remove_mix_labels_2.node.Spec.Labels'
- '"label4" not in output_remove_mix_labels_2.node.Spec.Labels'
- 'output_remove_mix_labels_2.node.Spec.Labels.label5 == "value5"'
####################################################################
## Add and remove labels ###########################################
####################################################################
- name: Try to add and remove nonoverlapping labels at the same time (check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels:
label7: value7
label8: value8
labels_to_remove:
- label5
check_mode: true
register: output_add_del_labels_1
- name: Try to add and remove nonoverlapping labels at the same time
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels:
label7: value7
label8: value8
labels_to_remove:
- label5
register: output_add_del_labels_2
- name: Try to add and remove nonoverlapping labels at the same time (idempotent)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels:
label7: value7
label8: value8
labels_to_remove:
- label5
register: output_add_del_labels_3
- name: Try to add and remove nonoverlapping labels at the same time (idempotent check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels:
label7: value7
label8: value8
labels_to_remove:
- label5
check_mode: true
register: output_add_del_labels_4
- name: assert adding and removing nonoverlapping labels from swarm node
ansible.builtin.assert:
that:
- 'output_add_del_labels_1 is changed'
- 'output_add_del_labels_2 is changed'
- 'output_add_del_labels_3 is not changed'
- 'output_add_del_labels_4 is not changed'
- 'output_add_del_labels_2.node.Spec.Labels | length == 3'
- '"label5" not in output_add_del_labels_2.node.Spec.Labels'
- 'output_add_del_labels_2.node.Spec.Labels.label8 == "value8"'
####################################################################
## Add and remove labels with label in both lists ##################
####################################################################
- name: Try to add or update and remove overlapping labels at the same time (check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels:
label22: value22
label6: value6666
labels_to_remove:
- label6
- label7
check_mode: true
register: output_add_del_overlap_labels_1
- name: Try to add or update and remove overlapping labels at the same time
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels:
label22: value22
label6: value6666
labels_to_remove:
- label6
- label7
register: output_add_del_overlap_labels_2
- name: Try to add or update and remove overlapping labels at the same time (idempotent)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels:
label22: value22
label6: value6666
labels_to_remove:
- label6
- label7
register: output_add_del_overlap_labels_3
- name: Try to add or update and remove overlapping labels at the same time (idempotent check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels:
label22: value22
label6: value6666
labels_to_remove:
- label6
- label7
check_mode: true
register: output_add_del_overlap_labels_4
- name: assert adding or updating and removing overlapping labels from swarm node
ansible.builtin.assert:
that:
- 'output_add_del_overlap_labels_1 is changed'
- 'output_add_del_overlap_labels_2 is changed'
- 'output_add_del_overlap_labels_3 is not changed'
- 'output_add_del_overlap_labels_4 is not changed'
- 'output_add_del_overlap_labels_2.node.Spec.Labels | length == 3'
- '"label7" not in output_add_del_overlap_labels_2.node.Spec.Labels'
- 'output_add_del_overlap_labels_2.node.Spec.Labels.label6 == "value6666"'
- 'output_add_del_overlap_labels_2.node.Spec.Labels.label22 == "value22"'
####################################################################
## Replace labels #############################################
####################################################################
- name: Replace labels on swarm node (check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels:
label11: value11
label12: value12
labels_state: replace
check_mode: true
register: output_replace_labels_1
- name: Replace labels on swarm node
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels:
label11: value11
label12: value12
labels_state: replace
register: output_replace_labels_2
- name: Replace labels on swarm node (idempotent)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels:
label11: value11
label12: value12
labels_state: replace
register: output_replace_labels_3
- name: Replace labels on swarm node (idempotent check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels:
label11: value11
label12: value12
labels_state: replace
check_mode: true
register: output_replace_labels_4
- name: assert replacing labels from swarm node
ansible.builtin.assert:
that:
- 'output_replace_labels_1 is changed'
- 'output_replace_labels_2 is changed'
- 'output_replace_labels_3 is not changed'
- 'output_replace_labels_4 is not changed'
- 'output_replace_labels_2.node.Spec.Labels | length == 2'
- '"label6" not in output_replace_labels_2.node.Spec.Labels'
- 'output_replace_labels_2.node.Spec.Labels.label12 == "value12"'
####################################################################
## Remove all labels #############################################
####################################################################
- name: Remove all labels from swarm node (check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels_state: replace
check_mode: true
register: output_remove_labels_1
- name: Remove all labels from swarm node
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels_state: replace
register: output_remove_labels_2
- name: Remove all labels from swarm node (idempotent)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels_state: replace
register: output_remove_labels_3
- name: Remove all labels from swarm node (idempotent check)
community.docker.docker_node:
hostname: "{{ nodeid }}"
labels_state: replace
check_mode: true
register: output_remove_labels_4
- name: assert removing all labels from swarm node
ansible.builtin.assert:
that:
- 'output_remove_labels_1 is changed'
- 'output_remove_labels_2 is changed'
- 'output_remove_labels_3 is not changed'
- 'output_remove_labels_4 is not changed'
- 'output_remove_labels_2.node.Spec.Labels | length == 0'
always:
- name: Cleanup
community.docker.docker_swarm:
state: absent
force: true