mirror of
https://github.com/dredx/prole.git
synced 2026-09-24 19:54:32 +00:00
101 lines
3.1 KiB
YAML
101 lines
3.1 KiB
YAML
---
|
|
|
|
- name: Skip k3s when state is absent
|
|
ansible.builtin.meta: end_host
|
|
when: k3s_state == "absent"
|
|
|
|
- name: Set k3s service name
|
|
ansible.builtin.set_fact:
|
|
k3s_service_name: "{{ 'k3s' if k3s_role == 'server' else 'k3s-agent' }}"
|
|
|
|
- name: Check if k3s service is installed
|
|
ansible.builtin.stat:
|
|
path: "/etc/systemd/system/{{ k3s_service_name }}.service"
|
|
register: k3s_service
|
|
|
|
- name: Check if k3s binary exists
|
|
ansible.builtin.stat:
|
|
path: /usr/local/bin/k3s
|
|
register: k3s_bin
|
|
|
|
- name: Determine if k3s needs installation
|
|
ansible.builtin.set_fact:
|
|
k3s_needs_install: "{{ not k3s_bin.stat.exists or not k3s_service.stat.exists }}"
|
|
|
|
- name: Install k3s dependencies
|
|
ansible.builtin.package:
|
|
name:
|
|
- curl
|
|
- iptables
|
|
state: present
|
|
|
|
- name: Preflight - ensure rancher mountpoint is mounted
|
|
ansible.builtin.command: "findmnt -n {{ k3s_rancher_mountpoint | default('/var/lib/rancher') }}"
|
|
register: rancher_mounted
|
|
changed_when: false
|
|
failed_when: rancher_mounted.rc != 0
|
|
|
|
- name: Guardrail - ensure rancher mountpoint is not on SD/rootfs
|
|
ansible.builtin.command: "findmnt -n -o SOURCE {{ k3s_rancher_mountpoint | default('/var/lib/rancher') }}"
|
|
register: rancher_source
|
|
changed_when: false
|
|
|
|
- name: Fail if rancher mountpoint is on SD
|
|
ansible.builtin.fail:
|
|
msg: "{{ k3s_rancher_mountpoint | default('/var/lib/rancher') }} is on SD/rootfs ({{ rancher_source.stdout }}). Refusing to proceed."
|
|
when: rancher_source.stdout is search("mmcblk0") or rancher_source.stdout is search("/dev/mmc")
|
|
|
|
- name: Validate join configuration
|
|
ansible.builtin.assert:
|
|
that:
|
|
- k3s_server_url is defined
|
|
- k3s_server_url | length > 0
|
|
- k3s_token is defined
|
|
- k3s_token | length > 0
|
|
fail_msg: "k3s_server_url and k3s_token are required for non-init nodes."
|
|
when: not k3s_cluster_init | bool
|
|
|
|
- name: Ensure k3s config directory exists
|
|
ansible.builtin.file:
|
|
path: /etc/rancher/k3s
|
|
state: directory
|
|
mode: "0755"
|
|
|
|
- name: Ensure kubeconfig group exists (server)
|
|
ansible.builtin.group:
|
|
name: "{{ k3s_kubeconfig_group }}"
|
|
state: present
|
|
when: k3s_role == "server"
|
|
|
|
- name: Ensure kubeconfig users are in group (server)
|
|
ansible.builtin.user:
|
|
name: "{{ item }}"
|
|
groups: "{{ k3s_kubeconfig_group }}"
|
|
append: true
|
|
loop: "{{ k3s_kubeconfig_users }}"
|
|
when: k3s_role == "server" and (k3s_kubeconfig_users | length) > 0
|
|
|
|
- name: Render k3s config
|
|
ansible.builtin.template:
|
|
src: config.yaml.j2
|
|
dest: /etc/rancher/k3s/config.yaml
|
|
mode: "0640"
|
|
notify: Restart k3s
|
|
|
|
- name: Install k3s
|
|
ansible.builtin.shell: |
|
|
curl -sfL https://get.k3s.io | sh -
|
|
environment:
|
|
INSTALL_K3S_EXEC: "{{ k3s_role }}"
|
|
INSTALL_K3S_VERSION: "{{ k3s_version if (k3s_version | length > 0) else omit }}"
|
|
args:
|
|
creates: /usr/local/bin/k3s
|
|
when: k3s_needs_install
|
|
|
|
- name: Ensure k3s service state
|
|
ansible.builtin.service:
|
|
name: "{{ k3s_service_name }}"
|
|
state: "{{ 'started' if k3s_state == 'present' else 'stopped' }}"
|
|
enabled: "{{ k3s_state == 'present' }}"
|
|
when: k3s_service.stat.exists or k3s_bin.stat.exists
|