Es gibt einige Dinge, die Sie tun können, um dieses Problem anzugehen, was Ihren Code langfristig verbessern wird.
- 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}\'") }
- 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_version
Parameter 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/