Why not use XML or YAML as the configuration format? Why not use Ruby as the input language?
The language used for manifests is ultimately Puppet’s human interface, and XML and YAML, being data formats developed around the processing capabilities of computers, are horrible human interfaces. While some people are comfortable reading and writing them, there’s a reason why we use web browsers instead of just reading the HTML directly. Also, using XML or YAML would limit any assurance that the interface was declarative — one process might treat an XML configuration differently from another. As for just using Ruby as the input format, Puppet 2.6.0 actually added this functionality, and manifests can now be written in pure Ruby. However, this capability should be used carefully and avoided where possible: the full grammar of Ruby is often too much functionality, and we believe systems administrators should be able to model their datacenters in a higher-level system. Writing manifests in the Puppet DSL and separating needed Ruby extensions out into redistributable custom functions, f