我根据Nginx食谱为我的应用开发了一本食谱。我从以下位置下载了Nginx食谱
https://github.com/miketheman/nginx
并尝试在我的cookbook中包含默认配方并覆盖默认属性文件中指定的版本属性。但无论我做什么,都安装了Nginx版本1.0.x.我无法跟踪它从何处获取版本信息。任何人都可以帮忙解决这个问题吗?
由于
答案 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)
默认版本设置为' 1.4.4'
找出您已将其设置为的版本的最简单方法是在chef-server UI上查找以下属性: [' nginx的'] ['版本']
希望这应该设置为您设置的任何内容!
答案 2 :(得分:1)
我认为这里的真正问题是['nginx']['version']
的行为并不像您预期的那样。
根据自述文件......
如果您使用nginx::default
或nginx::repo
食谱,您将从平台的存储库或来自" stable&#34加载最新的二进制包;由Nginx维护者提供的repo。 version
属性被有效忽略!!
version
属性仅在您使用nginx::source
配方时才会受到尊重,因为它确定了提取和构建的源存档的URL。
如果您使用nginx::ohai
配方,根据当前安装的Nginx版本更新 version
属性
清楚了吗?如果没有,那么:
nginx::default
为您提供(通常)旧版本的Nginx nginx::repo
为您提供(通常)较新的Nginx稳定版本nginx::source
是唯一允许您指定所需Nginx版本的方法。如果这似乎无法解释您所看到的内容......您需要深入了解配方源代码。配方行为(例如,安装存储库的选择)因不同的平台/系列而异。