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

回答

2

当您从一个已知的源文件安装一个包时,使用升级操作并没有什么意义。将操作更改为:安装。 。此外,厨师有rpm包的快捷资源,`rpm_package,所以您不需要提供线(它会自动使用它

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

最后,厨师的包资源使用:在默认情况下安装,所以你不要“T需要,要么,其实。

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

要设置的包名作为节点的属性,你可以做,在一个食谱的属性/ default.rb,在应用到节点的作用,或节点对象本身(在配方中,或编辑厨师服务器上的节点对象)。每个位置的原因都不相同,但一般规则是:

  • 使用cookbookname /属性/ default.rb对于可能在其他地方覆盖“理智默认”(角色,节点),这使得很多的共享功能的系统设置
  • 使用角色属性(有所有的网络服务器“ webserver“角色)。
  • 直接为特殊和独特的雪花使用节点属性。当然,我们不推荐雪花:-)。

要做到这一点在属性文件:

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

然后在资源:

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

Opscode Chef documentation的信息,Attribute PrecedenceAttribute Files in cookbooks。角色是Ruby DSL, or straight JSON

+0

非常感谢。我是厨师新手。你能否也请帮我介绍如何引入一个属性代替源文件名?我想设置一个属性rpmfile =输出ls -1tr/tmp/myserver * | head -n 1 – ottodidakt

+1

在适当的级别设置属性node ['myserver_location'] ='ls -1tr/tmp/myserver * | head -n 1 -'然后在提供程序中,它将源设置为源节点['myserver_location'] – PatrickWalker

+0

要明确地在配方中将其明确设置为节点属性,可以通过多种方式设置属性这个页面会给更多的信息http://wiki.opscode.com/display/chef/Attributes – PatrickWalker

相关问题