我使用包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