diff options
Diffstat (limited to 'playbooks/roles/swarm_cluster')
-rw-r--r-- | playbooks/roles/swarm_cluster/swarm_init/tasks/main.yml | 19 | ||||
-rw-r--r-- | playbooks/roles/swarm_cluster/swarm_join/tasks/main.yml | 22 | ||||
-rw-r--r-- | playbooks/roles/swarm_cluster/tasks/main.yml | 20 |
3 files changed, 61 insertions, 0 deletions
diff --git a/playbooks/roles/swarm_cluster/swarm_init/tasks/main.yml b/playbooks/roles/swarm_cluster/swarm_init/tasks/main.yml new file mode 100644 index 0000000..19967e9 --- /dev/null +++ b/playbooks/roles/swarm_cluster/swarm_init/tasks/main.yml @@ -0,0 +1,19 @@ +--- + +- name: Check Docker Swarm Status + ansible.builtin.command: docker info --format '{{ "{{.Swarm.LocalNodeState}}" }}' + register: docker_swarm_status + changed_when: false + +- name: Initialize Docker Swarm if Inactive + ansible.builtin.command: + cmd: docker swarm init --advertise-addr "{{ ansible_default_ipv4.address }}" + when: docker_swarm_status.stdout == "inactive" + register: swarm_init + changed_when: '"Swarm initialized" in swarm_init.stdout' + +- name: Retrieve Docker Swarm Manager Token + ansible.builtin.command: docker swarm join-token manager -q + register: manager_token + changed_when: false + diff --git a/playbooks/roles/swarm_cluster/swarm_join/tasks/main.yml b/playbooks/roles/swarm_cluster/swarm_join/tasks/main.yml new file mode 100644 index 0000000..b73030e --- /dev/null +++ b/playbooks/roles/swarm_cluster/swarm_join/tasks/main.yml @@ -0,0 +1,22 @@ +--- + +- name: Check Docker Swarm Status + ansible.builtin.command: docker info --format '{{ "{{.Swarm.LocalNodeState}}" }}' + register: docker_swarm_status + changed_when: false + +- name: Join Swarm as Manager + ansible.builtin.command: + cmd: docker swarm join --token {{ hostvars[swarm_initializer_host]['manager_token'].stdout }} {{ hostvars[swarm_initializer_host]['ansible_default_ipv4']['address'] }}:2377 + when: + - hostvars[swarm_initializer_host]['manager_token'].stdout is defined + - docker_swarm_status.stdout != "active" + register: swarm_join + changed_when: '"This node joined a swarm as a manager" in swarm_join.stdout' + +- name: Label Docker Swarm Manager Nodes + ansible.builtin.command: + cmd: docker node update --label-add manager=true {{ ansible_hostname }} + when: swarm_join is changed + changed_when: false + diff --git a/playbooks/roles/swarm_cluster/tasks/main.yml b/playbooks/roles/swarm_cluster/tasks/main.yml new file mode 100644 index 0000000..d2507af --- /dev/null +++ b/playbooks/roles/swarm_cluster/tasks/main.yml @@ -0,0 +1,20 @@ +--- + +- name: Enable Local Swarm Communications + community.general.ufw: + rule: allow + from: "{{ homelab_network }}" + state: enabled + +- name: Set swarm initializer variable + ansible.builtin.set_fact: + swarm_initializer_host: "{{ groups['swarm_cluster'][0] }}" + +- name: Initialize the swarm cluster on the first node + when: ansible_hostname == swarm_initializer_host + ansible.builtin.import_tasks: swarm_init/tasks/main.yml + +- name: Join the swarm cluster on all other nodes + when: ansible_hostname != swarm_initializer_host + ansible.builtin.import_tasks: swarm_join/tasks/main.yml + |