Перебирать переменные в файле состояния и также использовать переменные в целевом шаблоне.
В 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?