2015-04-09 4 views
5

übergeben Ich hatte eine Frage, ich hoffte, jemand könnte eine Antwort zu haben. Im Wesentlichen versuche ich sicherzustellen, dass ich immer eine feste, etwas ältere Version von phpunit verwende, die ich in die Dateiressourcen meines Moduls gelegt habe.Marionette: Konnte nicht sichern <file>: Habe neue Inhalte für Summe

Das Manifest:

file 
    { 
      "/usr/bin/phpunit": 
      ensure => file, 
      owner => 'root', 
      group => 'root', 
      mode => 0755, 
      source => "puppet:///modules/php/phpunit" 
    } 

Vorbereitung: Ich laden Sie die aktuelle ('falsch') Version von PHPUnit und legen Sie sie in/usr/bin.

So ist der erste Lauf Puppe gelingt:

Notice: Compiled catalog for <hostname> in environment production in 3.06 seconds 
Notice: /Stage[main]/Php/File[/usr/bin/phpunit]/content: content changed '{md5}9f61f732829f4f9e3d31e56613f1a93a' to '{md}38789acbf53196e20e9b89e065cbed94' 
Notice: /Stage[main]/Httpd/Service[httpd]: Triggered 'refresh' from 1 events 
Notice: Finished catalog run in 15.86 seconds 

Dann habe ich die aktuelle (noch 'falsch') Version von phpunit herunterladen und legen Sie sie in/usr/bin wieder.

Diesmal schlägt der Marionettenlauf fehl.

Notice: Compiled catalog for <hostname> in environment production in 2.96 seconds 
Error: Could not back up /usr/bin/phpunit: Got passed new contents for sum {md5}9f61f732829f4f9e3d31e56613f1a93a 
Error: Could not back up /usr/bin/phpunit: Got passed new contents for sum {md5}9f61f732829f4f9e3d31e56613f1a93a 
Error: /Stage[main]/Php/File[/usr/bin/phpunit]/content: change from {md5}9f61f732829f4f9e3d31e56613f1a93a to {md5}38789acbf53196e20e9b89e065cbed94 failed: Could not back up /usr/bin/phpunit: Got passed new contents for sum {md5}9f61f732829f4f9e3d31e56613f1a93a 

Was gibt? Wenn ich die Datei (/ var/lib/puppet/clientbucket/9/f/6/1/f/7/3/2/9f61f732829f4f9e3d31e56613f1a93a /) aus meinem Filebucket lösche, wird es wieder funktionieren ... für den nächsten Lauf, aber nicht danach.

Was mache ich falsch?

Ich würde jede Eingabe und danke im Voraus schätzen.

+0

Aber ist die heruntergeladene Datei identisch mit der, die im Filebucket endet? Wenn das der Fall ist, scheint der Fehler keinen Sinn zu ergeben. Dies könnte ein Fehler sein. –

+0

Dies ist ein Fehler in bestimmten Versionen von Marionette: https://tickets.puppetlabs.com/browse/PUP-1038 – Arkandel

+1

... sieht unabhängig (passiert bei der Verwendung von 'Inhalt' nicht' source' etc.) –

Antwort

0

Dies hat keine andere Lösung, als zu aktualisieren, da es einen Fehler in bestimmten Marionettenversionen gibt, wo Dateien, die sowohl UTF8- als auch Binärzeichen enthalten, falsch behandelt werden, und es zu einer Fehlermeldung kommt.

https://tickets.puppetlabs.com/browse/PUP-1038

Die lächerlich allzu komplizierte Lösung, die ich als eine Behelfslösung verwendet wird, ist eine TAR-Datei in der Dateiressource zu haben, die eine exec benachrichtigt, die die eigentliche ausführbare Datei im richtigen Verzeichnis untars und platziert, um sicherzustellen, der Zeitstempel für Letzteres ist neuer als das erstere.

Es ist bei weitem nicht ideal, aber es funktioniert in Fällen wie meiner, wo die Aktualisierung der Puppe auf die aktuellste Version keine attraktive Option ist.

+1

Dies ist möglicherweise nicht die richtige Antwort. PUP-1038 gilt für Manifeste, die den Parameter content => 'verwenden, nicht den Parameter' source => ', der in der obigen Frage verwendet wird. PUP-1038 sagt "_wenn Sie den Parameter 'source' anstelle des Parameters 'content' verwenden ... kann das Manifest erfolgreich angewendet werden_". –

1

Als Workaround können Sie backup => false in der Dateiressource festlegen. Das ist natürlich ein wenig unsicher.

+0

Ich habe es versucht backup => false, es macht keinen Unterschied. – Arkandel

0

Ich konnte das gleiche Problem beheben, indem Sie auf dem Client-Knoten /var/lib/puppet/clientbucket entfernen.

Dieser Knoten hat nicht mehr genügend Speicherplatz, so dass Marionette dort wahrscheinlich leere Dateien falsch gespeichert hat.

1

Sie hatten diesen Fehler auch. Ich löste es mit einer Kombination von zwei vorherigen Antworten.

Zum einen hatte ich/var/lib/puppet/clientbucket auf dem Client-Knoten, indem Sie löschen: einmal mehr

sudo rm -r /var/lib/puppet/clientbucket 

Genau dies tun wird es nur laufen lassen.

Dann musste ich das Backup => false markieren, um es zu stoppen, die Datei neu zu erstellen, verpasste beide Schritt fehlgeschlagen, um es für mich zu lösen.Die angenommene Antwort ist falsch, wenn man sagt, es gibt

"keine andere Lösung als die Aktualisierung".