Notificato quando un file controllato da burattino verrà modificato da yum


13

È possibile ricevere una notifica sulla console quando un pacchetto contenente un file controllato da Puppet sta per cambiare quel file? Significato, in yum quando si esegue l'aggiornamento di yum, è possibile iniettare un avviso personalizzato?

Risposte:


22

Yum supporta i plug-in, quindi è del tutto possibile scrivere un plug-in in grado di leggere il manifest delle marionette memorizzato nella cache e avvisare quando una transazione sovrascriverà un file controllato dalle marionette. Non sono a conoscenza di un plug-in esistente che lo fa, ma probabilmente scriverò solo uno scritto da me come mi piace l'idea.

Il plugin controlla tutti i pacchetti appena installati / aggiornati / declassati, ti dice quali file gestiti da burattini sovrascriveranno e ti chiede una conferma per farlo.

    [root@camel ~]# yum update pam
    Loaded plugins: puppet, security
    Skipping security plugin, no data
    Setting up Update Process
    Resolving Dependencies
    Skipping security plugin, no data
    --> Running transaction check
    ---> Package pam.i386 0:0.99.6.2-12.el5 set to be updated
    ---> Package pam.x86_64 0:0.99.6.2-12.el5 set to be updated
    --> Finished Dependency Resolution

    Dependencies Resolved

    ===============================================================================================================================================================
     Package                           Arch                                 Version                                       Repository                          Size
    ===============================================================================================================================================================
    Updating:
     pam                               i386                                 0.99.6.2-12.el5                               base                               983 k
     pam                               x86_64                               0.99.6.2-12.el5                               base                               982 k

    Transaction Summary
    ===============================================================================================================================================================
    Install       0 Package(s)
    Upgrade       2 Package(s)

    Total download size: 1.9 M
    Is this ok [y/N]: y
    Downloading Packages:
    (1/2): pam-0.99.6.2-12.el5.x86_64.rpm                                                                                                   | 982 kB     00:00
    (2/2): pam-0.99.6.2-12.el5.i386.rpm                                                                                                     | 983 kB     00:00
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------
    Total                                                                                                                          8.7 MB/s | 1.9 MB     00:00
    Running rpm_check_debug
    Running Transaction Test
    Finished Transaction Test
    Transaction Test Succeeded
    Running Transaction
    Installing pam-0.99.6.2-12.el5.i386 overwrites puppet-managed file /etc/pam.d/system-auth
    Installing pam-0.99.6.2-12.el5.i386 overwrites puppet-managed file /etc/security/access.conf
    Installing pam-0.99.6.2-12.el5.i386 overwrites puppet-managed file /etc/security/limits.conf
    Installing pam-0.99.6.2-12.el5.x86_64 overwrites puppet-managed file /etc/pam.d/system-auth
    Installing pam-0.99.6.2-12.el5.x86_64 overwrites puppet-managed file /etc/security/access.conf
    Installing pam-0.99.6.2-12.el5.x86_64 overwrites puppet-managed file /etc/security/limits.conf
    Is this ok [y/N]: n


    Aborting
    [root@camel ~]# yum update pam
    Loaded plugins: puppet, security
    Skipping security plugin, no data
    Setting up Update Process
    Resolving Dependencies
    Skipping security plugin, no data
    --> Running transaction check
    ---> Package pam.i386 0:0.99.6.2-12.el5 set to be updated
    ---> Package pam.x86_64 0:0.99.6.2-12.el5 set to be updated
    --> Finished Dependency Resolution

    Dependencies Resolved

    ===============================================================================================================================================================
     Package                           Arch                                 Version                                       Repository                          Size
    ===============================================================================================================================================================
    Updating:
     pam                               i386                                 0.99.6.2-12.el5                               base                               983 k
     pam                               x86_64                               0.99.6.2-12.el5                               base                               982 k

    Transaction Summary
    ===============================================================================================================================================================
    Install       0 Package(s)
    Upgrade       2 Package(s)

    Total size: 1.9 M
    Is this ok [y/N]: y
    Downloading Packages:
    Running rpm_check_debug
    Running Transaction Test
    Finished Transaction Test
    Transaction Test Succeeded
    Running Transaction
    Installing pam-0.99.6.2-12.el5.i386 overwrites puppet-managed file /etc/pam.d/system-auth
    Installing pam-0.99.6.2-12.el5.i386 overwrites puppet-managed file /etc/security/access.conf
    Installing pam-0.99.6.2-12.el5.i386 overwrites puppet-managed file /etc/security/limits.conf
    Installing pam-0.99.6.2-12.el5.x86_64 overwrites puppet-managed file /etc/pam.d/system-auth
    Installing pam-0.99.6.2-12.el5.x86_64 overwrites puppet-managed file /etc/security/access.conf
    Installing pam-0.99.6.2-12.el5.x86_64 overwrites puppet-managed file /etc/security/limits.conf
    Is this ok [y/N]: y
      Updating       : pam                                                                                                                                     1/4
      Updating       : pam                                                                                                                                     2/4
      Cleanup        : pam                                                                                                                                     3/4
      Cleanup        : pam                                                                                                                                     4/4

    Updated:
      pam.i386 0:0.99.6.2-12.el5                                                    pam.x86_64 0:0.99.6.2-12.el5

    Complete!

Il plugin stesso può essere trovato nel mio repository di hacking di github .


Aggiornamento dell'8 novembre 2013:

Come accennato nei commenti, ora ho trasformato questo in un progetto più ampio per migliorare l'interazione tra Yum e Puppet. Lo puoi trovare su GitHub .


È adorabile. Spero sicuramente che sapesse ignorare le cose di% config (noreplace), dal momento che quelle non verranno effettivamente sovrascritte.
freiheit,

Sì, ho intenzione di aggiungerlo, e molto altro ancora. Questa domanda mi ha dato molte idee :)
Dennis Kaarsemaker,

Wow ! Sei andato davvero oltre la chiamata del dovere qui. Sono impressionato. Questo è esattamente ciò che la mia domanda stava cercando di rispondere. Stavo pensando a uno script di shell ma questo è molto meglio! Ora, ho installato il tuo plugin in yum, ma non caricherà il plugin fantoccio. Qualche idea sul perché? Vedo il file .pyc, ma nessun file .pyo come rhnplugin e security ha
Brian

Non importa, ho dovuto installare PyYAML.
Brian,

È possibile aggiungere una licenza software?
Brian,

2

Sì, è possibile ma non si riferisce al Puppet stesso.

I sistemi Linux supportano il meccanismo di inotify che "può essere usato per monitorare e agire sugli eventi del filesystem". Inoltre inotify-toolsc'è anche un incronprogramma che funziona in modo simile a cron ma reagisce agli eventi del file system. Penso che potresti usarlo per ricevere notifiche sulla modifica di qualsiasi file.

(A proposito, se vuoi guardare un /etc/sysctl.conffile che ti consiglio di controllare prima di farlo - il tuo Linux ha il supporto per la /etc/sysctl.ddirectory?)


0

Non conosco un modo per implementare tali notifiche. Potrebbe essere possibile impostare qualcosa mettendo in scena la transazione yum, determinando l'elenco dei file di configurazione che potrebbero essere interessati e quindi controllando se un pupazzo ne gestisce uno.

Tuttavia, in generale non è buona norma gestire un file che verrà aggiornato da un pacchetto. Nel caso dei file di configurazione (utilizzare rpm -qlc nomepacchetto per vedere se sono contrassegnati come tali), se il pacchetto contiene una nuova versione viene salvato come nomefile.rpmnew. Si viene quindi lasciati sui propri dispositivi per unire le modifiche necessarie.

Abbiamo riscontrato un problema in cui un file di configurazione è stato rimosso da Puppet e quindi sostituito da Yum quando il pacchetto è stato aggiornato. Ciò ha causato problemi fino alla successiva esecuzione di marionette rimossa il file. La nostra soluzione alternativa per quella situazione era di impostare il contenuto del file "rimosso" su un commento, in modo che sia essenzialmente vuoto. Un altro modo per gestirlo sarebbe tentare di garantire che il pacchetto ['a'] -> File ['/ etc / a'] in modo che sia necessaria una sola esecuzione di marionette.


Ho provato a trovare alcune best practice su Puppet che dicono "non è buona norma gestire un file che verrà aggiornato da un pacchetto". Gestisco sysctl.conf soprattutto perché ci sono impostazioni in quel file che mi servono per l'esecuzione di determinate applicazioni. Qual è l'alternativa allora?
Brian,

1
È assolutamente bene gestire configurazioni con pupazzi che yum vuole anche toccare. Gli RPM generalmente non toccheranno i file di configurazione personalizzati e, anche in questo caso, il pupazzo ripristinerà i tuoi contenuti.
Dennis Kaarsemaker,

I file di configurazione verranno aggiornati da RPM / yum se non esistono. Non è (in genere) una buona pratica usare le marionette per modificare altri file nel pacchetto, perché le modifiche potrebbero compromettere la funzionalità. Immagino che sarebbe stato meglio dire "modifica" piuttosto che "gestisci" nella mia risposta poiché la gestione può garantire autorizzazioni adeguate. Se si desidera modificare file che non sono file di configurazione, è necessario implementare una sorta di blocco o esclusione della versione per garantire che i pacchetti vengano aggiornati su richiesta, non automaticamente. In questo modo è possibile controllare l'intero processo di aggiornamento.
jdkindy,


@ 0A0D: Grazie, questo è il comportamento di cui parlavo. Vorrei avere abbastanza rappresentante per commentare il post di Dennis Kaarsemaker - questo è l'inizio di una soluzione elegante. Inoltre, le directory di configurazione ".d" (annotate da php-coder) sono molto facili da implementare in puppet se il pacchetto le supporta.
jdkindy,
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.