Перебирать переменные в файле состояния и также использовать переменные в целевом шаблоне.

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

Я пытаюсь сделать то же самое в Salt, но, похоже, это невозможно. По крайней мере, не так, как я привык.

У меня в Pillar есть следующее.

      routes:
  ens4f0np0:
    - address: 192.168.1.0
      netmask: 255.255.255.192
      gateway: 172.18.48.1
    - address: 172.16.2.0
      netmask: 255.255.255.224
      gateway: 172.18.48.1

Я просматриваю его в своем файле состояния, используя только ключ, который является именем интерфейса.

      {% for interface in salt['pillar.get']('routes') %}
  file.managed:
    - name: /etc/sysconfig/network-scripts/route-{{ interface }}
    - user: root
    - group: root
    - mode: '0644'
    - source: salt://linux/network/files/routes.jinja
    - template: jinja
{% endfor %}

Потом в шаблоне хочу использовать интерфейс, но уже на первой строке получаю ошибку, потому что той переменной не существует.

      # {{ interface }}
{% for route in salt['pillar.get']('routes:interface') %}
ADDRESS{{ loop.index }}={{ route.address }}
NETMASK{{ loop.index }}={{ route.netmask }}
GATEWAY{{ loop.index }}={{ route.gateway }}
{% endfor %}

Когда я удаляю первую строку, шаблон создается, но пуст. Это связано с тем, что поиск в структуре маршрутов не выполняется. Когда я положил тудаroutes:ens4f0np0, тогда все работает нормально.

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

Кто-нибудь знает, как я могу это улучшить? Или повторить то, что я обычно делаю в Ansible?

0 ответов

Другие вопросы по тегам