我怎样才能让 Ansible 根据 Ansible 事实对主机进行分组?
How can I get Ansible to group hosts based on Ansible facts?
我想生成一份报告(可能使用模板),根据有关主机的事实对主机进行分组。
假设我的 /etc/ansible/hosts
中有以下服务器(括号中指定的 ansible_distribution
和 ansible_distribution_version
事实):
mercer (RedHat, 7.2)
grocer (RedHat, 6.2)
draper (Solaris, 10)
fishmonger (RedHat, 7.2)
goldsmith (Solaris, 11)
skinner (RedHat, 7.2)
我想要做的是得到一个如下所示的文件:
**RedHat 6.2 Servers**
grocer
**RedHat 7.2 Servers**
mercer
fishmonger
skinner
**Solaris 10 Servers**
draper
**Solaris 11 Servers**
goldsmith
不知道试试会不会更好:
A) 遍历 play_hosts 并提取事实并写入一个新变量作为 ('fact1', 'fact2', 'hostname') 然后遍历它在我的 jinja2 模板中使用 groupby 的新变量来生成报告。
B) 在 ansible 任务中对它们进行排序,然后将预先分组的数组交给模板,并对其进行格式化。
...我也不知道该怎么做。
我会使用动态清单脚本或 group_by 清单模块来执行此操作。现在让我们使用库存模块。这里的一个问题是 ansible_distribution_version 需要标准化为适当的变量。我会用过滤器来完成。像这样
- hosts: all
tasks:
- group_by:
key: OSGROUP_{{ ansible_distribution_version | upper | regex_relace('(| |\.', '') }}
正则表达式可能不正确,但您明白了。然后你以后可以参考组
- hosts: OSGROUP_REDHAT72
tasks:
- debug: msg="Do RedHat 7.2 stuff to {{inventory_name}}"
我想生成一份报告(可能使用模板),根据有关主机的事实对主机进行分组。
假设我的 /etc/ansible/hosts
中有以下服务器(括号中指定的 ansible_distribution
和 ansible_distribution_version
事实):
mercer (RedHat, 7.2)
grocer (RedHat, 6.2)
draper (Solaris, 10)
fishmonger (RedHat, 7.2)
goldsmith (Solaris, 11)
skinner (RedHat, 7.2)
我想要做的是得到一个如下所示的文件:
**RedHat 6.2 Servers**
grocer
**RedHat 7.2 Servers**
mercer
fishmonger
skinner
**Solaris 10 Servers**
draper
**Solaris 11 Servers**
goldsmith
不知道试试会不会更好:
A) 遍历 play_hosts 并提取事实并写入一个新变量作为 ('fact1', 'fact2', 'hostname') 然后遍历它在我的 jinja2 模板中使用 groupby 的新变量来生成报告。
B) 在 ansible 任务中对它们进行排序,然后将预先分组的数组交给模板,并对其进行格式化。
...我也不知道该怎么做。
我会使用动态清单脚本或 group_by 清单模块来执行此操作。现在让我们使用库存模块。这里的一个问题是 ansible_distribution_version 需要标准化为适当的变量。我会用过滤器来完成。像这样
- hosts: all
tasks:
- group_by:
key: OSGROUP_{{ ansible_distribution_version | upper | regex_relace('(| |\.', '') }}
正则表达式可能不正确,但您明白了。然后你以后可以参考组
- hosts: OSGROUP_REDHAT72
tasks:
- debug: msg="Do RedHat 7.2 stuff to {{inventory_name}}"