我一直在为一些一次性任务使用 ansible 脚本,例如在配置 VM 后进行首次设置。
我有一个创建临时库存文件的脚本,使用它来运行 ansible playbook,然后删除临时文件:
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
这非常有效,但是自从将 ansible 从 2.4 升级到 2.5 后,剧本再也找不到group_vars
目录中定义的变量了。
$ 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
这是在我对常规清单文件中列出的主机运行相同的剧本时undefined variable
定义并找到的。~/.ansible/group_vars/ubuntu.yml
Ansible 2.5的路线图列出:
添加选项来为临时、库存和控制台设置剧本目录以允许“相对路径加载”
这听起来可能是相关的,但我无法找到有关它的更多具体信息。2.5 移植指南也没有提到任何相关内容。
我必须配置什么才能使 ansible-playbookgroup_vars
再次找到文件?
将 ansible 降级到 2.4 后,我不得不意识到它也不适用于该版本。
更多的阅读表明,不可能改变
host_vars
or的位置,group_vars
它们总是相对于hostfile
。所以毕竟我通过将临时库存的位置更改为
~/.ansible
常规库存所在的目录来解决它。我不知道为什么它以前有效。它现在又可以工作了。