首页 文章

如何根据Ansible事实将Ansible归入群组主机?

提问于
浏览
0

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

假设我的 /etc/ansible/hosts 中有以下服务器(括号中指定的 ansible_distributionansible_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任务中对它们进行排序,然后将预先分组的数组数组交给模板,然后对其进行格式化 .

......我无法解决如何做到这两点 .

1 回答

  • 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}}"
    

相关问题