A review from a user who maintains a lot of servers.
Use Cases and Deployment Scope
We host and manage 'a lot' of servers. Many years back without automation we used to run scripts to spin up servers and before that, we used to spend hours doing everything manually on bare metal servers. Once automation came in we initially started playing with Ansible to test the waters but what really grabbed our attention was the pull ability of the Puppet compared to the push ability of ansible that really got us into a Puppet. For example, when we were still new we had to push configs to each server, and if there is a change on the box we have to push it manually again to all the boxes. So this was not really scalable for us. That's where we started using Puppets. With puppets agents, all we had to do was maintain a code repo and Puppet will pull the configs from the repo. That was the one feature that we were looking for at that time.
Pros
- Puppet manages all our server's "state" so if there is an unauthorized change on the server then in a set interval puppet will run and reset the "state" of the server back to a good working condition. this helps us avoid unauthorized change and also maintains a healthy server.
- Puppet helps us keep a centralized repo of all the configs that we need to push to the endpoints. Spinning up new servers in AWS/VMWARE/AZURE is a breeze with Puppet.
- Puppet servers check into our central repo for changes on the code and if it finds any change it will immediately apply the change to the servers. So as admins we don't need to log in to any of the servers manually to make any changes.
Cons
- The setup of Puppet is a nightmare compared to ansible. Anyone watching a youtube video can easily set up ansible with minimal IT knowledge. All one needs is the source IP addresses and we are good to go. Setting up Puppet is a more hands-on task and pushing the puppet agents to all the boxes is another issue. If the installation and setup were simplified like ansible that would attract a lot of people to this platform
- The syntax of the code for Puppet is not as easy as ansible. Ansible simply follows a YAML format and it's like typing in normal English. Even complicated tasks can be written by just understanding YAML syntax. Perhaps Puppet needs to revisit the lanugage used and try to come up with a much simpler lanugage for writing code. This will make day-to-day usage easier.
Likelihood to Recommend
Puppet is the go-to tool if you are working in a static environment where changes are minimal. For instance, if you want to spin up 100 serves and then you just need to maintain it then puppet is the best tool for you. The reason I say that is because Puppet has a complicated syntax language (Ruby) you need to learn. So once a puppet code is written you can simply install the agents and make the agents talk to the master to check for changes. So maintaining an environment is easier. But if your environment is dynamic i.e it keeps changing every other day and you need to write a new config to spin up new devices, then ansible is the tool for you because writing a playbook on ansible is very easy.
