Controllo versione specifica + ciclo if e else


2

basta iniziare il burattino. Come tutti sanno, iniziare qualcosa è sempre il più difficile. Bene, per pratica voglio fare quanto segue: suppongo di doverlo mettere in init.pp.

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

Attualmente il mio codice è simile al seguente

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

Ho diversi problemi:

1) Non credo che la mia sintassi per la versione di openssl sia scritta correttamente. Quando eseguo una semplice ricerca su Google vedo persone che assicurano la versione di openssl come questa '1.0.1e-15.el6', a volte è '1.0.1e-16.el6_5.7' Sono confuso nel determinare cosa succede dopo '-'

2) Non penso che digitare "openssl" farà capire al burattino che è openssl

3) Come verificare la versione di openssl? Penso che la mia sintassi if 'openssl' version == 'xxx'non sia corretta.

Risposte:


0

Ci sono un paio di cose che potresti fare per affrontare questo problema che miglioreranno il tuo codice nel lungo periodo.

  1. Utilizzare la libreria stdlib che ha migliorato le operazioni di confronto delle stringhe, ad esempio versioncmp(). Funzionerà correttamente con stringhe di versione con decimali e lettere.

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

  1. Non fare le tue dichiarazioni condizionali all'interno della tua risorsa. Per lo meno, separali in modo che siano in cima al tuo manifest. (Codice non testato)

if versioncmp( '$openssl', '1.1.3e') < 0 {
   $openssl_version = '42'
}

package {'openssl': 
  ensure => "$openssl_version",
}

Tuttavia, devi chiederti, è davvero quello che vuoi fare? Le migliori pratiche delle marionette sono che i requisiti aziendali non dovrebbero far parte dei moduli di base. Dovrebbero essere astratti in moduli ruoli / profili o con hiera. Potresti stare meglio con le seguenti opzioni.

R. Assicurati solo che tutti i tuoi server siano aggiornati

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

B. Se hai dei nodi, devi semplicemente usare una versione precedente / insicura. Quindi crea una classe con parametri e sovrascrivi il openssl_versionparametro con hiera o ruolo / profilo.

Informazioni aggiuntive

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.