我在厨师独奏配方中有这个片段
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工作正常。有什么想法吗?
答案 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中,在应用于节点的角色中,或在节点对象本身上(在配方中,或编辑厨师服务器上的节点对象)。每个位置的原因各不相同,但一般规则是:
在属性文件中执行此操作:
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 Precedence的信息,请参阅Attribute Files in cookbooks。角色是Ruby DSL, or straight JSON。