fix: replace semaphore role with new Podman + Quadlet version
This commit is contained in:
@@ -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
|
||||||
@@ -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
|
|
||||||
4
ansible/roles/semaphore/meta/main.yml
Normal file
4
ansible/roles/semaphore/meta/main.yml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
dependencies:
|
||||||
|
- role: podman
|
||||||
|
when: podman_install | default(true)
|
||||||
@@ -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
|
||||||
25
ansible/roles/semaphore/templates/semaphore.container.j2
Normal file
25
ansible/roles/semaphore/templates/semaphore.container.j2
Normal 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
|
||||||
Reference in New Issue
Block a user