Como posso definir uma variável Ansible cujo valor é outra variável na mesma estrutura de mapeamento ?
Para permitir um namespace sensato de variáveis, estou definindo estruturas de mapeamento como esta, onde alguns valores dependem de outras variáveis na mesma estrutura:
acme:
directory:
hostname: "acme-staging-v02.api.letsencrypt.org"
letsencrypt:
config_dir: "/etc/letsencrypt"
keys_dir: "{{ letsencrypt.config_dir }}/keys"
csrs_dir: "{{ letsencrypt.config_dir }}/csr"
certs_dir: "{{ letsencrypt.config_dir }}/certs"
accounts_dir: "{{ letsencrypt.config_dir }}/accounts"
csr_file: "{{ letsencrypt.csrs_dir }}/{{ site_domain }}.csr"
account_key_file: "{{ letsencrypt.csrs_dir }}/{{ acme.directory.hostname }}"
email_address: "certificate-reminders@{{ site_domain }}"
Isso falha porque o Ansible não pode resolver os valores que fazem referência a outros na mesma estrutura de dados:
loop recursivo detectado na string do modelo: {{ letsencrypt.config_dir }}/keys
Então eu pensei que a pesquisavars
permitiria adiar essa resolução:
acme:
directory:
hostname: "acme-staging-v02.api.letsencrypt.org"
letsencrypt:
config_dir: "/etc/letsencrypt"
keys_dir: "{{ lookup('vars', 'letsencrypt.config_dir') }}/keys"
csrs_dir: "{{ lookup('vars', 'letsencrypt.config_dir') }}/csr"
certs_dir: "{{ lookup('vars', 'letsencrypt.config_dir') }}/certs"
accounts_dir: "{{ lookup('vars', 'letsencrypt.config_dir') }}/accounts"
csr_file: "{{ lookup('vars', 'letsencrypt.csrs_dir') }}/{{ site_domain }}.csr"
account_key_file: >-
{{ lookup('vars', 'letsencrypt.csrs_dir') }}/{{ acme.directory.hostname }}
email_address: "certificate-reminders@{{ site_domain }}"
Isso falha porque o Ansible está tentando resolver essa pesquisa imediatamente:
Nenhuma variável encontrada com este nome: letsencrypt.config_dir
Claro que eu poderia dividi-los para que sejam variáveis separadas. Isso anula meu propósito, porém, de manter todas as variáveis fortemente relacionadas agrupadas no mesmo namespace.
Então, o que me permitirá definir a estrutura de dados para que alguns valores possam depender de outras variáveis na mesma estrutura ?