Eu tenho usado scripts ansible para algumas tarefas de um tiro, por exemplo, fazendo uma primeira configuração após o provisionamento de uma VM.
Eu tenho um script que cria um arquivo de inventário temporário, usa-o para executar um playbook ansible e exclui o arquivo temporário depois:
INVENTORY=$(mktemp /tmp/inst-inventory.XXXXXX)
echo "[$FLAVOR]" > $INVENTORY
echo "$HOSTNAME user_password='$USER_PASSWORD' admin_password='$ADMIN_PASSWORD'" >> $INVENTORY
ansible-playbook -i $INVENTORY `dirname $0`/firstsetup_$FLAVOR.yml --become
rm $INVENTORY
Isso funcionou perfeitamente, mas desde a atualização do ansible de 2.4 para 2.5, os playbooks não podem mais encontrar variáveis definidas no group_vars
diretório.
$ playbooks/firstsetup.sh HOSTNAME ubuntu
Password for localadmin: PASSWORD
Running ansible-playbook firstsetup_ubuntu.yml on HOSTNAME
PLAY [ubuntu] *********************************************************************************************************
TASK [Gathering Facts] ************************************************************************************************
fatal: [HOSTNAME]: FAILED! => {"msg": "The field 'become_pass' has an invalid value, which includes an undefined variable. The error was: 'ubuntu_inisc_initialpass' is undefined"}
to retry, use: --limit @/home/geschnei/playbooks/firstsetup_ubuntu.retry
PLAY RECAP ************************************************************************************************************
HOSTNAME : ok=0 changed=0 unreachable=0 failed=1
Isso undefined variable
é definido ~/.ansible/group_vars/ubuntu.yml
e encontrado quando executo o mesmo manual em um host listado no arquivo de inventário regular.
O roteiro para o Ansible 2.5 lista:
Adicionada opção para definir o diretório do playbook para adhoc, inventário e console para permitir o 'carregamento de caminho relativo'
O que parece estar relacionado, mas não consigo encontrar informações mais específicas sobre isso. O Guia de Portação 2.5 também não menciona nada sobre isso.
O que tenho que configurar para que o ansible-playbook encontre os group_vars
arquivos novamente?
Depois de fazer o downgrade do ansible para 2.4, tive que perceber que também não funcionava com essa versão.
Mais leitura revelou que não é possível alterar a localização do
host_vars
ougroup_vars
, eles são sempre relativos aohostfile
.Então, afinal, resolvi isso alterando a localização do inventário temporário para o
~/.ansible
dir, onde o inventário regular também reside.Não sei porque funcionou antes. Funciona novamente agora.