GRM-4: refactor: consolidate systemd checks and deduplicate role structure
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user