fix: replace semaphore role with new Podman + Quadlet version

This commit is contained in:
Hermes Agent service account
2026-05-26 22:46:46 -05:00
parent a781ef8b14
commit c1810fde8a
5 changed files with 101 additions and 56 deletions

View File

@@ -1,5 +1,26 @@
--- ---
# file: roles/semaphore/defaults/main.yml # Semaphore version
semaphore_version: "v2.10.3"
semaphore_compose_dir: /opt/docker/semaphore # Service account
semaphore_ssh_key_file: "~/.ssh/ansible" semaphore_user: cast
semaphore_group: cast
# Container settings
semaphore_container_name: semaphore
semaphore_image: "semaphoreui/semaphore:{{ semaphore_version }}"
# Paths
semaphore_data_dir: /var/lib/semaphore
semaphore_config_dir: /etc/semaphore
# Port
semaphore_port: 3000
# Database
semaphore_db_type: bolt
semaphore_db_path: "{{ semaphore_data_dir }}/database.boltdb"
# Vault variables (defined in group_vars/all/vault)
# vault_semaphore_admin_password
# vault_semaphore_access_key_encryption

View File

@@ -1,7 +1,4 @@
--- ---
# file: roles/semaphore/handlers/main.yml - name: reload systemd
ansible.builtin.systemd:
- name: Restart Semaphore daemon_reload: true
community.docker.docker_compose_v2:
project_src: "{{ semaphore_compose_dir }}"
state: restarted

View File

@@ -0,0 +1,4 @@
---
dependencies:
- role: podman
when: podman_install | default(true)

View File

@@ -1,50 +1,48 @@
--- ---
# file: roles/semaphore/tasks/main.yml - name: Ensure cast group exists
ansible.builtin.group:
- name: Create Semaphore directory name: "{{ semaphore_group }}"
ansible.builtin.file:
path: "{{ semaphore_compose_dir }}"
state: directory
owner: wed
group: docker
mode: '0755'
- name: Copy Compose file from boilerplate
ansible.builtin.copy:
src: "{{ playbook_dir }}/../../boilerplates/semaphore/compose.yaml"
dest: "{{ semaphore_compose_dir }}/compose.yaml"
owner: wed
group: docker
mode: '0644'
- name: Deploy Semaphore .env file
ansible.builtin.template:
src: env.j2
dest: "{{ semaphore_compose_dir }}/.env"
owner: wed
group: docker
mode: '0600'
- name: Copy SSH key for Ansible authentication
ansible.builtin.copy:
src: "{{ semaphore_ssh_key_file }}"
dest: "{{ semaphore_compose_dir }}/ansible_key"
owner: "1001"
group: "1001"
mode: '0600'
- name: Start Semaphore containers
community.docker.docker_compose_v2:
project_src: "{{ semaphore_compose_dir }}"
state: present state: present
register: semaphore_compose system: true
- name: Wait for Semaphore to be ready - name: Ensure cast user exists
ansible.builtin.uri: ansible.builtin.user:
url: "http://localhost:3000/api/ping" name: "{{ semaphore_user }}"
method: GET group: "{{ semaphore_group }}"
status_code: 200 shell: /bin/bash
register: semaphore_health create_home: true
retries: 48 state: present
delay: 5
until: semaphore_health.status == 200 - name: Create Semaphore data directories
ansible.builtin.file:
path: "{{ item }}"
state: directory
owner: "{{ semaphore_user }}"
group: "{{ semaphore_group }}"
mode: "0755"
loop:
- "{{ semaphore_data_dir }}"
- "{{ semaphore_config_dir }}"
- name: Create Quadlet file for Semaphore
ansible.builtin.template:
src: semaphore.container.j2
dest: "/etc/containers/systemd/{{ semaphore_container_name }}.container"
owner: root
group: root
mode: "0644"
notify: reload systemd
- name: Ensure Semaphore container is started
ansible.builtin.systemd:
name: "{{ semaphore_container_name }}"
state: started
enabled: true
daemon_reload: true
- name: Wait for Semaphore to become available
ansible.builtin.wait_for:
host: "127.0.0.1"
port: "{{ semaphore_port }}"
delay: 5
timeout: 60

View File

@@ -0,0 +1,25 @@
[Unit]
Description=Semaphore UI
After=network-online.target
Wants=network-online.target
[Container]
Image={{ semaphore_image }}
ContainerName={{ semaphore_container_name }}
PublishPort={{ semaphore_port }}:3000
Volume={{ semaphore_data_dir }}:/var/lib/semaphore:Z
Volume={{ semaphore_config_dir }}:/etc/semaphore:Z
Environment=SEMAPHORE_DB_TYPE={{ semaphore_db_type }}
Environment=SEMAPHORE_DB_PATH={{ semaphore_db_path }}
Environment=SEMAPHORE_ADMIN=admin
Environment=SEMAPHORE_ADMIN_PASSWORD={{ vault_semaphore_admin_password }}
Environment=SEMAPHORE_ACCESS_KEY_ENCRYPTION={{ vault_semaphore_access_key_encryption }}
User={{ semaphore_user }}
Group={{ semaphore_group }}
Restart=always
[Service]
Restart=always
[Install]
WantedBy=multi-user.target