为什么厨师在这里抱怨候选版本?

时间:2012-11-22 04:52:57

标签: chef

我在厨师独奏配方中有这个片段

package "myserver" do
  action :upgrade
  source "/tmp/myserver-12.4.0-16052.noarch.rpm"
  provider Chef::Provider::Package::Rpm
end

但厨师说:

INFO: Processing package[myserver] action upgrade (cbgd::default line 16)
DEBUG: package[myserver] checking rpm status
DEBUG: package[myserver] checking install state
DEBUG: package[myserver] current version is 12.4.0-16050
DEBUG: package[myserver] no candidate version - nothing to do
INFO: Chef Run complete in 2.621177 seconds

我期待升级能够完成。一个简单的rpm -Uvh工作正常。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

当您从已知源文件安装单个包时,使用升级操作并没有多大意义。将操作更改为:install。此外,Chef还有rpm包的快捷方式资源`rpm_package,因此您不需要提供程序行(它会自动使用它。

rpm_package "myserver" do
  action :install
  source "/tmp/myserver-12.4.0-16052.noarch.rpm"
end

最后,Chef的包资源使用:默认安装,所以你实际上也不需要。

rpm_package "myserver" do
  source "/tmp/myserver-12.4.0-16052.noarch.rpm"
end

要将包名称设置为节点属性,您可以在cookbook的attributes / default.rb中,在应用于节点的角色中,或在节点对象本身上(在配方中,或编辑厨师服务器上的节点对象)。每个位置的原因各不相同,但一般规则是:

  • 使用cookbookname / attributes / default.rb表示可以在别处覆盖的“合理的默认值”(角色,节点)
  • 使用角色属性来设置共享功能的许多系统(例如,所有具有“webserver”角色的Web服务器)。
  • 直接将节点属性用于特殊和独特的雪花。我们当然不推荐雪花: - )。

在属性文件中执行此操作:

default['myserver']['package_name'] = 'myserver-12.4.0-16052.noarch.rpm'

然后在资源中:

rpm_package "myserver" do
  source "/tmp/#{node['myserver']['package_name']}"
end

有关Opscode Chef documentationAttribute Precedence的信息,请参阅Attribute Files in cookbooks。角色是Ruby DSL, or straight JSON