dav*_*ave 3 ansible ansible-playbook ansible-2.x
Ansible版本:2.0.0.2
我需要通过库存主机变量覆盖角色默认变量.据我所知读变量优先级:我应该在哪里放置变量?在Ansible Docs中,它是可能的,但也许它不是最佳实践,但不幸的是,有些主机必须调整一些默认配置参数.
我将重现真实案例,所以让我们考虑以下目录层次结构:
??? debug.yml
??? host_vars
? ??? test.localdomain
??? inventory
? ??? debug
??? roles
??? debug
??? tasks
? ??? main.yml
??? vars
??? main.yml
Run Code Online (Sandbox Code Playgroud)
debug.yml是我们的playbook文件.
---
- name: debug
hosts: debug
roles:
- debug
Run Code Online (Sandbox Code Playgroud)
host_vars/test.localdomain包含我想要优先于默认值的变量.
---
foo:
bar:
- hey
Run Code Online (Sandbox Code Playgroud)
库存/调试是我们将要使用的库存文件.
[debug]
test.localdomain
Run Code Online (Sandbox Code Playgroud)
roles/debug/tasks/main.yml打印出foo.bar变量.
---
- debug: msg="{{foo.bar}}"
Run Code Online (Sandbox Code Playgroud)
roles/debug/vars/main.yml包含默认角色变量.
---
foo:
bar:
- hello
- world
Run Code Online (Sandbox Code Playgroud)
此时,我希望在调试playbook运行期间,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
Run Code Online (Sandbox Code Playgroud)
从ansible cli 运行调试模块给了我预期的结果,所以我很确定主机变量被正确评估,但可能由于某种原因它们没有优先于默认角色变量.
> ansible test.localdomain -i inventory/debug -m debug -a 'msg="{{foo.bar}}"'
test.localdomain | SUCCESS => {
"msg": [
"hey"
]
}
Run Code Online (Sandbox Code Playgroud)
我的错误在哪里?
| 归档时间: |
|
| 查看次数: |
2033 次 |
| 最近记录: |