terraform/swarm_basic_aws/swarm.yml
# inspirated by:
# https://github.com/rsmitty/cross-cloud-swarm/blob/master/02-create-inv.tf
---
- name: Install Ansible Prereqs
hosts: swarm_master:swarm_nodes
gather_facts: no
tasks:
- raw: "apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y python-minimal python-pip"
- name: Install Docker Prereqs
hosts: swarm_master:swarm_managers:swarm_nodes
gather_facts: yes
tasks:
- package:
name: "{{item}}"
state: latest
with_items:
- apt-transport-https
- ca-certificates
- curl
- software-properties-common
- apt_key:
url: "https://download.docker.com/linux/ubuntu/gpg"
state: present
- apt_repository:
repo: "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable"
state: present
- name: Install Docker
hosts: swarm_master:swarm_managers:swarm_nodes
gather_facts: yes
tasks:
- package:
name: "docker-ce"
state: latest
- user:
name: "{{ ansible_ssh_user }}"
groups: docker
append: yes
- name: Initialize Swarm Master
hosts: swarm_master
gather_facts: yes
tasks:
- command: "docker swarm init --advertise-addr {{inventory_hostname}}"
- command: "docker swarm join-token -q worker"
register: worker_token
- set_fact: workertoken="{{worker_token.stdout}}"
- command: "docker swarm join-token -q manager"
register: manager_token
- set_fact: managertoken="{{manager_token.stdout}}"
- name: Join Swarm Managers
hosts: swarm_managers
gather_facts: yes
tasks:
- command: "docker swarm join --advertise-addr {{inventory_hostname}} --token {{hostvars[groups['swarm_master'][0]].managertoken}} {{hostvars[groups['swarm_master'][0]].inventory_hostname}}:2377"
- name: Join Swarm Nodes
hosts: swarm_nodes
gather_facts: yes
tasks:
- command: "docker swarm join --advertise-addr {{inventory_hostname}} --token {{hostvars[groups['swarm_master'][0]].workertoken}} {{hostvars[groups['swarm_master'][0]].inventory_hostname}}:2377"