gpt4 book ai didi

salt-stack - 公式提供属性默认值的最佳方式是什么?

转载 作者:行者123 更新时间:2023-12-01 11:32:24 25 4
gpt4 key购买 nike

Chef 有一个非常详尽(也许太多了)的食谱方案来提供属性的默认值。我认为 Puppet 对类参数做了类似的事情,其中​​默认值通常进入 params.pp。对于 Salt,我已经看到:

  1. 在字典/支柱查找中指定默认值。
  2. grains.filter_by 将默认属性值与用户提供的支柱数据(例如 map.jinja 中的 apache-formula )合并
  3. 在调用 file.managed 状态时,将默认属性值指定为 defaults 参数,并将用户指定的支柱数据指定为 context

选项 1 似乎是最常见的,但缺点是模板文件变得很难阅读。每当查找完成时,它还需要重复默认值,因此很容易出错。

选项 2 在精神上感觉最接近 Chef 的方法,但似乎期望根据某些过滤属性(例如,grains 中记录的操作系统类型)将默认值分解为案例字典。

选项 3 不错,但是将属性默认值放入状态文件,而不是像选项 2 那样将它们分离到它们自己的文件中。

Saltstack 的 best practices doc赞同选项 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

这将以使用 salt://my-formula/files/template 放置在 /etc/my-formula/something.conf(支柱值)的配置文件结束。 jinja 作为源(默认,没有提供支柱覆盖)。

请注意 pillar 和默认文件的非直观结构; defaults.get 期望 defaults.yaml 将其值放在文件的根目录中,但期望支柱覆盖位于以公式命名的字典中,因为一致性是对于弱者。

documentation对于 defaults.get,使用 defaults.json 而不是 defaults.yaml 给出其示例。这行得通,但我发现 yaml 更具可读性。并且可写。

有一个bug从托管模板内部而不是状态文件中使用 defaults.get,据我所知它仍然是打开的。它仍然可以工作;解决方法在链接后面。

关于salt-stack - 公式提供属性默认值的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31083273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com