Ansible版本:2.0.0.2Ansible可變優先哈希
我需要通過庫存主機變量覆蓋角色的默認變量。據我瞭解,在Ansible Docs中閱讀Variable Precedence: Where Should I Put A Variable?,這是可能的,但也許它不是一個最佳實踐,但不幸的是有些主機需要調整一些默認配置參數。
我要再現真實的情況下,讓我們考慮下面的目錄結構:
├── debug.yml
├── host_vars
│ └── test.localdomain
├── inventory
│ └── debug
└── roles
└── debug
├── tasks
│ └── main.yml
└── vars
└── main.yml
debug.yml是我們的劇本文件。
---
- name: debug
hosts: debug
roles:
- debug
host_vars/test.localdomain包含我想優先默認值的變量。
---
foo:
bar:
- hey
庫存/調試是我們將要使用的清單文件。
[debug]
test.localdomain
角色/調試/任務/ main.yml打印出foo.bar變量。
---
- debug: msg="{{foo.bar}}"
角色/調試/瓦爾/ main.yml包含默認角色的變量。
---
foo:
bar:
- hello
- world
在這一點上,我希望劇本調試運行期間,foo.bar的值是[ "hey" ]
,但顯然我錯了:
> ansible-playbook debug.yml -i inventory/debug
PLAY [debug] **********************************
TASK [setup] **********************************
ok: [test.localdomain]
TASK [debug : debug] **************************
ok: [test.localdomain] => {
"msg": [
"hello",
"world"
]
}
PLAY RECAP *************************************
test.localdomain : ok=2 changed=0 unreachable=0 failed=0
從運行調試模塊可靠的cli給了我預期的結果,所以我很確定主機變量的計算是正確的,但也許由於某些原因,它們並沒有優先於默認角色變量。
> ansible test.localdomain -i inventory/debug -m debug -a 'msg="{{foo.bar}}"'
test.localdomain | SUCCESS => {
"msg": [
"hey"
]
}
我的錯誤在哪裏?