Chef 有一个非常详尽(也许太多)的食谱方案来提供属性的默认值。我认为 Puppet 对类参数做了类似的事情,默认值通常进入params.pp
。有了盐,我就看到了:
- 在字典/支柱查找中指定默认值。
- the
grains.filter_by
将默认属性值与用户提供的支柱数据合并(例如,地图.神社 https://github.com/saltstack-formulas/apache-formula/blob/master/apache/map.jinja in apache 公式 https://github.com/saltstack-formulas/apache-formula)
- 在打电话给
file.managed
状态,指定默认属性值作为defaults
参数和用户指定的支柱数据为context
.
选项 1 似乎是最常见的,但缺点是模板文件变得很难阅读。每当查找完成时,它还需要重复默认值,这使得很容易出错。
选项 2 感觉在精神上最接近 Chef 的方法,但似乎期望根据某些过滤属性(例如,grains 中记录的操作系统类型)将默认值分解为案例字典。
选项 3 还不错,但将属性默认值放入状态文件中,而不是像选项 2 那样将它们分离到自己的文件中。
盐堆的最佳实践文档 http://docs.saltstack.com/en/latest/topics/best_practices.html支持选项 2,但它没有解决如何将默认值与用户指定的值合并而无需使用grains.filter_by
。有什么办法解决吗?
注意:defaults.get 的行为在版本 2015.8 中发生了更改,因此此处描述的方法不再有效。我将这个答案留给旧版本的用户,并将为当前版本发布类似的方法。
defaults.get
加上一个defaults.yaml
文件应该做你想做的事。假设您的公式树如下所示:
my-formula/
files/
template.jinja
init.sls
defaults.yaml
# my-formula/init.sls
my-formula-conf-file:
file.managed:
- name: {{ salt['defaults.get']('conf_location') }}
- source: {{ salt['defaults.get']('conf_source') }}
... and so on.
# defaults.yaml
conf_location: /etc/my-formula.conf
conf_source: salt://my-formula/files/template.jinja
# pillar/my-formula.sls
my-formula:
conf_location: /etc/my-formula/something.conf
这将以配置文件位于/etc/my-formula/something.conf
(支柱价值)使用salt://my-formula/files/template.jinja
作为源(默认值,未提供支柱覆盖)。
请注意支柱和默认文件的不直观结构;defaults.get
期望defaults.yaml
将其值放在文件的根目录中,但期望支柱覆盖位于以公式命名的字典中,因为一致性是针对弱者的。
The 文档 http://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.defaults.html对于 defaults.get 给出了使用的示例defaults.json
代替defaults.yaml
。这可行,但我发现 yaml 更具可读性。并且可写。
有一个bug https://github.com/saltstack/salt/issues/19856从托管模板内部而不是在状态文件中使用defaults.get,据我所知它仍然处于打开状态。它仍然可以工作;解决方法在链接后面。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)