--- - name: Determine project root set_fact: project_root: "{{ (playbook_dir | realpath) | dirname }}" - name: Set default .env path set_fact: env_file_resolved: "{{ lookup('ansible.builtin.env', 'GNUTALER_ENV_FILE') }}" - name: Override .env path with project default when not provided set_fact: env_file_resolved: "{{ project_root + '/.env' }}" when: env_file_resolved | default('') | length == 0 - name: Check if .env file exists ansible.builtin.stat: path: "{{ env_file_resolved }}" register: env_file_stat - name: Load .env overrides when present set_fact: env_overrides: "{{ lookup('community.general.read_env', env_file_resolved) }}" when: env_file_stat.stat.exists - name: Warn when .env file is missing ansible.builtin.debug: msg: >- .env file not found at {{ env_file_resolved }}. Using defaults from group_vars/all.yml. Create one from .env-example. when: not env_file_stat.stat.exists - name: Merge defaults with .env overrides set_fact: taler_env: "{{ taler_defaults | combine(env_overrides | default({}), recursive=True) }}" - name: Build structured variables for play consumption set_fact: taler_config: domain: "{{ taler_env.TALER_DOMAIN }}" admin_email: "{{ taler_env.TALER_ADMIN_EMAIL }}" acme_contact: "{{ taler_env.LETSENCRYPT_CONTACT }}" package_repo: "{{ taler_env.TALER_PACKAGE_REPO }}" distribution: "{{ taler_env.TALER_DISTRIBUTION }}" currency: "{{ taler_env.TALER_CURRENCY }}" exchange_host: "{{ taler_env.TALER_EXCHANGE_HOST }}" merchant_host: "{{ taler_env.TALER_MERCHANT_HOST }}" pay_host: "{{ taler_env.TALER_PAY_HOST }}" wordpress_host: "{{ taler_env.WORDPRESS_HOST }}" exchange_master_key: "{{ taler_env.TALER_MASTER_PUBLIC_KEY }}" db: host: "{{ taler_env.TALER_DB_HOST }}" port: "{{ taler_env.TALER_DB_PORT | int }}" admin_user: "{{ taler_env.TALER_DB_ADMIN_USER }}" admin_password: "{{ taler_env.TALER_DB_ADMIN_PASSWORD }}" exchange: name: "{{ taler_env.TALER_EXCHANGE_DB }}" user: "{{ taler_env.TALER_EXCHANGE_DB_USER }}" password: "{{ taler_env.TALER_EXCHANGE_DB_PASSWORD }}" merchant: name: "{{ taler_env.TALER_MERCHANT_DB }}" user: "{{ taler_env.TALER_MERCHANT_DB_USER }}" password: "{{ taler_env.TALER_MERCHANT_DB_PASSWORD }}" wordpress_db: name: "{{ taler_env.WORDPRESS_DB_NAME }}" user: "{{ taler_env.WORDPRESS_DB_USER }}" password: "{{ taler_env.WORDPRESS_DB_PASSWORD }}"