我想生成一个报告(可能使用模板),根据有关它们的事实对我的主机进行分组。
假设我的/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任务中对它们进行排序,然后将预先分组的数组数组交给模板,然后格式化。
......我无法解决如何做到这一点。
答案 0 :(得分:1)
我会使用动态广告资源脚本或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}}"