Ansible is agentless, making it quick and painless to setup. Ansible has clear and detailed documentation and provides plenty of built-in modules. Its DSL is obtained using YAML and a familiar template system.
Ansible is still relatively new, as far as server automation tools go. This is the reason that many users have found it's documentation lacking in some parts. Although this is mitigated by the fact that it's very easy to learn to use.
Puppet forge has Forge for modules, Chef has Marketplace for recipes Both repositories contain a lot of high quality modules/recipes that one can use straight out of the box. Ansible has Galaxy, but amount and quality of play books there does not compare to the above tools. Hopefully this will cha...
Chef has a relatively large community. One of the reasons for it is the fact that it's a pretty old and mature tool. Chef, originally released in 2009, is a more mature product. Being popular and with a large and dedicated community means that Chef has lots and lots of resources and guides from
Chef has a steeper learning curve than many of its competitors, making it a more difficult tool for the non-devs of a team (such as sysadmins) to work with. For some teams, the added cost of teaching Chef to the team may outweigh the benefits.
Chef is written in Ruby and its CLI uses a Ruby-based DSL. In order to fully use and customize it you need to use Ruby as Chef does not give users any other choice when it comes to languages to use to configure it.
Puppet is very mature and relatively old. This means that it has gathered quite a following over the years. This large community means that there are a lot of modules, guides and configuration recipes ready to use built by the community.