web-dev-qa-db-ja.com

ホストOSに基づいてSalt状態を切り替えるより慣用的な方法はありますか?

状態ファイルの上部に、次のものがあります。

{% 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と交互に使用するより慣用的な方法はありますか?

1
Chris Tonkinson

パラメータがなくても、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_byhttp://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 をご覧ください。