Как динамически создать список рассылки из hostvars? - PullRequest
0 голосов
/ 08 марта 2019

У меня есть несколько переменных, определенных для каждого хоста. Как ...

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

Внутри одной из ролей я хочу определить переменную, которая является комбинацией нескольких переменных хоста. Например ...

all_endpoints: 192.168.1.10:8001,192.168.1.11:8002

Как я могу это сделать?

Я пытался использовать Jinja2 для циклов, как показано ниже:

rs_members:  
  "{% for host in groups['all_hosts'] %}
  - {{hostvars[host]['self_ip']}}:{{hostvars[host]['self_port']}}
  {% endfor %}"

Кажется, это создает строку. Не список Может кто-нибудь сказать мне, что не так? И есть ли способ использовать ответные фильтры для достижения этой цели?

1 Ответ

0 голосов
/ 08 марта 2019
- 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"
]
...