ansible-playbook 2.5 直接指定库存文件时找不到组变量

ansible-playbook 2.5 直接指定库存文件时找不到组变量

我一直在使用 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 路线图列表:

添加选项来设置 adhoc、inventory 和 console 的 playbook 目录,以允许“相对路径加载”

这听起来像是相关的,但我无法找到有关它的更多具体信息。2.5 移植指南也没有提到任何有关此事的事情。

我必须进行什么配置才能让 ansible-playbookgroup_vars再次找到文件?

答案1

将 ansible 降级到 2.4 后,我意识到它也无法在该版本上运行。

阅读更多内容表明无法更改位置host_varsgroup_vars它们总是相对于hostfile

因此,我通过将临时库存的位置更改为~/.ansible常规库存所在的目录来解决这个问题。

INVENTORY=$(mktemp ~/.ansible/inst-inventory.XXXXXX)

我不知道为什么它之前能用。现在又能用了。

相关内容