diff --git a/tasks/cluster_k3s.yml b/tasks/cluster_k3s.yml
index 9727eb0..1814932 100644
--- a/tasks/cluster_k3s.yml
+++ b/tasks/cluster_k3s.yml
@@ -56,21 +56,6 @@
- "crictl"
- "ctr"
-# Manque kubernetes_server_token, kubernetes_master url
-
-- name: Deploy systemd service
- template:
- src: "etc/systemd/system/{{ item }}.j2"
- dest: "/etc/systemd/system/{{ item }}"
- owner: root
- group: root
- mode: 0600
- with_items:
- - "k3s.service"
- - "k3s.service.env"
- when:
- - ansible_service_mgr == "systemd"
-
- name: Create thin volumes for k3s
lvol:
vg: "{{ item.vg }}"
@@ -97,6 +82,81 @@
with_items:
- { name: var_lib_k3s, vg: vg_sys, size: 10g, mount_point: /var/lib/rancher/k3s, mount_opts: "discard"}
+
+# Check controlers
+- name: Check if /etc/rancher/k3s/k3s.yaml already existe
+ stat:
+ path: /etc/rancher/k3s/k3s.yaml
+ register: st
+ changed_when: False
+ when:
+ - kubernetes_master|bool
+
+- name: Create KubernetesMasterConfigured group
+ group_by:
+ key: KubernetesMasterConfigured_{{ kubernetes_cluster_name }}
+ when:
+ - kubernetes_master|bool
+ - st.stat.exists
+
+# First controler
+- name: Configure first controler
+# run_once: true
+ block:
+ - name: Deploy systemd service
+ template:
+ src: "etc/systemd/system/{{ item }}.j2"
+ dest: "/etc/systemd/system/{{ item }}"
+ owner: root
+ group: root
+ mode: 0600
+ with_items:
+ - "k3s.service"
+ - "k3s.service.env"
+ when:
+ - ansible_service_mgr == "systemd"
+
+ - name: Enable k3s on boot
+ service:
+ name: k3s
+ state: started
+ enabled: yes
+
+ - name: Wait for k3s.yaml
+ wait_for:
+ path: /etc/rancher/k3s/k3s.yaml
+
+ - name: Wait for node-token
+ wait_for:
+ path: /var/lib/rancher/k3s/server/node-token
+
+ - name: Add {{ ansible_hostname }} to KubernetesMasterConfigured group
+ group_by:
+ key: KubernetesMasterConfigured_{{ kubernetes_cluster_name }}
+
+ when:
+ - kubernetes_master|bool
+ - vars['KubernetesMasterConfigured_' ~ kubernetes_cluster_name] is not defined
+
+
+
+# Manque kubernetes_server_token, kubernetes_master url
+
+#- name: Deploy systemd service
+# template:
+# src: "etc/systemd/system/{{ item }}.j2"
+# dest: "/etc/systemd/system/{{ item }}"
+# owner: root
+# group: root
+# mode: 0600
+# with_items:
+# - "k3s.service"
+# - "k3s.service.env"
+# when:
+# - ansible_service_mgr == "systemd"
+
+
+
- name: Enable k3s on boot
service:
name: k3s
diff --git a/templates/etc/firewalld/services/kubernetes.xml.j2 b/templates/etc/firewalld/services/kubernetes.xml.j2
index d4d0a53..4cd8035 100644
--- a/templates/etc/firewalld/services/kubernetes.xml.j2
+++ b/templates/etc/firewalld/services/kubernetes.xml.j2
@@ -9,6 +9,12 @@
{% if kubernetes_master == true %}
# Kubernetes API server, used by all
+{% endif %}
+{% if kubernetes_cri == "k3s" %}
+# K3S with flannel and wireguard
+
+{% else %}
+{% if kubernetes_master == true %}
# etcd server client API, used by kube-apiserver and etcd
@@ -35,4 +41,5 @@
{% endif %}
+{% endif %}
diff --git a/templates/etc/systemd/system/k3s.service.j2 b/templates/etc/systemd/system/k3s.service.j2
index 95ac5ae..0ac1a83 100644
--- a/templates/etc/systemd/system/k3s.service.j2
+++ b/templates/etc/systemd/system/k3s.service.j2
@@ -7,7 +7,11 @@ After=network-online.target
Type=notify
EnvironmentFile=/etc/systemd/system/k3s.service.env
{% if kubernetes_master|bool %}
-ExecStart=/usr/local/bin/k3s server --flannel-backend=wireguard --disable traefik --secrets-encryption
+{% if vars['KubernetesMasterConfigured_' ~ kubernetes_cluster_name] is not defined %}
+ExecStart=/usr/local/bin/k3s server --flannel-backend=wireguard --disable traefik --secrets-encryption --cluster-init
+{% else %}
+ExecStart=/usr/local/bin/k3s server --flannel-backend=wireguard --disable traefik --secrets-encryption --server https://{{ kubernetes_master }}:6443 --token ${NODE_TOKEN}
+{% endif %}
{% else %}
ExecStart=/usr/local/bin/k3s agent --server https://{{ kubernetes_master }}:6443 --token ${NODE_TOKEN}
{% endif %}