是否有更惯用的方法根据主机操作系统切换 Salt 状态?

是否有更惯用的方法根据主机操作系统切换 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

它不起作用可能是因为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

相关内容