Optimized handlers order for mailu

This commit is contained in:
Kevin Veen-Birkenbach 2025-08-11 01:56:22 +02:00
parent a9d77de2a4
commit 5426014096
No known key found for this signature in database
GPG Key ID: 44D8F11FD62F878E
10 changed files with 66 additions and 63 deletions

View File

@ -10,10 +10,10 @@
- "{{ DOCKER_VARS_FILE }}" # Important to load docker variables first so that database can use them - "{{ DOCKER_VARS_FILE }}" # Important to load docker variables first so that database can use them
- "{{ cmp_db_docker_vars_file_db }}" # Important to load them before docker role so that backup can use them - "{{ cmp_db_docker_vars_file_db }}" # Important to load them before docker role so that backup can use them
- name: "For '{{ application_id }}': Load cmp-docker-oauth2"
include_role:
name: cmp-docker-oauth2
- name: "For '{{ application_id }}': Load central RDBMS" - name: "For '{{ application_id }}': Load central RDBMS"
include_role: include_role:
name: cmp-rdbms name: cmp-rdbms
- name: "For '{{ application_id }}': Load cmp-docker-oauth2"
include_role:
name: cmp-docker-oauth2

View File

@ -1 +1 @@
cmp_db_docker_vars_file_db: "{{ playbook_dir }}/roles/cmp-rdbms/vars/database.yml" cmp_db_docker_vars_file_db: "{{ playbook_dir }}/roles/cmp-rdbms/vars/database.yml"

View File

@ -2,11 +2,17 @@
# The following env file will just be used from the dedicated mariadb container # The following env file will just be used from the dedicated mariadb container
# and not the central one # and not the central one
- name: "For '{{ application_id }}': Create {{database_env}}" - block:
template: - name: "Ensure env dir exists: {{ docker_compose.directories.env }}"
src: "env/{{database_type}}.env.j2" ansible.builtin.file:
dest: "{{database_env}}" path: "{{ docker_compose.directories.env }}"
notify: docker compose up state: directory
mode: "0755"
- name: "For '{{ application_id }}': Create {{database_env}}"
template:
src: "env/{{database_type}}.env.j2"
dest: "{{database_env}}"
notify: docker compose up
when: not applications | get_app_conf(application_id, 'features.central_database', False) when: not applications | get_app_conf(application_id, 'features.central_database', False)
- name: "For '{{ application_id }}': Create central database" - name: "For '{{ application_id }}': Create central database"

View File

@ -1,13 +1,13 @@
oidc: oidc:
email_by_username: true # If true, then the mail is set by the username. If wrong then the OIDC user email is used email_by_username: true # If true, then the mail is set by the username. If wrong then the OIDC user email is used
enable_user_creation: true # Users will be created if not existing enable_user_creation: true # Users will be created if not existing
domain: "{{primary_domain}}" # The main domain from which mails will be send \ email suffix behind @ domain: "{{ primary_domain }}" # The main domain from which mails will be send \ email suffix behind @
features: features:
matomo: true matomo: true
css: false css: false
port-ui-desktop: true # Deactivated mailu iframe loading until keycloak supports it port-ui-desktop: true # Deactivated mailu iframe loading until keycloak supports it
oidc: true oidc: true
central_database: false # Deactivate central database for mailu, I don't know why the database deactivation is necessary central_database: false # Deactivate central database for mailu, I don't know why the database deactivation is necessary
logout: true logout: true
server: server:
domains: domains:

View File

@ -23,5 +23,5 @@
when: "'mail-bot' in item.value.roles or 'administrator' in item.value.roles" when: "'mail-bot' in item.value.roles or 'administrator' in item.value.roles"
- name: "Create Mailu API Token for {{ mailu_user_name }}" - name: "Create Mailu API Token for {{ mailu_user_name }}"
include_tasks: create-mailu-token.yml include_tasks: 01_0A_create-mailu-token.yml
when: "{{ 'mail-bot' in item.value.roles }}" when: "{{ 'mail-bot' in item.value.roles }}"

View File

@ -2,7 +2,7 @@
include_vars: vars/mailu-dns.yml include_vars: vars/mailu-dns.yml
- name: Generate DKIM public key - name: Generate DKIM public key
include_tasks: generate-and-read-dkim.yml include_tasks: 02_0A_generate-and-read-dkim.yml
- name: "Set A record for mail server" - name: "Set A record for mail server"
community.general.cloudflare_dns: community.general.cloudflare_dns:

View File

@ -1,46 +1,41 @@
--- ---
- name: "load docker, db and proxy for {{application_id}}" - block:
include_role: - name: "load docker, db and proxy for {{application_id}}"
name: cmp-db-docker-proxy include_role:
when: run_once_web_app_mailu is not defined name: cmp-db-docker-proxy
- name: "Include the srv-proxy-6-6-tls-deploy role" - name: "Include the srv-proxy-6-6-tls-deploy role"
include_role: include_role:
name: srv-proxy-6-6-tls-deploy name: srv-proxy-6-6-tls-deploy
when: run_once_web_app_mailu is not defined
- name: Flush docker service handlers - name: Flush docker service handlers
meta: flush_handlers meta: flush_handlers
when: run_once_web_app_mailu is not defined
- name: "Create Mailu accounts" - name: "Create Mailu accounts"
include_tasks: create-mailu-user.yml include_tasks: 01_00_create-mailu-user.yml
vars: vars:
mailu_compose_dir: "{{ docker_compose.directories.instance }}" mailu_compose_dir: "{{ docker_compose.directories.instance }}"
mailu_domain: "{{ primary_domain }}" mailu_domain: "{{ primary_domain }}"
mailu_api_base_url: "http://127.0.0.1:8080/api/v1" mailu_api_base_url: "http://127.0.0.1:8080/api/v1"
mailu_global_api_token: "{{ applications | get_app_conf(application_id, 'credentials.api_token') }}" mailu_global_api_token: "{{ applications | get_app_conf(application_id, 'credentials.api_token') }}"
mailu_action: >- mailu_action: >-
{{ {{
( (
'administrator' in (item.value.get('roles', [])) 'administrator' in (item.value.get('roles', []))
) )
| ternary('admin','user') | ternary('admin','user')
}} }}
mailu_user_key: "{{ item.key }}" mailu_user_key: "{{ item.key }}"
mailu_user_name: "{{ item.value.username }}" mailu_user_name: "{{ item.value.username }}"
mailu_password: "{{ item.value.password }}" mailu_password: "{{ item.value.password }}"
mailu_token_ip: "{{ item.value.ip | default('') }}" mailu_token_ip: "{{ item.value.ip | default('') }}"
loop: "{{ users | dict2items }}" loop: "{{ users | dict2items }}"
loop_control: loop_control:
loop_var: item loop_var: item
when: run_once_web_app_mailu is not defined
- name: Set Mailu DNS records
include_tasks: set-mailu-dns-records.yml
when: dns_provider == 'cloudflare'
- name: Run the docker_mailu roles once - name: Set Mailu DNS records
set_fact: include_tasks: 02_00_set-mailu-dns-records.yml
run_once_web_app_mailu: true when: dns_provider == 'cloudflare'
- include_tasks: utils/run_once.yml
when: run_once_web_app_mailu is not defined when: run_once_web_app_mailu is not defined

View File

@ -1,18 +1,20 @@
# General
application_id: "web-app-mailu" application_id: "web-app-mailu"
domain: "{{ domains | get_domain(application_id) }}"
http_port: "{{ ports.localhost.http[application_id] }}"
proxy_extra_configuration: "client_max_body_size 31M;"
# Database Configuration # Database Configuration
database_password: "{{ applications | get_app_conf(application_id, ' credentials.database_password') }}" database_password: "{{ applications | get_app_conf(application_id, ' credentials.database_password') }}"
database_type: "mariadb" database_type: "mariadb"
cert_mount_directory: "{{docker_compose.directories.volumes}}certs/" cert_mount_directory: "{{ docker_compose.directories.volumes }}certs/"
# Use dedicated source for oidc if activated # Use dedicated source for oidc if activated
# @see https://github.com/heviat/Mailu-OIDC/tree/2024.06 # @see https://github.com/heviat/Mailu-OIDC/tree/2024.06
docker_source: "{{ 'ghcr.io/heviat' if applications | get_app_conf(application_id, 'features.oidc', False) else 'ghcr.io/mailu' }}" docker_source: "{{ 'ghcr.io/heviat' if applications | get_app_conf(application_id, 'features.oidc', False) else 'ghcr.io/mailu' }}"
domain: "{{ domains | get_domain(application_id) }}" # Mailu Specific
http_port: "{{ ports.localhost.http[application_id] }}"
proxy_extra_configuration: "client_max_body_size 31M;"
mailu_version: "{{ applications | get_app_conf(application_id, 'docker.services.mailu.version', True) }}" mailu_version: "{{ applications | get_app_conf(application_id, 'docker.services.mailu.version', True) }}"
mailu_name: "{{ applications | get_app_conf(application_id, 'docker.services.mailu.name', True) }}" mailu_name: "{{ applications | get_app_conf(application_id, 'docker.services.mailu.name', True) }}"
mailu_smtp_queue: "mailu_smtp_queue" mailu_smtp_queue: "mailu_smtp_queue"