如果文件不存在,如何告诉 Puppet 仅使用 Pip 进行安装

Tom*_*url 6 python puppet pip graphite

我正在使用 Puppet 使用 pip 安装一些 Python 包。我使用的是 Puppet 2.7,所以我的包声明看起来像这样:

package { "carbon": 
    require => Class["graphite::prereqs::install"],
    ensure  => latest,
    provider => pip,
}
Run Code Online (Sandbox Code Playgroud)

问题是这个包和graphite-web包似乎都有一个错误,可以使用 pip 多次安装相同的版本。所以如果我sudo pip install carbon多次输入,pip 每次都会安装它。我相信这是软件包的错误。

这个错误似乎也让 Puppet 感到困惑,因为每次我配置我的系统carbongraphite-web重新安装时。

因此,我想知道是否有办法解决这个明显的打包错误。我尝试了以下方法:

package { "carbon": 
    require => Class["graphite::prereqs::install"],
    ensure  => latest,
    provider => pip,
    creates => "/opt/graphite/bin/carbon-cache.py",
}
Run Code Online (Sandbox Code Playgroud)

...但我不能使用创建。有没有另一种方法可以告诉包声明在安装包之前查找文件?

Mik*_*ike 8

可能要使用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,
  }
Run Code Online (Sandbox Code Playgroud)