Puppet is the widest software right now, mainly for the buzz that Puppetlabs does. It's a solid solution, but it has some drawbacks (it evolves quickly, lots of changes in the language). Also some weird syntax constructs are kinda crazy (spaceship operator and others).
There are other solutions as well:
Chef has a little bit cleaner syntax, it is pure ruby syntax (DSL) while Puppet has it's own parser. I would say that companies that deploys web applications tend to like Chef more than Puppet, but this is not a generic rule.
CF Engine is old and fast solution that is written in C (or C++ I dont remember). It's rather academic project, but very powerful and also performs well.
Ansible is a new project by ex-Puppetlabs guy (also ex-Red Hat) which is interesting and you should also check. It has some design similarities and also differences with Puppet, it has clean (YAML) based manifest syntax (not a language) and it is written in Python. It is push based, but it is possible to configure messaging with it.
More tools - there are more tools, but these are the major players. Folks will definitely put other things on my (personal) list. I only gave you tips for software I played with.
Sidenote: I'd recomend Foreman project, which is a nice GUI interface for Puppet (and Chef) with provisioning support (bare-metal, virtualization, cloud) and monitoring: http://www.theforeman.org