Взять список из yaml и разобрать его в jinja2 и вывести в yaml - PullRequest
0 голосов
/ 27 декабря 2018

Провели как 4 часа охоты здесь, пытаясь найти что-то подходящее.Я знаю, что исправление здесь будет своего рода заменой для «| list | join ('\', \ '')», но за всю жизнь я не могу найти похожую справочную страницу.Даже указатель на лучшую справочную страницу будет принята с благодарностью.Мой желаемый вывод: vlans: ["1", "3", "5", "7", "9", "17"]

У меня есть большой файл YAML, который содержит атрибуты / переменные длярасположение стоит список хостов.Сначала я пытаюсь разбить этот файл на множество файлов, которые являются специфичными для хоста, используя JINJA2.При запуске для переменной vlans я получаю: vlans: «1», «3», «5», «7», «9», «17»
Таким образом, вся переменная vlans обрабатывается как одна строка, ачем список строк.Если я удаляю «| list | join ('\', \ '')» из кода JINJA2, то я получаю этот вывод в моем целевом YAML-файле: vlans: «[u'1 ', u'3', u'5', u'7', u'9 ', u'17'] "

Я пробовал несколько вариантов оператора объединения и, похоже, не смог достичь правильной цели.Ваша помощь очень ценится.

Структура выглядит следующим образом:

mg_uplinks:

  - { left_border_node: somehostname, left_border_intf: someinterface, 
      right_border_node: somehostname, right_border_intf: someinterface, 
      border_ae_intf: someinterface, border_esi: "some value", border_lacp_sys_id: "some value",
      mg_node: somehostname, left_mg_intf: someinterface, right_mg_intf: someinterface, mg_ae_intf: someinterface,
      link_speed: 10g,
      vlans: ["1", "3", "5", "7", "9", "17"]
      
  - { left_border_node: someotherhostname, left_border_intf: someinterface, 
      right_border_node: someotherhostname, right_border_intf: someinterface, 
      border_ae_intf: someinterface, border_esi: "some value", border_lacp_sys_id: "some value",
      mg_node: someotherhostname, left_mg_intf: someinterface, right_mg_intf: someinterface, mg_ae_intf: someinterface,
      link_speed: 10g,
      vlans: [all]      }

Затем я анализирую эту информацию с помощью этого кода jinja2.

mg_uplinks:
{% for link in mg_uplinks %}
{% if inventory_hostname == link['left_border_node'] %}
  - { local_phys_intf: "{{ link['left_border_intf'] }}", 
      border_ae_intf: "{{ link['border_ae_intf'] }}", 
      border_esi: "{{ link['border_esi'] }}", 
      border_lacp_sys_id: "{{ link['border_lacp_sys_id'] }}", 
      mg_node: "{{ link['mg_node'] }}", 
      remote_phys_intf: "{{ link['left_mg_intf'] }}", 
      remote_ae_intf: "{{ link['mg_ae_intf'] }}", 
      link_speed: "{{ link['link_speed'] }}",
      vlans: "{{ link['vlans'] | list | join ('\',\'') }}"  }

{% endif %}
{% if inventory_hostname == link['right_border_node'] %}
  - { local_phys_intf: "{{ link['right_border_intf'] }}",
      border_ae_intf: "{{ link['border_ae_intf'] }}",
      border_esi: "{{ link['border_esi'] }}",
      border_lacp_sys_id: "{{ link['border_lacp_sys_id'] }}",
      mg_node: "{{ link['mg_node'] }}",
      remote_phys_intf: "{{ link['right_mg_intf'] }}",
      remote_ae_intf: "{{ link['mg_ae_intf'] }}",
      link_speed: "{{ link['link_speed'] }}", 
      vlans: "{{ link['vlans'] | list | join ('\',\'') }}"  }

{% endif %}
{% endfor %}

1 Ответ

0 голосов
/ 27 декабря 2018

Нашел и подумал, что выложу ответ.[''] Не нужны, и фильтр, который я хотел, был |to_yaml.

  intf_vlans: {{ intf.intf_vlans | to_yaml }},
...