Warum installiert Puppet ein Paket weiter, auch wenn es bereits installiert ist?

8746
michal

Ich verwende das Paketattribut install, um sicherzustellen, dass das angegebene Paket Xinstalliert ist.

Obwohl das Paket installiert ist, puppetversucht es jedoch, es erneut zu installieren, und es wird natürlich mit einer Ausnahme beendet ("X bereits installiert"). Dies geschieht nicht, wenn der Paketname mit einem Servicenamen übereinstimmt. Ich verwende lokales RPM und einen RPM-Anbieter.

Wie vermeide ich diese Ausnahme?


Ich habe auch eine Problemumgehung implementiert: Wenn die RPM-Installation erfolgreich ist, erstelle ich eine Datei mit dem Namen /X_DONE. Dann installiere ich die Abhängigkeiten basierend auf dieser Datei, nicht dem Paket.

Was ist der richtige Weg, um damit umzugehen?

EDIT: Fehlgeschlagenes Manifest:

 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" } 

und Ausnahme:

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
Wenn Sie die von Ihnen verwendeten Klassen / Manifeste bereitstellen können, ist die Diagnose einfacher. Torian vor 12 Jahren 0
Dies ist alt, aber ... Das Beibehalten einer Kopie der installierten Pakete in / tmp ist wahrscheinlich auch nicht ideal, da dies zu einer Schleife führt, in der eine Bereinigung von / tmp (beim Neustart oder möglicherweise nachts) die RPM entfernt und Marionette kopiert es wieder. Sie verschwenden Speicherplatz in / tmp für ein bereits installiertes RPM. Wahrscheinlich ist es besser, ein Yum-Repo einzurichten, oder (insbesondere bei einem "installierten" im Gegensatz zu "neuesten") von einer http-URL zu installieren. dannysauer vor 7 Jahren 0

2 Antworten auf die Frage

9
Slartibartfast

Sie verweisen auf das Paket mit dem Namen "php_pdo", aber Puppet sieht das Paket als "php-pdo" (Bindestrich, nicht Unterstrich). Bei jeder Überprüfung, ob php_pdo installiert ist, wird festgestellt, dass dies nicht der Fall ist. Leider spielt es keine Rolle, wie oft Sie php-pdo installieren, es wird nie php_pdo sein.

Um das Problem zu beheben, ändern Sie die Zeile:

package {"php_pdo": 

sein:

package {"php-pdo": 
wow, also sind $ namen so "schwer". Vielen Dank, es bringt Licht in mein System;) michal vor 12 Jahren 0
0
Kit Ho

Ich glaube nicht, dass oben eine richtige Antwort ist.

Der Paketname sollte gemäß seinem Paketmanager gefunden werden.

für Ubuntu

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

Paketname wäre php-pdo

für Centos

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

wir müssen die Version für rpm gemäß dieser Referenz http://projects.puppetlabs.com/projects/puppet/wiki/Strict_RPM_Package_Version_Management weglassen