Configuration-Management
有沒有更慣用的方法來根據主機作業系統切換 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 替換這樣的小細節,而無需太多模板樣板?
它不起作用可能是因為
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