1

我在厨师独奏食谱中有这个片段

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 工作正常。有任何想法吗?

4

1 回答 1

2

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

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

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

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

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

  • 使用 cookbookname/attributes/default.rb 可以在其他地方覆盖的“正常默认值”(角色,节点)
  • 使用角色属性在许多共享功能的系统中进行设置(例如,所有网络服务器都具有“网络服务器”角色)。
  • 直接将节点属性用于特殊和独特的雪花。当然,我们不推荐雪花:-)。

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

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

然后在资源中:

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

请参阅Opscode Chef 文档以获取有关Attribute Precedence和 cookbooks中的Attribute Files 的信息。角色是Ruby DSL 或直接的 JSON

于 2012-11-22T07:57:50.357 回答