Spezifische Versionsüberprüfung + if and else-Schleife

984
user3331457

Beginnen Sie einfach mit der Marionette. Wie jeder weiß, ist es immer am schwierigsten, etwas zu beginnen. Zum Üben möchte ich Folgendes tun: Ich gehe davon aus, dass ich es in init.pp setzen soll.

if 'openssl' version == '1.0.2b' or '1.0.2d' upgrade to 1.1.1e else do nothing 

Derzeit sieht mein Code so aus

 package { 'openssl': if 'openssl' version == '1.0.2b' or '1.0.2d' { ensure => '1.1.1e' } else { } 

Ich habe mehrere Probleme:

1) Ich glaube nicht, dass meine Syntax für die Version von openssl korrekt geschrieben wurde. Wenn ich eine einfache Google-Suche durchführe, sehe ich Leute, die die Version von openssl wie "1.0.1e-15.el6" sicherstellen. Manchmal ist es "1.0.1e-16.el6_5.7". Ich bin verwirrt, wenn ich herausfinde, was hinter dem "-" steht.

2) Ich glaube nicht, dass die Eingabe von "openssl" Marionette wissen lässt, dass es openssl ist

3) Wie überprüfe ich die Version von openssl? Ich denke meine Syntax if 'openssl' version == 'xxx'ist nicht korrekt.

2

1 Antwort auf die Frage

0
spuder

Es gibt einige Dinge, die Sie tun können, um dieses Problem anzugehen, was Ihren Code langfristig verbessern wird.

  1. Verwenden Sie die stdlib-Bibliothek, die Zeichenfolgenvergleichsoperationen verbessert hat, z versioncmp(). Es funktioniert einwandfrei mit Versionszeichenfolgen, die Dezimalzahlen und Buchstaben enthalten.

 if versioncmp($::puppetversion, '3.0.0') < 0 { fail("foobar requires puppet 3.0.0 or greater, found: \'${::puppetversion}\'") } 

  1. Führen Sie keine Bedingungsanweisungen innerhalb Ihrer Ressource aus. Zumindest spalten Sie sie auf, damit sie ganz oben in Ihrem Manifest stehen. (Nicht getesteter Code)

if versioncmp( '$openssl', '1.1.3e') < 0 { $openssl_version = '42' }  package {'openssl':  ensure => "$openssl_version", } 

Sie müssen sich jedoch fragen, ob Sie das wirklich wollen. Die bewährten Praktiken von Puppets sind, dass Ihre Geschäftsanforderungen nicht Teil Ihrer Basismodule sein sollten. Sie sollten zu Rollen / Profil-Modulen oder mit Hiera abstrahiert werden. Mit den folgenden Optionen sind Sie möglicherweise besser aufgehoben.

A. Stellen Sie nur sicher, dass alle Server auf dem neuesten Stand sind

package {'openssl': ensure => latest, } 

B. Wenn Sie einige Knoten haben, müssen Sie nur eine ältere / unsichere Version verwenden. Erstellen Sie dann eine parametrisierte Klasse und überschreiben Sie den openssl_versionParameter mit Hiera oder Rolle / Profil.

Zusätzliche Information

https://puppetlabs.com/blog/patching-heartbleed-openssl-vulnerability-puppet-enterprise http://garylarizza.com/blog/2014/02/17/puppet-workflow-part-2/