1

I have developed a cookbook for my application which depends on Nginx cookbook. I have downloaded the Nginx cookbook from the following location

https://github.com/miketheman/nginx

and tried including the default recipe in my cookbook and overriding version attribute specified in the default attribute file. But irrespective of what i do, Nginx version 1.0.x is installed. I could not track from where it is fetching the version information. Can anyone help resolving this issue?

Thanks

4

3 回答 3

4

如果您将说明书指定nginx为您自己的包装说明书中的依赖项,则必须处理属性文件的严格加载顺序。从 Chef 11 开始,首先加载所有依赖项说明书,然后是需要它们的说明书。加载依赖项说明书(包括nginx)时,将按以下顺序加载和评估属性文件:

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

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

现在,如您所见,node['nginx']['source']['version']它被初始化node['nginx']['version']并因此使用默认值。如果您node['nginx']['version']稍后在食谱中进行更改,则此值不会更改。

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

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'))
于 2014-07-08T10:29:20.313 回答
1

从 attributes/default.rb 默认版本设置为 '1.4.4'

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

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

于 2014-07-08T10:05:13.977 回答
1

我认为这里真正的问题是它的['nginx']['version']行为不像你期望的那样。

根据自述文件...

  • 如果您使用nginx::defaultornginx::repo配方,您将从平台的存储库或 Nginx 维护者提供的“稳定”存储库加载最新的二进制包。该version属性被有效地忽略了!!。

  • version属性仅在您使用nginx::source配方时才有效,它决定了获取和构建的源存档的 URL。

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

还清吗?如果没有,那么:

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

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

于 2014-07-11T10:00:20.440 回答