将 Ansible 组变量引用到清单

Referencing Ansible group variables to inventory

我有一个清单文件 inv.yml,其中包含如下所示的主机列表:

---
all:
  hosts:
    csr1:
      ansible_host: 192.168.10.11
      os: ios
    csr2:
      # etc...

我有一个包含一些文件的 group_vars 文件夹。其中之一是 all.yml,我可以看到所有主机都从该文件中获取变量。我还有另外两个文件 amers.ymlemear.yml。每个区域都包含一个特定的 snmp 配置,如下所示:

---
snmp:
  contact: Joe Smith
  location: Americas
  communities:
    - community: public
      type: ro

我的问题是我不知道如何引用哪个主机应该使用 emearamers 组变量文件。

如何正确引用清单中特定设备的 amersemear 变量文件?

您的清单应该如下所示(例如,将正确的主机放在每个组中)

---
all:
  children:
    amers:
      hosts:
        csr1:
          ansible_host: 1.2.3.4 
    emear:
      hosts:
        csr2:
          ansible_host: 5.6.7.8

现在每个组都将收到各自 group_vars/amers.ymlgroup_vars/emear.yml 文件中定义的变量。

这是一个非常简短的介绍,关于如何构建清单、将变量准确放置在何处(跳过可能的变量优先噩梦...)、良好实践等,还有很多内容需要了解。您可以在ansible文档中找到所有这些:How to build your inventory

我不确定您的组是否已定义。尝试创建一个 hosts.ini(见下文)并将其传递给 ansible-playbook

$ ansible-inventory -i hosts.ini --list

文件:

├── group_vars
│   ├── all.yml
│   ├── amers.yml
│   └── emers.yml
└── hosts.ini

hosts.ini

[amers]
192.168.10.11

[emers]
192.168.10.12

group_vars/amers.yml

---
snmp:
  contact: Joe Smith
  location: Americas
  communities:
    - community: public
      type: ro

group_vars/emers.yml

---
snmp:
  contact: Nobody

group_vars/all.yml

---
os: ios