Un langage spécifique à un domaine fait une grande différence dans la quantité de code que vous écrivez. Par exemple, on pourrait dire 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 une grande différence entre les deux :
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 gérera-t-il cela ? Et que se passe-t-il s'il y a quelque chose après cela dans votre script qui nécessite que $FILE soit là avec le bon contenu ?
On pourrait dire qu'on pourrait simplement mettre echo "Hello world" > $FILE
dans 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 il le modifie pour autant de systèmes que vous voulez mettre. Et Puppet gère automatiquement les dépendances et les problèmes de transfert pour vous.
Il n'y a tout simplement pas de comparaison possible - les outils de gestion de la configuration appropriés vous font gagner du temps et de la complexité. Plus vous essayez de faire, plus les Shell Shell semblent inadéquats, et plus vous économiserez d'efforts en le faisant avec Puppet.