Un lenguaje específico de dominio hace una gran diferencia en la cantidad de código que escribe. Por ejemplo, podría argumentar que no hay mucha diferencia entre:
chmod 640 /my/file
y
file { "/my/file":
mode => 640,
}
pero hay una gran diferencia entre estos:
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"
y
file { "/my/file":
mode => 640,
owner => foo,
group => bar,
content => "Hello world",
}
¿Qué sucede si el wget falla? ¿Cómo manejará eso tu script? ¿Y qué pasa si hay algo después de eso en su script que requiere que $ FILE esté allí con el contenido correcto?
Podría argumentar que uno podría simplemente poner echo "Hello world" > $FILE
el script, excepto que en el primer ejemplo el script debe ejecutarse en el cliente, mientras que Puppet compila todo esto en el servidor. Entonces, si cambia el contenido, solo tiene que cambiarlo en el servidor y lo cambia para tantos sistemas como desee. Y Puppet maneja las dependencias y transfiere los problemas automáticamente.
Simplemente no hay comparación: las herramientas de administración de configuración adecuadas le ahorran tiempo y complejidad. Cuanto más intente hacer, más scripts de shell parecerán inadecuados y más esfuerzo ahorrará al hacerlo con títeres.