The founder of Infrastructure-as-Code, started as a personal Ruby project and became Enterprise. Nowadays Puppet is both available as opensource and an enterprise edition. The core capability (Puppet agent) still delivers great Configuration management by describing your system configuration using Puppet declarative language. All this code about your desired state is stored in the Puppet manifest files and can be versioned in a Git repository. The enterprise edition delivers even more capabilities, which really aims at compliancy and visibility. If you are interested in learning Puppet you can always download the Puppet LearningVM.
In the past many engineers used Ansible to deploy their Puppet agents, funny isn’t it? Great advantage of Ansible is that is not using any agent, but instead uses standard interfaces like SSH and is based on Python, which is almost available at all *ux distros. Simplicity and high compatibility makes it popular and around 2015 many engineers chose Ansible over Puppet because of this. End 2015 Redhat bought Ansible and made it part of their portfolio. As mentioned before, Ansible is based on Python language and describes the system configuration in playbooks. These playbooks are written as YAML files. Targets are also defined in files, based on directory structured ini files. Because of this agentless approach Ansible can also be used to automate you network equipment. For these capabilities additional modules are available like from Arista, F5, Cisco till Juniper. Also Ansible delivers an enterprise version, which is called Ansible Tower. Main advantages are the graphical interface and full enterprise support like access control, workflows, reporting and API access.
Cloud Foundry aka CFEngine