Un langage spécifique à un domaine fait une grande différence dans la quantité de code que vous écrivez. Par exemple, vous pouvez affirmer qu'il n'y a pas beaucoup de différence entre:
chmod 640 /my/file
et
file { "/my/file":
mode => 640,
}
mais il y a beaucoup de différence entre ceux-ci:
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"
et
file { "/my/file":
mode => 640,
owner => foo,
group => bar,
content => "Hello world",
}
Que se passe-t-il si le wget échoue? Comment votre script va-t-il gérer cela? Et que se passe-t-il si quelque chose après cela dans votre script requiert que $ FILE soit présent avec le contenu correct?
Vous pourriez faire valoir que l'on pourrait simplement insérer echo "Hello world" > $FILE
le script, sauf que dans le premier exemple, le script doit être exécuté sur le client, alors que puppet compile tout cela sur le serveur. Ainsi, si vous modifiez le contenu, il vous suffit de le modifier sur le serveur et de le modifier pour autant de systèmes que vous le souhaitez. Et puppet gère automatiquement les dépendances et les problèmes de transfert.
Il n'y a aucune comparaison possible: des outils de gestion de la configuration appropriés vous font gagner du temps et de la complexité. Plus vous essayez de faire, plus les scripts shell semblent inadéquats, et plus vous économiserez des efforts en le faisant avec puppet.