Eu estava me fazendo a mesma pergunta novamente.
Tentando um pequeno exemplo, descobri que (usando Ansible 2.4) uma variável padrão composta (ou seja, que está no defaults/main.yml
) será interpolada somente quando o valor padrão for usado pela primeira vez.
Exemplo, usando apenas uma única função:
roles/certs/defaults/main.yml
---
certs_dir: /etc/pki/tls/certs
cert_files:
- "{{ ssl_domain }}.crt"
- "{{ ssl_domain }}.key"
- "{{ ssl_domain }}_ca-bundle.crt"
roles/certs/tasks/main.yml
---
- name: Determine the subdomain for the current host
command: hostname --domain
register: domain_result
- name: Set domain name as fact
set_fact:
ssl_domain: "{{ domain_result.stdout.strip() }}"
- name: Download certificates
get_url:
url: "http://{{ intranet_certificate_host }}/{{ intranet_certificate_path }}/_.{{ ssl_domain }}/{{ item }}"
dest: "{{ certs_dir }}"
with_items: "{{ cert_files }}"
Isso funcionará. Vejo que isso não envolve um papel "dependente", mas, como os fatos funcionam assim em todos os papéis, estou certo de que isso também funcionará nos papéis.
Então, pelo menos na versão que eu usei, a avaliação preguiçosa é o comportamento padrão, você só precisa combiná-la com set_fact
para fornecer o valor que está dentro do padrão composto.