如何从hostvars动态创建ansible列表?

时间:2019-03-08 09:15:39

标签: ansible jinja2

我为每个主机定义了一些变量。喜欢...

str.format

在其中一个角色中,我想定义一个变量,该变量是几个主机变量的组合。例如...

hosts:
  - hostA:
    vars:
      self_ip: "192.168.1.10"
      self_port: "8001"
  - hostB:
    vars:
      self_ip: "192.168.1.11"
      self_port: "8002"

我该怎么做?

我尝试将Jinja2用于如下循环:

all_endpoints: 192.168.1.10:8001,192.168.1.11:8002

这似乎正在创建一个字符串。没有清单。 有人可以告诉我怎么了吗?有没有办法使用ansible过滤器来实现这一目标?

1 个答案:

答案 0 :(得分:0)

- set_fact:
    all_endpoints: "{{ hosts|json_query('[].vars.[self_ip, self_port]') }}"
- set_fact:
    touples: "{{ touples|default([]) + [ item.0 + ':' + item.1 ] }}"
  loop: "{{ all_endpoints }}"
- debug:
    var: touples

给予

"touples": [
    "192.168.1.10:8001", 
    "192.168.1.11:8002"
]