当部署到不同组中的同一主机时,Ansible合并group_vars

Ami*_*ine 6 ansible

这是问题的示例:

库存文件:

[group1] www.example1.com

[group2] www.example1.com
Run Code Online (Sandbox Code Playgroud)

group_vars文件:

group_vars/group1:
    a_var: aaa

group_vars/group2:
    a_var: bbb
Run Code Online (Sandbox Code Playgroud)

如果我们运行此剧本:

- name: ...
  hosts: group1
  roles:
    - ...
Run Code Online (Sandbox Code Playgroud)

如果我们要部署到同一服务器上,则group_vars / group1和group_vars / group2中的变量会相互覆盖。

预期结果: a_var = aaa

实际结果: a_vars = bbb

似乎vars被解析并附加到主机上,而不是与该组呆在一起(因此,即使您不使用该组,group_vars也将合并,并且最后一个组合并会成功!!!!)。这是正常行为吗?

小智 6

解决方法是,可以为每个组选择一个不同的名称,并为每个具有真实主机名/ IP的var ansible_host设置。例:

[group1]
example1-group1 ansible_host=192.168.0.10

[group2]
example1-group2 ansible_host=192.168.0.10
Run Code Online (Sandbox Code Playgroud)

在这种情况下,Ansible认为您有两个不同的主机,分别具有专用的hostvar和groupvar,但是以相同的方式到达它们。


Kon*_*rov 1

这是正常行为吗?

是的,如果主机位于多个组中,则仅使用一组(后者)的变量。

来自文档

可以将系统放在多个组中,例如,一台服务器可以既是 Web 服务器又是 db 服务器。如果这样做,请注意变量将来自它们所属的所有组,并且变量优先级将在后面的章节中详细介绍。