From 9082443753861a35e7d9757a7c3715d8ad438aa7 Mon Sep 17 00:00:00 2001 From: Kevin Veen-Birkenbach Date: Fri, 26 Sep 2025 16:26:17 +0200 Subject: [PATCH] Refactor docker compose exec usage Introduce centralized variables: - docker_compose_command_base - docker_compose_command_exec Replaced hardcoded 'docker compose exec' with '{{ docker_compose_command_exec }}' across multiple roles (BigBlueButton, EspoCRM, Friendica, Listmonk, Mailu, Matrix, OpenProject). Ensures consistent environment file loading and reduces duplicated code. Details: https://chatgpt.com/share/68d6a276-19d0-800f-839d-d191d97f7c41 --- roles/docker-compose/vars/docker-compose.yml | 4 +++- roles/web-app-bigbluebutton/tasks/02_administrator.yml | 4 ++-- roles/web-app-bigbluebutton/vars/main.yml | 2 +- roles/web-app-espocrm/tasks/01_patch_config.yml | 2 +- roles/web-app-friendica/tasks/03_addons.yml | 2 +- roles/web-app-listmonk/tasks/main.yml | 2 +- roles/web-app-mailu/tasks/02_create-user.yml | 4 ++-- roles/web-app-mailu/tasks/03_create-token.yml | 6 +++--- roles/web-app-mailu/tasks/04_generate-and-read-dkim.yml | 6 +++--- roles/web-app-matrix/tasks/01_docker.yml | 4 ++-- roles/web-app-openproject/tasks/01_settings.yml | 2 +- roles/web-app-openproject/tasks/03_admin.yml | 2 +- 12 files changed, 21 insertions(+), 19 deletions(-) diff --git a/roles/docker-compose/vars/docker-compose.yml b/roles/docker-compose/vars/docker-compose.yml index a1deb96f..b30ca67a 100644 --- a/roles/docker-compose/vars/docker-compose.yml +++ b/roles/docker-compose/vars/docker-compose.yml @@ -1,2 +1,4 @@ # @See https://chatgpt.com/share/67a23d18-fb54-800f-983c-d6d00752b0b4 -docker_compose: "{{ application_id | get_docker_paths(PATH_DOCKER_COMPOSE_INSTANCES) }}" \ No newline at end of file +docker_compose: "{{ application_id | get_docker_paths(PATH_DOCKER_COMPOSE_INSTANCES) }}" +docker_compose_command_base: "docker compose --env-file {{ docker_compose.files.env }}" +docker_compose_command_exec: "{{ docker_compose_command_base }} exec" \ No newline at end of file diff --git a/roles/web-app-bigbluebutton/tasks/02_administrator.yml b/roles/web-app-bigbluebutton/tasks/02_administrator.yml index 409c34f3..081350b8 100644 --- a/roles/web-app-bigbluebutton/tasks/02_administrator.yml +++ b/roles/web-app-bigbluebutton/tasks/02_administrator.yml @@ -16,7 +16,7 @@ - name: "Create default admin" command: cmd: > - docker compose exec greenlight + {{ docker_compose_command_exec }} greenlight bundle exec rake admin:create['{{ users.administrator.username | upper }}','{{ users.administrator.email }}','{{ users.administrator.password }}'] chdir: "{{ docker_compose.directories.instance }}" register: admin_creation_result @@ -26,6 +26,6 @@ - name: "Make existing user administrator" command: cmd: > - docker compose exec greenlight + {{ docker_compose_command_exec }} greenlight bundle exec rake user:set_admin_role['{{ users.administrator.email }}'] chdir: "{{ docker_compose.directories.instance }}" \ No newline at end of file diff --git a/roles/web-app-bigbluebutton/vars/main.yml b/roles/web-app-bigbluebutton/vars/main.yml index 6f37cfd7..535e2f72 100644 --- a/roles/web-app-bigbluebutton/vars/main.yml +++ b/roles/web-app-bigbluebutton/vars/main.yml @@ -42,4 +42,4 @@ BBB_COTURN_ENABLED: "{{ applications | get_app_conf(applicatio ### SSO BBB_LDAP_ENABLED: "{{ applications | get_app_conf(application_id, 'features.ldap') }}" -BBB_OIDC_ENABLED: "{{ applications | get_app_conf(application_id, 'features.oidc') }}" \ No newline at end of file +BBB_OIDC_ENABLED: "{{ applications | get_app_conf(application_id, 'features.oidc') }}" diff --git a/roles/web-app-espocrm/tasks/01_patch_config.yml b/roles/web-app-espocrm/tasks/01_patch_config.yml index 53974ba1..aa17aced 100644 --- a/roles/web-app-espocrm/tasks/01_patch_config.yml +++ b/roles/web-app-espocrm/tasks/01_patch_config.yml @@ -37,7 +37,7 @@ - name: Ensure siteUrl matches canonical domain ansible.builtin.shell: | - docker compose exec -T web php -r ' + {{ docker_compose_command_exec }} -T web php -r ' require "/var/www/html/bootstrap.php"; $app = new \Espo\Core\Application(); $c = $app->getContainer(); diff --git a/roles/web-app-friendica/tasks/03_addons.yml b/roles/web-app-friendica/tasks/03_addons.yml index f8904d84..8365ec91 100644 --- a/roles/web-app-friendica/tasks/03_addons.yml +++ b/roles/web-app-friendica/tasks/03_addons.yml @@ -23,7 +23,7 @@ - name: Ensure Friendica addons are in sync command: > - docker compose exec --user {{ friendica_user }} + {{ docker_compose_command_exec }} --user {{ friendica_user }} application bin/console addon {{ 'enable' if item.enabled else 'disable' }} diff --git a/roles/web-app-listmonk/tasks/main.yml b/roles/web-app-listmonk/tasks/main.yml index b5649a4f..47fde310 100644 --- a/roles/web-app-listmonk/tasks/main.yml +++ b/roles/web-app-listmonk/tasks/main.yml @@ -20,7 +20,7 @@ - meta: flush_handlers - name: Check if listmonk database is already initialized - command: docker compose exec -T {{ database_host }} psql -U {{ database_username }} -d {{ database_name }} -c "\dt" + command: '{{ docker_compose_command_exec }} -T {{ database_host }} psql -U {{ database_username }} -d {{ database_name }} -c "\dt"' register: db_tables changed_when: false failed_when: false diff --git a/roles/web-app-mailu/tasks/02_create-user.yml b/roles/web-app-mailu/tasks/02_create-user.yml index 90dfcdac..98753ad5 100644 --- a/roles/web-app-mailu/tasks/02_create-user.yml +++ b/roles/web-app-mailu/tasks/02_create-user.yml @@ -1,6 +1,6 @@ - name: "Ensure Mailu user '{{ mailu_user_key }};{{ mailu_user_name }}@{{ MAILU_DOMAIN }}'' exists" command: > - docker compose exec admin flask mailu {{ mailu_action }} + {{ docker_compose_command_exec }} admin flask mailu {{ mailu_action }} {{ mailu_user_name }} {{ MAILU_DOMAIN }} '{{ mailu_password }}' args: chdir: "{{ MAILU_DOCKER_DIR }}" @@ -17,7 +17,7 @@ - name: "Change password for user '{{ mailu_user_key }};{{ mailu_user_name }}@{{ MAILU_DOMAIN }}'" command: > - docker compose exec admin flask mailu password + {{ docker_compose_command_exec }} admin flask mailu password {{ mailu_user_name }} {{ MAILU_DOMAIN }} '{{ mailu_password }}' args: chdir: "{{ MAILU_DOCKER_DIR }}" diff --git a/roles/web-app-mailu/tasks/03_create-token.yml b/roles/web-app-mailu/tasks/03_create-token.yml index c45de54d..4bb298db 100644 --- a/roles/web-app-mailu/tasks/03_create-token.yml +++ b/roles/web-app-mailu/tasks/03_create-token.yml @@ -1,7 +1,7 @@ - name: "Fetch existing API tokens via curl inside admin container" command: >- - docker compose exec -T admin \ + {{ docker_compose_command_exec }} -T admin \ curl -s -X GET {{ mailu_api_base_url }}/token \ -H "Authorization: Bearer {{ MAILU_API_TOKEN }}" args: @@ -23,7 +23,7 @@ - name: "Delete existing API token for '{{ mailu_user_key }};{{ mailu_user_name }}' if local token missing but remote exists" command: >- - docker compose exec -T admin \ + {{ docker_compose_command_exec }} -T admin \ curl -s -X DELETE {{ mailu_api_base_url }}/token/{{ mailu_user_existing_token.id }} \ -H "Authorization: Bearer {{ MAILU_API_TOKEN }}" args: @@ -38,7 +38,7 @@ - name: "Create API token for '{{ mailu_user_key }};{{ mailu_user_name }}' if no local token defined" command: >- - docker compose exec -T admin + {{ docker_compose_command_exec }} -T admin curl -sS -f -X POST {{ mailu_api_base_url }}/token -H "Authorization: Bearer {{ MAILU_API_TOKEN }}" -H "Content-Type: application/json" diff --git a/roles/web-app-mailu/tasks/04_generate-and-read-dkim.yml b/roles/web-app-mailu/tasks/04_generate-and-read-dkim.yml index 66789f59..ebb29fdb 100644 --- a/roles/web-app-mailu/tasks/04_generate-and-read-dkim.yml +++ b/roles/web-app-mailu/tasks/04_generate-and-read-dkim.yml @@ -1,6 +1,6 @@ - name: Check if DKIM private key file exists in the antispam container command: > - docker compose exec -T antispam + {{ docker_compose_command_exec }} -T antispam test -f {{ MAILU_DKIM_KEY_PATH }} register: dkim_key_file_stat failed_when: false @@ -10,7 +10,7 @@ - name: Generate DKIM key command: > - docker compose exec -T antispam + {{ docker_compose_command_exec }} -T antispam rspamadm dkim_keygen -s dkim -d {{ MAILU_DOMAIN }} -k {{ MAILU_DKIM_KEY_PATH }} register: dkim_keygen_output when: dkim_key_file_stat.rc != 0 @@ -20,7 +20,7 @@ - name: Fetch DKIM private key from antispam container shell: > - docker compose exec -T antispam + {{ docker_compose_command_exec }} -T antispam cat {{ MAILU_DKIM_KEY_PATH }} args: chdir: "{{ docker_compose.directories.instance }}" diff --git a/roles/web-app-matrix/tasks/01_docker.yml b/roles/web-app-matrix/tasks/01_docker.yml index b0e8607b..26efb9fc 100644 --- a/roles/web-app-matrix/tasks/01_docker.yml +++ b/roles/web-app-matrix/tasks/01_docker.yml @@ -102,7 +102,7 @@ - name: create admin account command: - cmd: docker compose exec -it synapse register_new_matrix_user -u {{ MATRIX_ADMINISTRATOR_USERNAME }} -p {{ applications | get_app_conf(application_id, 'credentials.administrator_password') }} -a -c {{ MATRIX_SYNAPSE_CONFIG_PATH_CONTAINER }} http://localhost:8008 + cmd: "{{ docker_compose_command_exec }} -it synapse register_new_matrix_user -u {{ MATRIX_ADMINISTRATOR_USERNAME }} -p {{ applications | get_app_conf(application_id, 'credentials.administrator_password') }} -a -c {{ MATRIX_SYNAPSE_CONFIG_PATH_CONTAINER }} http://localhost:8008" chdir: "{{ docker_compose.directories.instance }}" ignore_errors: true when: applications | get_app_conf(application_id, 'setup', True) | bool @@ -111,7 +111,7 @@ - name: create chatgpt bot command: - cmd: docker compose exec -it synapse register_new_matrix_user -u chatgptbot -p {{ applications | get_app_conf(application_id, 'credentials.chatgpt_bridge_user_password', True)}} -a -c {{ MATRIX_SYNAPSE_CONFIG_PATH_CONTAINER }} http://localhost:8008 + cmd: "{{ docker_compose_command_exec }} -it synapse register_new_matrix_user -u chatgptbot -p {{ applications | get_app_conf(application_id, 'credentials.chatgpt_bridge_user_password')}} -a -c {{ MATRIX_SYNAPSE_CONFIG_PATH_CONTAINER }} http://localhost:8008" chdir: "{{ docker_compose.directories.instance }}" ignore_errors: true when: applications | get_app_conf(application_id, 'setup', True) | bool diff --git a/roles/web-app-openproject/tasks/01_settings.yml b/roles/web-app-openproject/tasks/01_settings.yml index ce61137d..a111a0cc 100644 --- a/roles/web-app-openproject/tasks/01_settings.yml +++ b/roles/web-app-openproject/tasks/01_settings.yml @@ -1,6 +1,6 @@ - name: Set settings in OpenProject shell: > - docker compose exec {{ OPENPROJECT_WEB_SERVICE }} bash -c "cd /app && + {{ docker_compose_command_exec }} {{ OPENPROJECT_WEB_SERVICE }} bash -c "cd /app && RAILS_ENV={{ ENVIRONMENT | lower }} bundle exec rails runner \"Setting[:{{ item.key }}] = '{{ item.value }}'\"" args: chdir: "{{ docker_compose.directories.instance }}" diff --git a/roles/web-app-openproject/tasks/03_admin.yml b/roles/web-app-openproject/tasks/03_admin.yml index f34a7fad..eda90adf 100644 --- a/roles/web-app-openproject/tasks/03_admin.yml +++ b/roles/web-app-openproject/tasks/03_admin.yml @@ -1,6 +1,6 @@ - name: Ensure administrator user exists and is admin shell: > - docker compose exec web bash -c " + {{ docker_compose_command_exec }} web bash -c " cd /app && RAILS_ENV={{ ENVIRONMENT | lower }} bundle exec rails runner \" u = User.find_by(login: '{{ OPENPROJECT_ADMINISTRATOR_USERNAME }}')