106 lines
3.2 KiB
YAML
106 lines
3.2 KiB
YAML
---
|
|
- name: Create a custom Swarm network.
|
|
docker_network:
|
|
name: docker_gwbridge
|
|
driver_options:
|
|
com.docker.network.bridge.enable_icc: "false"
|
|
com.docker.network.bridge.enable_ip_masquerade: "true"
|
|
com.docker.network.bridge.name: docker_gwbridge
|
|
ipam_options:
|
|
subnet: "{{ docker_swarm_network }}"
|
|
gateway: "{{ docker_swarm_network | ipaddr('net') | ipaddr('1') | ipaddr('ip') }}"
|
|
when: docker_swarm_network is defined and docker_swarm_network | ipaddr('net')
|
|
tags:
|
|
- docker
|
|
- docker_swarm
|
|
- docker_swarm_init
|
|
|
|
- name: Check if "Swarm Mode" is enabled.
|
|
shell: docker info
|
|
changed_when: false
|
|
check_mode: false
|
|
register: docker_info
|
|
tags:
|
|
- docker
|
|
- docker_swarm
|
|
- docker_swarm_init
|
|
|
|
- name: Init "Swarm Mode" on the first manager.
|
|
shell: docker swarm init
|
|
--listen-addr {{ docker_swarm_addr }}:{{ docker_swarm_port }}
|
|
--advertise-addr {{ docker_swarm_addr }}
|
|
when: "docker_info.stdout.find('Swarm: active') == -1
|
|
and inventory_hostname == groups['docker_swarm_manager'][0]"
|
|
tags:
|
|
- docker
|
|
- docker_swarm
|
|
- docker_swarm_init
|
|
|
|
- name: Get the worker join-token.
|
|
shell: docker swarm join-token -q worker
|
|
changed_when: false
|
|
check_mode: false
|
|
register: docker_worker_token
|
|
delegate_to: "{{ groups['docker_swarm_manager'][0] }}"
|
|
delegate_facts: true
|
|
when: "'docker_swarm_worker' in group_names"
|
|
tags:
|
|
- docker
|
|
- docker_swarm
|
|
- docker_swarm_init
|
|
|
|
- name: Get the manager join-token.
|
|
shell: docker swarm join-token -q manager
|
|
changed_when: false
|
|
check_mode: false
|
|
register: docker_manager_token
|
|
delegate_to: "{{ groups['docker_swarm_manager'][0] }}"
|
|
delegate_facts: true
|
|
when: "'docker_swarm_manager' in group_names
|
|
and inventory_hostname != groups['docker_swarm_manager'][0]"
|
|
tags:
|
|
- docker
|
|
- docker_swarm
|
|
- docker_swarm_init
|
|
|
|
- name: Declare the address of the first Swarm manager as a fact.
|
|
set_fact:
|
|
docker_manager_address: "{{ groups['docker_swarm_manager'][0] }}:{{ docker_swarm_port }}"
|
|
check_mode: false
|
|
tags:
|
|
- docker
|
|
- docker_swarm
|
|
- docker_swarm_init
|
|
|
|
- name: Join the pending Swarm worker nodes.
|
|
shell: docker swarm join
|
|
--listen-addr {{ docker_swarm_addr }}:{{ docker_swarm_port }}
|
|
--advertise-addr {{ docker_swarm_addr }}
|
|
--token "{{ docker_worker_token.stdout }}"
|
|
{{ docker_manager_address }}
|
|
changed_when: false
|
|
when: "docker_info.stdout.find('Swarm: active') == -1
|
|
and docker_info.stdout.find('Swarm: pending') == -1
|
|
and 'docker_swarm_worker' in group_names
|
|
and 'docker_swarm_manager' not in group_names"
|
|
tags:
|
|
- docker
|
|
- docker_swarm
|
|
- docker_swarm_init
|
|
|
|
- name: Join the pending Swarm manager nodes.
|
|
shell: docker swarm join
|
|
--listen-addr {{ docker_swarm_addr }}:{{ docker_swarm_port }}
|
|
--advertise-addr {{ docker_swarm_addr }}
|
|
--token "{{ docker_manager_token.stdout }}"
|
|
{{ docker_manager_address }}
|
|
changed_when: false
|
|
when: "docker_info.stdout.find('Swarm: active') == -1
|
|
and docker_info.stdout.find('Swarm: pending') == -1
|
|
and 'docker_swarm_manager' in group_names
|
|
and inventory_hostname != groups['docker_swarm_manager'][0]"
|
|
tags:
|
|
- docker
|
|
- docker_swarm
|
|
- docker_swarm_init
|