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を使用します
  • 機能を共有する多くのシステム(たとえば、「webserver」ロールを持つすべてのWebサーバー)間で設定するためにロール属性を使用します。
  • 特別でユニークな雪片には、ノード属性を直接使用します。もちろん、雪片はお勧めしません:-)。

属性ファイルでそれを行うには:

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

次に、リソースで:

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

クックブックの属性の優先順位属性ファイルについては、 OpscodeChefのドキュメントを参照してください。ロールはRubyDSL、またはストレートJSONです。

于 2012-11-22T07:57:50.357 に答える