首页 > 解决方案 > Ansible,检查库存组和主机

问题描述

是否有任何可能的方法来检查带有循环的注册变量(主机名)是否在清单中并打印它们的组?

我正在创建一个角色来安装带有 ansible 角色的心跳。但它只会安装在一个会 ping 另一个的 jumphost 上。

在这个角色中,我创建了单独的文件并将每个主机的配置放入其中。但是我需要添加一些字段来找出它们属于哪个组(我们在 Kibana 中需要它)。

我使用了 Jinja 模板,但它粘贴了拥有我扮演角色的主机的组。

{% for group in group_names %}
    group: {{ group }}
{% endfor %}

所以我开始搜索ansible本身是否有任何方法可以做到这一点。我

- name: list of hosts
  debug:
    msg: "{{ item }}"
  with_items:
    - "{{ groups['all'] }}"

它返回了主机,我想将此列表与我们库存中的列表进行比较,并获取他们的组名以将它们粘贴到心跳的 icmp.yml 配置中

标签: pythonlinuxelasticsearchansible

解决方案


问;是否有任何可能的方法来检查带有循环的注册变量(主机名)是否在库存中打印它们的组

答:是的。可以使用特殊变量

ansible_play_hosts_all : 被播放的所有主机列表

group_names:当前主机所属的组列表

- debug:
    msg: "{{ hostvars[item].group_names }}"
  loop: "{{ hostnames }}"
  when: item in ansible_play_hosts_all

推荐阅读