Język specyficzny dla domeny robi dużą różnicę w ilości pisanego kodu. Na przykład możesz argumentować, że nie ma dużej różnicy między:
chmod 640 /my/file
i
file { "/my/file":
mode => 640,
}
ale między nimi jest duża różnica:
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"
i
file { "/my/file":
mode => 640,
owner => foo,
group => bar,
content => "Hello world",
}
Co się stanie, jeśli wget się nie powiedzie? Jak twój skrypt sobie z tym poradzi? A co się stanie, jeśli w twoim skrypcie jest coś, co wymaga $ FILE, aby był tam z poprawną zawartością?
Można argumentować, że można po prostu wstawić echo "Hello world" > $FILE
skrypt, z wyjątkiem tego, że w pierwszym przykładzie skrypt musi zostać uruchomiony na kliencie, podczas gdy puppet kompiluje to wszystko na serwerze. Jeśli więc zmienisz zawartość, musisz ją tylko zmienić na serwerze i zmieni się ona na tyle systemów, ile chcesz ją zainstalować. A kukiełka automatycznie obsługuje zależności i przenosi problemy.
Po prostu nie ma porównania - odpowiednie narzędzia do zarządzania konfiguracją oszczędzają czas i złożoność. Im więcej próbujesz zrobić, tym więcej skryptów powłoki wydaje się niewystarczających i tym więcej wysiłku zaoszczędzisz, robiąc to z marionetką.