【问题标题】:Overriding Chef default attributes and dependant attributes覆盖 Chef 默认属性和依赖属性
【发布时间】:2014-03-28 18:14:28
【问题描述】:

我可以覆盖我的食谱\角色中的默认属性,但我无法让依赖于该属性的任何其他属性也更新。

例如,对于 phantomjs 食谱,我想安装 1.9.7 而不是默认的 1.9.2。 (我知道此更改现在已提交到食谱存储库)

我可以使用以下命令覆盖版本:

node.set['phantomjs']['version'] = "1.9.7"

但是在 phantomjs 的默认属性中,有一个依赖属性使用它和字符串替换来生成下载的基本 url:

默认['phantomjs']['basename'] = "phantomjs-#{node['phantomjs']['version']}-linux-#{node['kernel']['machine']}"

有没有办法设置版本属性,以便在评估这些依赖属性之前执行更改?还是一种强制重新评估的方法?

这是我之前遇到的一个问题,过去我只是覆盖所有依赖的东西..但这不是一个很好的方法。

我正在使用最新的厨师(刚刚在 vagrant 下使用 11.8.2 进行了测试,但在其他地方使用了最新的厨师 11.10.4)并且同时使用了 chef-solo 和厨师服务器。

谢谢。

【问题讨论】:

  • 将其设置在属性文件中,而不是配方中
  • 谢谢sethvargo .. 我还尝试覆盖我的食谱的属性文件中的值.. 我尝试了默认和覆盖,我还尝试了 include_attributes 我试图覆盖的食谱的属性。仍然没有影响依赖属性。
  • 人力资源部。这似乎是一个错误,但在 Chef 11 中肯定已修复...
  • @BlueSkies 我对 phantomjs 食谱有完全相同的问题。我目前的解决方法是在我的default["phantomjs"]["version"] = "1.9.7" 定义下方重新声明计算属性,但这显然不是解决方案...

标签: chef-infra


【解决方案1】:

您需要将自己的食谱(覆盖此属性)移到运行列表的上方。在编译时(加载属性文件时)执行字符串插值(foo-"#{whatever}"),并且 chef-client 按运行列表的顺序加载它们。

或者您可以选择手动覆盖所有依赖属性,但这是通往地狱之路。

【讨论】:

  • 我在运行列表中的位置更高,但我仍然必须手动更新所有属性。
猜你喜欢
  • 2019-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-19
  • 2016-02-29
  • 2015-06-06
  • 1970-01-01
相关资源
最近更新 更多