Does your company spend more time fixing machine configuration problems and repeatable tasks, than thinking about strategies to improve and bring more value to the customer?
What if one of the reasons that your company can not move to production more quickly is because of problems of this type?
And what if it becomes chaotic to pass a change in the local database on to production?
Or in fact… have you heard about problems that in development, in my environment, in someone’s computer, the code worked, but then in production, it doesn’t?
That’s where Puppet can help you, especially if you are focusing on DevOps.
What is Puppet?
Puppet is a tool created in 2005 by Luke Kanies and now maintained by his company PuppetLabs, which serves to manage system configurations in a simpler way, automating repeatable tasks. You can find this tool in two forms: open source, and commercial (Puppet Enterprise).
The good thing about Puppet is that the configurations of the machines can be established through code, writing them in the language of Puppet. This language also allows you to subtract yourself from the system settings, which are at a lower level. With it, you can describe the resources that a machine should have (users, groups, packages, files, programs, etc.), in what state they should be, and the relationships that exist between them, and Puppet will take care of the rest.
For example, you do not have to tell Puppet that you need Maven on that machine, and as a Linux machine, the command to install Maven is X. You only have to indicate that you need Maven installed, and Puppet will look under what operating system it is and shall act accordingly.
Making configuration easy
Because the configuration and relationships between the resources are written in code, you can know not only the configuration itself, but the reason for that configuration as well. Everything is simpler. In addition to that, you can save the settings written with Puppet in your version control repository, so that besides the advantages of version control, tools like Jenkins can access them.
This way, we can improve the process of continuous integration, being able to develop-test-deploy applications with the same configurations of the system.
Puppet is also commonly used along with another tool called Vagrant, to simulate testing environments. Vagrant is a tool for managing virtual machines. Once the configuration code of your production server has been created, you can create a virtual machine with Vagrant and Puppet will apply that configuration to you. Then, you can pass the virtual image to the people of development, testing, QA, to do tests or develop in a simulation of the production environment.
Approaches of this type can make organizations more flexible and help them adapt better to changes. In addition, they promote DevOps culture, which is why the tool is becoming more and more popular in DevOps companies.