For my company's server infra automation I evaluated Chef, Puppet, Salt, Ansible, Fabric. The deciding factors for me were a stable software with a good ecosystem. I found that Puppet is much better than the rest when it comes to having an active community, but I like the scriptability, hackability and simplicity of Fabric. Chef was nice too but found it cumbersome to setup and write recipes compared to Puppet's module.
I wanted a masterless setup where there would be no central master so I use Puppet as a git repo with Fabric, where Fabric takes care of parallel ssh keys management with Gitlab (git hosting software, used internally) and deployments. I've added custom python modules to manage continuous deployment of code as well, I really like the basic command and programmable interfaces it offers, roles and just programming in Python. The whole setup thus uses a masterless Puppet (git) + Fabric, works on an exclusive private network across datacenters.