在Ansible清单文件中,可以使用group_vars
和host_vars
目录来定义变量,并根据需要进行覆盖。
以下是一个示例的目录结构:
inventory/
├── group_vars/
│ └── all.yml
├── host_vars/
│ ├── host1.yml
│ └── host2.yml
└── hosts
在group_vars/all.yml
文件中定义默认变量:
---
vCenter_hostname: vcenter.example.com
然后,在host_vars/host1.yml
和host_vars/host2.yml
文件中分别覆盖变量:
---
vCenter_hostname: vcenter1.example.com
---
vCenter_hostname: vcenter2.example.com
在hosts
文件中指定主机名和组别:
[mygroup]
host1
host2
现在,在Ansible任务中可以使用vCenter_hostname
变量来引用主机的vCenter主机名。如果有多个相同的主机名,只会采用最后一个条目中定义的值。
示例任务:
---
- name: Example Playbook
hosts: mygroup
tasks:
- name: Print vCenter hostname
debug:
var: vCenter_hostname
运行该任务后,输出将是:
TASK [Print vCenter hostname] **************************************************
ok: [host1] => {
"vCenter_hostname": "vcenter1.example.com"
}
ok: [host2] => {
"vCenter_hostname": "vcenter2.example.com"
}
这样,通过在host_vars
目录中定义变量,并遵循“最后一个条目覆盖前面的条目”的规则,可以解决具有相同vCenter主机名的条目只会采用最后一个条目的问题。