我甚至不确定如何描述我想要做的事情! 所以我会直接跳进去。 我有一个主机文件:
[jvbservers]
jvb0 ansible_host=serverA
jvb1 ansible_host=serverB
等...
我想要一个jvbservers组中的服务器列表。到目前为止我想出的东西感觉有点OTT。
set_fact:
jvb_names: "{{ jvb_names|default([]) + [ hostvars[groups.jvbservers[item|int]].ansible_host ] }}"
with_sequence: start=0 end="{{groups.jvbservers|length-1}}"
给我一个像我想要的结果:
ok: [localhost] => {
"jvb_names": [
"serverA",
"serverB"
]
}
这是明智的吗?感觉应该采用更简洁的方式来做类似的事情:
hostvars[groups.jvbservers[*]].ansible_host
(其中“*”将是匹配所有有效选项的模式。显示特定语法不存在!)
答案 0 :(得分:1)
您可能需要查看extract过滤器:
{{ groups['jvbservers'] | map('extract', hostvars, 'ansible_host') | list }}
答案 1 :(得分:-1)
你试过这个吗?:
- name: show all the hosts matching jvbservers
debug:
msg: "{{ item }}"
with_inventory_hostnames:
- all: jvbservers
https://docs.ansible.com/ansible/devel/plugins/lookup/inventory_hostnames.html