Provocarea. Chiar daca la prima vedere pare trivial, pastrarea unei configurari corecte a sistemelor este extrem de importanta. Indiferent de rolul lor – medii de dezvoltare software, teste de regresie, servere de productie etc – este vital ca fiecare sistem sa fie configurat corect pentru a produce rezultate bune.
Solutia naiva. Abordarea clasica consta in dezvoltarea unor scripturi si utilizarea unor fisiere de configurare care sa asigure buna functionare a sistemelor. Este o solutie eficienta din punct de vedere al costurilor atunci cand vorbim de situatii simple: cateva sisteme pe care ruleaza un numar scazut de servicii. Insa, din pacate, aceasta solutie nu este scalabila. Pe masura ce adaugam mai multe servicii, scripturile devin mai complexe si interdependente si acest lucru le face mai greu de coordonat. Adaugarea unei noi functionalitati sau debuggingul unui script care nu functioneaza va ocupa din ce in ce mai mult timp. Acelasi lucru este valabil si atunci cand sunt adaugate alte sisteme. Apare nevoia unui sistem centralizat de management, monitorizare si raportare.
Solutia smart. Aici intervin instrumentele de management al configurarii. Sunt destul de multe optiuni pe care le aveti la dispozitie (CFengine, Chef, Puppet) si toate se bazeaza pe 2 idei majore. In primul rand, trebuie sa avem un limbaj declarativ care sa descrie cat mai exact starea in care vrem sa fie sistemul, intr-un mod uniform. Cu alte cuvinte, vom spune unde vrem sa ajungem, nu cum vom ajunge acolo. Stabilim o “destinatie” si programul pe care il folosim se ocupa de “calatorie”. In al doilea rand trebuie sa avem un management centralizat. Un “master” va fi responsabil de monitorizarea sistemului si implementarea configurarii corecte, daca este nevoie.
Puppet. Puppet este o solutie relativ noua pe piata dar a carei popularitate creste datorita flexibilitatii si usurintei cu care poate fi invatata. Este scrisa in limbajul Ruby si are propriul limbaj declarativ. Aceasta solutie se bazeaza pe resources (resurse) si manifests (manifeste). Intelegerea acestor 2 concepte te ajuta sa descoperi filozofia din spatele Puppet.
Resurse. Aproape fiecare aspect al unui sistem – fisiere, utilizatori, pachete, servicii – este vazut ca o resursa. Asta inseamna ca descrierea unei resurse este separata de implementarea ei. Acest lucru este obtinut prin modelarea starilor pe care o resursa le poate avea. Spre exemplu, sa spunem ca vrem ca un serviciu sa “ruleze” fara sa stim care este comanda de pornire a serviciului respectiv. Pornirea lui “apache2” este extrem de simpla, trebuie doar sa introduceti urmatoarea comanda:
puppet resource service apache2 ensure=running
Chiar daca diferite distributii Linux au modalitati diferite de a porni un serviciu, acest lucru nu conteaza aici. Solutia Puppet se ocupa de toate aceste aspecte de backend. Mai mult decat atat, putem folosi aceeasi comanda pe diferite sisteme de operare – Linux si Windows, spre exemplu. Pentru listarea tuturor resurselor pe care Puppet le poate prelua putem sa folosim comanda “puppet describe”. Pentru inspectarea atributelor specifice pe care un tip de resursa le poate avea putem sa folosim comanda (e.g. “puppet describe service”).
Manifeste. Daca vrem configuratii persistente, trebuie sa stocam definitiile resurselor in fisiere denumite manifeste. Acestea contin definitii scrise folosind limbajul declarativ Puppet, cu o sintaxa similara cu cea a limbajului Ruby. Nu trebuie sa listam toate atributele posibile pentru o resursa. Fiecare atribut are o valoare implicita care va fi folosita daca nu vrem sa declaram ceva in mod specific. Spre exemplu, definim utilizatorul “luxoft” cu directorul home in “/home/luxoft” si default shell in “/bin/bash”:
user { “luxoft”:
ensure => present,
home => “/home/luxoft”,
shell => “/bin/bash”,
}
Manifestul poate fi “executat” prin comanda “puppet apply”. Daca l-am salvat intr-un fisier denumit “luxoft.pp”, vom rula “puppet apply luxoft.pp”. Sau putem sa folosim Puppet pentru a-l rula periodic asigurandu-ne astfel ca utilizatorul este prezent mereu.
Evolutie. Putem sa folosim Puppet si pentru scenarii mai complexe. Resursele pot depinde una de alta si pot fi parametrizate cu templateuri. De asemenea putem sa generam rapoarte pe care le putem vizualiza utilizand un dashboard web.
Referinte. Puteti sa gasiti mai multe informatii pe webisiteul Puppet Labs. Tot aici puteti gasi si o platforma online de learning precum si o masina virtuala unde puteti sa exersati.