Puppet where among the first solutions to support orchestration of slaves from a central management server coined puppet master. It requires that slave nodes (servers) run a puppet slave service allowing it to pull definitions from the central server abut the desired state of the current machine. This means that the puppet master-slave relationship operates like a traditional server-client structure.
Puppet is an open source configuration management utility. It runs on many Unix-like systems as well as on Microsoft Windows, and includes its own declarative puppet language baked by ruby and ruby templates to describe system configuration.
In case you are using puppet I recommend trying out geppetto which is an eclipse-based dedicated IDE for developing and maintaining puppet infrastructure code.
Unlike the above Ansible does not require a slave service to be installed on slaves as these are managed using SSH protocol making Ansible operate as a push service. With no slave service to install the complexity of setting up a solution is minimized as only a master service is required.
Ansible is great when it comes to automating manual processes that are expressed as recipes to follow. Ansible will be able to help in case you have a step-by-step guide that you follow to obtain a certain goal – say install a new release of the software on your local server infrastructure.
Ansible is an open-source software platform for configuring and managing computers. It combines multi-node software deployment, ad hoc task execution, and configuration management. It manages nodes over SSH or PowerShell and requires Python to be installed on them. Modules work over JSON and standard output and can be written in any programming language. The system uses YAML to express reusable descriptions of systems.
When considering solution for automation ensure that you understand the pros and cons of the individual solutions. Puppet scales better than Ansible due to the client-server architecture. For task based requirements Ansible has the edge. In general Puppet requires more infrastructure in order to get up-and-running compared to Ansible.
If you have a conceptual knowledge of both you can even combine these tools and harvest the best of both.