Puppet Tutorial for begyndere: Hvad er Puppet & hvordan man bruger det?
Fรธr vi lรฆrer Puppet, lad os forstรฅ:
Hvad er Configuration Management?
Konfigurationsstyring er processen med at vedligeholde software og computersystemer (for eksempel servere, lagring, netvรฆrk) i en kendt, รธnsket og konsistent tilstand. Det giver ogsรฅ adgang til en nรธjagtig historisk registrering af systemtilstand til projektstyring og revisionsformรฅl.
Systemadministratorer udfรธrer for det meste gentagne opgaver som at installere servere, konfigurere disse servere osv. Disse fagfolk kan automatisere denne opgave ved at skrive scripts.
Det er dog et vanskeligt arbejde, nรฅr de arbejder pรฅ en massiv infrastruktur. Konfigurationsstyringsvรฆrktรธjet som en marionet blev introduceret for at lรธse sรฅdanne problemer.
Hvad er Puppet?
Marionet er et systemstyringsvรฆrktรธj til centralisering og automatisering af konfigurationsstyringsprocessen. Puppet bruges ogsรฅ som et softwareimplementeringsvรฆrktรธj. Det er en open source-konfigurationsstyringssoftware, der er meget udbredt til serverkonfiguration, administration, implementering og orkestrering af forskellige applikationer og tjenester pรฅ tvรฆrs af hele en organisations infrastruktur.
Puppet er specielt designet til at styre konfigurationen af โโLinux og Windows systemer. Den er skrevet i Ruby og bruger dens unikke Domain SรRLIGE Lnguage (DSL) for at beskrive systemkonfigurationen.
Hvad er Puppet-versionerne?
Puppet kommer i to versioner:
- Open Source marionet: Det er en grundlรฆggende version af Puppet-konfigurationsstyringsvรฆrktรธjet, som ogsรฅ er kendt som Open Source Puppet. Den er tilgรฆngelig direkte fra Puppets hjemmeside og er licenseret under Apache 2.0-systemet.
- Marionetvirksomhed: Kommerciel version, der tilbyder funktioner som compliance-rapportering, orkestrering, rollebaseret adgangskontrol, GUI, API og kommandolinjevรฆrktรธjer til effektiv styring af noder.
Hvad kan dukke?
For eksempel har du en infrastruktur med omkring 100 servere. Som systemadministrator er det din rolle at sikre, at alle disse servere altid er opdaterede og kรธrer med fuld funktionalitet.

For at gรธre dette kan du bruge Puppet, som giver dig mulighed for at skrive en simpel kode, som kan implementeres automatisk pรฅ disse servere. Dette reducerer den menneskelige indsats og gรธr udviklingsprocessen hurtig og effektiv.

Puppet udfรธrer fรธlgende funktioner:
- Puppet giver dig mulighed for at definere forskellige konfigurationer for hver vรฆrt.
- Vรฆrktรธjet giver dig mulighed for lรธbende at overvรฅge servere for at bekrรฆfte, om den nรธdvendige konfiguration eksisterer eller ej, og den er ikke รฆndret. Hvis konfigurationen รฆndres, vender Puppet-vรฆrktรธjet tilbage til den foruddefinerede konfiguration pรฅ vรฆrten.
- Det giver ogsรฅ kontrol over hele det konfigurerede system, sรฅ en centraliseret รฆndring bliver automatisk gennemfรธrt.
- Det bruges ogsรฅ som et implementeringsvรฆrktรธj, da det automatisk implementerer software til systemet. Den implementerer infrastruktur som en kode, fordi politikker og konfigurationer er skrevet som kode.
Puppet DSL og programmeringsparadigmer
Fรธr vi lรฆrer Puppet DSL, lad os forstรฅ programmeringsparadigmer:
Et programmeringsparadigme er en stil, du bruger i computerprogrammering.
Fire typer af paradigmer er:
- Imperativ.
- Erklรฆrende.
- Funktionel (som betragtes som en delmรฆngde af det deklarative paradigme)
- Objektorienteret.
Vi vil fokusere pรฅ imperativ og deklarativ.
Imperative paradigmer
Dette programmeringsparadigme udtrykker logikken i en beregning (Hvad skal man gรธre) og beskriver dens kontrolflow (Sรฅdan gรธr man)
Eksempel:
Antag, at du skal til dit kontor, bestiller du en taxa og begynder at give trin for trin anvisninger til chauffรธren, indtil du nรฅr kontoret. At specificere, hvad man skal gรธre, og hvordan man gรธr, er en bydende nรธdvendig stil.
Deklarative paradigmer
Dette programmeringsparadigme udtrykker logikken i en beregning (Hvad skal man gรธre) uden at beskrive dens kontrolflow (Sรฅdan gรธr man)
Eksempel:
Antag, at du skal til dit kontor, bestiller du Uber-kabine og angiver den endelige destination (kontor). At specificere, hvad der ikke skal gรธres, er en deklarativ stil.
| Paradigm | Hvad skal man gรธre | Hvordan man gรธr |
|---|---|---|
| bydende nรธdvendigt | Ja | Ja |
| deklarativ | Ja | Ingen |
Puppet bruger et deklarativt programmeringsparadigme
Puppet bruger en deklarativ programmeringstilgang.
Eksempel: Opret en bruger pรฅ systemet:
Det kan gรธres ved hjรฆlp af Imperativt programmeringsmรธnster ved hjรฆlp af et shell-script: Her specificerer vi, hvordan brugeren skal oprettes, og hvilke kommandoer, der skal bruges pรฅ operativsystem.
Det kan dog gรธres ved hjรฆlp af Declarative programmeringsmรธnster med kun et par linjer marionetkode, Puppet domain specific language (DSL), og stadig opnรฅ det samme resultat.
Implementeringsmodeller af vรฆrktรธjer til konfigurationsstyring
Der er to implementeringsmodeller til vรฆrktรธjer til konfigurationsstyring :
- Push-baseret implementeringsmodel: initieret af en masterknude.
- Pull-baseret implementeringsmodel: initieret af agenter.
Push-baseret implementeringsmodel
I denne implementeringsmodel skubber masterserveren konfigurationerne og softwaren til de individuelle agenter. Efter at have bekrรฆftet en sikker forbindelse, kรธrer masteren kommandoer eksternt pรฅ agenterne. For eksempel, Ansible og Salt Stack.
Pull-baseret implementeringsmodel.
I denne implementeringsmodel kontakter individuelle servere en masterserver, verificerer og etablerer en sikker forbindelse, downloader deres konfigurationer og software og konfigurerer derefter sig selv i overensstemmelse hermed - for eksempel Puppet og Chef.
Hvordan Puppet virker?
Puppet er baseret pรฅ en Pull-implementeringsmodel, hvor agentnoderne tjekker ind regelmรฆssigt efter hver 1800 sekunder med masterknudepunktet for at se, om noget skal opdateres i agenten. Hvis noget skal opdateres, henter agenten de nรธdvendige dukkekoder fra masteren og udfรธrer de nรธdvendige handlinger.
Lad os forklare det med et eksempel:
Eksempel: Master โ Agent opsรฆtning:
The Master
En Linux baseret maskine med Puppet master software installeret pรฅ den. Det er ansvarligt for at vedligeholde konfigurationer i form af dukkekoder. Masternoden kan kun vรฆre Linux.
Agenterne
Mรฅlmaskinerne administreret af en marionet med dukkeagentsoftwaren installeret pรฅ dem.
Agenten kan konfigureres pรฅ ethvert understรธttet operativsystem, sรฅsom Linux eller Windows or Solaris eller Mac OS.
Kommunikationen mellem master og agent etableres gennem sikre certifikater.

Kommunikation mellem skibsfรธreren og agenten
Trin 1) Nรฅr forbindelsen er etableret mellem agenten og masteren, sender Puppet-agenten dataene om dens tilstand til Puppet-masterserveren. Disse kaldes fakta: Disse oplysninger inkluderer vรฆrtsnavnet, kernedetaljer, IP-adresse, filnavnsdetaljer osv.โฆ

Trin 2) Puppet Master bruger disse data og kompilerer en liste med den konfiguration, der skal anvendes pรฅ agenten. Denne liste over konfigurationer, der skal udfรธres pรฅ en agent, er kendt som en katalog. Dette kan รฆndres sรฅsom pakkeinstallation, opgraderinger eller fjernelser, oprettelse af filsystem, oprettelse eller sletning af bruger, genstart af server, รฆndringer i IP-konfiguration osv.
Trin 3) Agenten bruger denne liste over konfigurationer til at anvende eventuelle nรธdvendige konfigurationsรฆndringer pรฅ noden.
Hvis der ikke er nogen drift i konfigurationen, udfรธrer Agent ingen konfigurationsรฆndringer og lader noden kรธre med den samme konfiguration.

Trin 4) Nรฅr det er gjort, rapporterer noden tilbage til dukkefรธreren og angiver, at konfigurationen er blevet anvendt og fuldfรธrt.
Dukkeblokke
Puppet giver fleksibiliteten til at integrere rapporter med tredjepartsvรฆrktรธjer ved hjรฆlp af Puppet API'er.
Fire typer af Puppet byggeklodser er
- Ressourcer
- Klasser
- Manifest
- Moduler
Dukkeressourcer
Puppet Resources er byggestenene i Puppet.
Ressourcer er indbyggede funktioner der lรธber i bagenden for at udfรธre de nรธdvendige operationer i dukke.
Dukke klasser
En kombination af forskellige ressourcer kan grupperes sammen i en enkelt enhed kaldet klasse.
Dukkemanifest
Manifest er en mappe, der indeholder marionet DSL-filer. Disse filer har filtypenavnet .pp. .pp-udvidelsen stรฅr for dukkeprogram. Dukkekoden bestรฅr af definitioner eller erklรฆringer af dukkeklasser.
Dukkemoduler
Moduler er en samling af filer og mapper sรฅsom manifester, klassedefinitioner. De er genbrugelige og delbare enheder i Puppet.
For eksempel MySQL modul til at installere og konfigurere MySQL eller Jenkins-modulet til at administrere Jenkins osv.

Typer af puppet ressourcer
Generelt bestรฅr et system af filer, brugere, tjenester, processer, pakker osv. I Puppet kaldes disse ressourcer. Ressourcer er de grundlรฆggende byggesten i
Marionet. Alle operationer pรฅ dukkeagenter udfรธres ved hjรฆlp af dukkeressourcer.
Puppet-ressourcer er de fรฆrdiglavede vรฆrktรธjer, der bruges til at udfรธre forskellige opgaver og operationer pรฅ enhver understรธttet platform. Vi kan bruge en enkelt marionetressource til at udfรธre en specifik opgave, eller vi kan bruge flere dukkeressourcer sammen til at udfรธre nogle komplekse applikationskonfigurationsimplementeringer.
Ressourcer kan have forskellige typer. Dukkebrug ressourcer og ressourcetyper for at beskrive et systems konfiguration.
Der er tre slags ressourcetyper:
- Puppet core eller indbyggede ressourcetyper.
- Dukkedefinerede ressourcetyper.
- Dukke tilpassede ressourcetyper.
Puppet core eller indbyggede ressourcetyper
Kerne- eller indbyggede ressourcetyper er de forudbyggede dukke-ressourcetyper, der leveres med dukkesoftware. Alle de centrale eller indbyggede Puppet-ressourcetyper er skrevet og vedligeholdt af Puppet-teamet.
Dukkedefinerede ressourcetyper
Definerede ressourcetyper er lette ressourcetyper skrevet i Puppet-deklarativt sprog ved hjรฆlp af en kombination af eksisterende ressourcetyper.
Dukke tilpassede ressourcetyper
Brugerdefinerede ressourcetyper er helt tilpassede ressourcetyper skrevet i Ruby.
Lad os undersรธge om dukkeressourcetyper ...
Indtast fรธlgende kommando i terminalen for at fรฅ vist en liste over Puppet-relevante underkommandoer:
Puppet --help
I vores tilfรฆlde er vi interesserede i underkommandoen "ressourceโ, som vi vil bruge til at finde informationen om indbyggede dukke-ressourcetyper.
Indtast en af โโfรธlgende kommandoer i terminalen for at fรฅ vist en liste over aktioner forbundet med dukkeunderkommandoen "ressource"
Puppet help resource Puppet resource --help
I dette tilfรฆlde har vi ressource som underkommando og โ typer som handling.
Puppet har 49 indbyggede kerneressourcetyper.
I terminalen skal du skrive fรธlgende kommando for at fรฅ vist en liste over tilgรฆngelige indbyggede dukke-ressourcetyper:
puppet resource โtypes
Hver type understรธtter en liste over attributter. Disse attributter giver en detaljeret beskrivelse, som Puppet bruger til at administrere ressourcen.
For at finde ud af alle de attributter, der er forbundet med dukkeressourcetypen, skal du bruge fรธlgende kommando:
puppet describe <resource type name>
Parametre viser alle de tilgรฆngelige attributter for den pรฅgรฆldende ressourcetype.
marionet beskrive pakke
Det er svรฆrt for en ny person at forstรฅ og relatere mange ikke-administrerede marionetkodefiler. Det er her, vi har brug for nogle grupperinger for at binde operationer sammen. Mรฅlet er at lรธse et enkelt problem, sรฅsom alle operationer, der krรฆves for at konfigurere ssh pรฅ en server eller ntp-tjeneste eller en komplet webserver eller databaseserver fra bunden.
Hvad er dukkeklasser?
Dukkeklasser er samlingen af โโdukkeressourcer samlet som en enkelt enhed.
Puppet introducerede klasser for at gรธre strukturen genbrugelig og organiseret.
Fรธrst skal vi definere en klasse ved hjรฆlp af klassedefinitionssyntaks; klasser skal vรฆre unikke og kan kun erklรฆres รฉn gang med samme navn:
class <class-name> {
<Resource declarations>
}
Eksempel:
class ntpconfig {
file {
"/etc/ntp.conf":
ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n",
}
}
Indtil videre har vi kun defineret klassen, men vi har ikke brugt den nogen steder. Det betyder, at denne kode, som vi har skrevet, aldrig vil blive eksekveret, medmindre vi erklรฆrer denne klasse et andet sted.
Klasseerklรฆring
For at bruge en defineret klasse i kode skal du bruge omfatter nรธgleord.
class ntpconfig {
file {
"/etc/ntp.conf":
ensure=> "present",
content=> "server 0.centos.pool.ntp.org iburst\n",
}
}
include ntpconfig
Lad os forstรฅ dette med et virkeligt tilfรฆlde.
Demoinstallation af NTP
Fรธrst skal du sรธrge for, at NTP-pakken ikke allerede er til stede pรฅ serveren, den fรธlgende kommando vil ikke returnere noget, hvis telnet ikke er til stede pรฅ serveren:
rpm -qa | grep -i ntp
Som vi kan se, er NTP-pakken allerede til stede pรฅ serveren. Lad os fjerne den eksisterende NTP-pakke:
yum remove ntp
Nรฅr du har fjernet pakken, skal du sikre dig, at filen ntp.conf ikke eksisterer:
ls -lrt /etc/ntp.conf
Bekrรฆft, at ntp-tjenesten ikke eksisterer ved at kรธre fรธlgende kommando:
systemctl status ntp
Opret en ny .pp-fil for at gemme koden. Fra kommandolinjen:
vi demontp.pp
Skift til indsรฆttelsestilstand ved at trykke pรฅ i fra tastaturet.
Indtast fรธlgende kode for at oprette en ny fil:
# 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",
}
}
Efter fรฆrdig med redigering: tryk pรฅ esc
For at gemme filen skal du trykke pรฅ :wq!
Nรฆste skridt er at kontrollere om koden har nogen syntaksfejl. Udfรธr fรธlgende kommando:
puppet parser validate demontp.pp
Sรธrg for, at du skiftede til rod for at kunne gennemfรธre testen uden fejl, ved at udfรธre kommandoen:
su root
Test er det nรฆste trin i kodeoprettelsesprocessen. Udfรธr fรธlgende kommando for at udfรธre en rรธgtest:
Puppet applies demontp.pp --noop
Sidste skridt er at kรธre marionetten i รฆgte tilstand og bekrรฆft outputtet.
puppet apply demontp.pp
Puppet optrรฅdte ikke noget, fordi demoklassen var bare definerede men ikke erklรฆrede.
Sรฅ indtil du erklรฆrer dukkeklassen, vil koden ikke blive anvendt.
Lad os erklรฆre demoklassen inde i den samme kode ved hjรฆlp af inkludere klassenavn i slutningen af โโkoden:
# 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
Igen kontrollere om koden har nogen syntaksfejl. Udfรธr fรธlgende kommando:
puppet parser validate demontp.pp
Sรธrg for, at du skiftede til rod for at kunne gennemfรธre testen uden fejl, ved at udfรธre kommandoen:
su root
Test er det nรฆste trin i kodeoprettelsesprocessen. Udfรธr fรธlgende kommando for at udfรธre en rรธgtest:
Puppet apply demontp.pp --noop
Sidste skridt er at kรธre marionetten i รฆgte tilstand og bekrรฆft outputtet.
puppet apply demontp.pp
Denne gang bliver koden anvendt, fordi klassen blev defineret og derefter erklรฆret.
Sรธrg for, at ntp.conf nu findes:
ls -lrt /etc/ntp.conf
Bekrรฆft, at ntp-tjenesten er startet ved at kรธre fรธlgende kommando:
systemctl status ntpd











