Vodič za početnike s lutkama: Osnove i DSL
⚡ Pametni sažetak
Puppet je platforma za upravljanje konfiguracijom otvorenog koda koja automatizira način na koji se poslužitelji osiguravaju, konfiguriraju i održavaju konzistentnima. Primjenjuje infrastrukturu kao kod putem deklarativnog jezika specifičnog za domenu, zamjenjujući ponavljajuću ručnu administraciju na velikim flotama poslužitelja.

Puppet je alat za upravljanje konfiguracijom otvorenog koda koji vam omogućuje definiranje infrastrukture kao koda i održavanje velikih flota poslužitelja u konzistentnom, ponovljivom stanju. Prije nego što naučimo Puppet, prvo ćemo razumjeti upravljanje konfiguracijom.
Što je upravljanje konfiguracijom?
Upravljanje konfiguracijom je proces održavanja softvera i računalnih sustava - poput poslužitelja, pohrane i mreža - u poznatom, željenom i konzistentnom stanju. Također omogućuje pristup točnom povijesnom zapisu stanja sustava u svrhu upravljanja projektima i revizije.
Sistemski administratori uglavnom obavljaju repetitivne zadatke, poput instaliranja poslužitelja i njihovog konfiguriranja. Ovi profesionalci mogu automatizirati taj posao pisanjem skripti.
Međutim, to postaje težak posao kada rade na masovnoj infrastrukturi. Alati za upravljanje konfiguracijom poput Puppet-a uvedeni su kako bi se riješili ti problemi.
Što je Puppet?
Lutka je alat za upravljanje sustavom za centralizaciju i automatizaciju procesa upravljanja konfiguracijom. Puppet se također koristi kao alat za implementaciju softvera.
To je softver otvorenog koda za upravljanje konfiguracijom, koji se široko koristi za konfiguraciju, upravljanje, implementaciju i orkestraciju različitih aplikacija i usluga u cijeloj infrastrukturi organizacije.
Puppet je posebno dizajniran za upravljanje konfiguracijom Linuxa i Windows sustava. Napisan je u Rubyju i koristi njegov jedinstveni Dglavno SOSEBNI Ljezik (DSL) za opis konfiguracije sustava.
Koje su verzije lutke?
Puppet dolazi u dvije verzije:
- Lutka otvorenog kodaTo je osnovna verzija alata za upravljanje konfiguracijom Puppet-a, poznatog i kao Open Source Puppet. Dostupan je izravno s Puppet-ove web stranice i licenciran je pod Apache 2.0 sustavom.
- Puppet EnterpriseKomercijalna verzija koja nudi značajke kao što su izvještavanje o usklađenosti, orkestracija, kontrola pristupa temeljena na ulogama, grafičko korisničko sučelje, API i alati naredbenog retka za učinkovito upravljanje čvorovima.
Što Lutka može?
Na primjer, pretpostavimo da imate infrastrukturu s oko 100 poslužitelja. Kao administrator sustava, vaša je uloga osigurati da su svi ti poslužitelji uvijek ažurirani i da rade s punom funkcionalnošću.

Za to možete koristiti Puppet, koji vam omogućuje pisanje jednostavnog koda koji se može automatski implementirati na tim poslužiteljima. To smanjuje ljudski napor i čini proces razvoja brzim i učinkovitim.

Lutka obavlja sljedeće funkcije:
- Puppet vam omogućuje definiranje različitih konfiguracija za svaki host.
- Alat vam omogućuje kontinuirano praćenje poslužitelja kako biste potvrdili postoji li potrebna konfiguracija i je li promijenjena. Ako se konfiguracija promijeni, Puppet se vraća na unaprijed definiranu konfiguraciju na hostu.
- Također omogućuje kontrolu nad svakim konfiguriranim sustavom, tako da se centralizirana promjena automatski provodi svugdje.
- Također se koristi kao alat za implementaciju jer automatski implementira softver u sustav. Implementira infrastrukturu kao kod, jer su politike i konfiguracije napisane kao kod.
Puppet DSL i paradigme programiranja
Prije nego što naučimo Puppet DSL, shvatimo programske paradigme. Programska paradigma je stil koji se koristi u računalnom programiranju.
Četiri vrste paradigmi su:
- Imperativ.
- Deklarativno.
- Funkcionalno (koje se smatra podskupom deklarativne paradigme).
- Objektno orijentirano.
Usredotočit ćemo se na imperativne i deklarativne paradigme.
Imperativne paradigme
Ova programska paradigma izražava logiku izračuna (što učiniti) i također opisuje njegov tok upravljanja (kako to učiniti).
Primjer:
Pretpostavimo da idete u svoj ured. Rezervirate taksi i počnete davati vozaču detaljne upute dok ne stignete do ureda. Navođenje što i kako učiniti je imperativan stil.
Deklarativne paradigme
Ova programska paradigma izražava logiku izračuna (što učiniti) bez opisivanja njegovog tijeka upravljanja (kako to učiniti).
Primjer:
Pretpostavimo da idete u svoj ured. Rezervirate Uber taksi i navedete samo konačno odredište (ured). Navođenje što učiniti, ali ne i kako to učiniti, deklarativni je stil.
| Paradigma | Što učiniti | Kako to učiniti |
|---|---|---|
| imperativ | Da | Da |
| koji tumači | Da | Ne |
Puppet koristi paradigmu deklarativnog programiranja
Puppet koristi pristup deklarativnog programiranja.
Primjer: Stvorite korisnika na sustavu.
To se može učiniti korištenjem imperativnog programskog obrasca sa shell skriptom. Ovdje određujemo kako stvoriti korisnika i koje naredbe koristiti na operativni sustav.
Međutim, to se može učiniti i korištenjem deklarativnog programskog obrasca sa samo nekoliko redaka Puppet koda i Puppet domenski specifičnim jezikom (DSL), a i dalje postići isti rezultat.
Modeli implementacije alata za upravljanje konfiguracijom
Postoje dva modela implementacije za alati za upravljanje konfiguracijom:
- Push model implementacije: pokreće ga glavni čvor.
- Model implementacije temeljen na povlačenju: pokreću ga agenti.
Push model implementacije
U ovom modelu implementacije, glavni poslužitelj šalje konfiguracije i softver pojedinačnim agentima. Nakon provjere sigurne veze, glavni poslužitelj izvršava naredbe na daljinu na agentima. Na primjer, Ansible i Salt Stack.
Model implementacije temeljen na povlačenju
U ovom modelu implementacije, pojedinačni poslužitelji kontaktiraju glavni poslužitelj, provjeravaju i uspostavljaju sigurnu vezu, preuzimaju svoje konfiguracije i softver, a zatim se u skladu s tim konfiguriraju - na primjer, Puppet i Chef.
Kako Puppet radi?
Puppet se temelji na modelu raspoređivanja povlačenjem, gdje se čvorovi agenata redovito prijavljuju - nakon svakih 1800 sekundi — s glavnim čvorom kako bi se provjerilo treba li nešto ažurirati na agentu. Ako je potrebno ažuriranje, agent povlači potreban Puppet kod s glavnog čvora i izvršava potrebne radnje.
Objasnimo to na primjeru postavke glavnog agenta.
Master
Ovo je stroj temeljen na Linuxu s instaliranim Puppet master softverom. Odgovoran je za održavanje konfiguracija u obliku Puppet koda. Glavni čvor može biti samo Linux.
Agenti
Ovo su ciljna računala kojima upravlja Puppet, s instaliranim Puppet agentskim softverom.
Agent se može konfigurirati na bilo kojem podržanom operativnom sustavu, kao što je Linux, Windows, Solarisili Mac OS-u.
Komunikacija između glavnog uređaja i agenta uspostavlja se putem sigurnih certifikata.

Komunikacija između gospodara i agenta
Korak 1) Nakon što se uspostavi veza između agenta i glavnog poslužitelja, Puppet agent šalje podatke o svom stanju glavnom Puppet poslužitelju. To se naziva činjenicama, a te informacije uključuju naziv hosta, detalje o jezgri, IP adresu, detalje o nazivu datoteke i tako dalje.

Korak 2) Lutkarski gospodar koristi ove podatke i sastavlja popis konfiguracije koja će se primijeniti na agenta. Ovaj popis konfiguracije koja će se izvršiti na agentu poznat je kao katalogTo može uključivati instalaciju paketa, nadogradnje ili uklanjanje, stvaranje datotečnog sustava, stvaranje ili brisanje korisnika, ponovno pokretanje poslužitelja, promjene IP konfiguracije i tako dalje.
Korak 3) Agent koristi ovaj popis konfiguracija za primjenu svih potrebnih promjena konfiguracije na čvoru.
Ako nema odstupanja u konfiguraciji, agent ne izvodi nikakve promjene konfiguracije i ostavlja čvor da radi s istom konfiguracijom.

Korak 4) Nakon što je to gotovo, čvor izvještava Puppet mastera, što ukazuje na to da je konfiguracija primijenjena i dovršena.
Lutkarski blokovi
Puppet pruža fleksibilnost integracije izvješća s alatima trećih strana pomoću Puppet API-ja.
Četiri vrste gradbenih blokova za lutke su:
- Resursi
- Nastava
- manifest
- Moduli
Resursi za lutke
Puppet resursi su gradivni blokovi Puppet-a.
Resursi su ugrađene funkcije koji se izvode na pozadini kako bi izvršili potrebne operacije u Puppetu.
Lutkarski tečajevi
Kombinacija različitih resursa može se grupirati u jednu jedinicu koja se naziva klasa.
Manifest lutaka
Manifest je direktorij koji sadrži Puppet DSL datoteke. Ove datoteke imaju ekstenziju .pp, što je skraćenica za Puppet program. Puppet kod sastoji se od definicija ili deklaracija Puppet klasa.
Moduli lutaka
Moduli su skup datoteka i direktorija, kao što su manifesti i definicije klasa. Oni su jedinice u Puppetu koje se mogu ponovno koristiti i dijeliti.
Na primjer, MySQL modul instalira i konfigurira MySQL, A Jenkins modul upravlja Jenkins.

Vrste resursa lutaka
Općenito, sustav se sastoji od datoteka, korisnika, usluga, procesa, paketa i tako dalje. U Puppetu se to naziva resursima i oni su temeljni građevni blokovi Puppet-a.
Sve operacije na Puppet agentima izvode se uz pomoć Puppet resursa.
Puppet resursi su gotovi alati koji se koriste za izvršavanje raznih zadataka i operacija na bilo kojoj podržanoj platformi. Možemo koristiti jedan Puppet resurs za izvršavanje određenog zadatka ili možemo koristiti više Puppet resursa zajedno za izvođenje složenih implementacija konfiguracije aplikacija.
Resursi mogu imati različite vrste. Lutka koristi sredstva i vrste resursa kako bi se opisala konfiguracija sustava.
Postoje tri vrste vrsta resursa:
- Lutka jezgra ili ugrađeni tipovi resursa.
- Vrste resursa definirane lutkom.
- Puppet prilagođene vrste resursa.
Lutka jezgra ili ugrađeni tipovi resursa
Osnovne ili ugrađene vrste resursa su unaprijed izgrađene vrste resursa Puppeta koje se isporučuju s Puppet softverom. Sve osnovne ili ugrađene vrste resursa Puppeta piše i održava Puppet tim.
Vrste resursa definirane lutkom
Definirani tipovi resursa su lagani tipovi resursa napisani u deklarativnom jeziku Puppet korištenjem kombinacije postojećih tipova resursa.
Puppet prilagođene vrste resursa
Prilagođene vrste resursa potpuno su prilagođene vrste resursa napisane u Rubyju.
Istražimo dalje vrste resursa Puppet.
U terminalu upišite sljedeću naredbu za prikaz popisa podnaredbi povezanih s Puppetom:
Puppet --help
U našem slučaju, zanima nas podnaredba “resurs„, koji ćemo koristiti za pronalaženje informacija o ugrađenim vrstama resursa Puppet.
U terminalu upišite bilo koju od sljedećih naredbi za prikaz popisa akcije povezano s podnaredbom Puppet "resurs"
Puppet help resource Puppet resource --help
U ovom slučaju imamo resurs kao podnaredba i – vrste kao radnja.
Puppet ima 49 ugrađenih osnovnih vrsta resursa.
U terminalu upišite sljedeću naredbu za prikaz popisa dostupnih ugrađenih vrsta resursa Puppet:
puppet resource –types
Svaka vrsta podržava popis atributi. Ovi atributi daju detaljan opis koji Puppet koristi za upravljanje resursom.
Da biste saznali sve atribute povezane s tipom resursa Puppet, upotrijebite sljedeću naredbu:
puppet describe <resource type name>
Parametri će navesti sve dostupne atribute za tu vrstu resursa.
lutka opisati paket
Novoj osobi je teško razumjeti i povezati mnoge neupravljane Puppet kodne datoteke. Ovdje nam je potrebna neka grupa.ping povezati operacije. Cilj je riješiti jedan problem, kao što su sve operacije potrebne za konfiguriranje SSH-a na poslužitelju, NTP servisu ili kompletnom web poslužitelju ili poslužitelju baze podataka od nule.
Što su lutkarski tečajevi?
Puppet klase su kolekcije Puppet resursa združenih u jednu cjelinu.
Puppet je uveo nastavu kako bi strukturu učinio ponovno upotrebljivom i organiziranom.
Prvo, moramo definirati klasu koristeći sintaksu definicije klase. Klase moraju biti jedinstvene i mogu se deklarirati samo jednom s istim imenom:
class <class-name> {
<Resource declarations>
}
Primjer:
class ntpconfig {
file {
"/etc/ntp.conf":
ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n",
}
}
Do sada smo samo definirali klasu; nismo je nigdje koristili. To znači da se kod koji smo napisali nikada neće izvršiti osim ako ovu klasu ne deklariramo negdje drugdje.
Klasna deklaracija
Za korištenje definirane klase u vašem kodu, koristite uključiti ključne riječi.
class ntpconfig {
file {
"/etc/ntp.conf":
ensure=> "present",
content=> "server 0.centos.pool.ntp.org iburst\n",
}
}
include ntpconfig
Razumijemo ovo na primjeru iz stvarnog svijeta.
Demo instalacija NTP-a
Prvo provjerite da NTP paket već nije prisutan na poslužitelju. Sljedeća naredba neće vratiti ništa ako NTP paket nije prisutan na poslužitelju:
rpm -qa | grep -i ntp
Kao što vidimo, NTP paket je već prisutan na poslužitelju. Uklonimo postojeći NTP paket:
yum remove ntp
Nakon uklanjanja paketa, provjerite da datoteka ntp.conf više ne postoji:
ls -lrt /etc/ntp.conf
Provjerite postoji li ntp usluga pokretanjem sljedeće naredbe:
systemctl status ntp
Napravite novu .pp datoteku za spremanje koda. Iz naredbenog retka:
vi demontp.pp
Prebacite se u način unosa pritiskom na tipku i na tipkovnici.
Upišite sljedeći kôd za izradu nove datoteke:
# 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",
}
}
Nakon što završite s uređivanjem, pritisnite esc.
Za spremanje datoteke pritisnite :wq!
Sljedeći korak je provjeriti da li kod ima grešaka u sintaksi. Izvršite sljedeću naredbu:
puppet parser validate demontp.pp
Provjerite jeste li prešli na korijen korisnik može dovršiti test bez ikakve greške izvršavanjem naredbe:
su root
test je sljedeći korak u procesu stvaranja koda. Izvršite sljedeću naredbu za izvođenje testa dima:
Puppet applies demontp.pp --noop
Posljednji korak je trčanje Lutka u stvarnom načinu rada i provjerite izlaz.
puppet apply demontp.pp
Lutka nije ništa izvela jer je demo klasa bila samo definiran ali ne proglašen.
Dakle, dok ne deklarirate klasu Puppet, kod se neće primijeniti.
Pusti nas proglasiti demo klasa unutar istog koda pomoću uključi naziv klase na kraju koda:
# 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
Opet, provjeriti da li kod ima grešaka u sintaksi. Izvršite sljedeću naredbu:
puppet parser validate demontp.pp
Provjerite jeste li prešli na korijen korisnik može dovršiti test bez ikakve greške izvršavanjem naredbe:
su root
Ispitivanje je sljedeći korak u procesu stvaranja koda. Izvršite sljedeću naredbu za izvođenje testa dima:
Puppet apply demontp.pp --noop
Posljednji korak je trčanje Lutka u stvarnom načinu rada i provjerite izlaz.
puppet apply demontp.pp
Ovaj put, kod se primjenjuje jer je klasa definirana, a zatim deklarirana.
Provjerite postoji li sada datoteka ntp.conf:
ls -lrt /etc/ntp.conf
Provjerite je li ntp servis pokrenut pokretanjem sljedeće naredbe:
systemctl status ntpd











