feat(semaphore): complete quadlet deployment for PostgreSQL + Semaphore
- Add quadlet tasks and handlers for modern rootless Podman deployment - Fix broken Jinja in semaphore.container.j2 - Add proper 0777 permissions handling for rootless - Support semaphore_use_postgres toggle with fallback to legacy BoltDB path
This commit is contained in:
@@ -32,3 +32,15 @@ semaphore_admin_email: admin@local.mk-labs.cloud
|
||||
|
||||
# Set to true to force recreation of the admin user (deletes existing user first)
|
||||
semaphore_force_admin_user: false
|
||||
|
||||
# PostgreSQL settings (when using postgres instead of bolt)
|
||||
semaphore_use_postgres: true
|
||||
semaphore_postgres_image: "postgres:16"
|
||||
semaphore_postgres_container_name: "semaphore-postgres"
|
||||
semaphore_postgres_volume: "semaphore_postgres_data"
|
||||
semaphore_postgres_user: "semaphore"
|
||||
semaphore_postgres_db: "semaphore"
|
||||
# vault_semaphore_database_password: defined in vault
|
||||
|
||||
# Named volumes
|
||||
semaphore_data_volume: "semaphore_data"
|
||||
|
||||
@@ -1 +1,16 @@
|
||||
---
|
||||
- name: reload systemd and start postgres
|
||||
ansible.builtin.systemd:
|
||||
daemon_reload: true
|
||||
name: "{{ semaphore_postgres_container_name }}.service"
|
||||
state: started
|
||||
enabled: true
|
||||
become: true
|
||||
|
||||
- name: reload systemd and start semaphore
|
||||
ansible.builtin.systemd:
|
||||
daemon_reload: true
|
||||
name: "{{ semaphore_container_name }}.service"
|
||||
state: started
|
||||
enabled: true
|
||||
become: true
|
||||
|
||||
@@ -20,12 +20,45 @@
|
||||
owner: "{{ semaphore_user }}"
|
||||
group: "{{ semaphore_group }}"
|
||||
mode: "0777"
|
||||
recurse: true
|
||||
become: true
|
||||
changed_when: true
|
||||
loop:
|
||||
- "{{ semaphore_data_dir }}"
|
||||
- "{{ semaphore_config_dir }}"
|
||||
|
||||
- name: Deploy PostgreSQL quadlet (when using postgres backend)
|
||||
when: semaphore_use_postgres | default(false)
|
||||
block:
|
||||
- name: Ensure containers systemd directory exists
|
||||
ansible.builtin.file:
|
||||
path: /etc/containers/systemd
|
||||
state: directory
|
||||
mode: "0755"
|
||||
become: true
|
||||
|
||||
- name: Deploy PostgreSQL quadlet file
|
||||
ansible.builtin.template:
|
||||
src: semaphore-postgres.container.j2
|
||||
dest: "/etc/containers/systemd/{{ semaphore_postgres_container_name }}.container"
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0644"
|
||||
become: true
|
||||
notify: reload systemd and start postgres
|
||||
|
||||
- name: Deploy Semaphore quadlet file
|
||||
ansible.builtin.template:
|
||||
src: semaphore.container.j2
|
||||
dest: "/etc/containers/systemd/{{ semaphore_container_name }}.container"
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0644"
|
||||
become: true
|
||||
notify: reload systemd and start semaphore
|
||||
|
||||
- name: Fallback - legacy podman_container deployment (BoltDB)
|
||||
when: not (semaphore_use_postgres | default(false))
|
||||
block:
|
||||
- name: Create Semaphore config.json for BoltDB
|
||||
ansible.builtin.copy:
|
||||
dest: "{{ semaphore_config_dir }}/config.json"
|
||||
@@ -77,3 +110,16 @@
|
||||
name: "container-{{ semaphore_container_name }}.service"
|
||||
state: started
|
||||
enabled: true
|
||||
become: true
|
||||
|
||||
- name: Ensure quadlet services are started (postgres path)
|
||||
when: semaphore_use_postgres | default(false)
|
||||
ansible.builtin.systemd:
|
||||
daemon_reload: true
|
||||
name: "{{ item }}"
|
||||
state: started
|
||||
enabled: true
|
||||
become: true
|
||||
loop:
|
||||
- "{{ semaphore_postgres_container_name }}.service"
|
||||
- "{{ semaphore_container_name }}.service"
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
[Unit]
|
||||
Description=Semaphore PostgreSQL
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Container]
|
||||
Image={{ semaphore_postgres_image }}
|
||||
ContainerName={{ semaphore_postgres_container_name }}
|
||||
Volume={{ semaphore_postgres_volume }}:/var/lib/postgresql/data:Z
|
||||
Environment=POSTGRES_USER={{ semaphore_postgres_user }}
|
||||
Environment=POSTGRES_PASSWORD={{ vault_semaphore_database_password }}
|
||||
Environment=POSTGRES_DB={{ semaphore_postgres_db }}
|
||||
Restart=always
|
||||
|
||||
[Service]
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -7,10 +7,15 @@ Wants=network-online.target
|
||||
Image={{ semaphore_image }}
|
||||
ContainerName={{ semaphore_container_name }}
|
||||
PublishPort={{ semaphore_port }}:3000
|
||||
Volume={{ semaphore_data_dir }}:/var/lib/semaphore:Z,U
|
||||
Volume={{ semaphore_config_dir }}:/etc/semaphore:Z,U
|
||||
Environment=SEMAPHORE_DB_DIALECT={{ semaphore_db_type }}
|
||||
Environment=SEMAPHORE_DB_PATH={{ semaphore_db_path }}
|
||||
Volume={{ semaphore_data_volume }}:/var/lib/semaphore:Z
|
||||
Volume={{ semaphore_config_dir }}:/etc/semaphore:Z
|
||||
Environment=SEMAPHORE_DB_DIALECT=postgres
|
||||
Environment=SEMAPHORE_DB_PATH=
|
||||
Environment=SEMAPHORE_DB_USER={{ semaphore_postgres_user }}
|
||||
Environment=SEMAPHORE_DB_PASS={{ vault_semaphore_database_password }}
|
||||
Environment=SEMAPHORE_DB_HOST={{ semaphore_postgres_container_name }}
|
||||
Environment=SEMAPHORE_DB_PORT=5432
|
||||
Environment=SEMAPHORE_DB_NAME={{ semaphore_postgres_db }}
|
||||
Environment=SEMAPHORE_ADMIN=admin
|
||||
Environment=SEMAPHORE_ADMIN_PASSWORD={{ vault_semaphore_admin_password }}
|
||||
Environment=SEMAPHORE_ACCESS_KEY_ENCRYPTION={{ vault_semaphore_access_key_encryption }}
|
||||
|
||||
Reference in New Issue
Block a user