質問: すでにインストールされているのに、なぜpuppetはパッケージをインストールし続けるのですか? パッケージ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":