What is Puppet?

The puppet is a configuration management tool used by system administrators and devops engineers to build and configure IT infrastructure. To understand it we should know a bit of history about how information technology evolved.

Initials days of computers, machines are independent and time shared based with limited resources to work with. The DARPA aimed to develop a distributed network of computers which are independent of single point of failure to sustain attacks form USSR. They inter connected machines from different locations to communicate for reduction of single point of failure and effectively utilizing other system resources such as printers, scanners or for communicating with each other. From this idea networking of computers was evolved. What we are seeing as Internet today is all because of DARPA. And next version of internet is Internet of Things which started a decade back.

Sequence of things led to IoT:

Individual hosts
Network of computers
Internet
Internet of Things

Making most of the electronic devices intelligent is the work of IoT.  Where I work now we build smart water meters which are intelligent enough to detect overflows and leaks in water system and report to us on real-time.

Similarly naming of hosts in a network too have a similar story. Where initially people used hosts file to communicate with other machines effectively. That is the reason this file is present in Windows, Mac and  Linux as well. But as systems grows people came to a conclusion to implement centralizing naming for hosts as well and that is how Domain naming system came.

Sequence of things led to LDAP/AD:

Hosts files
DNS
LDAP/AD

If you see pattern, there was always accomplishing things locally in initial stages but at the end we have to improve by collaborating with other machines. “Team work is great when compared to Individual work”

Similarly system administration is no exception to this evolution. As systems grow in number, the demand for system administration grows but they are limited by many short comings. Till cfengine(The first configuration management and orchestration tool) came no one  thought about centralizing system administration. Most of system administration work is local to a machine by editing a configuration file or starting a service or even installing an application.  Some Sr. Admins depends on some scripting languages to automate some of the system tasks using Shell and now a days with Python/Ruby/Go etc. If you are Python person in to system administration by this time you should know fabric.

Sequence led to centralized system administration:

Developers take care of system management
Specialized system managers came to existence(aka Sysad's).
Administrators started using scripting to automate simple tasks.
Centralized system administration(cfengien, Puppet, Ansible, chef, salt etc).

Why we need configuration management tools?

As a system administrator our job is a tedious one with repetitive tasks. As infrastructure grows these tedious tasks will take a big chunk of our time. This is where automation comes in to picture. Many people started using scripting languages like Shell scripting, Perl scripting, Python scripting, Ruby, PHP or even new language Go to automate repeated tasks. But our infrastructure growth did not stopped to just couple of 100 machines and growing exponentially with the advent of Cloud. This is where we require centralized configuration management tools like Puppet and Ansible. These tools allows us to configure any server or even multiple servers remotly and with ease. This is a kind of big brother to fabric module in Python. Below are some advantages.

Saves the time,
Repetitive task removal at a large scale.
Can work in homogeneous environments.

With puppet like tools we can build entire infrastructure without manual intervention in hours time which normally takes weeks or even months to set-up with huge financial inputs.

Ok what are disadvantages of scripting?

A scripting language can be used to automate simple to medium tasks but if you want to build complete infrastructure we have to take help from configuration management tools which can talk to different parts of an infrastructure. As these tools implemented different modules to talk to different parts of IT infra structure.

Why we require puppet?

Though cfengine is the first configuration tool it did not capture market. Puppet did that and most companies uses it now. But from my experience puppet is good for devops and Ansible is good for system administrators.

Who developed Puppet?

Luke Kanies is a system admin who thought scripting is limiting factor to automate system admin tasks and developed puppet as an open source project.

Whom puppet is meant for?

Puppet is meant for all the people who like to automate infrastructure tasks(devops) or orchestration tasks(sysops).

Where we can/can not use Puppet?

Ok, is puppet/Ansible only solution for system administration? The answer is no. There are still some tasks which we have to depend on manual system administration or scripting.

Is puppet/Ansible is only path to system admins?

Partially yes, IT is evolving and if you do not change your system administration skills you will be last in the row.

In our next post we will see how puppet works, again that will be an intro to Puppet. Keep looking at this space for more Puppet updates.