From 890d43b33948065423aed2d2614dd6d653f186a0 Mon Sep 17 00:00:00 2001 From: Techno Tim Date: Sun, 2 Aug 2026 14:27:17 -0500 Subject: [PATCH] fix(token): escape percent signs used in k3s token (#682) - systemd treats % as a specifier in ExecStart, so token values containing % fail with 'failed to resolve unit specifiers invalid slot' - escape % to %% in the agent unit file - escape % to %% in server_init_args so the multi-master bootstrap path (systemd-run k3s-init) handles % tokens too Co-authored-by: finaldoom <677609+FinalDoom@users.noreply.github.com> --- roles/k3s_agent/templates/k3s.service.j2 | 2 +- roles/k3s_server/defaults/main.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/roles/k3s_agent/templates/k3s.service.j2 b/roles/k3s_agent/templates/k3s.service.j2 index 52aa272e..19795c6f 100644 --- a/roles/k3s_agent/templates/k3s.service.j2 +++ b/roles/k3s_agent/templates/k3s.service.j2 @@ -11,7 +11,7 @@ ExecStartPre=-/sbin/modprobe overlay ExecStart=/usr/local/bin/k3s agent \ --server https://{{ apiserver_endpoint | ansible.utils.ipwrap }}:6443 \ {% if is_pxe_booted | default(false) %}--snapshotter native \ - {% endif %}--token {{ hostvars[groups[group_name_master | default('master')][0]]['token'] | default(k3s_token) }} \ + {% endif %}--token {{ hostvars[groups[group_name_master | default('master')][0]]['token'] | default(k3s_token) | replace( '%', '%%' ) }} \ {{ extra_agent_args }} KillMode=process Delegate=yes diff --git a/roles/k3s_server/defaults/main.yml b/roles/k3s_server/defaults/main.yml index 8fe55fb9..5cdfdd8e 100644 --- a/roles/k3s_server/defaults/main.yml +++ b/roles/k3s_server/defaults/main.yml @@ -33,7 +33,7 @@ server_init_args: >- {% else %} --server https://{{ hostvars[groups[group_name_master | default('master')][0]].k3s_node_ip | split(",") | first | ansible.utils.ipwrap }}:6443 {% endif %} - --token {{ k3s_token }} + --token {{ k3s_token | replace('%', '%%') }} {% endif %} {{ extra_server_args }}