Você não especifica qual versão de ansible
é a que você está usando, e há mudanças importantes de 1.x para 2.x.
Da documentação on-line , a resposta para
How do I set a variable in Ansible properly so that it can be picked up by a role?
seria:
Em 1.x, a precedência é a seguinte (com as últimas variáveis listadas ganhando a priorização):
- "padrões de função", que perdem prioridade para tudo e são mais facilmente substituídos
- variáveis definidas no inventário
- fatos descobertos sobre um sistema
- “quase todo o resto” (opções de linha de comando, vars in play, vars incluídos, vars de função, etc.)
- variáveis de conexão (ansible_user, etc.)
- extra vars (-e na linha de comando) sempre ganha
Em 2.x, a ordem de precedência é mais específica (com as últimas variáveis listadas ganhando a priorização):
- padrões de função (as tarefas em cada função verão os padrões de suas próprias funções. As tarefas definidas fora de uma função verão os padrões da última função)
- inventário vars (Variáveis definidas no arquivo de inventário ou fornecidas pelo inventário dinâmico)
- inventário group_vars
- inventário host_vars
- playbook group_vars
- playbook host_vars
- fatos do host
- jogar vars
- reproduzir vars_prompt
- reproduza vars_files
- registrou vars
- set_facts
- role e inclua vars
- block vars (somente para tarefas no bloco)
- vars da tarefa (somente para a tarefa)
- extra vars (sempre ganha precedência)
A resposta ao seu caso de uso específico requer que você forneça o local dos arquivos var
(como não pode ser inferido a partir dos dados fornecidos) na estrutura do diretório. Dependendo de onde esses arquivos foram colocados, eles têm uma precedência diferente.
Pessoalmente, prefiro agrupar dados em group_vars
(consulte o documento melhores práticas para o layout preferido), para que eu possa atribuir dados a grupos de hosts, principalmente porque isso geralmente é mapeado diretamente para funções.