Files
k3s-ansible/roles/k3s_agent/tasks/main.yml
Derek Nola a8784f41c4 Fix getting random token for agents
Signed-off-by: Derek Nola <derek.nola@suse.com>
2026-02-27 14:54:41 -08:00

103 lines
3.9 KiB
YAML

---
- name: Get k3s installed version
ansible.builtin.command: k3s --version
register: k3s_agent_version_output
changed_when: false
ignore_errors: true
- name: Set k3s installed version
when: not ansible_check_mode and k3s_agent_version_output.rc == 0
ansible.builtin.set_fact:
k3s_agent_installed_version: "{{ k3s_agent_version_output.stdout_lines[0].split(' ')[2] }}"
# If airgapped, all K3s artifacts are already on the node.
# We should be downloading and installing the newer version only if we are in one of the following cases :
# - we couldn't get k3s installed version in the first task of this role
# - the installed version of K3s on the nodes is older than the requested version in ansible vars
- name: Download artifact only if needed
when: not ansible_check_mode and airgap_dir is undefined and ( k3s_agent_version_output.rc != 0 or k3s_agent_installed_version is version(k3s_version, '<') )
block:
- name: Download K3s install script
ansible.builtin.get_url:
url: https://get.k3s.io/
timeout: 120
dest: /usr/local/bin/k3s-install.sh
owner: root
group: root
mode: "0755"
- name: Set skip_download var for install script
# noqa var-naming[no-role-prefix]
ansible.builtin.set_fact:
skip_download: "false"
# We always run the install script, we just skip the download step as needed
- name: Run K3s install script
# noqa var-naming[no-role-prefix]
ansible.builtin.command:
cmd: /usr/local/bin/k3s-install.sh
environment: "{{ _install_envs }}"
vars:
_base_envs:
INSTALL_K3S_SKIP_DOWNLOAD: "{{ skip_download | default('true') }}"
INSTALL_K3S_SKIP_START: "true"
INSTALL_K3S_SYSTEMD_DIR: "{{ systemd_dir }}"
INSTALL_K3S_VERSION: "{{ k3s_version }}"
INSTALL_K3S_EXEC: "agent --server https://{{ api_endpoint }}:{{ api_port }} {{ extra_agent_args }}"
# We overrides the extra_install_envs with required keys from _base_envs on purpose
_install_envs: "{{ extra_install_envs | default({}) | combine(_base_envs) }}"
changed_when: true
- name: Setup optional config file
when: agent_config_yaml is defined
block:
- name: Make config directory
ansible.builtin.file:
path: "/etc/rancher/k3s"
mode: "0755"
state: directory
- name: Copy config values
# noqa var-naming[no-role-prefix]
ansible.builtin.copy:
content: "{{ agent_config_yaml }}"
dest: "/etc/rancher/k3s/config.yaml"
mode: "0644"
register: _agent_config_result
- name: Get the token from the first server
when: token is not defined and hostvars[groups[server_group][0]].random_token is defined
# noqa var-naming[no-role-prefix]
ansible.builtin.set_fact:
token: "{{ hostvars[groups[server_group][0]].random_token }}"
- name: Set k3s agent environment file based on init system
ansible.builtin.set_fact:
k3s_agent_env_file: "{{ (ansible_facts['service_mgr'] == 'systemd') | ternary(systemd_dir ~ '/k3s-agent.service.env', '/etc/rancher/k3s/k3s-agent.env') }}"
- name: Add service environment variables
when: extra_service_envs is defined
ansible.builtin.lineinfile:
path: "{{ k3s_agent_env_file }}"
line: "{{ item }}"
loop: "{{ extra_service_envs }}"
- name: Delete any existing token from the environment if different from the new one
ansible.builtin.lineinfile:
state: absent
path: "{{ k3s_agent_env_file }}"
regexp: "^K3S_TOKEN=\\s*(?!{{ token | regex_escape }}\\s*$)"
- name: Add the token for joining the cluster to the environment
no_log: true # avoid logging the server token
ansible.builtin.lineinfile:
path: "{{ k3s_agent_env_file }}"
line: "{{ item }}"
loop:
- "K3S_TOKEN={{ token }}"
- name: Enable and start K3s agent
ansible.builtin.service:
name: k3s-agent
state: "{{ 'restarted' if _agent_config_result.changed else 'started' }}"
enabled: true