Puppet framework: manage your servers

I’ve written one post about problems in puppet that I faced. Now I found a bit time to describe what is it.
Generally, Puppet framework is a tool to administer your servers. There are three majour purposes I see it can be used for the moment:

* If you have plenty of servers and you want to have identical (or repeatable) configuration on them
* If you want to be sure your important files has particular owner and permissions
* If you want provide clear reports of what is installed on your servers for some assessor

The way it works is quite simple: there is master node with running daemon puppetmasterd, and on another nodes (puppets) it is running daemon puppetd, that runs under root account and fetches scripts changes from puppetmaster with predefined period. Thus it not takes lot of resources, meanwhile ensures that consistancy of your servers are in accordance with your scripts on puppetmaster server.
So, if you want to update configuration of one of your servers, you just add a script of what you want to install, or which files to change on puppetmaster server, and you don’t need to have access to all other servers.
What Puppet framework can do:

* It runs native commands on each of possible operational systems. So, f.ex. creation of users on different OS are different, but you write script in puppet scripting language, that incapsulates this differences, so you can be sure it will create user
* Installation and configuration packages remotely
* Manage permissions and owners of particular files (f.ex. you can install apache package and take control over configured apache.conf file)
* Manage processes. Puppet process ensures that process is running, if it not, it can start, stop, restart it. So, for instance, if you have database changes that require restart of the database daemon, it is possible to subscribe the process of the database to restart in case this or that file changed
* You can write your own, operational system dependent commands inside the cmd puppet script
* It contains basic reporting of what is installed on each of your servers (packages, users, files, files permissions, processes, etc)

One of the additional advantages is quite a good help for each metacommands, types, etc.
The disadbantates, as I wrote before is that it is written in ruby, and thus could be much faster, and it is using WEBRick with xmlrpc, that makes it timed out while transfering big files. The workaround for the last one is using Apache as web server (or any other light-weight file-server). But in this case you’ll have a disadvantage of getting files through some kind of tools like ‘curl’, so you’ll need to ensure that your OS has this additional tool installed.

Where to start: https://puppet.com/