パッケージinstall
属性を使用して、指定されたパッケージX
がインストールされていることを確認します。
ただし、パッケージがインストールされていても、puppet
はパッケージを再度インストールしようとし、もちろん例外(「Xはすでにインストールされています」)で終了します。パッケージ名がサービス名と一致する場合は発生しません。ローカルRPMとRPMプロバイダーを使用しています。
その例外を回避するにはどうすればよいですか?
また、回避策を実装しました。RPMのインストールに成功した場合は、/X_DONE
というファイルを作成します。次に、パッケージではなく、そのファイルに基づいて依存関係をインストールします。
これに対処する適切な方法は何ですか?
編集:マニフェストの失敗:
file {"$tmp_dir/$php_pdo":
ensure => present,
source => "puppet:///files/services/$php_pdo"
}
package {"php_pdo":
require => File["$tmp_dir/$php_pdo"],
ensure => installed,
provider => rpm,
source => "$tmp_dir/$php_pdo"
}
および例外:
err: /Stage[main]/Apache-php/Package[php_pdo]/ensure: change from absent to present failed: Execution of '/bin/rpm -i --oldpackage /tmp/puppet/php-pdo-5.1.6-27.el5_5.3.x86_64.rpm' returned 1: package php-pdo-5.1.6-27.el5_5.3.x86_64 is already installed
パッケージを「php_pdo」という名前で参照しますが、Puppetはパッケージを「php-pdo」(アンダースコアではなくダッシュ)と見なします。 php_pdoがインストールされているかどうかを確認するたびに、インストールされていないことがわかります。残念ながら、php-pdoを何度インストールしてもかまいませんが、php_pdoになることはありません。
この問題を解決するには、次の行を変更します。
package {"php_pdo":
することが:
package {"php-pdo":
実際、私は上記が正しい答えだとは思いません。
パッケージ名は、そのパッケージマネージャーに従って見つける必要があります。
ubuntuの場合
root@Web2:~# dpkg --get-selections | grep php
php-pdo install
パッケージ名はphp-pdo
centOSの場合
[root@centos 2.6.32-71.el6.x86_64-x86_64]# rpm -qa | grep php
このリファレンスに従って、rpmのバージョンを省略する必要があります http://projects.puppetlabs.com/projects/puppet/wiki/Strict_RPM_Package_Version_Management