Ansible-Playbook

直接指定清單文件時,ansible-playbook 2.5 找不到組變數

  • April 19, 2018

我一直在為一些一次性任務使用 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_varsor的位置,group_vars它們總是相對於hostfile

所以畢竟我通過將臨時庫存的位置更改為~/.ansible正常庫存所在的​​目錄來解決它。

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

我不知道為什麼它以前有效。它現在又可以工作了。

引用自:https://serverfault.com/questions/908450