58 lines
2.2 KiB
YAML
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] |