如何使用Ansible计算有关操作系统版本等主机的统计信息?

时间:2016-01-21 11:17:11

标签: ansible

我希望获得有关操作系统版本或主机的其他属性的某种统计信息。

理想情况下,我希望获得类似的内容:

debian 8 - 10 machines
debian 7 - 5 machine
centos 7 - 1 machine

1 个答案:

答案 0 :(得分:0)

使用Ansible很难得到这种格式。我认为最好的办法就是创建一个自定义回调插件。否则,您将始终拥有任务及其状态等的Ansible典型输出格式

如果格式实际上并不重要,而您只是想要这些信息,那么您可以这样做:

- group_by: key=sys_{{ ansible_distribution }}_{{ ansible_distribution_major_version }}

- debug: msg="{{ groups[item] | length }}"
  with_items: groups
  delegate_to: localhost
  run_once: true
  when: item | match("^sys_")

这将输出如下内容:

TASK [debug] *******************************************************************
ok: [some.host -> localhost] => (item=sys_Debian_8) => {
    "item": "sys_Debian_8", 
    "msg": "10"
}

ok: [some.host -> localhost] => (item=sys_Debian_7) => {
    "item": "sys_Debian_7", 
    "msg": "2"
}
ok: [some.host -> localhost] => (item=sys_CentOS_7) => {
    "item": "sys_CentOS_7", 
    "msg": "1"
}

由于调试任务遍历Ansible已知的所有组,因此它还将遍历您在清单中定义的所有组加allungrouped。上面的示例对此进行了过滤(when: item | match("^sys_")),但跳过的项仍然可以作为跳过的任务显示。

但是如果你有一组固定的组,你可以简单地过滤那些:

with_items: groups | difference(['all', 'ungrouped', 'all-your-other-groups-here'])