Несвязанный цикл через групповые вары в шаблоне

Я борюсь с шаблоном, вытаскивающим инвентарные вары в шаблонах Ansible, пожалуйста, помогите.:)

Я настраиваю сервер мониторинга, и я хочу иметь возможность автоматически предоставлять серверы с помощью Ansible. Я борюсь с циклами в шаблоне, чтобы позволить мне это.

Мое полурабочее решение до сих пор находится в игровой книге, которая вызывает задание шаблона, которое у меня есть:

monitoringserver.yml

 vars:
       servers_to_monitor:
         - {cname: web1, ip_address: 192.168.33.111}
         - {cname: web2, ip_address: 192.168.33.112}
         - {cname: db1, ip_address: 192.168.33.211}
         - {cname: db2, ip_address: 192.168.33.212}

template.yml

all_hosts += [
           {% for host in servers_to_monitor %}
                   "{{ host.cname }}{{ host.ip }}|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/",
           {% endfor %}
] 

Но это не идеально, поскольку я не могу определить другой IP-адрес для разных серверов, которые будут отслеживать. Как другие люди это сделали? Я уверен, что это должно быть тривиально, но мой мозг борется с синтаксисом.

Спасибо

Алан

edit: Чтобы прояснить полученный шаблон, выглядит примерно так:

all_hosts += [
                        "web1|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/",
                        "web2|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/",
                        "db1|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/",
                        "db2|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/",
]

Я бы хотел, чтобы значения web1/web2/db1/db2 были разными в зависимости от того, использую ли я файл инвентаризации производства или файл инвентаризации разработки.

Ответ 1

В идеале вы будете использовать разные файлы инвентаря для производства и постановки, что позволит вам сохранить одно и то же значение {{ inventory_hostname }}, но предназначаться для разных машин.

Вы также можете прокручивать разные группы...

хосты:

[web]
web1
web2

[db]
db1
db2

Playbook:

- name: play that sets a group to loop over
  vars:
    servers_to_monitor: "{{ groups['db'] }}"

  tasks:
    - template:
      src: set-vars.j2
      dest: set-vars.js

шаблон:

all_hosts += [
{% for host in servers_to_monitor %}
  "{{ hostvars[host].inventory_hostname }}{{ hostvars[host].ansible_default_ipv4.address }}|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/",
{% endfor %}
]