Configuration-Management

有沒有更慣用的方法來根據主機作業系統切換 Salt 狀態?

  • July 10, 2015

在我的狀態文件的頂部,我有:

{% 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

引用自:https://serverfault.com/questions/704672