从ansible数组中提取所有命名值

时间:2017-12-07 16:31:24

标签: list variables ansible

我甚至不确定如何描述我想要做的事情! 所以我会直接跳进去。 我有一个主机文件:

[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

(其中“*”将是匹配所有有效选项的模式。显示特定语法不存在!)

2 个答案:

答案 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