summaryrefslogtreecommitdiff
path: root/playbooks/roles/swarm_cluster
diff options
context:
space:
mode:
Diffstat (limited to 'playbooks/roles/swarm_cluster')
-rw-r--r--playbooks/roles/swarm_cluster/swarm_init/tasks/main.yml19
-rw-r--r--playbooks/roles/swarm_cluster/swarm_join/tasks/main.yml22
-rw-r--r--playbooks/roles/swarm_cluster/tasks/main.yml20
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
+