gc-infra/iac/ansible/roles/docker_swarm/tasks/main.yml

58 lines
2.2 KiB
YAML

---
- name: SWARM | Ensure Docker SDK for Python is installed
ansible.builtin.apt:
name: python3-docker
state: present
- name: SWARM | Get interface IP address for the manager
ansible.builtin.set_fact:
manager_ip: "{{ hostvars[inventory_hostname]['ansible_' + private_interface]['ipv4']['address'] }}"
when: inventory_hostname == groups['managers'][0]
- name: SWARM | Initialize the Docker Swarm
community.docker.docker_swarm:
state: present
advertise_addr: "{{ manager_ip }}"
when: inventory_hostname == groups['managers'][0]
register: swarm_init_result
- name: SWARM | Get the join tokens
community.docker.docker_swarm_info:
register: swarm_info
when: inventory_hostname == groups['managers'][0]
- name: SWARM | Verify that join tokens were fetched
ansible.builtin.assert:
that:
- swarm_info is defined
- swarm_info.swarm_facts is defined
- swarm_info.swarm_facts.JoinTokens.Manager is defined
- swarm_info.swarm_facts.JoinTokens.Worker is defined
fail_msg: "Konnte die Join-Tokens vom Swarm Manager nicht abrufen. Ist der Swarm korrekt initialisiert?"
success_msg: "Join-Tokens erfolgreich abgerufen."
when: inventory_hostname == groups['managers'][0]
- name: SWARM | Join manager nodes to the Swarm
community.docker.docker_swarm:
state: join
remote_addrs: [ "{{ hostvars[groups['managers'][0]]['manager_ip'] }}:2377" ]
join_token: "{{ hostvars[groups['managers'][0]]['swarm_info']['swarm_facts']['JoinTokens']['Manager'] }}"
when: inventory_hostname in groups['managers']
- name: SWARM | Join worker nodes to the Swarm
community.docker.docker_swarm:
state: join
remote_addrs: [ "{{ hostvars[groups['managers'][0]]['manager_ip'] }}:2377" ]
join_token: "{{ hostvars[groups['managers'][0]]['swarm_info']['swarm_facts']['JoinTokens']['Worker'] }}"
when: inventory_hostname in groups['workers']
- name: SWARM | Verify Swarm Cluster State (run on manager)
ansible.builtin.command: docker node ls
register: swarm_nodes
changed_when: false
when: inventory_hostname == groups['managers'][0]
- name: SWARM | Display cluster state
ansible.builtin.debug:
msg: "{{ swarm_nodes.stdout_lines }}"
when: inventory_hostname == groups['managers'][0]