如何根据Ansible事实对Ansible进行分组?

彼得·马博特

我想生成一个报告(可能使用模板),该报告根据有关主机的事实对主机进行分组。

假设我的服务器中有以下服务器/etc/ansible/hostsansible_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)在一项繁重的任务中将它们全部排序,然后将预先分组的数组数组交给模板,然后对其进行格式化。

...而且我也不知道该怎么做。

石油026

我将使用动态清单脚本或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}}"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章