Сложная переменная структура с Jinja2 - PullRequest
1 голос
/ 23 марта 2020

Я пытаюсь определить сложную переменную структуру с шаблоном jinja2 в Ansible. Я пробовал разные решения с помощью dictsort и «if» l oop inside »для« l oop », но я не вижу никакого прогресса. Мы будем благодарны за любую помощь.

Я пытаюсь напечатать virtual_ro_id на основе ansible_hostname. И имена хостов server1.dc1.com & server2.dc1.com , то же самое для dc2. Файл var приведен ниже.

datacenters:
  dc1:
    server1:
      - virtual_ro_id: "60"
    server2:
      - virtual_ro_id: "60"
  dc2:
    server1:
      - virtual_ro_id: "61"
    server2:
      - virtual_ro_id: "61"

Вот как выглядит мой синтаксис шаблона:

    {% for dc in lookup('dict', datacenters) %}
    {% set dc_name=ansible_fqdn.split(.)[1] %}
      {% if 'dc' == dc_name %}
        ID: {{ dc.ansible_hostname.virtual_ro_id }}
      {% endif %}
    {% endfor %}

Обычно я получаю синтаксическую ошибку или шаблон не получает значения. Заранее спасибо.

1 Ответ

1 голос
/ 23 марта 2020

Учитывая инвентарь

shell> cat hosts
server1.dc1.com
server2.dc1.com
server1.dc2.com
server2.dc2.com

задание

    - debug:
        var: datacenters[mydomain][myhost][0]['virtual_ro_id']
      vars:
        myhost: "{{ inventory_hostname.split('.').0 }}"
        mydomain: "{{ inventory_hostname.split('.').1 }}"

дает

ok: [server1.dc1.com] => {
    "datacenters[mydomain][myhost][0]['virtual_ro_id']": "60"
}
ok: [server2.dc1.com] => {
    "datacenters[mydomain][myhost][0]['virtual_ro_id']": "60"
}
ok: [server1.dc2.com] => {
    "datacenters[mydomain][myhost][0]['virtual_ro_id']": "61"
}
ok: [server2.dc2.com] => {
    "datacenters[mydomain][myhost][0]['virtual_ro_id']": "61"
}

Это, вероятно, то, что вы ищете?

...