alainivars/utils2devops

View on GitHub
terraform/swarm_basic_aws/swarm.yml

Summary

Maintainability
Test Coverage
# 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"