Add Woodpecker agent role
This commit is contained in:
parent
4560ccbbb7
commit
25fb8d345d
13 changed files with 196 additions and 0 deletions
3
roles/podman_woodpecker_agent/defaults/main.yml
Normal file
3
roles/podman_woodpecker_agent/defaults/main.yml
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
---
|
||||
podman_woodpecker_agent_filter_labels: ""
|
||||
podman_woodpecker_agent_image_path: docker.io/woodpeckerci/woodpecker-agent
|
||||
12
roles/podman_woodpecker_agent/handlers/main.yml
Normal file
12
roles/podman_woodpecker_agent/handlers/main.yml
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
---
|
||||
- name: Reload systemd daemon
|
||||
ansible.builtin.systemd_service:
|
||||
daemon_reload: true
|
||||
|
||||
- name: Reload user systemd daemon
|
||||
ansible.builtin.systemd_service:
|
||||
daemon_reload: true
|
||||
scope: user
|
||||
become_method: community.general.machinectl
|
||||
become_user: "{{ podman_woodpecker_agent_user }}"
|
||||
become: true
|
||||
11
roles/podman_woodpecker_agent/tasks/activate-proxies.yml
Normal file
11
roles/podman_woodpecker_agent/tasks/activate-proxies.yml
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
- name: Determine UID of workspace user
|
||||
ansible.builtin.user:
|
||||
name: "{{ workspace_user }}"
|
||||
register: user_data
|
||||
|
||||
- name: Activate Podman socket proxy for the workspace
|
||||
ansible.builtin.systemd_service:
|
||||
name: woodpecker-proxy@{{ user_data['uid'] }}.path
|
||||
state: started
|
||||
enabled: true
|
||||
60
roles/podman_woodpecker_agent/tasks/agents.yml
Normal file
60
roles/podman_woodpecker_agent/tasks/agents.yml
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
---
|
||||
- name: Create Woodpecker agent volume
|
||||
containers.podman.podman_volume:
|
||||
name: "woodpecker-agent-{{ workspace_user }}"
|
||||
state: present
|
||||
|
||||
- name: Create Woodpecker agent secret
|
||||
containers.podman.podman_secret:
|
||||
state: present
|
||||
name: "woodpecker-agent-secret-{{ workspace_user }}"
|
||||
data: "{{ podman_woodpecker_agent_secret }}"
|
||||
# Necessary to make the module idempotent on Podman < v4.7
|
||||
# See: https://github.com/containers/ansible-podman-collections/issues/692
|
||||
skip_existing: true
|
||||
|
||||
- name: Determine UID of workspace user
|
||||
ansible.builtin.user:
|
||||
name: "{{ workspace_user }}"
|
||||
register: user_data
|
||||
|
||||
- name: Create Woodpecker container
|
||||
containers.podman.podman_container:
|
||||
name: "woodpecker-agent-{{ user_data['uid'] }}"
|
||||
state: present
|
||||
image: "{{ podman_woodpecker_agent_image_path }}:{{ podman_woodpecker_version }}"
|
||||
volumes:
|
||||
- 'woodpecker-agent-{{ workspace_user }}:/etc/woodpecker'
|
||||
- '/etc/timezone:/etc/timezone:ro'
|
||||
- '/etc/localtime:/etc/localtime:ro'
|
||||
- "/run/woodpecker/{{ user_data['uid'] }}.sock:/var/run/docker.sock"
|
||||
env:
|
||||
WOODPECKER_SERVER: "{{ podman_woodpecker_agent_server }}"
|
||||
WOODPECKER_HOSTNAME: "{{ workspace_user }}"
|
||||
# Nothing is using the healthcheck IIUC, so disabling it doesn't reduce functionality.
|
||||
WOODPECKER_HEALTHCHECK: false
|
||||
WOODPECKER_LOG_LEVEL: debug
|
||||
WOODPECKER_BACKEND: docker
|
||||
WOODPECKER_FILTER_LABELS: "{{ podman_woodpecker_agent_filter_labels }}"
|
||||
secrets:
|
||||
- "woodpecker-agent-secret-{{ workspace_user }},type=env,target=WOODPECKER_AGENT_SECRET"
|
||||
generate_systemd:
|
||||
restart_policy: always
|
||||
path: ~/.config/systemd/user
|
||||
after: "podman-proxy@{{ user_data['uid'] }}.target"
|
||||
requires: "podman-proxy@{{ user_data['uid'] }}.target"
|
||||
notify: Reload user systemd daemon
|
||||
|
||||
- name: Flush handlers
|
||||
ansible.builtin.meta: flush_handlers
|
||||
|
||||
- name: Start and enable Woodpecker services
|
||||
ansible.builtin.systemd_service:
|
||||
name: "{{ item }}"
|
||||
daemon_reload: true
|
||||
state: started
|
||||
enabled: true
|
||||
scope: user
|
||||
loop:
|
||||
- "podman-proxy@{{ user_data['uid'] }}.path"
|
||||
- "container-woodpecker-agent-{{ user_data['uid'] }}.service"
|
||||
22
roles/podman_woodpecker_agent/tasks/machinectl.yml
Normal file
22
roles/podman_woodpecker_agent/tasks/machinectl.yml
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
---
|
||||
- name: Create systemd user configuration directory
|
||||
ansible.builtin.file:
|
||||
dest: ~/.config/systemd/user
|
||||
state: directory
|
||||
mode: "0750"
|
||||
|
||||
- name: Install systemd unit files for the proxy target
|
||||
ansible.builtin.template:
|
||||
src: "{{ item }}.j2"
|
||||
dest: "~/.config/systemd/user/{{ item }}"
|
||||
mode: "0644"
|
||||
notify: Reload user systemd daemon
|
||||
loop:
|
||||
- podman-proxy@.path
|
||||
- podman-proxy@.target
|
||||
|
||||
- name: Create Woodpecker agents
|
||||
ansible.builtin.include_tasks: agents.yml
|
||||
loop: "{{ podman_woodpecker_agent_workspace_users }}"
|
||||
loop_control:
|
||||
loop_var: workspace_user
|
||||
20
roles/podman_woodpecker_agent/tasks/main.yml
Normal file
20
roles/podman_woodpecker_agent/tasks/main.yml
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
---
|
||||
- name: Configure proxies for the Podman sockets
|
||||
ansible.builtin.import_tasks: socket-proxy.yml
|
||||
|
||||
- name: Activate the workspace Podman systemd socket unit
|
||||
ansible.builtin.systemd_service:
|
||||
name: podman.socket
|
||||
state: started
|
||||
enabled: true
|
||||
scope: user
|
||||
become_method: community.general.machinectl
|
||||
become_user: "{{ item }}"
|
||||
become: true
|
||||
loop: "{{ podman_woodpecker_agent_workspace_users }}"
|
||||
|
||||
- name: Configure Woodpecker agent services
|
||||
ansible.builtin.import_tasks: machinectl.yml
|
||||
become_method: community.general.machinectl
|
||||
become_user: "{{ podman_woodpecker_agent_user }}"
|
||||
become: true
|
||||
26
roles/podman_woodpecker_agent/tasks/socket-proxy.yml
Normal file
26
roles/podman_woodpecker_agent/tasks/socket-proxy.yml
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
---
|
||||
- name: Install proxy systemd units
|
||||
ansible.builtin.template:
|
||||
src: "{{ item }}.j2"
|
||||
dest: "/etc/systemd/system/{{ item }}"
|
||||
mode: "0644"
|
||||
loop:
|
||||
- woodpecker-proxy@.path
|
||||
- woodpecker-proxy@.service
|
||||
- woodpecker-proxy@.socket
|
||||
notify: Reload systemd daemon
|
||||
|
||||
- name: Flush handlers
|
||||
ansible.builtin.meta: flush_handlers
|
||||
|
||||
- name: Install tmpfiles configuration
|
||||
ansible.builtin.template:
|
||||
src: tmpfiles.j2
|
||||
dest: /etc/tmpfiles.d/woodpecker.conf
|
||||
mode: "0644"
|
||||
|
||||
- name: Activate systemd units for the Podman sockets
|
||||
ansible.builtin.include_tasks: activate-proxies.yml
|
||||
loop: "{{ podman_woodpecker_agent_workspace_users }}"
|
||||
loop_control:
|
||||
loop_var: workspace_user
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
# {{ ansible_managed }}
|
||||
[Unit]
|
||||
Description=Watch for the creation of the workspace user Podman socket
|
||||
|
||||
[Path]
|
||||
PathExists=/run/woodpecker/%i.sock
|
||||
Unit=podman-proxy@%i.target
|
||||
|
||||
[Install]
|
||||
WantedBy=default.target
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
# {{ ansible_managed }}
|
||||
[Unit]
|
||||
Description=The proxied socket to the Podman service is available to be mounted
|
||||
2
roles/podman_woodpecker_agent/templates/tmpfiles.j2
Normal file
2
roles/podman_woodpecker_agent/templates/tmpfiles.j2
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
# {{ ansible_managed }}
|
||||
D /run/woodpecker 0750 root woodpecker-agent
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
# {{ ansible_managed }}
|
||||
[Unit]
|
||||
Description=Watch for the creation of the workspace user Podman socket
|
||||
|
||||
[Path]
|
||||
PathExists=/run/user/%i/podman/podman.sock
|
||||
Unit=woodpecker-proxy@%i.socket
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
# {{ ansible_managed }}
|
||||
[Unit]
|
||||
Requires=woodpecker-proxy@%i.socket
|
||||
After=woodpecker-proxy@%i.socket
|
||||
|
||||
[Service]
|
||||
ExecStart=/usr/lib/systemd/systemd-socket-proxyd /run/user/%i/podman/podman.sock
|
||||
PrivateTmp=yes
|
||||
PrivateNetwork=yes
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
# {{ ansible_managed }}
|
||||
[Unit]
|
||||
Description=Proxy connections
|
||||
|
||||
[Socket]
|
||||
ListenStream=/run/woodpecker/%i.sock
|
||||
SocketMode=0660
|
||||
SocketUser={{ podman_woodpecker_agent_user }}
|
||||
Loading…
Reference in a new issue