service: Add support for service postgres containers
This commit is contained in:
34
roles/service/tasks/database.yaml
Normal file
34
roles/service/tasks/database.yaml
Normal file
@@ -0,0 +1,34 @@
|
||||
---
|
||||
- name: Set database name
|
||||
ansible.builtin.set_fact:
|
||||
_service_database_name: "{{ service_name }}-{{ service_database_type }}"
|
||||
|
||||
- name: Database container for {{ service_name }}
|
||||
ansible.builtin.include_role:
|
||||
name: container
|
||||
vars:
|
||||
container_name: "{{ service_name }}-{{ service_database_type }}" # This doesn't use _service_database_name to allow container role handlers to work
|
||||
container_image: "docker.io/library/postgres:{{ service_postgres_tag }}"
|
||||
container_mounts:
|
||||
- type: volume
|
||||
source: "{{ _service_database_name }}"
|
||||
destination: /var/lib/postgresql/data
|
||||
container_networks:
|
||||
- "{{ service_name }}"
|
||||
container_secrets:
|
||||
- name: "{{ _service_database_name }}"
|
||||
container_env:
|
||||
POSTGRES_USER: "{{ service_name | replace('-', '_') }}"
|
||||
POSTGRES_PASSWORD_FILE: "/run/secrets/{{ _service_database_name }}"
|
||||
container_auto_update: "{{ service_auto_update }}"
|
||||
|
||||
- name: Get database secret info
|
||||
containers.podman.podman_secret_info:
|
||||
name: "{{ _service_database_name }}"
|
||||
showsecret: true
|
||||
register: _service_database_secret
|
||||
|
||||
- name: Set database-related variables
|
||||
ansible.builtin.set_fact:
|
||||
_service_database_password: "{{ _service_database_secret.secrets[0].SecretData }}"
|
||||
_service_container_requires: "{{ _service_container_requires + [_service_database_name + '.service'] }}"
|
||||
@@ -1,12 +1,20 @@
|
||||
---
|
||||
- name: Validate inputs
|
||||
ansible.builtin.import_tasks: validation.yaml
|
||||
|
||||
- name: Initialize variables
|
||||
ansible.builtin.set_fact:
|
||||
_service_container_mounts: []
|
||||
_service_container_requires: "{{ service_requires }}"
|
||||
|
||||
- name: Mounts for {{ service_name }}
|
||||
ansible.builtin.include_tasks: mounts.yaml
|
||||
when: service_container_mounts | length > 0
|
||||
|
||||
- name: Databse for {{ service_name }}
|
||||
ansible.builtin.include_tasks: database.yaml
|
||||
when: "service_database_type != 'none'"
|
||||
|
||||
- name: Main container for {{ service_name }}
|
||||
ansible.builtin.include_role:
|
||||
name: container
|
||||
@@ -18,7 +26,7 @@
|
||||
container_networks:
|
||||
- "{{ service_name }}"
|
||||
container_env: "{{ service_container_env }}"
|
||||
container_requires: "{{ service_requires }}"
|
||||
container_requires: "{{ _service_container_requires }}"
|
||||
container_wants: "{{ [service_name + '-socat.socket'] if service_domains | length > 0 else [] }}"
|
||||
container_auto_update: "{{ service_auto_update }}"
|
||||
|
||||
|
||||
5
roles/service/tasks/validation.yaml
Normal file
5
roles/service/tasks/validation.yaml
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
- name: Fail if service_database_type is postgres but service_postgres_tag is not set
|
||||
ansible.builtin.fail:
|
||||
msg: "service_postgres_tag needs to be set when database type is postgres"
|
||||
when: "service_database_type == 'postgres' and service_postgres_tag is not defined"
|
||||
Reference in New Issue
Block a user