状態ファイルの上部に、次のものがあります。
{% 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 をご覧ください。