Puppetを使用して、いくつかのPythonパッケージをpipを使用してインストールしています。Puppet2.7を使用しているため、パッケージ宣言は次のようになります。
package { "carbon":
require => Class["graphite::prereqs::install"],
ensure => latest,
provider => pip,
}
問題は、このパッケージとgraphite-web
パッケージには、pipを使用して同じバージョンを複数回インストールできるバグがあるようです。したがって、Sudo pip install carbon
複数回、pipは毎回それをインストールします。これはパッケージのバグだと思います。
このバグはPuppetも混乱させるようです。システムをプロビジョニングするたびに、carbon
およびgraphite-web
が再インストールされます。
したがって、この明らかなパッケージングのバグを回避する方法があるかどうか疑問に思っています。私は以下を試しました:
package { "carbon":
require => Class["graphite::prereqs::install"],
ensure => latest,
provider => pip,
creates => "/opt/graphite/bin/carbon-cache.py",
}
...しかし、createsは使用できません。パッケージをインストールする前にファイルを探すようにパッケージ宣言に指示できる別の方法はありますか?
使用したいかもしれません exec's creates
パラメータ:
exec { "carbon":
command => "pip install carbon",
require => Class["graphite::prereqs::install"],
creates => "/opt/graphite/bin/carbon-cache.py",
path => ["/usr/bin", "/usr/sbin"],
timeout => 100,
}
「ensure => latest」の代わりに「ensure => installed」を使用してみます。
パペットタイプ参照 から:
パッケージの状態。パッケージを独自に取得できるパッケージングシステムでは、バージョン番号または最新を確認値として指定することにより、取得するパッケージを選択できます。 「通常の」システムファイルとは別に構成ファイルを管理するパッケージングシステムでは、puredを値として指定して、構成ファイルをアンインストールできます。有効な値は、存在する(インストール済みとも呼ばれる)、不在、パージ、保留、最新です。値は/./と一致できます。
Pipプロバイダーの記述方法はわかりませんが、installed
ではなくlatest
を使用すると、puppetはパッケージがすでにインストールされていることを検出し、再度インストールしようとはしません。 。
私はテストしていませんが、これを試してください:
file { "/opt/graphite/bin/carbon-cache.py":
ensure => 'absent',
}
package { "carbon":
require => [ Class["graphite::prereqs::install"],
File["/opt/graphite/bin/carbon-cache.py"]
]
ensure => latest,
provider => pip,
}