Eine domänenspezifische Sprache macht einen großen Unterschied in der Menge des Codes, den Sie schreiben. Zum Beispiel könnte man argumentieren, dass es keinen großen Unterschied gibt zwischen:
chmod 640 /my/file
und
file { "/my/file":
mode => 640,
}
aber es gibt einen großen Unterschied zwischen diesen:
FILE=/my/file
chmod 640 $FILE
chown foo $FILE
chgrp bar $FILE
wget -O $FILE "http://my.puppet.server/dist/$FILE"
# where the URL contains "Hello world"
und
file { "/my/file":
mode => 640,
owner => foo,
group => bar,
content => "Hello world",
}
Was passiert, wenn der Wget ausfällt? Wie geht Ihr Skript damit um? Und was passiert, wenn es danach in Ihrem Skript etwas gibt, für das $ FILE mit dem richtigen Inhalt vorhanden sein muss?
Sie könnten argumentieren, dass man nur echo "Hello world" > $FILE
das Skript einfügen könnte , außer dass im ersten Beispiel das Skript auf dem Client ausgeführt werden muss, während Puppet dies alles auf dem Server kompiliert. Wenn Sie also den Inhalt ändern, müssen Sie ihn nur auf dem Server ändern, und er ändert sich für so viele Systeme, wie Sie möchten. Und Marionette handhabt Abhängigkeiten und Übertragungsprobleme für Sie automatisch.
Es gibt einfach keinen Vergleich - richtige Konfigurationsmanagement-Tools sparen Ihnen Zeit und Komplexität. Je mehr Sie versuchen, dies zu tun, desto mehr Shell-Skripte scheinen unzureichend zu sein, und desto mehr Aufwand sparen Sie, wenn Sie dies mit Puppet tun.
Dies wird eine unpopuläre Meinung sein, aber Konfigurationsmanagementsysteme sind nicht unbedingt besser. Manchmal ist einfach wirklich am besten.
Das von Ihnen gewählte Konfigurationssystem ist mit einer bestimmten Lernkurve und einem bestimmten Verwaltungsaufwand verbunden. Sie führen schließlich eine Abhängigkeit ein. Wie bei jeder Automatisierung müssen Sie auch bei implementierten Konfigurationen darauf achten, dass die Sicherheit gewährleistet ist.
Ich hatte nur ein paar Fälle, in denen wir das Konfigurationsmanagement bereitgestellt haben und es blieb hängen. Es gab immer eine große Anzahl von Systemen mit sich wiederholenden Konfigurationen und der Notwendigkeit, konfigurierbare Cookie-Cutter-Implementierungen durchzuführen.
quelle
Sie haben Ihre eigene Frage beantwortet ...
Die Automatisierung wird skalierbarer und formalisierter . Puppet und Chef gelten heutzutage als Standard (siehe Stellenanzeigen ).
Cobbled-Together-Shell-Skripte haben ihren Platz, sind jedoch im Kontext der DevOps-Bewegung nicht skalierbar. Die Lesbarkeit ist ein Teil davon.
quelle
Chef erleichtert die Verwaltung und Versionierung des Aufbaus einer komplexen Infrastruktur erheblich, insbesondere in jeder Art von Cloud-Umgebung, im Gegensatz dazu, dass eine Reihe von Shell-Skripten, die nicht standardisiert organisiert sind, manuell per FTP oder SCP ausgeführt werden müssen. Abhängig davon, wie viele Abhängigkeiten Sie verwalten müssen, kann die Größe dieses Gewinns sehr unterschiedlich sein, sodass die Entscheidung für eine CM-Lösung für viele Menschen nicht offensichtlich ist.
Der wahre (oft nicht gesungene) Vorteil von Chefkoch ist Idempotenz . Es ist ein enormer Vorteil gegenüber der Konfiguration von Shell-Skripten, den Status einer Ressource unabhängig von der Kombination von ausgeführten Rezepten mit überlappenden Interessen zu bestimmen. Wenn Sie jetzt Shell-Skripte zur Konfiguration haben, fragen Sie sich, wie viele von ihnen ohne unbeabsichtigte / unerwünschte Konsequenzen mehrmals ausgeführt werden können.
Eine geeignete CM-Lösung trägt dazu bei, den Erfolg in großem Maßstab sicherzustellen, indem sie die plattformübergreifende Automatisierung und die Teamzusammenarbeit vereinfacht. All dies kann mit einer gut organisierten, ordnungsgemäß verwalteten, versionierten Gruppe von Shell-Skripten erreicht werden. du musst dich fragen "warum". Chef / Puppet und ähnliche Technologien sind entstanden, weil eine Gruppe talentierter SysOps es satt hatte, dieselben Probleme immer wieder lösen zu müssen, und sich vorgenommen haben, uns eine bessere Option zu bieten.
Schlüsselstücke:
quelle
Moderne Konfigurationsmanagement-Tools wie Puppet und Chef ermöglichen es Ihnen, den Status eines Systems zu definieren , anstatt sich um die Aktivitäten zu kümmern, die zum Erreichen eines konfigurierten Servers erforderlich sind.
Bei Ihrem Befehl chmod wird beispielsweise davon ausgegangen, dass die Datei vorhanden ist, dass der Benutzer, der die Datei besitzt, vorhanden ist, dass die Verzeichnisse erstellt wurden usw. Ihr Skript muss daher alle diese Voraussetzungen berücksichtigen.
Tools für die zustandsbasierte Konfigurationsverwaltung sind einfacher: Es ist nur wichtig, dass die Datei über die richtigen Berechtigungen verfügt. Wie dies erreicht wird, ist das Problem des Werkzeugs.
quelle
chmod
nicht davon aus, dass die Datei existiert, weil sie entweder vom Skript erstellt oder auf Existenz geprüft wurde.Wenn Ihnen Server zur Verfügung stehen oder Sie mehr als ein Paar auf einmal ausstehen müssen, erfüllt ein vollständiges CM-System Ihre Anforderungen viel besser als eine Reihe von Shell-Skripten.
Wenn Ihre Build-Anforderungen bescheiden sind (oder Sie Bio-Fair-Trade-Server aus Freilandhaltung handwerklich herstellen möchten), halten Sie es einfach.
Persönlich habe ich Chef bei einem vergangenen Auftritt ausgiebig benutzt und versucht, es bei diesem Auftritt einfach zu halten, aber ich habe die Primitiven, Abstraktionen und die Kraft, die Chef bereitgestellt hat, wirklich vermisst. Selbst wenn Sie in eine Situation geraten, in der Sie mit ein paar Shell-Befehlen das bekommen, was Sie brauchen, können Sie diese einfach mit einem 'command'-Block ausführen und Ihre Shell-Befehle genau so eingeben, als würden Sie sie in Shell schreiben.
Vor diesem Hintergrund können Sie Chef ohne Server ausführen (Chef-Solo), und ich bin mir ziemlich sicher, dass Puppet über ein Analogon verfügt, bei dem Sie die Kochbücher und Rezepte anderer weiterhin nutzen können, ohne einen zentralen Server zu verwenden.
Ein weiterer Vorteil ist die Community: Es gibt viele Leute (von denen viele klüger und / oder erfahrener sind als Sie). Persönlich finde ich es toll, wenn jemand anders meine Arbeit für mich geleistet hat, oft umfangreicher als ich.
quelle
Ich habe ein Shell-Skript-basiertes Server-Automatisierungsframework erstellt: https://github.com/myplaceonline/posixcube
Ich bin mir sicher, dass ich nicht der erste bin, der ein solches Projekt realisiert, aber ich konnte so etwas nicht finden, dass es meinen Bedürfnissen entspricht. Deshalb dachte ich, dass andere dies nützlich finden könnten. Ich hatte nur Erfahrung mit Chefkoch, aber als ich anfing, mich bei Ansible und anderen umzuschauen, wollte ich Shell-Skripten eine Chance geben, und das Ergebnis gefällt mir bisher.
quelle