mirror of
				https://github.com/kevinveenbirkenbach/computer-playbook.git
				synced 2025-10-31 18:29:21 +00:00 
			
		
		
		
	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
			
			
This commit is contained in:
		| @@ -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 }}" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user