web-dev-qa-db-ja.com

すでにインストールされているのに、なぜ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
5
michal

パッケージを「php_pdo」という名前で参照しますが、Puppetはパッケージを「php-pdo」(アンダースコアではなくダッシュ)と見なします。 php_pdoがインストールされているかどうかを確認するたびに、インストールされていないことがわかります。残念ながら、php-pdoを何度インストールしてもかまいませんが、php_pdoになることはありません。

この問題を解決するには、次の行を変更します。

package {"php_pdo":

することが:

package {"php-pdo":
9
Slartibartfast

実際、私は上記が正しい答えだとは思いません。

パッケージ名は、そのパッケージマネージャーに従って見つける必要があります。

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

0
Kit Ho