É bastante complicado, pois há vários aspectos envolvidos. Mas é fácil verificar com tentativa e erro.
A resposta
Você pode usar variáveis em nomes de jogos e tarefas, desde que todas as variáveis usadas no nome estejam definidas e disponíveis em um nível específico.
No seu exemplo, as variáveis env
e env2
são do grupo e não são substituídas no nível da reprodução.
Ao imprimir o nome da reprodução no log de saída, o Ansible ainda não sabe em quais hosts ele será executado, portanto, ele também não sabe quais valores são definidos para esses hosts (e o valor pode variar dependendo do host).
No entanto, no nível da tarefa, os valores são unanimemente definidos.
Considere:
---
- name: Here variables do not work {{ env }} {{ env2 }}
hosts: localhost
gather_facts: false
tasks:
- name: Here variables work {{ env }} {{ env2 }}
debug:
produzirá:
PLAY [Here variables do not work {{ env }} {{ env2 }}] *************************
TASK [Here variables work development server] **********************************
ok: [localhost] => {
"msg": "Hello world!"
}
Em relação ao último exemplo ( Provision a {{ application_name }} web server
):
Eu não sei de onde você tirou isso, mas parece incompleto. Um aqui muito semelhante contém uma referência estática para o arquivo variável:
vars_files:
- env_vars/base.yml
O valor de application_name
definido no env_vars/base.yml
é assim unanimemente renderizado no nome do jogo.
Você, por outro lado, tentou usar o grupo vars em vez de um valor estático e é por isso que os valores não são substituídos (eles ainda não foram determinados).
Captura adicional
Se você adicionou uma variável que não está definida no nome da tarefa do exemplo acima, que funcionou de outra forma, por exemplo:
- name: Here variables work {{ env }} {{ env2 }} {{ unknown }}
debug:
Você teria:
TASK [These variables will not work {{ env }} {{ env2 }} {{ unknown }}] ********
Mesmo as variáveis definidas corretamente não foram substituídas.
Da mesma forma, tentar usar um fato com escopo no host, por exemplo, ansible_hostname
também falhará:
tasks:
- name: These variables will not work {{ env }} {{ env2 }} {{ ansible_hostname }}
debug:
Você teria:
TASK [These variables will not work {{ env }} {{ env2 }} {{ ansible_hostname }}] ***
E o seu exemplo é como o último:
Você tenta imprimir as variáveis do grupo em um nome de peça, ou seja, em um nível no qual as variáveis do grupo ainda não estão definidas.