Puppetを使用して、(CentOS 5および6サーバー)のパッケージを制御された方法で更新したいと思います。したがって、私はensure=>latest
ではなく、ensure=>3.0.1-1
を使用したいと思います。
例:
class puppet::installation inherits puppet {
package { "puppet":
ensure => "3.0.1-1",
}
}
アップデートは正常に機能しますが、パペットエージェントは違いがあると不平を言い続けます。
/Stage[main]/Puppet::Installation/Package[puppet]/ensure: current_value 3.0.1-1.el6, should be 3.0.1-1 (noop)
確認ルールを3.0.1-1.el6
に変更することでこれを解決できますが、それよりもCentOS5では機能しません。
これを解決するための短くてクリーンな方法はありますか、それとも、os-releaseversionに依存する個別のルールを作成する必要がありますか?.
私は解決策を探していましたが、この特定の質問に関連するものは何も見つかりませんでした。
関連する例への提案や参照をいただければ幸いです。
次のようなcaseステートメントで変数を設定する必要があります。
class puppet::installation inherits puppet {
case $::operatingsystemrelease {
'5': { $puppet_ver = '3.0.1-1'}
default: { $puppet_ver = '3.0.1-1.el6'}
}
package { 'puppet':
ensure => $puppet_ver,
}
}
ただし、この種のロジックにはparams.ppファイルを使用することをお勧めします。ここでparams.ppについて読んでください: http://www.example42.com/?q=understandExample42PuppetModules
Puppetには、このための機能はまだありません(実際には必要ですが)。
yum-versionlock
yumプラグインを使用して特定のRPMパッケージを特定のバージョンでロックし、puppetを使用してバージョンロック構成を制御します。
その他の回避策については、 この関連する質問 を参照してください。
実際、ワイルドカード文字を使用して、オペレーティングシステムに関係なく特定のバージョンのPythonをインストールできました。pythonのパッケージコードは次のとおりです。
package {
"python-dev": ensure => "2.7.3*";
"python-setuptools": ensure => installed;
"python-pip": ensure => installed;
"libxml2-dev": ensure => installed;
"libxslt-dev": ensure => installed;
}
2.7.3 *をensureバージョンとして使用することで、python 2.7.3-0ubuntu2.2をvagrantVMにインストールしました。Puppetバージョン2.7.19を使用しています。