厨师Nginx食谱 - 覆盖版本号

时间:2014-07-08 06:41:55

标签: nginx chef cookbook

我根据Nginx食谱为我的应用开发了一本食谱。我从以下位置下载了Nginx食谱

https://github.com/miketheman/nginx

并尝试在我的cookbook中包含默认配方并覆盖默认属性文件中指定的版本属性。但无论我做什么,都安装了Nginx版本1.0.x.我无法跟踪它从何处获取版本信息。任何人都可以帮忙解决这个问题吗?

由于

3 个答案:

答案 0 :(得分:4)

如果您在自己的包装器食谱中指定nginx食谱作为依赖项,则必须处理属性文件的严格加载顺序。从Chef 11开始,所有依赖性烹饪书首先被加载到需要它们的食谱之前。在加载依赖烹饪书(包括nginx)时,将按以下顺序加载和评估属性文件:

  • attributes/default.rb nginx
  • nginx按字母顺序排列的所有其他属性文件
  • attributes/default.rb你的食谱
  • 您的食谱的所有其他属性文件按字母顺序

如您所见,在加载您自己的属性文件之前,会初始化nginx cookbook的所有属性。因此,任何依赖属性(即使用其他现有属性的值初始化的属性)都使用nginx cookbook中定义的值,而不是您自己的值。

现在,您可以看到node['nginx']['source']['version']已使用node['nginx']['version']初始化,因此使用默认值。如果您稍后在食谱中更改node['nginx']['version'],则不会更改此值。

但不要担心,有一个补救措施:)您可以重新加载特定的属性文件,以便重新设置其属性。在这里,如果你想覆盖nginx版本,这是相当方便的。这就是我在我的nginx包装器食谱中的attributes/default.rb中所做的:

override['nginx']['version'] = '1.6.0'
override['nginx']['source']['checksum'] = '943ad757a1c3e8b3df2d5c4ddacc508861922e36fa10ea6f8e3a348fc9abfc1a'

# Reload nginx::source attributes with our updated version
node.from_file(run_context.resolve_attribute('nginx', 'source'))

答案 1 :(得分:1)

来自attributes / default.rb的

默认版本设置为' 1.4.4'

找出您已将其设置为的版本的最简单方法是在chef-server UI上查找以下属性: [' nginx的'] ['版本']

希望这应该设置为您设置的任何内容!

答案 2 :(得分:1)

我认为这里的真正问题是['nginx']['version']的行为并不像您预期​​的那样。

根据自述文件......

  • 如果您使用nginx::defaultnginx::repo食谱,您将从平台的存储库或来自" stable&#34加载最新的二进制包;由Nginx维护者提供的repo。 version属性被有效忽略!!

  • version属性仅在您使用nginx::source配方时才会受到尊重,因为它确定了提取和构建的源存档的URL。

  • 如果您使用nginx::ohai配方,根据当前安装的Nginx版本更新 version属性

清楚了吗?如果没有,那么:

  • nginx::default为您提供(通常)旧版本的Nginx
  • nginx::repo为您提供(通常)较新的Nginx稳定版本
  • nginx::source是唯一允许您指定所需Nginx版本的方法。

如果这似乎无法解释您所看到的内容......您需要深入了解配方源代码。配方行为(例如,安装存储库的选择)因不同的平台/系列而异。