From acba8e9b4d419d7eb9ce03a11770e4ee0d0af9be Mon Sep 17 00:00:00 2001 From: Derek Nola Date: Fri, 27 Feb 2026 13:06:40 -0800 Subject: [PATCH] Add support for openrc to k3s_server role Signed-off-by: Derek Nola --- .github/workflows/integration.yml | 30 ++++++++++----- roles/k3s_server/tasks/main.yml | 61 ++++++++++++++++++------------- 2 files changed, 55 insertions(+), 36 deletions(-) diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index a0e75d4..64daeca 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -62,7 +62,7 @@ jobs: --volume=/lib/modules:/lib/modules:ro \ --cgroupns=host \ --network=k3s-ansible \ - rancher/systemd-node:v0.0.8 /usr/lib/systemd/systemd --unit=noop.target --show-status=true + ${{ env.container_os }} ${{ env.container_cmd }} # Start the Agent node docker run -d --name agent-node \ @@ -76,16 +76,17 @@ jobs: --network=k3s-ansible \ ${{ env.container_os }} ${{ env.container_cmd }} - - name: Install server dependencies - run: docker exec server-node zypper install -y python3-rpm - - - name: Install agent dependencies (systemd) + - name: Install node dependencies (systemd) if: matrix.service_mgr == 'systemd' - run: docker exec agent-node zypper install -y python3-rpm + run: | + docker exec server-node zypper install -y python3-rpm + docker exec agent-node zypper install -y python3-rpm - - name: Install agent dependencies (openrc) + - name: Install node dependencies (openrc) if: matrix.service_mgr == 'openrc' - run: docker exec agent-node apk add curl python3 + run: | + docker exec server-node apk add curl python3 + docker exec agent-node apk add curl python3 - name: Run Playbook env: @@ -193,7 +194,11 @@ jobs: echo "CONFIG FILE" docker exec server-node cat /etc/rancher/k3s/config.yaml echo "Server ENV" - docker exec server-node cat /etc/systemd/system/k3s.service.env + if [ $service_mgr == "systemd" ]; then + docker exec server-node cat /etc/systemd/system/k3s.service.env + elif [ $service_mgr == "openrc" ]; then + docker exec server-node cat /etc/rancher/k3s/k3s.env + fi echo "Agent ENV" if [ $service_mgr == "systemd" ]; then docker exec agent-node cat /etc/systemd/system/k3s-agent.service.env @@ -201,7 +206,12 @@ jobs: docker exec agent-node cat /etc/rancher/k3s/k3s-agent.env fi echo "SERVER LOGS" - docker exec server-node journalctl -u k3s -n 10 + if [ $service_mgr == "systemd" ]; then + docker exec server-node journalctl -u k3s -n 10 + elif [ $service_mgr == "openrc" ]; then + tail -n 10 /var/log/k3s.log + fi + - name: Remove K3s from Server and Agent run: ansible-playbook playbooks/reset.yml -i tests/${{ matrix.inventory }}.yml diff --git a/roles/k3s_server/tasks/main.yml b/roles/k3s_server/tasks/main.yml index 53399e4..552cac6 100644 --- a/roles/k3s_server/tasks/main.yml +++ b/roles/k3s_server/tasks/main.yml @@ -133,6 +133,17 @@ regexp: '\.\s+<\(k3s completion bash\)' line: ". <(k3s completion bash) # Added by k3s-ansible" +- name: Set k3s server environment file based on init system + ansible.builtin.set_fact: + k3s_server_env_file: "{{ (ansible_facts['service_mgr'] == 'systemd') | ternary(systemd_dir ~ '/k3s.service.env', '/etc/rancher/k3s/k3s.env') }}" + +- name: Add service environment variables + when: extra_service_envs is defined + ansible.builtin.lineinfile: + path: "{{ k3s_server_env_file }}" + line: "{{ item }}" + loop: "{{ extra_service_envs }}" + - name: Init first server node when: inventory_hostname == groups[server_group][0] or ansible_host == groups[server_group][0] block: @@ -145,34 +156,32 @@ mode: "0644" register: k3s_server_config_result - - name: Add service environment variables - when: extra_service_envs is defined - ansible.builtin.lineinfile: - path: "{{ systemd_dir }}/k3s.service.env" - 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: "{{ systemd_dir }}/k3s.service.env" + path: "{{ k3s_server_env_file }}" regexp: "^K3S_TOKEN=\\s*(?!{{ token | default('') | regex_escape }}\\s*$)" + - name: Reload systemd daemon + when: + - not ansible_check_mode + - ansible_facts['service_mgr'] == 'systemd' + ansible.builtin.systemd: + daemon_reload: true + - name: Restart K3s service when: - ansible_facts.services['k3s.service'] is defined - ansible_facts.services['k3s.service'].state == 'running' - k3s_server_config_result.changed - ansible.builtin.systemd: + ansible.builtin.service: name: k3s - daemon_reload: true state: restarted - - name: Enable and check K3s service + - name: Enable and start K3s service when: ansible_facts.services['k3s.service'] is not defined or ansible_facts.services['k3s.service'].state != 'running' - ansible.builtin.systemd: + ansible.builtin.service: name: k3s - daemon_reload: true state: started enabled: true @@ -193,12 +202,14 @@ # Copy the k3s config to a second file to detect changes. # If no changes are found, we can skip copying the kubeconfig to the control node. + # This is dependent on the speed of the target node for k3s startup time, so retries are used. - name: Copy k3s.yaml to second file ansible.builtin.copy: src: /etc/rancher/k3s/k3s.yaml dest: /etc/rancher/k3s/k3s-copy.yaml mode: "0600" remote_src: true + retries: 3 register: k3s_server_copy_yaml tags: kubeconfig @@ -280,34 +291,32 @@ mode: "0644" register: k3s_server_config_result - - name: Add service environment variables - when: extra_service_envs is defined - ansible.builtin.lineinfile: - path: "{{ systemd_dir }}/k3s.service.env" - 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: "{{ systemd_dir }}/k3s.service.env" + path: "{{ k3s_server_env_file }}" regexp: "^K3S_TOKEN=\\s*(?!{{ token | regex_escape }}\\s*$)" + - name: Reload systemd daemon + when: + - not ansible_check_mode + - ansible_facts['service_mgr'] == 'systemd' + ansible.builtin.systemd: + daemon_reload: true + - name: Restart K3s service when: - ansible_facts.services['k3s.service'] is defined - ansible_facts.services['k3s.service'].state == 'running' - k3s_server_config_result.changed - ansible.builtin.systemd: + ansible.builtin.service: name: k3s - daemon_reload: true state: restarted - - name: Enable and check K3s service + - name: Enable and start K3s service when: ansible_facts.services['k3s.service'] is not defined or ansible_facts.services['k3s.service'].state != 'running' - ansible.builtin.systemd: + ansible.builtin.service: name: k3s - daemon_reload: true state: started enabled: true