在 Ansible 2.2 上,
我有一个 Ansible 主机文件:
[webserver]
aegir.dev
[hostmaster]
aegir.dev
Run Code Online (Sandbox Code Playgroud)
我有两个group_vars/
文件:
# group_vars/webserver.yml
my_var:
- vagrant
Run Code Online (Sandbox Code Playgroud)
和
# group_vars/hostmaster.yml
my_var:
- vagrant
- aegir
Run Code Online (Sandbox Code Playgroud)
和剧本:
- hosts: webserver
tasks:
- debug: var=my_var
- hosts: hostmaster
tasks:
- debug: var=my_var
Run Code Online (Sandbox Code Playgroud)
输出:
PLAY [webserver] ***************************************************************
TASK [setup] *******************************************************************
ok: [aegir.dev]
TASK [debug] *******************************************************************
ok: [aegir.dev] => {
"my_var": [
"vagrant",
"aegir"
]
}
PLAY [hostmaster] **************************************************************
TASK [setup] *******************************************************************
ok: [aegir.dev]
TASK [debug] *******************************************************************
ok: [aegir.dev] => {
"my_var": [
"vagrant",
"aegir"
]
}
Run Code Online (Sandbox Code Playgroud)
为什么同时使用webserver
和 中hostmaster
的变量hostmaster.yml
?
可能我没有group_vars
正确使用,但我该如何解决?
编辑
真实的情况是我在两个组上运行相同的角色,一个是webserver
实际上包含 4 个通用服务器的hostmaster
组和作为 Web服务器的组 + 相同角色的额外配置(用户 aegir 仅存在于 aegir.dev 而不是在其他 3 个网络服务器上)
小智 4
这个问题有点老了,但提到的问题已经存在,所以我把我的答案写给需要答案的人。
\n实际上,根据文档,Ansible 专注于主机和任务,因此组在库存和主机匹配之外确实无法生存。为了解决这个问题,我们需要为组的变量添加前缀(就像使用命名空间来避免冲突一样)。
\n# inventory/hosts.yml\nwebservers:\n hosts:\n host1:\n host2:\n vars:\n webserver_my_var: ...\n\nhostmaster:\n hosts:\n host1:\n vars:\n hostmaster_my_var: ...\n
Run Code Online (Sandbox Code Playgroud)\n在剧本中,您可以安全地使用该变量。
\n# playbooks/main.yml\n- hosts: webserver\n tasks:\n - debug: var=webserver_my_var | mandatory\n\n- hosts: hostmaster\n tasks:\n - debug: var=hostmaster_my_var | mandatory\n
Run Code Online (Sandbox Code Playgroud)\n这样您就可以安全地消除问题。
\n在多个组中使用相同的变量名还有另一个问题。仅通过查看库存很难猜测变量的值,您需要知道组之间的关系以及一组相对于另一组的顺序/优先级,这是一项艰苦的工作并且容易出错。
\n 归档时间: |
|
查看次数: |
19941 次 |
最近记录: |