GRM-4: refactor: consolidate systemd checks and deduplicate role structure

This commit is contained in:
Emil Simeonov
2026-06-18 03:36:19 +02:00
parent b3838eb180
commit 0cea9b9490
13 changed files with 262 additions and 47 deletions
@@ -0,0 +1,12 @@
---
- name: Converge
hosts: all
become: true
vars:
gitea_url: "http://localhost:3000"
registration_token: "fake-token-for-testing"
runner_name: "molecule-test-runner"
runner_mode: "binary"
skip_runner_registration: true
roles:
- role: gitea-runner
@@ -0,0 +1,39 @@
---
driver:
name: docker
platforms:
- name: instance
image: geerlingguy/docker-ubuntu2204-ansible:latest
command: sleep infinity
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:rw
cgroupns_mode: host
privileged: true
pre_build_image: true
provisioner:
name: ansible
playbooks:
converge: converge.yml
prepare: ../common/prepare.yml
env:
ANSIBLE_ROLES_PATH: "../../.."
scenario:
test_sequence:
- dependency
- cleanup
- destroy
- syntax
- create
- prepare
- converge
- idempotence
- side_effect
- verify
- cleanup
- destroy
verifier:
name: ansible
@@ -0,0 +1,30 @@
---
- name: Prepare
hosts: all
become: true
tasks:
- name: Update apt cache
ansible.builtin.apt:
update_cache: true
when: ansible_facts['os_family'] == 'Debian'
- name: Install python3-debian for deb822_repository module
ansible.builtin.apt:
name: python3-debian
state: present
when: ansible_facts['os_family'] == 'Debian'
- name: Ensure /etc/docker directory exists
ansible.builtin.file:
path: /etc/docker
state: directory
mode: "0755"
when: ansible_facts['os_family'] == 'Debian'
- name: Configure Docker daemon for vfs storage driver (DinD)
ansible.builtin.copy:
dest: /etc/docker/daemon.json
content: |
{"storage-driver": "vfs"}
mode: "0644"
when: ansible_facts['os_family'] == 'Debian'
@@ -6,5 +6,6 @@
gitea_url: "http://localhost:3000"
registration_token: "fake-token-for-testing"
runner_name: "molecule-test-runner"
skip_runner_registration: true
roles:
- role: gitea-runner
@@ -5,7 +5,7 @@ driver:
platforms:
- name: instance
image: geerlingguy/docker-ubuntu2204-ansible:latest
command: ""
command: sleep infinity
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:rw
cgroupns_mode: host
@@ -16,6 +16,24 @@ provisioner:
name: ansible
playbooks:
converge: converge.yml
prepare: ../common/prepare.yml
env:
ANSIBLE_ROLES_PATH: "../../.."
scenario:
test_sequence:
- dependency
- cleanup
- destroy
- syntax
- create
- prepare
- converge
- idempotence
- side_effect
- verify
- cleanup
- destroy
verifier:
name: ansible
@@ -1,9 +0,0 @@
---
- name: Prepare
hosts: all
become: true
tasks:
- name: Update apt cache
ansible.builtin.apt:
update_cache: true
when: ansible_facts['os_family'] == 'Debian'
@@ -0,0 +1,26 @@
---
- name: Include Docker installation
ansible.builtin.include_tasks: docker.yml
- name: Include gitea_runner download
ansible.builtin.include_tasks: download_gitea_runner.yml
- name: Include config creation
ansible.builtin.include_tasks: config.yml
- name: Include validation
ansible.builtin.include_tasks: validate.yml
- name: Include registration
ansible.builtin.include_tasks: register.yml
when: not skip_runner_registration
- name: Include service setup
ansible.builtin.include_tasks: service.yml
- name: Include prune setup
ansible.builtin.include_tasks: prune.yml
- name: Include integration test
ansible.builtin.include_tasks: integration_test.yml
when: not skip_runner_registration
+52 -17
View File
@@ -1,7 +1,23 @@
---
- name: Check if Docker is already installed
ansible.builtin.command: docker --version
register: docker_check
changed_when: false
failed_when: false
- name: Install Docker (Debian/Ubuntu)
when: ansible_facts['os_family'] == 'Debian'
when:
- ansible_facts['os_family'] == 'Debian'
- docker_check.rc != 0
block:
- name: Remove old Docker apt repository files
ansible.builtin.file:
path: "{{ item }}"
state: absent
loop:
- /etc/apt/sources.list.d/docker.list
- /etc/apt/keyrings/docker.gpg
- name: Install prerequisite packages
ansible.builtin.apt:
name:
@@ -13,21 +29,20 @@
update_cache: true
- name: Add Docker GPG key
ansible.builtin.apt_key:
url: https://download.docker.com/linux/{{ ansible_distribution | lower }}/gpg
keyring: /etc/apt/keyrings/docker.gpg
when: ansible_distribution != 'Ubuntu' or ansible_distribution_major_version | int >= 22
ansible.builtin.get_url:
url: https://download.docker.com/linux/{{ ansible_facts['distribution'] | lower }}/gpg
dest: "{{ docker_gpg_key_path }}"
mode: "0644"
- name: Add Docker repository
ansible.builtin.apt_repository:
repo: >-
deb [arch={{ ansible_architecture }}
signed-by=/etc/apt/keyrings/docker.gpg]
https://download.docker.com/linux/{{ ansible_distribution | lower }}
{{ ansible_distribution_release }} stable
filename: docker
ansible.builtin.deb822_repository:
name: docker
types: deb
uris: https://download.docker.com/linux/{{ ansible_facts['distribution'] | lower }}
suites: "{{ ansible_facts['distribution_release'] }}"
components: stable
signed_by: "{{ docker_gpg_key_path }}"
state: present
update_cache: true
- name: Install Docker packages
ansible.builtin.apt:
@@ -37,9 +52,12 @@
- containerd.io
- docker-compose-plugin
state: present
update_cache: true
- name: Install Docker (Arch Linux)
when: ansible_facts['os_family'] == 'Archlinux'
when:
- ansible_facts['os_family'] == 'Archlinux'
- docker_check.rc != 0
block:
- name: Install Docker packages
community.general.pacman:
@@ -49,15 +67,32 @@
state: present
update_cache: true
- name: Ensure Docker service is running
- name: Ensure Docker service is running (systemd)
ansible.builtin.systemd:
name: docker
state: started
enabled: true
when: systemd_available.stat.exists
- name: Start Docker daemon manually (no systemd)
ansible.builtin.shell: nohup dockerd > /var/log/dockerd.log 2>&1 &
when:
- not systemd_available.stat.exists
- docker_check.rc != 0
changed_when: true
- name: Wait for Docker daemon to be ready
ansible.builtin.command: docker version
register: docker_ready
until: docker_ready.rc == 0
retries: 10
delay: 2
changed_when: false
when: not systemd_available.stat.exists
- name: Add user to docker group
ansible.builtin.user:
name: "{{ ansible_user | default(ansible_user_id) }}"
name: "{{ ansible_user | default(ansible_facts['user_id']) }}"
groups: docker
append: true
when: ansible_user is defined or ansible_user_id is defined
when: ansible_user is defined or ansible_facts['user_id'] is defined
@@ -0,0 +1,62 @@
---
- name: Include Docker installation
ansible.builtin.include_tasks: docker.yml
- name: Ensure runner data directory exists
ansible.builtin.file:
path: "{{ gitea_runner_data_dir }}"
state: directory
mode: "0755"
- name: Create gitea_runner config file in data directory
ansible.builtin.template:
src: gitea-runner-config.toml.j2
dest: "{{ gitea_runner_data_dir }}/config.toml"
mode: "0644"
- name: Pull gitea_runner image
ansible.builtin.command: docker pull {{ gitea_runner_docker_image }}:{{ gitea_runner_version | regex_replace('^v', '') }}
changed_when: "'Downloaded newer image' in pull_result.stdout or 'Status: Downloaded' in pull_result.stdout"
register: pull_result
- name: Check if runner is already registered
ansible.builtin.stat:
path: "{{ gitea_runner_data_dir }}/.runner"
register: runner_registered
- name: Register runner with Gitea via Docker
ansible.builtin.command: >
docker run --rm
-v {{ gitea_runner_data_dir }}:/data
{{ gitea_runner_docker_image }}:{{ gitea_runner_version | regex_replace('^v', '') }} register
--token {{ registration_token }}
--name {{ runner_name }}
--instance {{ gitea_url }}
--labels {{ runner_labels }}
--no-interactive
when:
- not runner_registered.stat.exists
- not skip_runner_registration
register: register_output
changed_when: "'already exists' not in register_output.stdout | default('')"
- name: Check if gitea_runner container exists
ansible.builtin.command: docker inspect -f '{{ '{{' }} .State.Running {{ '}}' }}' gitea-runner-{{ runner_name }}
register: container_check
changed_when: false
failed_when: container_check.rc != 0 and 'no such object' not in container_check.stderr
- name: Run gitea_runner daemon container
ansible.builtin.command: >
docker run -d
--name gitea-runner-{{ runner_name }}
--restart unless-stopped
-v /var/run/docker.sock:/var/run/docker.sock
-v {{ gitea_runner_data_dir }}:/data
{{ gitea_runner_docker_image }}:{{ gitea_runner_version | regex_replace('^v', '') }} daemon
--config /data/config.toml
when:
- container_check.rc != 0
- not skip_runner_registration
register: docker_run
changed_when: docker_run.rc == 0
+9 -15
View File
@@ -1,24 +1,18 @@
---
- name: Include OS-specific Docker installation
ansible.builtin.include_tasks: docker.yml
- name: Include systemd availability check
ansible.builtin.include_tasks: systemd_check.yml
- name: Include act_runner download
ansible.builtin.include_tasks: download_act_runner.yml
- name: Install runner (Docker mode)
ansible.builtin.include_tasks: docker_mode.yml
when: runner_mode == 'docker'
- name: Include validation
ansible.builtin.include_tasks: validate.yml
- name: Include config creation
ansible.builtin.include_tasks: config.yml
- name: Include registration
ansible.builtin.include_tasks: register.yml
- name: Include service setup
ansible.builtin.include_tasks: service.yml
- name: Install runner (Binary mode)
ansible.builtin.include_tasks: binary_mode.yml
when: runner_mode == 'binary'
- name: Include prune setup
ansible.builtin.include_tasks: prune.yml
- name: Include integration test
ansible.builtin.include_tasks: integration_test.yml
when: not skip_runner_registration
@@ -17,3 +17,4 @@
state: started
enabled: true
daemon_reload: true
when: systemd_available.stat.exists
+6 -5
View File
@@ -1,16 +1,17 @@
---
- name: Create systemd service file
ansible.builtin.template:
src: act-runner.service.j2
dest: "/etc/systemd/system/act-runner-{{ runner_name }}.service"
src: gitea-runner.service.j2
dest: "/etc/systemd/system/gitea-runner-{{ runner_name }}.service"
mode: "0644"
notify:
- Reload systemd
- Restart act-runner
- Restart gitea-runner
- name: Enable and start act-runner service
- name: Enable and start gitea-runner service
ansible.builtin.systemd:
name: "act-runner-{{ runner_name }}"
name: "gitea-runner-{{ runner_name }}"
state: started
enabled: true
daemon_reload: true
when: systemd_available.stat.exists
@@ -0,0 +1,5 @@
---
- name: Check if systemd is available
ansible.builtin.stat:
path: /run/systemd/system
register: systemd_available