Да, на ruby.
Но все далеко не так просто.
puppet, chef, cfengine - описывают не действия, а состояние системы. И поддерживает это состояние в случае изменения на клиенте или в манифестах (терминология puppet).
Синтаксис не простенький -- chef использует собственно ruby, а вот puppet/cfengine свой внутренний DLS язык, конечно многое заимствованное от родного ruby/C++ .
С последних версий никто не запрещает использовать в "кукловоде" и сам ruby.
Обычно пляшут от сюда:
Но чем дальше в лес, тем более глубокие знания требуются в ruby. Всё зависит от сложности систем в парке. Я не знаток ruby, но приходилось писать простенькие факторки (опять терминология "кукловода"), для извлечения состояния сервисов на клиентах (Ноды).
P.S.: На серверах у меня CentOS, в связи с чем я говорю о 2.* версии "кукловода" и 1.8.* версии ruby. В Arch возможно, да и не маловероятно, что версия уже 3.* и 1.9.* соответственно.