Специфичный для домена язык имеет большое значение в количестве кода, который вы пишете. Например, вы можете утверждать, что нет большой разницы между:
chmod 640 /my/file
а также
file { "/my/file":
mode => 640,
}
но есть большая разница между ними:
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"
а также
file { "/my/file":
mode => 640,
owner => foo,
group => bar,
content => "Hello world",
}
Что произойдет, если wget потерпит неудачу? Как ваш сценарий справится с этим? И что произойдет, если после этого в вашем скрипте будет что-то, что требует наличия $ FILE с правильным содержимым?
Вы можете утверждать, что можно просто вставить echo "Hello world" > $FILE
сценарий, за исключением того, что в первом примере сценарий должен выполняться на клиенте, тогда как puppet компилирует все это на сервере. Поэтому, если вы изменяете контент, вам нужно всего лишь изменить его на сервере, и он изменит его на столько систем, сколько вы захотите. И кукольный автоматически обрабатывает зависимости и проблемы для вас.
Сравнения просто нет - правильные инструменты управления конфигурацией экономят ваше время и сложность. Чем больше вы пытаетесь сделать, тем больше сценариев оболочки кажутся неадекватными, и тем больше усилий вы сэкономите, делая это с puppet.