Uma linguagem específica de domínio faz uma grande diferença na quantidade de código que você escreve. Por exemplo, você pode argumentar que não há muita diferença entre:
chmod 640 /my/file
e
file { "/my/file":
mode => 640,
}
mas há muita diferença entre estes:
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"
e
file { "/my/file":
mode => 640,
owner => foo,
group => bar,
content => "Hello world",
}
O que acontece se o wget falhar? Como seu script lidará com isso? E o que acontece se houver algo depois disso em seu script que exija que $ FILE esteja lá com o conteúdo correto?
Você pode argumentar que é possível simplesmente inserir echo "Hello world" > $FILE
o script, exceto que, no primeiro exemplo, o script deve ser executado no cliente, enquanto o puppet compila tudo isso no servidor. Portanto, se você alterar o conteúdo, precisará alterá-lo apenas no servidor e para todos os sistemas que desejar. E o fantoche lida com dependências e transfere problemas automaticamente para você.
Simplesmente não há comparação - as ferramentas de gerenciamento de configuração adequadas economizam tempo e complexidade. Quanto mais você tenta fazer, mais scripts de shell parecem inadequados e mais esforço você economizará ao fazê-lo com o fantoche.