Slightly off-topic, but what exactly is the difference between Puppet and Chef? How do they differ?
I personally prefer Puppet because there's generally one way to do things, while it also allows you to extend the resources and functions available by falling back to custom written Ruby libraries.
The Puppet 'code' looks pretty basic and is all generally derived from the core resource types defined here: http://docs.puppetlabs.com/references/latest/type.html
You will also see some examples of what defined resources might look like there.
They are both quite similar in their goals, I have used both, but found Chef to be more user friendly and with a more vibrant community.