Tutorial de păpuși pentru începători: Noțiuni de bază și DSL
⚡ Rezumat inteligent
Puppet este o platformă open-source de gestionare a configurației care automatizează modul în care serverele sunt furnizate, configurate și menținute consecvența. Aplică infrastructura ca și cod printr-un limbaj declarativ specific domeniului, înlocuind administrarea manuală repetitivă pe flote mari de servere.

Puppet este un instrument open-source de gestionare a configurației care vă permite să definiți infrastructura ca și cod și să mențineți flote mari de servere într-o stare consistentă și repetabilă. Înainte de a învăța Puppet, haideți să înțelegem mai întâi gestionarea configurației.
Ce este Managementul configurației?
Managementul configurației este procesul de menținere a software-ului și a sistemelor informatice - cum ar fi serverele, stocarea și rețelele - într-o stare cunoscută, dorită și consistentă. De asemenea, oferă acces la o înregistrare istorică precisă a stării sistemului în scopuri de management de proiect și audit.
Administratorii de sistem efectuează în mare parte sarcini repetitive, cum ar fi instalarea serverelor și configurarea acestora. Acești profesioniști pot automatiza această muncă prin scrierea de scripturi.
Totuși, aceasta devine o sarcină dificilă atunci când lucrează pe o infrastructură masivă. Instrumente de gestionare a configurației, cum ar fi Puppet, au fost introduse pentru a rezolva aceste probleme.
Ce este Puppet?
Marionetă este un instrument de gestionare a sistemului pentru centralizarea și automatizarea procesului de gestionare a configurației. Puppet este folosit și ca instrument de implementare software.
Este un software open-source de gestionare a configurației, utilizat pe scară largă pentru configurarea, gestionarea, implementarea și orchestrarea diverselor aplicații și servicii în întreaga infrastructură a unei organizații.
Puppet este special conceput pentru a gestiona configurația Linux și Windows sisteme. Este scris în Ruby și își folosește unicul Dprincipal Specific Llimba (DSL) pentru a descrie configurația sistemului.
Care sunt versiunile Puppet?
Puppet vine în două versiuni:
- Păpușă cu sursă deschisăEste o versiune de bază a instrumentului de gestionare a configurației Puppet, cunoscut și sub numele de Open Source Puppet. Este disponibil direct de pe site-ul web al Puppet și este licențiat sub sistemul Apache 2.0.
- Puppet EnterpriseO versiune comercială care oferă funcții precum raportarea conformității, orchestrarea, controlul accesului bazat pe roluri, o interfață grafică (GUI), o interfață API și instrumente din linia de comandă pentru gestionarea eficientă a nodurilor.
Ce poate face Puppet?
De exemplu, să presupunem că aveți o infrastructură cu aproximativ 100 de servere. Ca administrator de sistem, rolul dumneavoastră este să vă asigurați că toate aceste servere sunt mereu actualizate și funcționează cu funcționalitate completă.

Pentru a face acest lucru, puteți utiliza Puppet, care vă permite să scrieți cod simplu care poate fi implementat automat pe aceste servere. Acest lucru reduce efortul uman și face ca procesul de dezvoltare să fie rapid și eficient.

Marioneta îndeplinește următoarele funcții:
- Puppet vă permite să definiți configurații distincte pentru fiecare gazdă.
- Instrumentul vă permite să monitorizați continuu serverele pentru a confirma dacă există configurația necesară și dacă nu a fost modificată. Dacă configurația este modificată, Puppet revine la configurația predefinită pe gazdă.
- De asemenea, oferă control asupra fiecărui sistem configurat, astfel încât o modificare centralizată este efectuată automat peste tot.
- De asemenea, este folosit ca instrument de implementare, deoarece implementează automat software în sistem. Implementează infrastructura ca și cod, deoarece politicile și configurațiile sunt scrise ca și cod.
Puppet DSL și paradigme de programare
Înainte de a învăța Puppet DSL, haideți să înțelegem paradigmele de programare. O paradigmă de programare este un stil utilizat în programarea pe calculator.
Patru tipuri de paradigme sunt:
- Imperativ.
- Declarativ.
- Funcțional (care este considerat un subset al paradigmei declarative).
- Orientat pe obiecte.
Ne vom concentra asupra paradigmelor imperativă și declarativă.
Paradigme imperative
Această paradigmă de programare exprimă logica unui calcul (ce trebuie făcut) și descrie, de asemenea, fluxul său de control (cum trebuie făcut).
Exemplu:
Să presupunem că mergeți la birou. Rezervați un taxi și începeți să oferiți instrucțiuni pas cu pas șoferului până ajungeți la birou. A specifica ce trebuie să faceți și cum trebuie făcut este un stil imperativ.
Paradigme declarative
Această paradigmă de programare exprimă logica unui calcul (ce trebuie făcut) fără a descrie fluxul său de control (cum trebuie făcut).
Exemplu:
Să presupunem că mergeți la birou. Rezervați un taxi Uber și specificați doar destinația finală (biroul). A specifica ce trebuie făcut, dar nu și cum, este un stil declarativ.
| Paradigmă | Ce sa fac | Cum să faci |
|---|---|---|
| imperativ | Da | Da |
| Declarativ | Da | Nu |
Puppet folosește o paradigmă de programare declarativă
Puppet folosește o abordare de programare declarativă.
Exemplu: Creați un utilizator pe sistem.
Se poate face folosind un model de programare imperativă cu un script shell. Aici, specificăm cum se creează utilizatorul și ce comenzi se utilizează pe sistem de operare.
Totuși, se poate face și folosind un model de programare declarativă cu doar câteva linii de cod Puppet și limbajul specific domeniului Puppet (DSL), obținându-se în continuare același rezultat.
Modele de implementare a instrumentelor de management al configurației
Există două modele de implementare pentru instrumente de management al configurației:
- Model de implementare bazat pe push: inițiat de un nod principal.
- Model de implementare bazat pe tragere: inițiat de agenți.
Model de implementare bazat pe push
În acest model de implementare, serverul principal transmite configurațiile și software-ul către agenții individuali. După verificarea unei conexiuni securizate, serverul principal execută comenzi de la distanță pe agenți. De exemplu, ansiblu și Stiva de sare.
Model de implementare bazat pe extragere
În acest model de implementare, serverele individuale contactează un server principal, verifică și stabilesc o conexiune securizată, își descarcă configurațiile și software-ul și apoi se configurează în consecință - de exemplu, Puppet și Chef.
Cum funcționează Puppet?
Puppet se bazează pe un model de implementare pull, în care nodurile agentului se conectează periodic — după fiecare 1800 secunde — cu nodul principal pentru a vedea dacă este nevoie de actualizare a agentului. Dacă este necesară o actualizare, agentul extrage codul Puppet necesar de la nodul principal și efectuează acțiunile necesare.
Să explicăm acest lucru cu un exemplu de configurație master-agent.
Master
Aceasta este o mașină bazată pe Linux pe care este instalat software-ul Puppet master. Este responsabilă pentru menținerea configurațiilor sub formă de cod Puppet. Nodul master poate fi doar Linux.
Agenții
Acestea sunt mașinile țintă gestionate de Puppet, cu software-ul agent Puppet instalat pe ele.
Agentul poate fi configurat pe orice sistem de operare acceptat, cum ar fi Linux, Windows, Solarissau Mac OS.
Comunicarea dintre master și agent se stabilește prin certificate securizate.

Comunicarea dintre Master și Agent
Pas 1) Odată ce conectivitatea este stabilită între agent și master, agentul Puppet trimite date despre starea sa către serverul master Puppet. Acestea se numesc date (Facts), iar aceste informații includ numele gazdei, detaliile kernelului, adresa IP, detaliile numelui fișierului și așa mai departe.

Pas 2) Puppet master-ul folosește aceste date și compilează o listă de configurații care urmează să fie aplicate agentului. Această listă de configurații care urmează să fie efectuată asupra unui agent este cunoscută sub numele de catalogAr putea include instalarea de pachete, actualizări sau eliminări, crearea de sisteme de fișiere, crearea sau ștergerea de utilizatori, repornirea serverului, modificări ale configurației IP și așa mai departe.
Pas 3) Agentul folosește această listă de configurații pentru a aplica orice modificări de configurare necesare pe nod.
Dacă nu există abateri în configurație, agentul nu efectuează nicio modificare a configurației și lasă nodul să ruleze cu aceeași configurație.

Pas 4) Odată ce este finalizat, nodul raportează înapoi către Puppet master, indicând faptul că configurația a fost aplicată și finalizată.
Blocuri de păpuși
Puppet oferă flexibilitatea de a integra rapoarte cu instrumente terțe folosind API-urile Puppet.
Patru tipuri de blocuri de construcție pentru păpuși sunt:
- Resurse
- Clase
- Manifesta
- Modules
Resurse pentru păpuși
Resursele Puppet sunt elementele de bază ale Puppet.
Resursele sunt funcții încorporate care rulează în back-end pentru a efectua operațiunile necesare în Puppet.
Cursuri de păpuși
O combinație de resurse diferite poate fi grupată într-o singură unitate numită clasă.
Manifestul păpușilor
Un manifest este un director care conține fișiere Puppet DSL. Aceste fișiere au extensia .pp, care înseamnă programul Puppet. Codul Puppet constă în definiții sau declarații ale claselor Puppet.
Module de păpuși
Modulele sunt o colecție de fișiere și directoare, cum ar fi manifeste și definiții de clase. Acestea sunt unități reutilizabile și partajabile în Puppet.
De exemplu, MySQL instalează și configurează modulul MySQL, Şi Jenkins modulul gestionează Jenkins.

Tipuri de resurse Puppet
În general, un sistem este alcătuit din fișiere, utilizatori, servicii, procese, pachete și așa mai departe. În Puppet, acestea se numesc resurse și reprezintă elementele fundamentale ale Puppet.
Toate operațiunile asupra agenților Puppet sunt efectuate cu ajutorul resurselor Puppet.
Resursele Puppet sunt instrumente predefinite folosite pentru a efectua diverse sarcini și operațiuni pe orice platformă suportată. Putem folosi o singură resursă Puppet pentru a efectua o sarcină specifică sau putem folosi mai multe resurse Puppet împreună pentru a efectua implementări complexe de configurare a aplicațiilor.
Resursele pot avea diferite tipuri. Utilizări de păpuși resurse și tipuri de resurse pentru a descrie configurația unui sistem.
Există trei tipuri de resurse:
- Miez marionetă sau tipuri de resurse încorporate.
- Tipuri de resurse definite de marionete.
- Tipuri de resurse personalizate pentru marionete.
Miez marionetă sau tipuri de resurse încorporate
Tipurile de resurse de bază sau încorporate sunt tipurile de resurse Puppet predefinite livrate împreună cu software-ul Puppet. Toate tipurile de resurse Puppet de bază sau încorporate sunt scrise și întreținute de echipa Puppet.
Tipuri de resurse definite de marionete
Tipurile de resurse definite sunt tipuri de resurse ușoare scrise în limbajul declarativ Puppet folosind o combinație de tipuri de resurse existente.
Tipuri de resurse personalizate pentru marionete
Tipurile de resurse personalizate sunt tipuri de resurse complet personalizate scrise în Ruby.
Să explorăm mai în detaliu tipurile de resurse Puppet.
În terminal, tastați următoarea comandă pentru a afișa o listă de subcomenzi legate de Puppet:
Puppet --help
În cazul nostru, ne interesează subcomanda „resursă„, pe care le vom folosi pentru a găsi informații despre tipurile de resurse Puppet încorporate.
În terminal, tastați oricare dintre următoarele comenzi pentru a afișa o listă acțiuni asociat cu subcomanda Puppet „resursă„:
Puppet help resource Puppet resource --help
În acest caz, avem resursă ca subcomandă și -tipuri ca acțiunea.
Puppet are 49 de tipuri de resurse de bază încorporate.
În terminal, tastați următoarea comandă pentru a afișa o listă cu tipurile de resurse Puppet încorporate disponibile:
puppet resource –types
Fiecare tip acceptă o listă de atribute. Aceste atribute oferă o descriere detaliată pe care Puppet o folosește pentru a gestiona resursa.
Pentru a afla toate atributele asociate cu un tip de resursă Puppet, utilizați următoarea comandă:
puppet describe <resource type name>
Parametrii vor lista toate atributele disponibile pentru tipul de resursă respectiv.
păpușă descrie pachet
Este dificil pentru o persoană începătoare să înțeleagă și să relaționeze cu multe fișiere de cod Puppet negestionate. Aici avem nevoie de niște informații.ping pentru a lega operațiunile între ele. Scopul este de a rezolva o singură problemă, cum ar fi toate operațiunile necesare pentru a configura SSH pe un server, un serviciu NTP sau un server web complet sau un server de baze de date de la zero.
Ce sunt clasele de păpuși?
Clasele Puppet sunt colecții de resurse Puppet grupate ca o singură unitate.
Puppet a introdus clase pentru a face structura reutilizabilă și organizată.
Mai întâi, trebuie să definim o clasă folosind sintaxa de definire a clasei. Clasele trebuie să fie unice și pot fi declarate o singură dată cu același nume:
class <class-name> {
<Resource declarations>
}
Exemplu:
class ntpconfig {
file {
"/etc/ntp.conf":
ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n",
}
}
Până acum, am definit doar clasa; nu am folosit-o nicăieri. Aceasta înseamnă că codul pe care l-am scris nu va fi executat niciodată decât dacă vom declara această clasă în altă parte.
Declarație de clasă
Pentru a utiliza o clasă definită în codul dvs., utilizați include cuvinte cheie.
class ntpconfig {
file {
"/etc/ntp.conf":
ensure=> "present",
content=> "server 0.centos.pool.ntp.org iburst\n",
}
}
include ntpconfig
Să înțelegem acest lucru cu un scenariu din lumea reală.
Instalare demonstrativă NTP
Mai întâi, asigurați-vă că pachetul NTP nu este deja prezent pe server. Următoarea comandă nu va returna nimic dacă pachetul NTP nu este prezent pe server:
rpm -qa | grep -i ntp
După cum putem vedea, pachetul NTP este deja prezent pe server. Să eliminăm pachetul NTP existent:
yum remove ntp
După eliminarea pachetului, asigurați-vă că fișierul ntp.conf nu mai există:
ls -lrt /etc/ntp.conf
Verificați dacă serviciul ntp nu există executând următoarea comandă:
systemctl status ntp
Creați un nou fișier .pp pentru a salva codul. Din linia de comandă:
vi demontp.pp
Comutați în modul de inserare apăsând tasta i de pe tastatură.
Tastați următorul cod pentru a crea un fișier nou:
# Class Definition
class ntpconfig {
# Installing NTP Package
package {"ntp":
ensure=> "present",
}
# Configuring NTP configuration file
file {"/etc/ntp.conf":
ensure=> "present",
content=> "server 0.centos.pool.ntp.org iburst\n",
}
# Starting NTP services
service {"ntpd":
ensure=> "running",
}
}
După ce ați terminat de editat, apăsați tasta ESC.
Pentru a salva fișierul, apăsați :wq!
Următorul pas este să verifica dacă codul are erori de sintaxă. Executați următoarea comandă:
puppet parser validate demontp.pp
Asigurați-vă că ați comutat la rădăcină utilizatorul să poată finaliza testul fără nicio eroare, executând comanda:
su root
Testare este următorul pas în procesul de creare a codului. Executați următoarea comandă pentru a efectua un test de fum:
Puppet applies demontp.pp --noop
Ultimul pas este să alerga Puppet în modul real și verificarea rezultatului.
puppet apply demontp.pp
Păpușa nu a interpretat nimic pentru că ora demonstrativă tocmai era... definit dar nu declarat.
Deci, până când nu declarați clasa Puppet, codul nu va fi aplicat.
Lasa-ne declara clasa demo în interiorul aceluiași cod folosind include numele clasei la sfarsitul codului:
# Class Definition
class ntpconfig {
# Installing NTP Package
package {"ntp":
ensure=> "present",
}
# Configuring NTP configuration file
file {"/etc/ntp.conf":
ensure=> "present",
content=> "server 0.centos.pool.ntp.org iburst\n",
}
# Starting NTP services
service {"ntpd":
ensure=> "running",
}
}
# Class Declaration
include ntpconfig
Din nou, verifica dacă codul are erori de sintaxă. Executați următoarea comandă:
puppet parser validate demontp.pp
Asigurați-vă că ați comutat la rădăcină utilizatorul să poată finaliza testul fără nicio eroare, executând comanda:
su root
Testarea este următorul pas în procesul de creare a codului. Executați următoarea comandă pentru a efectua un test de fum:
Puppet apply demontp.pp --noop
Ultimul pas este să alerga Puppet în modul real și verificarea rezultatului.
puppet apply demontp.pp
De data aceasta, codul este aplicat deoarece clasa a fost definită și apoi declarată.
Asigurați-vă că fișierul ntp.conf există acum:
ls -lrt /etc/ntp.conf
Verificați dacă serviciul ntp a fost pornit rulând următoarea comandă:
systemctl status ntpd











