Почему Puppet продолжает устанавливать пакет, даже если он уже установлен?

8592
michal

Я использую 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
Если вы сможете опубликовать используемые вами классы / манифесты, вам будет проще диагностировать. Torian 13 лет назад 0
Это старый, но ... Сохранение в / tmp копии любых пакетов, которые вам нужны, вероятно, тоже не идеально, так как это приведет к циклу, в котором очистка / tmp (при перезагрузке или, возможно, ночью) удалит rpm , и куколка будет копировать его обратно вниз. И вы будете тратить место в / tmp на RPM, который уже установлен. Вероятно, лучше настроить репозиторий yum или (особенно с «установленной» гарантией, а не «последней») установить с http-адреса. dannysauer 8 лет назад 0

2 ответа на вопрос

9
Slartibartfast

Вы ссылаетесь на пакет по имени "php_pdo", но Puppet видит пакет как "php-pdo" (тире, не подчеркивание). Каждый раз, когда он проверяет, установлен ли php_pdo, он обнаруживает, что это не так. К сожалению, не имеет значения, сколько раз вы устанавливаете php-pdo, это никогда не будет php_pdo.

Чтобы решить проблему, измените строку:

package {"php_pdo": 

быть:

package {"php-pdo": 
вау, так $ имена такие «тяжелые». Большое спасибо, это освещает мою систему;) michal 13 лет назад 0
0
Kit Ho

In fact, I don't think above is a correct answer.

Package name should be found according to its package manager.

for ubuntu

root@Web2:~# dpkg --get-selections | grep php php-pdo install 

package name would be php-pdo

for centos

[root@centos 2.6.32-71.el6.x86_64-x86_64]# rpm -qa | grep php 

we need to omit the version for rpm according to this reference http://projects.puppetlabs.com/projects/puppet/wiki/Strict_RPM_Package_Version_Management