ansible - 从一组服务器获取地址列表(ansible_host)
问题描述
我有一个具有这种格式的 ansible 库存:
[servers:children]
s1
s2
s3
[s1]
10.10.0.80 hostname=s1.example.com
[s2]
10.10.1.80 hostname=s2.example.com
[s3]
jail_s3 ansible_host=10.10.2.80 ansible_port=2222 hostname=s3.example.com
我想得到属于 group 的所有ansible主机的逗号分隔servers
,为此,我一直在使用:
ips = "{{ query('inventory_hostnames', 'sites') | map('ipaddr') | join(',') }}"
但是我现在对这个清单的问题是query('inventory_hostnames')
不返回 IPs3
而是返回一个字符串jail_3
,列表的输出如下:
'10.10.0.80'
'10.10.1.80'
'jail_s3'
我发现我可以使用 aloop
并过滤如下输出:
debug:
msg: "{{ item if (item| ipaddr) else hostvars[item].ansible_host }}"
loop: "{{ query('inventory_hostnames','servers') }}"
或者在循环内的模板中:
{% for host in query('inventory_hostnames', 'servers') %}
{{ hostvars[host].ansible_host|default(hostvars[host].inventory_hostname) }}
{% endfor %}
在这种情况下,过滤器ipaddr
返回 false jail_s3
,然后我回退到hostvars[item].ansible_host
.
这行得通,但我想知道它是否可以通过使用“单线”来完成map
,或者可以使用列表的东西query('inventory_hostnames','servers') | ???
有任何想法吗?
解决方案
推荐阅读
- python - 如何使用标头构建 CPython 扩展
- reactjs - redux 究竟是如何重新渲染一个 react 组件的?
- email - 将邮件从 Exchange 移动到 IMAP 结果是 MISSING_MAILBOX@MISSING_DOMAIN(发件人)
- r - 如何对特定日期进行方差分析?
- r - 通过R中的名称更改多列的数据类型
- javascript - Formik 和 Stepper 的动态表单想要访问第一步而不是最后一步并抛出 TypeError。为什么?
- r - 用于足球预测的 for 循环中的预测函数
- python - 在 Python 中下载(pytube)库时出现问题
- javascript - 如何显示数组中项目的“下一个”和“上一个”按钮?
- java - 使用 H2 数据库运行 SpringBoot 应用程序时控制台中缺少行