--- - name: Ensure cast group exists ansible.builtin.group: name: "{{ semaphore_group }}" state: present system: true - name: Ensure cast user exists ansible.builtin.user: name: "{{ semaphore_user }}" group: "{{ semaphore_group }}" shell: /bin/bash create_home: true state: present - name: Create Semaphore data directories with correct ownership ansible.builtin.file: path: "{{ item }}" state: directory owner: "{{ semaphore_user }}" group: "{{ semaphore_group }}" mode: "0777" recurse: true become: 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 - 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 - name: Reload systemd daemon ansible.builtin.systemd: daemon_reload: true become: true - name: Start PostgreSQL quadlet service ansible.builtin.command: cmd: "systemctl start {{ semaphore_postgres_container_name }}.service" become: true changed_when: true - name: Start Semaphore quadlet service ansible.builtin.command: cmd: "systemctl start {{ semaphore_container_name }}.service" become: true changed_when: true - name: Enable quadlet services ansible.builtin.systemd: name: "{{ item }}" enabled: true become: true loop: - "{{ semaphore_postgres_container_name }}.service" - "{{ semaphore_container_name }}.service" - 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" owner: "{{ semaphore_user }}" group: "{{ semaphore_group }}" mode: "0644" content: | { "db": { "Dialect": "bolt", "BoltDB": { "Path": "{{ semaphore_data_dir }}" } }, "server": { "Addr": ":{{ semaphore_port }}" } } become: true - name: Create and start Semaphore container containers.podman.podman_container: name: "{{ semaphore_container_name }}" image: "{{ semaphore_image }}" state: started recreate: true ports: - "{{ semaphore_port }}:3000" volumes: - "{{ semaphore_data_dir }}:/var/lib/semaphore:Z" - "{{ semaphore_config_dir }}:/etc/semaphore:Z" env: SEMAPHORE_DB_DIALECT: "{{ semaphore_db_type }}" SEMAPHORE_DB_PATH: "{{ semaphore_db_path }}" SEMAPHORE_ADMIN: admin SEMAPHORE_ADMIN_PASSWORD: "{{ vault_semaphore_admin_password }}" SEMAPHORE_ACCESS_KEY_ENCRYPTION: "{{ vault_semaphore_access_key_encryption }}" - name: Generate systemd service for the container ansible.builtin.command: cmd: podman generate systemd --name --new --files {{ semaphore_container_name }} chdir: /etc/systemd/system become: true changed_when: true - name: Reload systemd and enable service ansible.builtin.systemd: daemon_reload: true name: "container-{{ semaphore_container_name }}.service" state: started enabled: true become: true