Un linguaggio specifico del dominio fa una grande differenza nella quantità di codice che scrivi. Ad esempio, potresti sostenere che non c'è molta differenza tra:
chmod 640 /my/file
e
file { "/my/file":
mode => 640,
}
ma c'è una grande differenza tra questi:
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",
}
Cosa succede se la wget fallisce? Come lo gestirà la tua sceneggiatura? E cosa succede se nel tuo script c'è qualcosa che richiede $ FILE per essere lì con i contenuti corretti?
Si potrebbe obiettare che si potrebbe semplicemente inserire echo "Hello world" > $FILE
lo script, tranne che nel primo esempio lo script deve essere eseguito sul client, mentre il pupazzo compila tutto questo sul server. Quindi, se cambi il contenuto, devi solo cambiarlo sul server e lo cambia per tutti i sistemi su cui vuoi metterlo. E il burattino gestisce le dipendenze e trasferisce automaticamente i problemi.
Non c'è paragone: strumenti di gestione della configurazione adeguati consentono di risparmiare tempo e complessità. Più si tenta di fare, più script di shell sembrano inadeguati e maggiore sarà lo sforzo che si risparmia facendolo con le marionette.