为什么 Puppet 会继续安装某个包,即使它已经安装了?

为什么 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

答案1

您使用名称“php_pdo”引用该包,但 Puppet 将该包视为“php-pdo”(破折号,不是下划线)。每次检查 php_pdo 是否安装时,它都会发现没有安装。不幸的是,无论您安装 php-pdo 多少次,它都永远不会是 php_pdo。

要解决该问题,请更改以下行:

package {"php_pdo":

成为:

package {"php-pdo":

答案2

事实上,我不认为以上是一个正确答案。

应该根据包管理器来找到包名称。

对于 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

相关内容