Puppet is a configuration management tool for Unix-like and Microsoft Windows systems – which is basically provisioning automation i.e. the steps you want to preform on your freshly spawned virtual machine. Puppet uses declarative language for specification, and these configuration declaration files are termed as “Puppet manifests”. Puppet treats anything configurable as a “resource” i.e. file, service, package, user, cron, etc. The Puppet manifest is about describing the resources and their required states. Puppet gets the dynamic data (i.e. OS dependent) using Facter utility, for example Apache web server package is named ‘apache2’ in Ubunut, and ‘httpd’ for CentOS systems, Puppet allows variables in manifest (.pp file) to get such info on the fly, and set the right installation command.
Puppet is an open-source configuration management tool – for infrastructure orchestration, or automated provisioning, or configuration automation, and lot more. The simplest use case is for automated provisioning i.e. the tasks we need to perform once our machine/VM comes up for the first time (or even after it), like installing webserver, DB server, etc. Instead of manually performing the tasks/running the tasks we can use any of the available configuration management tools (like Puppet) to automate the boring repetitive tasks, and also making configuration consistent across all the servers.
First of all I want to address the biggest confusion here i.e. DevOps is not any tool, or technology, or some product one can use to make and do things better. DevOps is an idea, a management and operations approach – emphasizing on cohesiveness between development and operations teams. In simplest words, it’s about gluing the development and the IT operation hence the name DevOps:
- Dev – comes from development (developer/software engineers), people who make the system/software, and update it during it’s lifetime.
- Ops – from IT operations (sysadmins), who take care of the system once it’s developed, i.e. in production.
You’re a curios tech guy, who wants to test every new Linux package, or a tech blogger who has an impulsion to write a step-by-step guide for installation of a seemingly complex tool/software, or simply a developer who needs to test some new stack with all the operating system level dependencies, all you need is a lightweight, quickly up, portable development environment. The good news is we have Vagrant – a simple to use virtual machine management tool. With Vagrant setting up a fresh development sandbox is just a matter of few commands – at max 3 step process:
- Setup – download and install Vagrant – Installing Vagrant on CentOS 7.
- Configure – Create a single file i.e. ‘Vagrantfile’, to specify the specs for the virtual machine you want Vagrant to spawn, and run vagrant init <box-to-use>;
- Work – simply run ‘vagrant up‘, and a clean development environment will be there.