Benachrichtigung, wenn eine von Puppet gesteuerte Datei von Yum geändert wird
13
Ist es möglich, eine Benachrichtigung auf der Konsole zu erhalten, wenn ein Paket, das eine von Puppet gesteuerte Datei enthält, diese Datei ändern wird? Bedeutet das, in yum, wenn yum update ausgeführt wird, ist es möglich, eine benutzerdefinierte Warnung einzufügen?
Yum unterstützt Plugins, daher ist es durchaus möglich, ein Plugin zu schreiben, das das zwischengespeicherte Puppenmanifest liest und warnt, wenn eine Transaktion eine puppengesteuerte Datei überschreibt. Mir ist kein vorhandenes Plugin bekannt, das dies tut, aber ich werde wahrscheinlich nur eines selbst schreiben, da mir die Idee gefällt.
Das Plugin überprüft alle neu installierten / aktualisierten / herabgestuften Pakete, teilt Ihnen mit, welche Puppet-verwalteten Dateien überschrieben werden, und fordert Sie zur Bestätigung auf.
[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!
Wie in den Kommentaren angedeutet, habe ich dies nun zu einem größeren Projekt gemacht, um die Interaktion zwischen Yum und Puppet zu verbessern. Sie finden es auf GitHub .
Das ist schön. Ich wünschte, es würde% config (noreplace) ignorieren, da diese eigentlich nicht überschrieben werden.
freiheit
Ja, ich habe vor, das und noch viel mehr hinzuzufügen. Diese Frage gab mir viele Ideen :)
Dennis Kaarsemaker
Wow ! Du bist hier wirklich über die Pflicht hinausgegangen. Ich bin beeindruckt. Genau das wollte meine Frage beantworten. Ich dachte an ein Shell-Skript, aber das ist viel besser! Jetzt habe ich dein Plugin in yum installiert, aber das Puppet-Plugin wird nicht geladen. Irgendeine Idee warum? Ich sehe die .pyc-Datei, aber keine .pyo-Datei wie Rhnplugin und Sicherheit haben
Brian
Trotzdem musste ich PyYAML installieren.
Brian
Können Sie eine Softwarelizenz hinzufügen?
Brian
2
Ja, es ist möglich, aber es hat nichts mit der Puppe selbst zu tun.
Linux-Systeme unterstützen den Inotify- Mechanismus, mit dem "Dateisystemereignisse überwacht und darauf reagiert werden können". Daneben inotify-toolsgibt es auch ein incronProgramm, das ähnlich wie cron arbeitet, aber auf Dateisystemereignisse reagiert. Ich denke, dass Sie es verwenden können, um über das Ändern einer Datei benachrichtigt zu werden.
(Übrigens, wenn Sie /etc/sysctl.confDateien ansehen möchten, schlage ich vor, dies vorher zu überprüfen - unterstützt Ihr Linux /etc/sysctl.dVerzeichnisse?)
Ich kenne keine Möglichkeit, solche Benachrichtigungen zu implementieren. Es kann möglich sein, etwas einzurichten, indem Sie die yum-Transaktion bereitstellen, die Liste der möglicherweise betroffenen Konfigurationsdateien ermitteln und dann überprüfen, ob Puppet eine dieser Dateien verwaltet.
Im Allgemeinen ist es jedoch nicht ratsam, eine Datei zu verwalten, die von einem Paket aktualisiert wird. Bei Konfigurationsdateien (verwenden Sie rpm -qlc Paketname, um festzustellen, ob sie als solche gekennzeichnet sind) wird das Paket, wenn es eine neue Version enthält, unter dem Namen filename.rpmnew gespeichert. Sie bleiben dann auf Ihren eigenen Geräten, um alle erforderlichen Änderungen zusammenzuführen.
Wir sind auf ein Problem gestoßen, bei dem eine Konfigurationsdatei von puppet entfernt und dann durch yum ersetzt wurde, als das Paket aktualisiert wurde. Dies verursachte Probleme, bis der nächste Puppenlauf die Datei entfernte. Unser Workaround für diese Situation bestand darin, den Inhalt der "entfernten" Datei auf einen Kommentar zu setzen, so dass er im Wesentlichen leer ist. Eine andere Möglichkeit wäre es, sicherzustellen, dass Paket ['a'] -> Datei ['/ etc / a'] so ist, dass nur ein Puppenspiel benötigt wird.
Ich habe versucht, einige bewährte Vorgehensweisen für Puppet zu finden, die besagen, dass es nicht empfehlenswert ist, eine Datei zu verwalten, die von einem Paket aktualisiert wird. Ich verwalte sysctl.conf besonders, weil es Einstellungen in dieser Datei gibt, die ich brauche, damit bestimmte Anwendungen ausgeführt werden. Was ist dann die Alternative?
Brian
1
Es ist absolut in Ordnung, Configs mit Puppets zu verwalten, die auch von Yum angefasst werden sollen. RPM wird im Allgemeinen keine angepassten Konfigurationsdateien berühren, und selbst wenn dies der Fall ist, stellt Puppet Ihren Inhalt wieder her.
Dennis Kaarsemaker
Konfigurationsdateien werden nur von RPM / yum aktualisiert, wenn sie nicht vorhanden sind. Es ist (im Allgemeinen) nicht empfehlenswert, Puppet zu verwenden, um andere Dateien im Paket zu bearbeiten, da Ihre Änderungen die Funktionalität beeinträchtigen können. Ich denke, es wäre besser gewesen, in meiner Antwort "Bearbeiten" als "Verwalten" zu sagen, da das Verwalten die richtigen Berechtigungen sicherstellen kann. Wenn Sie Dateien bearbeiten möchten, die keine Konfigurationsdateien sind, sollten Sie auch eine Art Versionssperre oder -ausschluss implementieren, um sicherzustellen, dass Pakete bei Bedarf und nicht automatisch aktualisiert werden. Auf diese Weise können Sie den gesamten Aktualisierungsprozess steuern.
@ 0A0D: Danke, das ist das Verhalten, von dem ich gesprochen habe. Ich wünschte, ich hätte genug Repräsentanten, um Dennis Kaarsemakers Post zu kommentieren - das ist der Beginn einer eleganten Lösung. Außerdem sind die Konfigurationsverzeichnisse ".d" (von php-coder notiert) sehr einfach in puppet zu implementieren, wenn das Paket sie unterstützt.
Ja, es ist möglich, aber es hat nichts mit der Puppe selbst zu tun.
Linux-Systeme unterstützen den Inotify- Mechanismus, mit dem "Dateisystemereignisse überwacht und darauf reagiert werden können". Daneben
inotify-tools
gibt es auch einincron
Programm, das ähnlich wie cron arbeitet, aber auf Dateisystemereignisse reagiert. Ich denke, dass Sie es verwenden können, um über das Ändern einer Datei benachrichtigt zu werden.(Übrigens, wenn Sie
/etc/sysctl.conf
Dateien ansehen möchten, schlage ich vor, dies vorher zu überprüfen - unterstützt Ihr Linux/etc/sysctl.d
Verzeichnisse?)quelle
Ich kenne keine Möglichkeit, solche Benachrichtigungen zu implementieren. Es kann möglich sein, etwas einzurichten, indem Sie die yum-Transaktion bereitstellen, die Liste der möglicherweise betroffenen Konfigurationsdateien ermitteln und dann überprüfen, ob Puppet eine dieser Dateien verwaltet.
Im Allgemeinen ist es jedoch nicht ratsam, eine Datei zu verwalten, die von einem Paket aktualisiert wird. Bei Konfigurationsdateien (verwenden Sie rpm -qlc Paketname, um festzustellen, ob sie als solche gekennzeichnet sind) wird das Paket, wenn es eine neue Version enthält, unter dem Namen filename.rpmnew gespeichert. Sie bleiben dann auf Ihren eigenen Geräten, um alle erforderlichen Änderungen zusammenzuführen.
Wir sind auf ein Problem gestoßen, bei dem eine Konfigurationsdatei von puppet entfernt und dann durch yum ersetzt wurde, als das Paket aktualisiert wurde. Dies verursachte Probleme, bis der nächste Puppenlauf die Datei entfernte. Unser Workaround für diese Situation bestand darin, den Inhalt der "entfernten" Datei auf einen Kommentar zu setzen, so dass er im Wesentlichen leer ist. Eine andere Möglichkeit wäre es, sicherzustellen, dass Paket ['a'] -> Datei ['/ etc / a'] so ist, dass nur ein Puppenspiel benötigt wird.
quelle