GRM-20: fix molecule idempotence with mode-specific systemd templates
CI / lint (push) Has been cancelled
CI / unit-tests (push) Has been cancelled
CI / molecule-tests (push) Has been cancelled

This commit is contained in:
Emil Simeonov
2026-06-19 14:12:58 +02:00
parent 1a917e7a5d
commit 129cfe3c79
13 changed files with 77 additions and 24 deletions
+1 -1
View File
@@ -6,6 +6,6 @@
- name: Restart gitea-runner
ansible.builtin.systemd:
name: "gitea-runner@{{ runner_name }}"
name: "gitea-runner-{{ runner_mode }}@{{ runner_name }}"
state: restarted
when: ansible_facts is defined and ansible_facts['service_mgr'] | default('') == 'systemd'
@@ -8,6 +8,9 @@
- name: Load role defaults
ansible.builtin.include_vars:
dir: "{{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') }}/defaults"
- name: Override runner mode for binary scenario
ansible.builtin.set_fact:
runner_mode: "binary"
tasks:
- name: Check gitea_runner binary exists
ansible.builtin.stat:
@@ -26,7 +29,7 @@
- name: Check systemd template unit exists
ansible.builtin.stat:
path: "/etc/systemd/system/gitea-runner@.service"
path: "/etc/systemd/system/gitea-runner-{{ runner_mode | default('docker') }}@.service"
register: service_stat
- name: Assert template unit exists
@@ -37,7 +37,7 @@
- name: Check systemd template unit exists
ansible.builtin.stat:
path: "/etc/systemd/system/gitea-runner@.service"
path: "/etc/systemd/system/gitea-runner-{{ runner_mode | default('docker') }}@.service"
register: service_stat
- name: Assert template unit exists
@@ -20,7 +20,7 @@
- name: Check systemd template still exists
ansible.builtin.stat:
path: "/etc/systemd/system/gitea-runner@.service"
path: "/etc/systemd/system/gitea-runner-{{ runner_mode | default('docker') }}@.service"
register: service_stat
- name: Assert systemd template still exists after deregister
@@ -12,14 +12,14 @@
tasks:
- name: Stop gitea-runner systemd instance
ansible.builtin.systemd:
name: "gitea-runner@{{ runner_name }}"
name: "gitea-runner-docker@{{ runner_name }}"
state: stopped
daemon_reload: true
when: systemd_available.stat.exists
- name: Disable gitea-runner systemd instance
ansible.builtin.systemd:
name: "gitea-runner@{{ runner_name }}"
name: "gitea-runner-docker@{{ runner_name }}"
enabled: false
daemon_reload: true
when: systemd_available.stat.exists
@@ -37,14 +37,14 @@
tasks:
- name: Enable gitea-runner systemd instance
ansible.builtin.systemd:
name: "gitea-runner@{{ runner_name }}"
name: "gitea-runner-docker@{{ runner_name }}"
enabled: true
daemon_reload: true
when: systemd_available.stat.exists
- name: Start gitea-runner systemd instance
ansible.builtin.systemd:
name: "gitea-runner@{{ runner_name }}"
name: "gitea-runner-docker@{{ runner_name }}"
state: started
daemon_reload: true
when: systemd_available.stat.exists
@@ -11,7 +11,7 @@
tasks:
- name: Check systemd template unit exists
ansible.builtin.stat:
path: "/etc/systemd/system/gitea-runner@.service"
path: "/etc/systemd/system/gitea-runner-{{ runner_mode | default('docker') }}@.service"
register: template_stat
- name: Assert template unit exists
@@ -27,7 +27,7 @@
- name: Check instance is enabled
ansible.builtin.systemd:
name: "gitea-runner@lifecycle-test-runner"
name: "gitea-runner-{{ runner_mode | default('docker') }}@lifecycle-test-runner"
register: service_status
when: systemd_available.stat.exists
@@ -6,10 +6,13 @@
- name: Load role defaults
ansible.builtin.include_vars:
dir: "{{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') }}/defaults"
- name: Override runner mode for multi-instance scenario
ansible.builtin.set_fact:
runner_mode: "binary"
tasks:
- name: Check systemd template unit exists
ansible.builtin.stat:
path: "/etc/systemd/system/gitea-runner@.service"
path: "/etc/systemd/system/gitea-runner-{{ runner_mode | default('docker') }}@.service"
register: template_stat
- name: Assert template unit exists
@@ -7,9 +7,20 @@
ansible.builtin.include_vars:
dir: "{{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') }}/defaults"
tasks:
- name: Check Docker mode systemd template exists
ansible.builtin.stat:
path: "/etc/systemd/system/gitea-runner-docker@.service"
register: docker_template_stat
- name: Assert Docker mode systemd template exists
ansible.builtin.assert:
that:
- docker_template_stat.stat.exists
fail_msg: "Docker systemd template is missing"
- name: Read rendered Docker systemd template
ansible.builtin.slurp:
src: "/etc/systemd/system/gitea-runner@.service"
src: "/etc/systemd/system/gitea-runner-docker@.service"
register: docker_template
- name: Assert Docker mode template contains expected directives
@@ -23,6 +34,30 @@
- "'Restart=on-failure' in docker_template.content | b64decode"
fail_msg: "Docker systemd template is missing expected directives"
- name: Check Binary mode systemd template exists
ansible.builtin.stat:
path: "/etc/systemd/system/gitea-runner-binary@.service"
register: binary_template_stat
- name: Assert Binary mode systemd template exists
ansible.builtin.assert:
that:
- binary_template_stat.stat.exists
fail_msg: "Binary systemd template is missing"
- name: Read rendered Binary systemd template
ansible.builtin.slurp:
src: "/etc/systemd/system/gitea-runner-binary@.service"
register: binary_template
- name: Assert Binary mode template contains expected directives
ansible.builtin.assert:
that:
- "'Type=simple' in binary_template.content | b64decode"
- "'ExecStart={{ gitea_runner_binary_path }}' in binary_template.content | b64decode"
- "'Restart=on-failure' in binary_template.content | b64decode"
fail_msg: "Binary systemd template is missing expected directives"
- name: Read rendered prune service template
ansible.builtin.slurp:
src: "/etc/systemd/system/docker-prune.service"
@@ -29,16 +29,27 @@
- binary_stat.stat.exists
fail_msg: "Binary runner executable missing after update"
- name: Check systemd template still exists
- name: Check Docker mode systemd template still exists
ansible.builtin.stat:
path: "/etc/systemd/system/gitea-runner@.service"
register: service_stat
path: "/etc/systemd/system/gitea-runner-docker@.service"
register: docker_service_stat
- name: Assert systemd template still exists after update
- name: Assert Docker mode systemd template still exists after update
ansible.builtin.assert:
that:
- service_stat.stat.exists
fail_msg: "Systemd template unit missing after update"
- docker_service_stat.stat.exists
fail_msg: "Docker mode systemd template missing after update"
- name: Check Binary mode systemd template still exists
ansible.builtin.stat:
path: "/etc/systemd/system/gitea-runner-binary@.service"
register: binary_service_stat
- name: Assert Binary mode systemd template still exists after update
ansible.builtin.assert:
that:
- binary_service_stat.stat.exists
fail_msg: "Binary mode systemd template missing after update"
- name: Check Docker mode data directory still exists
ansible.builtin.stat:
@@ -4,6 +4,7 @@
- name: Restart gitea-runner systemd instance
ansible.builtin.systemd:
name: "gitea-runner@{{ runner_name }}"
name: "gitea-runner-{{ runner_mode }}@{{ runner_name }}"
state: restarted
daemon_reload: true
when: systemd_available is defined and systemd_available.stat is defined and systemd_available.stat.exists
@@ -6,7 +6,7 @@
- name: Restart gitea-runner systemd instance
ansible.builtin.systemd:
name: "gitea-runner@{{ runner_name }}"
name: "gitea-runner-{{ runner_mode }}@{{ runner_name }}"
state: restarted
daemon_reload: true
when: systemd_available.stat.exists
when: systemd_available is defined and systemd_available.stat is defined and systemd_available.stat.exists
@@ -27,7 +27,7 @@
- name: Verify runner service active (Binary mode)
ansible.builtin.systemd:
name: "gitea-runner@{{ runner_name }}"
name: "gitea-runner-{{ runner_mode }}@{{ runner_name }}"
state: started
register: service_check
when: runner_mode == 'binary'
+2 -2
View File
@@ -2,7 +2,7 @@
- name: Create systemd template service file
ansible.builtin.template:
src: gitea-runner@.service.j2
dest: "/etc/systemd/system/gitea-runner@.service"
dest: "/etc/systemd/system/gitea-runner-{{ runner_mode }}@.service"
mode: "0644"
notify:
- Reload systemd
@@ -10,7 +10,7 @@
- name: Enable and start gitea-runner instance
ansible.builtin.systemd:
name: "gitea-runner@{{ runner_name }}"
name: "gitea-runner-{{ runner_mode }}@{{ runner_name }}"
state: started
enabled: true
daemon_reload: true