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.