В верхней части моего файла состояния у меня есть:
{% if grains['os'] == 'Ubuntu' %}
{% set ubuntu = True %}
{% set arch = False %}
{% elif grains['os'] == 'Arch' %}
{% set ubuntu = False %}
{% set arch = True %}
{% endif %}
Позже,
{% if ubuntu %}
cron:
{% elif arch %}
cronie:
{% endif %}
pkg.installed
service.running:
- enable: True
Но это не работает; мои условные выражения ничего не отображают (пустые строки). Мне это неприятно, даже если небольшой рефакторинг поможет.
Есть ли более идиоматический способ чередовать мелкие детали, подобные этой, с помощью Salt без такого большого количества шаблонов шаблонов?
Это не работает, вероятно, потому что pkg.installed
должен быть список, даже без параметров:
pkg.installed: []
Это должно работать:
{% if ubuntu %}
cron:
{% elif arch %}
cronie:
{% endif %}
pkg.installed: []
service.running:
- enable: True
Или более разумным способом:
{% set cron = salt['grains.filter_by']({
'Ubuntu': 'cron',
'Arch': 'cronie',
}, grain='os') %}
{{cron}}:
pkg.installed: []
service.running:
- enable: True
Или, может быть, имя службы отличается от имени пакета:
{% set cron = salt['grains.filter_by']({
'Ubuntu': {
'package': 'cron',
'service': 'crond',
},
'Arch': {
'package': 'cronie',
'service': 'cronie',
},
}, grain='os') %}
{{cron['package']}}:
pkg.installed: []
service.running:
- name: {{cron['service']}}
- enable: True
grains.filter_by
задокументировано в http://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.grains.html#salt.modules.grains.filter_by
Для чего-то более сложного взгляните на https://github.com/saltstack-formulas/apache-formula/blob/master/apache/map.jinja