5

Я использую атрибут 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

2 ответа2

9

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

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

package {"php_pdo":

быть:

package {"php-pdo":
0

На самом деле, я не думаю, что выше верный ответ.

Имя пакета должно быть найдено в соответствии с его менеджером пакетов.

для убунту

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

имя пакета будет php-pdo

для сентос

[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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .