From ce029881d0500cf8a52ac8505e3f183cdc2e15b5 Mon Sep 17 00:00:00 2001 From: Kevin Veen-Birkenbach Date: Tue, 12 Aug 2025 21:59:37 +0200 Subject: [PATCH] cmp-rdbms: make vars resilient when database_type is empty Fix a templating crash during docker-compose.yml rendering when a role sets database_type to an empty string or does not expose it (e.g., svc-prx-openresty). Previously _database_id resolved to 'svc-db-' and get_app_conf attempted to read 'docker.services..name', raising AppConfigKeyError: Application ID 'svc-db-' not found. Changes: - Introduce _dbtype = (database_type | d('') | trim) and build _database_id only if _dbtype is non-empty. - Guard central DB lookups: use get_app_conf(..., strict=False, default='') and only when _dbtype is set. - Default _database_consumer_entity_name to get_entity_name of database_application_id or fallback to application_id. - Only resolve database_port when _dbtype is set; otherwise empty. - Minor formatting fixes for env and URL strings. Impact: - Prevents failures in roles without a DB or with database_type=''. - Keeps previous behavior intact for apps with a valid database_type (mariadb/postgres). - Eliminates 'config_path: docker.services..name' errors while keeping compose templates stable. https://chatgpt.com/share/689b9d11-6308-800f-b20c-2d9f18d832f1 --- roles/cmp-rdbms/vars/database.yml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/roles/cmp-rdbms/vars/database.yml b/roles/cmp-rdbms/vars/database.yml index d3cd0479..cdfe9ce5 100644 --- a/roles/cmp-rdbms/vars/database.yml +++ b/roles/cmp-rdbms/vars/database.yml @@ -1,17 +1,19 @@ # Helper variables -_database_id: "svc-db-{{ database_type }}" -_database_central_name: "{{ applications | get_app_conf( _database_id, 'docker.services.' ~ database_type ~ '.name') }}" -_database_consumer_entity_name: "{{ database_application_id | get_entity_name }}" -_database_central_enabled: "{{ applications | get_app_conf(database_application_id, 'features.central_database', False) }}" +_dbtype: "{{ (database_type | d('') | trim) }}" +_database_id: "{{ ('svc-db-' ~ _dbtype) if _dbtype else '' }}" +_database_central_name: "{{ (applications | get_app_conf(_database_id, 'docker.services.' ~ _dbtype ~ '.name', False, '')) if _dbtype else '' }}" +_database_consumer_entity_name: "{{ (database_application_id | d(application_id)) | get_entity_name }}" +_database_central_enabled: "{{ (applications | get_app_conf(database_application_id, 'features.central_database', False)) if _dbtype else False }}" # Definition + database_name: "{{ _database_consumer_entity_name }}" database_instance: "{{ _database_central_name if _database_central_enabled else database_name }}" # This could lead to bugs at dedicated database @todo cleanup database_host: "{{ _database_central_name if _database_central_enabled else 'database' }}" # This could lead to bugs at dedicated database @todo cleanup database_username: "{{ _database_consumer_entity_name }}" database_password: "{{ applications | get_app_conf(database_application_id, 'credentials.database_password', true) }}" -database_port: "{{ ports.localhost.database[ _database_id ] }}" -database_env: "{{docker_compose.directories.env}}{{database_type}}.env" +database_port: "{{ (ports.localhost.database[_database_id] | d('')) if _dbtype else '' }}" +database_env: "{{docker_compose.directories.env}}{{ database_type }}.env" database_url_jdbc: "jdbc:{{ database_type if database_type == 'mariadb' else 'postgresql' }}://{{ database_host }}:{{ database_port }}/{{ database_name }}" -database_url_full: "{{database_type}}://{{database_username}}:{{database_password}}@{{database_host}}:{{database_port}}/{{ database_name }}" +database_url_full: "{{ database_type }}://{{database_username}}:{{database_password}}@{{database_host}}:{{database_port}}/{{ database_name }}" database_volume: "{{ _database_consumer_entity_name ~ '_' if not _database_central_enabled }}{{ database_host }}"