c'è un modo per eseguire un command prima che il burattino implementi un cambiamento?

Voglio avere un burattino eseguire un command specifico prima di eseguire qualsiasi tipo di modifica. Sono consapevole dell'opzione prerun_command nel puppet.conf principale, ma questo non è quello che sto cercando. Voglio che il command si esegua solo se qualcosa sta per cambiare, non su each run di fantoccio.

Ecco lo scenario. Diciamo che ho un gruppo di server web dietro un bilanciatore di carico. Voglio quindi che il burattino aggiorni i file del sito web. Ma per prevenire problemi in cui alcuni file sono stati aggiornati, ma altri file non hanno e le versioni miste che causano problemi, voglio portre il server fuori dal pool di bilanciamento del carico.
Potrei scrivere uno script che quando eseguito dirà l'equilibratore di carico per rimuovere la casella dalla piscina. Poi il fantoccio può fare la modifica e utilizzare il postrun_command per riporre la casella nel pool una volta completata. Ma ho bisogno di un modo per eseguire lo script per rimuovere il server dalla piscina.

L'unica soluzione che posso pensare è di mantenere 2 copie dei file sulla scatola. Una copia di staging e quando aggiorna il burattino, utilizza un'azione di notifica per triggersre lo script di rimozione e quindi copia dalla fase di installazione nella posizione in diretta. Ma speravo qualcosa di un po 'più generico che avrebbe funzionato a qualsiasi cambiamento che veniva eseguito (aggiornamento di un pacchetto, riavvio di un servizio, creazione di un utente, qualsiasi cosa).

  • ulimit -n non cambia - valori limiti.conf non ha effetto
  • Distriggers i comandi di Linux
  • Come persuadere Nginx per redirect tutte le richieste tranne /robots.txt?
  • Provisioning per un piccolo team di sviluppo software Linux
  • apt Package non è ancora configurato
  • Come posso elencare tutti gli utenti con root?
  • Autenticazione chiave SSH sul lato server
  • output ngrep durante il monitoraggio dell'attività di networking di linux
  • 3 Solutions collect form web for “c'è un modo per eseguire un command prima che il burattino implementi un cambiamento?”

    Lo scopo principale del burattino è la gestione della configuration . Vale a dire, farà rispettare le configurazioni da te dichiarate. Quello che ti serve (basato sullo scenario descritto nella tua domanda) è il command e il controllo . Come sottolinea @Mike, il tessuto è un'opzione. Personalmente mi piacciono Marionette Collective, in quanto è un prodotto di Puppet Labs e suona bene con gli interni di Puppet (fatti, ecc.).

    Ecco i miei 2 centesimi su di esso .. Puoi farlo in burattina ma ho sempre trovato la distribuzione di webapps molto disordinata con il burattino. Certo che functionrà ma cosa succede quando hai bisogno di un return veloce. non succederà con il burattino.

    Sarei in cerca di uno strumento di distribuzione come il tessuto

    http://docs.fabfile.org/en/1.4.3/index.html

    Permette di eseguire comandi su tutti i webnodes per gestire le implementazioni. Quindi, proprio prima di distribuire, puoi interrompere il server web, ad esempio. Quindi avviarlo quando il dispiegamento è finito.

    EDIT

    Ecco un esempio scoraggiato di quello che puoi fare nel burattino

    Quindi hai un file, ma devi eseguire un command prima che il file venga modificato?

     file { "/path/to/file": ensure => file, require => Exec['command to run'], } 

    In modo che eseguirà un command prima che un file debba essere modificato a causa delle richieste.

    Dopo aver giocato con vari methods diversi per farlo, uno script wrapper è stata la mia soluzione finale.

    Lo script viene chiamato anziché puppet agent di puppet agent each volta che si verifica una corsa.

    1. Imposta una variabile FACTER_ env che cerca init.pp Se init.pp non trova la variabile, fail() s con un messaggio di errore.
    2. Lo script gestisce prima il puppet agent --noop --onetime --no-daemonize --verbose --color=false | grep -q ' (noop)$' puppet agent --noop --onetime --no-daemonize --verbose --color=false | grep -q ' (noop)$' (è un po 'più intelligente di questo perché controlla anche l' puppet agent eseguito per i codici di errore. Inoltre non è ansible utilizzare i --detailed-exitcodes causa di bug 6322 ).
    3. Se la suddetta corrisponde alla (noop)$ , rimuove il server dall'equilibratore di carico e --noop nuovamente il burattino senza il --noop e con i --detailed-exitcodes .
    4. Se l'esecuzione esce con un valore 0 o 2 , lo script esegue alcuni controlli aggiuntivi per assicurarsi che tutti i servizi siano in esecuzione correttamente e quindi ripiega la casella nell'equilibratore di carico.
    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.