Một ngôn ngữ dành riêng cho tên miền tạo ra sự khác biệt lớn về số lượng mã bạn viết. Ví dụ: bạn có thể lập luận rằng không có nhiều khác biệt giữa:
chmod 640 /my/file
và
file { "/my/file":
mode => 640,
}
nhưng có rất nhiều sự khác biệt giữa những điều này:
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"
và
file { "/my/file":
mode => 640,
owner => foo,
group => bar,
content => "Hello world",
}
Điều gì xảy ra nếu wget thất bại? Kịch bản của bạn sẽ xử lý như thế nào? Và điều gì xảy ra nếu có gì đó sau đó trong tập lệnh của bạn yêu cầu $ FILE ở đó với nội dung chính xác?
Bạn có thể lập luận rằng người ta chỉ có thể đưa echo "Hello world" > $FILE
vào tập lệnh, ngoại trừ trong ví dụ đầu tiên, tập lệnh phải được chạy trên máy khách, trong khi con rối biên dịch tất cả điều này trên máy chủ. Vì vậy, nếu bạn thay đổi nội dung, bạn chỉ phải thay đổi nội dung trên máy chủ và nó sẽ thay đổi nội dung cho nhiều hệ thống mà bạn muốn đưa vào. Và con rối xử lý các phụ thuộc và chuyển vấn đề cho bạn tự động.
Không có so sánh - các công cụ quản lý cấu hình phù hợp giúp bạn tiết kiệm thời gian và độ phức tạp. Bạn càng cố gắng thực hiện, các kịch bản shell càng có vẻ không đủ, và bạn sẽ tiết kiệm được nhiều nỗ lực hơn bằng cách thực hiện với con rối.