Kako ukloniti sve lutkarske certifikate. Master of puppets: Instalacija i konfiguracija sustava za daljinsko upravljanje konfiguracijom Puppet

Da biste učinkovitije koristili Puppet, morate razumjeti kako se grade moduli i manifesti. Ovaj vodič će vas provesti kroz način rada ovih Puppet komponenti postavljanjem LAMP stoga na Ubuntu 14.04 poslužitelju.

Zahtjevi

  • Instalacija Puppet (master i agent). Više o ovome -.
  • Mogućnost izrade barem jednog virtualni poslužitelj Ubuntu 14.04 za servisiranje čvora Puppet agent.

Osnove lutkarskog koda

Resursi

Puppet kod se uglavnom sastoji od resursa. Resurs je dio koda koji opisuje stanje sustava i određuje promjene koje su mu potrebne. Na primjer:

korisnik("mitchell":
osigurati => prisutan,
uid => "1000",
gid => "1000",
ljuska => "/bin/bash",
dom => "/dom/mitchell"
}

Deklaracija resursa ima sljedeći format:

resource_type("resource_name"
atribut => vrijednost
...
}

Da biste vidjeli sve vrste resursa lutke, izdajte naredbu:

marionetski resurs --vrste

U ovom vodiču saznat ćete više o vrstama izvora.

Manifesti

Manifest je skripta orkestracije. Programi lutke s ekstenzijom .pp nazivaju se manifesti. Zadani manifest lutke je /etc/puppet/manifests/site.pp.

Nastava

Kao iu svakom redovnom programskom jeziku, klase su odgovorne za organiziranje i ponovnu upotrebu dijelova orkestracije.

Unutar definicije klase nalazi se blok koda koji opisuje kako klasa radi. Nakon što definirate klasu, možete je koristiti u manifestima.

Definicija klase ima sljedeći format:

klasa primjer_klase(
...
kodirati
...
}

Ovaj kod definira klasu example_class. Kôd lutke bit će u vitičastim zagradama.

Deklaracija klase je mjesto u kodu gdje se poziva određena klasa. S deklaracijom klase, Puppet obrađuje svoj kod.

Deklaracija klase može biti obična i prema vrsti resursa.

Uobičajena deklaracija klase dodaje se kodu pomoću ključne riječi include.

uključi primjer_klase

Kada je deklarirana kao vrsta resursa, klasa je deklarirana u formatu resursa:

klasa("primjer_klase":)

Ova deklaracija vam omogućuje dodavanje parametara klase u vaš kod koji nadjačavaju zadane vrijednosti atributa klase. Na primjer:

čvor "host2" (
klasa ("apache": ) # korištenje apache modula
apache::vhost ("example.com": # definirajte vhost resurs
port => "80",
docroot => "/var/www/html"
}
}

Moduli

Modul je skupina manifesta i drugih datoteka organiziranih na unaprijed definiran način koji olakšava dijeljenje i ponovnu upotrebu pojedinačnih dijelova orkestracije. Moduli pomažu organizirati Puppet kod jer se mogu koristiti za razdvajanje koda u više manifesta.

Moduli lutaka pohranjeni su u direktoriju /etc/puppet/modules.

Pisanje manifesta

Možete vježbati pisanje Puppet manifesta, modula i klasa koristeći primjer instaliranja LAMP stoga na Ubuntu poslužitelju (rezultat će biti ).

Dakle, da biste orkestrirali poslužitelj Ubuntu 14.04 i instalirali LAMP stog na njega, potrebni su vam resursi za sljedeće radnje:

  • instaliranje paketa apache2.
  • pokretanje usluge apache2.
  • instaliranje paketa MySQL servera, mysql-server.
  • pokretanje mysql usluge.
  • instaliranje php5 paketa
  • stvaranje PHP test skripte, info.php.
  • ažuriranje apt indeksa prije instaliranja svakog paketa.

U nastavku ćete pronaći tri primjera Puppet koda koji se mogu koristiti za postizanje takvog postavljanja LAMP stacka.

Prvi primjer će vas naučiti kako napisati osnovne manifeste u jednu datoteku. Drugi primjer će vam pomoći sastaviti i koristiti klasu i modul na temelju prethodno napisanih manifesta. Treći primjer će vam pokazati kako koristiti unaprijed izgrađene javne module za instaliranje LAMP stoga.

Bilješka: Za testiranje je bolje koristiti novi virtualni poslužitelj.

Primjer 1: Instalacija LAMP-a s jednim manifestom

Manifest lutke može se napisati na čvoru agenta i zatim izvršiti pomoću naredbe primjene lutke (za to ne morate imati postavke glavnog i agenta).

U ovom odjeljku naučit ćete pisati manifeste koji će koristiti ove vrste deklaracija resursa:

  • exec: Izvrši naredbe.
  • paket: instalirajte pakete.
  • usluga: upravljanje uslugama.
  • datoteka: upravljanje datotekama.

Izrada manifesta

Napravite novi manifest:

sudo vi /etc/puppet/manifests/lamp.pp

Dodajte mu sljedeći kod da deklarirate potrebne resurse.

# pokrenite naredbu "apt-get update".
exec("apt-update": # resource exec "apt-update"
naredba => "/usr/bin/apt-get update" # naredba koju će pokrenuti ovaj resurs
}
# instalirajte paket apache2
paket("apache2":
zahtijevaju => Exec["apt-update"], # zahtijevaju "apt-update" prije instaliranja paketa
osigurati => instalirano,
}
# pokrenite uslugu apache2
usluga ("apache2":
osigurati => rad,
}
# instalirajte mysql-server
paket("mysql-server":
zahtijevaju => Exec["apt-update"], # zahtijevaju "apt-update" ponovnim instaliranjem
osigurati => instalirano,
}
# pokrenite mysql uslugu
usluga ("mysql":
osigurati => rad,
}
# instalirajte php5 paket
paket("php5":
zahtijevaju => Exec["apt-update"], # zahtijevaju "apt-update" prije instalacije
osigurati => instalirano,
}
# pokrenite uslugu info.php
datoteka("/var/www/html/info.php":
osigurati => datoteka,
sadržaj => "", # phpinfo kod
zahtijevaju => Paket["apache2"], # zahtjev za paket "apache2"
}

Primjena manifesta

Za korištenje novog manifesta unesite naredbu:

sudo lutka primijeniti --test

Prikazat će voluminozan rezultat koji prikazuje sve promjene u stanju okoline. Ako nema pogrešaka u izlazu, trebali biste moći otvoriti svoju vanjsku IP adresu ili naziv domene u svom pregledniku. Na ekranu će se pojaviti probni test. PHP stranica s informacijama o stogu. To znači da Apache i PHP rade.

Sada je LAMP stog instaliran na poslužitelju koristeći Puppet.

Ovo je prilično jednostavan manifest budući da se može izvršiti na agentu. Ako nemate Puppet mastera, drugi agentski čvorovi neće moći koristiti ovaj manifest.

Poslužitelj Puppet master provjerava promjene stanja poslužitelja svakih 30 minuta.

Primjer 2: Instaliranje LAMP steka pomoću modula

Sada pokušajte stvoriti jednostavan modul temeljen na LAMP manifestu koji ste napisali u prethodnom odjeljku.

Za izradu modula, kreirajte novi direktorij u direktoriju modula (njegov naziv mora odgovarati nazivu modula). Ovaj direktorij treba sadržavati direktorij manifesta i init.pp datoteku. Datoteka init.pp specificira klasu Puppet (njeno ime također mora odgovarati nazivu modula).

Stvaranje modula

Idite na poslužitelj Puppet master i kreirajte strukturu direktorija za modul:

cd /etc/puppet/modules
sudo mkdir -p svjetiljka/manifesti

Kreirajte i otvorite init.pp datoteku u uređivaču:

sudo vi lamp/manifests/init.pp

Umetnite klasu lampe u datoteku:

razredna lampa (
}

Kopirajte sadržaj manifesta iz odjeljka 1 i zalijepite ga u blok klase lampe. Sada imate definiciju klase lampe. Drugi će manifesti moći koristiti ovu klasu kao modul.

Spremite i zatvorite datoteku.

Korištenje modula u glavnom manifestu

Sada možete konfigurirati glavni manifest i koristiti modul lampe za instaliranje LAMP stoga na poslužitelj.

Na poslužitelju Puppet master uredite sljedeću datoteku:

sudo vi /etc/puppet/manifests/site.pp

Najvjerojatnije na ovaj trenutak datoteka je prazna. Dodajte mu sljedeće retke:

zadani čvor ( )
čvor "lampa-1" (
}

Bilješka: Zamijenite lamp-1 s imenom glavnog računala vašeg Puppet agenta na koji ćete instalirati stog.

Blok čvora omogućuje vam da odredite Puppet kod koji će se primjenjivati ​​samo na neke čvorove.

Zadani blok primjenjuje se na sve agentske čvorove koji nemaju pojedinačni blok (ostavite ga praznim). Blok lamp-1 primijenit će se na čvor agenta lamp-1.

Ovom bloku dodajte sljedeći redak koji koristi modul lampe:

Spremite i zatvorite datoteku.

Sada će čvor Puppet agenta moći preuzeti postavke s glavnog poslužitelja i instalirati LAMP stog. Ako želite napraviti promjene odmah, pokrenite naredbu na agentu:

sudo lutkarski agent --test

Moduli su najprikladniji način za ponovnu upotrebu Puppet koda. Osim toga, moduli vam pomažu da logično organizirate svoj kod.

Primjer 3: Instalacija LAMP-a pomoću javnih modula

MySQL modul se koristi na sličan način. Dodajte sljedeće retke u blok čvora:

class("mysql::server":
root_password => "lozinka",
}

Također možete proslijediti parametre MySQL modula.

Dodajte resurs u koji će kopirati info.php Pravo mjesto. Koristite parametar izvora. Dodajte sljedeće retke u blok čvora:

file("info.php": # naziv datoteke resursa
put => "/var/www/html/info.php", # ciljni put
osigurati => datoteka,
zahtijevaju => Klasu["apache"], # apache klasa za korištenje
izvor => "puppet:///modules/apache/info.php", # mjesto za kopiranje datoteke
}

Ova deklaracija klase koristi izvorni parametar umjesto sadržaja. Ova opcija ne samo da koristi sadržaj datoteke, već ga i kopira.

Puppet će kopirati datoteku puppet:///modules/apache/info.php u /etc/puppet/modules/apache/files/info.php.

Spremite i zatvorite datoteku.

Napravite datoteku info.php.

sudo sh -c "eho""> /etc/puppet/modules/apache/files/info.php"

Sada će čvor Puppet agenta moći preuzeti postavke s glavnog poslužitelja i instalirati LAMP stog. Ako želite napraviti promjene u okruženju agenta odmah, pokrenite naredbu na ovom čvoru:

sudo lutkarski agent --test

Ova naredba će preuzeti sva ažuriranja za trenutni čvor i instalirati stog na njemu. Kako biste bili sigurni da Apache i PHP rade, otvorite IP adresu ili domenu čvora u pregledniku:

http://lamp_1_public_IP/info.php

Zaključak

Sada imate osnovno znanje o radu s Puppet modulima i manifestima. Pokušajte sami izraditi jednostavan manifest i modul.

Puppet je odličan za upravljanje konfiguracijskim datotekama aplikacija.

Oznake: ,

Nedavno smo se na stranicama časopisa osvrnuli na sustav daljinski upravljač konfiguracija UNIX strojeva Cfengine, koji uvelike pojednostavljuje život administratora sustava automatiziranjem koraka za konfiguriranje mnogih mrežnih čvorova. No, koliko god Cfengine bio zgodan, ima mnogo nedostataka koje nema sustav nazvan Puppet.

Zamislite sebe u ulozi administratora sustava, odgovornog za održavanje funkcionalnosti stotina strojeva koji pokreću operativne sustave tipa UNIX. Svaki od njih zahtijeva konfiguraciju, periodično ažuriranje i nadzor, a pretpostavlja se da mnogi od njih obavljaju slične funkcije.

Dvije trećine su radne stanice, nešto više ruteri, a ostalo nekoliko web poslužitelja i pohrana podataka. Pitanje: kako voditi sav ovaj posao? Najjednostavniji odgovor je da se jednostavno povežete sa svakim od njih koristeći SSH i napravite potrebne promjene. Međutim, ova metoda ima dva problema. Prvo, vrlo je radno intenzivan. Drugo, administrator će stalno morati izvoditi mnoge monotone radnje (na primjer, da biste ažurirali OpenOffice.org na svim radnim stanicama, morat ćete izvršiti iste naredbe nekoliko desetaka puta). Možete pokušati izbjeći ovaj problem pisanjem nekoliko skripti koje će se same povezati sa svakim strojem i izvršavati unaprijed napisane naredbe. Ali i tu vas čekaju problemi.

Skripte će se stalno morati mijenjati kako bi se prilagodile svakom zadatku; Skripte će morati uzeti u obzir razlike u operativnim sustavima i verzijama i morat će se dugo otklanjati pogreške prije nego što se primijene na pokrenute strojeve. Općenito, nije comme il faut. Točan odgovor je korištenje tzv. daljinskih sustava upravljanja konfiguracijom, čiji su najpoznatiji predstavnici otvoreni sustavi Cfengine i lutka. Takvi sustavi preuzimaju sve odgovornosti za dovođenje konfiguracije stroja pravi tip, zahtijevajući od administratora samo da opiše konačno stanje sustava na posebnom jeziku (na primjer, opis toga koje pakete treba instalirati u OS, koje retke treba dodati u konfiguracijske datoteke, koje naredbe treba izvršiti itd. ). Nakon toga će svi čvorovi sami dobiti informacije o potrebnom stanju od poslužitelja i izvršiti auto-konfiguraciju sustava. Zahvaljujući ovom mehanizmu, novi se strojevi mogu u potpunosti konfigurirati bez ljudske intervencije, a postojeći se mogu rekonfigurirati dodavanjem samo nekoliko redaka u opis stanja.

Lutka?

Cfengine sustavu smo već posvetili cijeli članak, pa ćemo se danas fokusirati na Puppet sustav, koji se s pravom može nazvati njegovim ideološkim nasljednikom. Puppet je razvio Luke Kanies, koji se umorio od ograničenja Cfenginea i odlučio stvoriti bolju verziju od nule. Ako ste već koristili Cfenfine, vjerojatno ćete smatrati da je Puppet praktičniji i moćniji sustav. Puppetov državni jezik je više razine i fleksibilniji, što znači da administrator ne mora brinuti o stvarima poput pisanja zasebnih pravila za svaku vrstu OS-a ili Detaljan opis izvođenje trivijalnih radnji. Puppet dopušta svom gospodaru da se usredotoči na ono što želi učiniti, umjesto na to kako to učiniti (na primjer, da biste instalirali određeni paket na bilo koji OS koji podržava sustav, samo trebate napisati doslovno nekoliko redaka koji govore: "Instalirajte ovaj program " umjesto opisa naredbi potrebnih za njegovu instalaciju). Lutka je napisana u jednostavnim jezikom Ruby, što olakšava njegovu prilagodbu određenom zadatku i proširenje funkcionalnosti (omogućen je fleksibilan sustav dodataka).

Osim toga, za razliku od razvojnog modela Cfengine, koji se u biti vrti oko jedne osobe, Puppet ima veliku zajednicu entuzijasta koji poboljšavaju kod, dijele primjere konfiguracije i pišu dokumentaciju.

Općenito, Puppet djeluje kao moderniji i dobro dizajniran sustav. Kao i Cfengine, podržava gotovo sve moderne operacijske sustave slične UNIX-u (uključujući MacOS X), a također se može izvoditi u Cygwin okruženju povrh Windowsa. Njegov popis ovisnosti uključuje samo Ruby interpreter i Factor alat, tako da ne bi trebalo biti problema s instalacijom (da budemo pošteni, Cfengineov popis ovisnosti još je kraći).

Montaža

Kao i Cfengne, Puppet je sustav klijent-poslužitelj koji se sastoji od kontrolnog poslužitelja i slave čvorova. Poslužitelj pohranjuje opis konačnih stanja čvorova (što se u terminima lutke naziva manifest) i čeka da se povežu. Svakih pola sata (standardno) klijent se spaja na server, prima od njega opis konačnog stanja, uspoređuje ga s trenutnim i, ako se ono i/ili opisano stanje promijenilo, rekonfigurira sustav, a zatim ide spavati. Komunikacija se odvija preko kriptiranog kanala, tako da su isključeni napadi temeljeni na zamjeni opisa stanja (ali ako napadač preuzme poslužitelj, tada će svi čvorovi biti pod njegovom kontrolom).

Puppet je uključen u repozitorije svih popularnih distribucija, tako da njegovo instaliranje ne bi trebalo biti teško. Na primjer, na Debian/Ubuntu klijent Puppet može se instalirati ovako:

$ sudo apt-get instaliraj lutku

A server je ovakav:

$ sudo apt-get instalirajte lutku lutkar

Konfiguracijske datoteke klijenta i poslužitelja pohranjene su u direktoriju /etc/puppet. Najvažnija od njih je datoteka /etc/puppet/manifests/site.pp, koja sadrži manifest.

Pohranjuje opis stanja i trebao bi postojati samo na poslužitelju. Radi lakšeg otklanjanja pogrešaka, dodajmo mu jednostavnu konfiguraciju:


klasa passwd(
datoteka ("/etc/passwd":
vlasnik => korijen,
grupa => korijen,
mod => 644,
}
}
zadani čvor (
uključi lozinku
}

Ovi redovi opisuju uvjet u kojem vlasnik /etc/passwd datoteke mora biti root i njegove su dozvole postavljene na 644. U sljedećem ćemo odjeljku pobliže pogledati format datoteke manifesta. Druga najvažnija datoteka je /etc/puppet/puppet.conf. Postavlja konfiguraciju poslužitelja i klijenata, tako da mora biti prisutan na svim strojevima organiziranim u mreži Puppet. U Ubuntuu ova datoteka sadrži minimalne potrebne iu većini slučajeva dovoljne postavke. U nastavku su dani s komentarima:

# vi /etc/puppet/puppet.conf
# Standardne staze direktorija
logdir=/var/log/lutka
vardir=/var/lib/lutka
ssldir=/var/lib/lutka/ssl
rundir=/var/run/lutka
# Faktorska lokacija alata,
# koristi se za dobivanje informacija o OS-u
factpath=$vardir/lib/faktor
# Sinkronizirajte dodatke
# (instalirani dodaci na poslužitelju - kopiraju se na klijente)
pluginsync=true
# Katalog s predlošcima (o njima pročitajte u nastavku)
templatedir=$confdir/predlošci
# Sinkronizacija s etckeeperom
# (tko zna shvatit će, drugima ne treba)
prerun_command=/etc/puppet/etckeeper-commitpre
postrun_command=/etc/puppet/etckeeper-commitpost

Konfiguracijska datoteka može uključivati veliki broj razne opcije, informacije o kojima se mogu dobiti generiranjem zadane konfiguracije:

$ sudo puppetmasterd -genconfig > /etc/puppet/
puppetd.conf.default

Zadana konfiguracija klijenta generira se pomoću druge naredbe:

$ sudo lutka -genconfig > /etc/puppet/puppetd.conf.default

Za konfiguraciju se koriste datoteke Fileserver.conf i auth.conf poslužitelj datoteka(pročitajte o tome u odjeljku “Datotečni poslužitelj”) i autentifikaciju. Još ih nema smisla dirati. Nakon dovršetka konfiguracije, Puppet poslužitelj mora se ponovno pokrenuti:

$ sudo /etc/init.d/puppetmaster ponovno pokretanje

Nakon čega će biti spreman prihvatiti zahtjeve kupaca. Međutim, bez potpisanog certifikata nijedan klijent neće moći primiti manifest od poslužitelja i konfigurirati stroj.

Stoga moramo pokrenuti klijente Puppet u testnom načinu kako bi mogli poslati svoje certifikate poslužitelju na potpisivanje (usput, to se može učiniti na svim strojevima istovremeno pomoću alata shmux):

$ sudo puppetd -server puppet-server.com -verbose -test

Vraćamo se na poslužitelj i dobivamo listu certifikata spremnih za potpisivanje:

$ sudo lutka --popis

Odaberite host s popisa i potpišite njegov certifikat:

$ sudo lutka --znak nomad.grinder.com

Ili potpisujemo sve odjednom:

$ sudo lutka --znak --sve

Sada možete pokretati klijente u načinu borbe. Ali prvo morate unijeti naziv Puppet poslužitelja konfiguracijska datoteka(prema zadanim postavkama njegovo ime je samo lutka):

$sudo su
# echo "" >> /etc/puppet/puppet.conf
# echo "server=puppet-server.com" >> /etc/puppet/puppet.conf
# Izlaz

Pokretanje klijenata:

$ sudo /etc/init.d/puppet start

Jezik opisa države

Kao što je gore spomenuto, Puppet koristi vlastiti jezik za opisivanje konačnog stanja operacijski sustav, uz pomoć kojeg administrator sustava ukazuje u kakav oblik treba dovesti komponente OS-a kako bi on postigao željeno stanje. Ovo je prilično složen jezik, koji je ipak puno jednostavniji od bilo kojeg programskog jezika. Ako ste barem površno upoznati s bash skriptnim jezikom, lako ćete razumjeti Puppet jezik. Ključni element jezika su resursi koji se koriste za opisivanje u koji oblik treba konvertirati jednu od komponenti OS-a. Na primjer, sljedeći jednostavni resurs opisuje željeno stanje /etc/passwd datoteke:

# vi /etc/puppet/manifests/site.pp
datoteka ("/etc/passwd":
vlasnik => "root"
}

Ovdje je datoteka vrsta resursa. Ima ih ukupno nekoliko desetaka, od resursa koji upravljaju datotekama, kao u ovom primjeru, do paketa i usluga. Linija /etc/passwd je naziv resursa.

U slučaju vrste datoteke naziv je isti kao i put do datoteke, ali u nekim drugim vrstama naziv može biti proizvoljan. Linija owner => "root" opisuje postavljanje atributa owner na root, odnosno govori da je vlasnik navedena datoteka mora postojati administrator.

Svaka vrsta resursa ima vlastiti skup atributa dostupnih za modifikaciju, plus postoje posebni meta atributi koji se mogu koristiti u bilo kojem resursu. Jedna od važnih kvaliteta resursa je mogućnost povezivanja s njima. Ovo se može koristiti za formiranje lanaca ovisnosti. Sljedeći unos stvara resurs /etc/group, koji ovisi o resursu /etc/passwd (ovisnosti su specificirane korištenjem meta atributa require):

# vi /etc/puppet/manifests/site.pp
datoteka("/etc/grupa":
zahtijevaju => Datoteka["/etc/passwd"],
vlasnik => "root",
}

To znači da se resurs /etc/group može konfigurirati (dovesti u opisani oblik) samo kada je resurs /etc/passwd konfiguriran. Resursi se mogu grupirati u zbirke resursa koje se nazivaju klasama. Ovo je neophodno kako bi se resursi koji su slični po značenju i vrsti zadatka koji se obavljaju kombinirali u jedan apstraktni resurs. Na primjer, radi praktičnosti, mogli bismo kombinirati instalaciju i pokretanje nginx web poslužitelja u jedan apstraktni resurs istog naziva:

# vi /etc/puppet/manifests/site.pp
klasa nginx(
paket("nginx":
osigurati => instalirano
}
usluga ("nginx":
osigurati => rad,
zahtijevaju => paket["nginx"],
}
}

Ovdje se vrsta resursa paketa koristi za instaliranje paketa nginx na sustav, a usluga se koristi za pokretanje istoimene usluge. Sa zahtjevom prisiljavamo sustav da pokrene uslugu samo ako je paket uspješno instaliran. Pogodnost klasa je u tome što se mogu uključiti i ovisno o:

# vi /etc/puppet/manifests/site.pp
usluga ("lignje":
osigurati => rad,
zahtijevaju => Klasa["nginx"],
}

Kao u pravim OOP jezicima, klase mogu naslijeđivati ​​jedna od druge i nadjačavati atribute:

# vi /etc/puppet/manifests/site.pp
klasa passwd(
datoteka ("/etc/passwd":
vlasnik => "root",
grupa => "root",
}
}
klasa passwd-bsd nasljeđuje passwd (
Datoteka["/etc/passwd"] ( grupa => "kotačić" )
}

Ovdje klasa passwd-bsd nasljeđuje od passwd kako bi nadjačala atribut grupe /etc/passwd resursa (na BSD sustavima, /etc/passwd pripada grupi kotača, pa smo stvorili zasebnu klasu za takve sustave). Kasnije ćemo pogledati ispravniji i očitiji način odabira alternativnih vrijednosti atributa pomoću uvjeta.

Varijable su jedna od sastavnih komponenti svakog programskog jezika, a ima ih i Puppet. Varijable počinju znakom $ i mogu sadržavati bilo koji broj, niz ili Booleovu vrijednost (true, false):

$want_apache = istina
$apache_version = "2.2.14"

Jedna od najmoćnijih značajki Puppet-a povezanih s varijablama je njegova integracija s alatom za informacije o stroju facter. Ovaj uslužni program vraća sve informacije specifične za stroj u obliku parova ključ-vrijednost, koji se u Puppetu pretvaraju u varijable istog imena. Zajedno s uvjetnim uputama u Puppet jeziku, mogu se koristiti za promjenu atributa resursa ovisno o svojstvima stroja.

Na primjer, gore opisana klasa passwd može se lako prepisati za automatski odabir atributa ovisno o vrsti OS-a (bez potrebe same klase):

# vi /etc/puppet/manifests/site.pp
datoteka ("/etc/passwd":
vlasnik => "root",
grupa => $kernel ? (
Linux => "root",
FreeBSD => "kotačić",
},
}

Ovisno o tome na kojem će OS-u ovaj fragment manifesta biti analiziran, vrijednost atributa grupe bit će root ili wheel. Uz uvjetni operator, jezik Puppet također podržava operator odabira velikih i malih slova, koji se može koristiti za kreiranje određenog resursa ovisno o vrijednosti varijable:

# vi /etc/puppet/manifests/site.pp
slučaj $operacijski sustav (
redhat: (usluga("httpd": osigurati => radi))
debian: (usluga("apache": osigurati => radi))
zadano: ( usluga ( "apache2": osigurati =>
trčanje))
}

Ovaj kod definira različite varijante resursa tipa service ovisno o operacijskom sustavu (nazivi usluga mogu se razlikovati među distribucijama Linuxa, tako da se usluga koju bi Puppet trebao pokrenuti mora specificirati pojedinačno za svaku od njih).

Zadana opcija koristi se ako vrijednost varijable ne odgovara niti jednoj od prethodnih opcija. Uz prethodno spomenute vrste resursa datoteka, paket i usluga, Puppet podržava veliki broj drugih, uključujući one stvorene programeri treće strane vrste resursa. Njihov detaljan opis, uključujući primjere, podržane atribute i značajke, može se pronaći u službenoj dokumentaciji - http://docs.puppetlabs.com/references/stable/type.html. Ispod je popis i Kratki opis najkorišteniji su:

Popularne vrste resursa za lutke

  • cron - upravljanje cron poslovima
  • exec - pokretanje skripti i naredbi
  • file - upravljanje datotekama
  • spremište za datoteke - sigurnosna kopija datoteke
  • grupa - upravljanje grupom
  • host - upravljanje unosima u datoteci /etc/hosts
  • sučelje - konfiguracija mrežnih sučelja
  • mount - montiranje datotečnih sustava
  • obavijesti - pošalji poruku u log datoteku Puppet
  • paket - upravljanje paketom
  • usluga - upravljanje uslugama
  • sshkey - upravljanje SSH ključevima
  • uredan - brisanje datoteka ovisno o uvjetima
  • korisnik - upravljanje korisnicima
  • zone - Solaris upravljanje zonama

Drugi najvažniji element Puppet jezika nakon resursa su čvorovi. Uz njihovu pomoć, administrator može opisati na koje strojeve treba primijeniti određene resurse i klase. Drugim riječima, to je način da se odredi pojedinačna konfiguracija za svaki od strojeva koji sudjeluju u Puppet mreži. Najjednostavniji primjer čvora dat je na početku članka u odjeljku "Instalacija":

# vi /etc/puppet/manifests/site.pp
zadani čvor (
uključi lozinku
}

Ovo je definicija zadanog čvora, koji uključuje passwd resurs/klasu. Naziv default znači "svi ostali čvorovi", tako da će passwd resurs/klasa definirana negdje gore biti konfigurirana na svakom od njih. Ključna riječ uključi se ovdje koristi zbog pogodnosti; zapravo, sve klase i resursi mogu se opisati izravno u opisu čvora, ali to se ne preporučuje. Osim zadanog, možete navesti naziv čvora ime mreže stroj (tada će svi resursi opisani u čvoru biti konfigurirani samo na ovom stroju), ili proizvoljno ime (tada ovaj čvor može naslijediti drugi čvor). Da bismo razumjeli kako sve ovo funkcionira zajedno s klasama i resursima, pogledajmo primjer gotovog Puppet manifesta koji se koristi za konfiguriranje dvaju mrežnih strojeva (web poslužitelja i NTP poslužitelja):

# vi /etc/puppet/manifests/site.pp
# Instaliranje i pokretanje SSH poslužitelja
klasa sshd(
paket ( openssh-poslužitelj: osigurati => instaliran )
usluga (sshd:
ime => $operacijski sustav? (
fedora => "sshd",
debian => "ssh",
zadano => "sshd",
},
omogućiti => istina,
osigurati => rad,
}
}
# Instalirajte i pokrenite Apache
klasa httpd(
paket (httpd: osigurati => instaliran)
usluga (httpd:
omogućiti => istina,
osigurati => rad,
}
}
# Instaliranje i pokretanje NTP poslužitelja
klasa ntpd(
paket ( ntp-poslužitelj: osigurati => instaliran )
usluga (
ntp-poslužitelj:
omogućiti => istina,
osigurati => rad,
}
}
# Osnovni čvor, koji se koristi samo kao roditelj svih ostalih
baza čvora (
uključi sshd
}
# Čvor na kojem će se nalaziti web poslužitelj
čvor web.server.com nasljeđuje bazu (
uključiti httpd
}
# Čvor NTP poslužitelja
čvor ntp.server.com nasljeđuje bazu (
uključiti ntpd
}

Ova naizgled jednostavna konfiguracija čini dosta: instalira Apache i pokreće ga na stroju na web.server.com i NTP poslužitelj instalira i pokreće na stroju. ntp.server.com. Dodatno, oba stroja instaliraju SSH poslužitelj. Ova konfiguracija vjerojatno neće odgovarati niti jednom administratoru; morat će se ozbiljno poboljšati kako bi se naučilo kako pravilno konfigurirati poslužitelje, primati svježe konfiguracije i druge datoteke s glavnog Puppet poslužitelja.

Međutim, jasno pokazuje snagu lutke. Koristeći jednostavnu konfiguraciju, natjerali smo strojeve da sami instaliraju i pokreću potreban softver i održavaju ga u ispravnom stanju (ako se poslužitelj sruši, Puppet će se sam ponovno konfigurirati kako bi doveo sustave u potrebno stanje).

Datotečni poslužitelj

Mnogi zadaci daljinske administracije ne mogu se riješiti bez kopiranja dodatnih datoteka na strojeve. To mogu biti unaprijed pripremljene konfiguracije, web stranice za Apache, paketi koji nisu u službenom repozitoriju i još mnogo toga. Kako bi se olakšao proces prijenosa ovih datoteka na udaljena računala, Puppet uključuje poslužitelj datoteka.

Postavke poslužitelja datoteka pohranjene su u datoteci /etc/puppet/fileserver.conf. Kako biste natjerali Puppet da posluži sadržaj određenog imenika klijentima, morate staviti nekoliko redaka u njega:

# vi /etc/puppet/fileserver.conf
put = /var/puppet/files
dopustiti *.server.com

Ova dva retka pokazuju da direktorij /var/puppet/files treba biti dostupan svim hostovima u domeni server.com. Osim toga, možemo navesti puni naziv domene dopuštenog stroja ili njegovu IP adresu, te također odrezati neželjene pomoću direktive deny. Bilo koja datoteka u tom direktoriju tada se može premjestiti na klijenta koristeći resurs datoteke. Na primjer:

# vi /etc/puppet/manifests/site.pp
datoteka ("/etc/httpd/conf/httpd.conf":
izvor => "lutka://httpd/httpd.conf",
mod => 644,
}

Datoteka httpd.conf, koja se nalazi na poslužitelju u direktoriju /var/puppet/files/httpd, kopirat će se na ciljni stroj duž staze navedene u nazivu resursa.

zaključke

U ovom smo članku pokrili vrlo mali dio mogućnosti Puppeta. Zapravo, radi se o složenom sustavu koji se u potpunosti može opisati samo na stranicama knjige. U isto vrijeme, Puppet je vrlo jednostavan za konfiguriranje i održavanje, pogotovo jer možete pronaći puno primjera njegove konfiguracije na webu.

Info

  • Puppet koristi HTTP protokol, tako da se može pokrenuti pod web poslužiteljem za poboljšanje performansi.
  • Puppet se može koristiti za automatsko konfiguriranje i održavanje jednog lokalnog stroja.
  • Kombinacijom lutke, mrežna instalacija OS (pxe-install) i slike instalacije koje se sami sastavljaju, možete stvoriti potpuno samokonfigurirajuću mrežu strojeva koja se može postaviti samo jednom naredbom.
  • Puppet u svom radu koriste mnoge velike tvrtke, poput Googlea, Fedora Projecta, Sveučilišta Stanford, crveni šešir, Siemens IT Solution i SugarCRM.

Linkovi

  • http://docs.puppetlabs.com - Dokumentacija o lutkama
  • http://docs.puppetlabs.com/guides/language_tutorial.html - Potpuni opis jezika Puppet
  • http://docs.puppetlabs.com/references/stable/type.html - Vrste izvora

Prije nekog vremena popis poslužitelja u mojim knjižnim oznakama premašio je 200. Kako se broj poslužitelja povećava, uvođenje bilo kakve nove konfiguracije ili instaliranje novih paketa gubi ogromnu količinu vremena. Pa sam odlučio upotrijebiti lutku.
Lutka(engleski lutka) je višeplatformska aplikacija klijent-poslužitelj koja vam omogućuje centralizirano upravljanje konfiguracijom operativnih sustava i programa instaliranih na nekoliko računala. Puppet je napisan u programskom jeziku Ruby.

Kažu i da je puppet sustav za daljinsko upravljanje konfiguracijom, čiji su najpoznatiji predstavnici otvoreni sustavi Cfengine i Puppet.

Nakon čitanja recenzija, odlučio sam koristiti lutku.

Instalacija i konfiguracija Puppet poslužitelja:
Instaliranje lutkarskog poslužitelja:
Instalirajte poslužitelj lutaka na OpenSuSE 11.4:

zatvarač u lutkarskom poslužitelju

Promijenimo naziv poslužitelja u lutka:
/etc/HOSTNAME:

DNS zapis mora se razriješiti na 127.0.0.2
mačka /etc/hosts:

127.0.0.2 lutka.site lutka

Dajmo korisniku prava lutka:

Pokrenimo uslugu Puppet Master:

rcpuppetmasterd početak

Dodajmo pokretanje lutkarskog demona pokretanju:

chkconfig -mappetmasterd

Postavljanje lutkarskog poslužitelja:
Definirajmo direktorij u koji će biti pohranjene datoteke koje će marionetski poslužitelj prenijeti na klijentska računala u manifestima tipa datoteke.

vim /etc/puppet/fileserver


put /etc/puppet/files
dopustiti *

mkdir /etc/puppet/files

chown -R lutka:lutka /etc/lutka/datoteke

Izradit ćemo datoteku bilo kojeg sadržaja za implementaciju i testiranje na klijentima

dodir /etc/puppet/files/puppettesting

Ponovno pokrenimo lutkarski poslužitelj:

rcpuppetmasterd ponovno pokretanje

Lutka koristi vlastiti jezik za opisivanje konačnog stanja operacijskog sustava, uz pomoć kojeg administrator sustava ukazuje u koji oblik treba dovesti komponente OS-a kako bi on postigao željeno stanje. Stanje može značiti prisutnost određene datoteke, mape, pokrenutih usluga instaliranih paketa, ažuriranja i više. Sve postavke stanja opisane su u datotekama ili manifestima koji se nalaze u direktoriju: /etc/puppet/manifests. Ove datoteke imaju imena poput *.pp.

Stvorimo najjednostavniji manifest:
/etc/puppet/manifests/1.file.pp:

file("/tmp/puppettetesting":
izvor => "lutka:///datoteke/testiranje lutke",
}

Za korištenje ovog manifesta:
lutka primijeniti 1.file.pp

Instaliranje i konfiguriranje lutkarskog klijenta:

patentni zatvarač u lutki

Dajmo prava lutke korisniku:

chown -R lutka.lutka /var/lib/lutka/

Kako bi uspostavio vezu s marionet poslužiteljem, lutka klijent šalje zahtjev za potvrdu certifikata, nakon što se ovaj zahtjev potvrdi na poslužitelju, lutka klijent će početi koristiti njemu namijenjene manifeste. Poslat ćemo zahtjev za potvrdu certifikata:

Na poslužitelju možemo vidjeti koji su zahtjevi za potvrdu na čekanju:

"puppet-client.localdomain" (B5:12 :69 :63 :DE:19 :E9:75 :32 :2B:AA:74 :06:F6:8E:8A)

Potvrđujemo:

lutka --znak "lutka-client.localdomain"

Vrijeme je da pogledamo najjednostavnije primjere stvaranja manifesta:
kreirajte datoteku /etc/puppet/manifests/site.pp:

zadani čvor (
file("/tmp/puppettetesting":
izvor => "lutka ///datoteke/testiranje lutaka",
}
usluga ("ntp":
osigurati => rad,
omogućiti => istinito,
}
paket("htop":
osigurati => instalirano,
}
}

zadano - odnosi se na sve klijente
datoteka - ovaj odjeljak govori o stvaranju ili prepisivanju datoteke /tmp/puppettetesting koja se nalazi na poslužitelju u direktoriju /etc/puppet/files
usluga: provjerite radi li usluga, ako ne radi, pokrenite je i dodajte je u startup
paket: provjerite je li paket htop instaliran na klijentu i ako nije, instalirajte ga.

Za provjeru pokrenite na klijentu:

Kao što vidite, na klijentu je ntp dodan u pokretanje, ntp demon je pokrenut, htop paket je instaliran, a puppettetesting datoteka je kopirana u direktorij /tmp/

info: Predmemoriranje kataloga za lutka-client.localdomain
info: Primjena verzije konfiguracije "1370163660"
obavijest: / Stage[ main] // Node[ default] / Service[ ntp] / secure: osigurajte promjenu "stopped" u "running"
obavijest: / Stage[ main] // Node[ default] / Package[ htop ] / secure: created
obavijest: / Stage[ glavni] // Čvor [ zadano] / Datoteka [ / tmp/ puppettesting] / osigurati: definiran sadržaj kao "(md5)f2171ac69ba86781bea2b7c95d1c8e67"
obavijest: gotov katalog za 3,95 sekundi

U sljedećem ću članku opisati složenije primjere kreiranja manifesta i web sučelja lutkarske nadzorne ploče.

Popularne vrste resursa za lutke
kron- upravljanje cron poslovima
izvrs- pokretanje skripti i naredbi
datoteka- upravljanje datotekama
spremište za datoteke- sigurnosna kopija datoteke
skupina- upravljanje grupom
domaćin- upravljanje unosima u datoteci /etc/hosts
sučelje- konfiguracija mrežnih sučelja
montirati- montiranje datotečnih sustava
obavijestiti- slanje poruke u log datoteku Puppet
paket- upravljanje paketima
servis- upravljanje uslugama
sshkey- SSH upravljanje ključem
uredan, cist- brisanje datoteka ovisno o uvjetima
korisnik- upravljanje korisnicima
zonama- Upravljanje Solaris zonom

Lutka je višeplatformska struktura koja omogućuje administratori sustava Obavljajte uobičajene zadatke pomoću koda. Kod omogućuje obavljanje raznih zadataka od instaliranja novih programa do provjere dopuštenja za datoteke ili ažuriranja korisničkih računa. Lutka odličan ne samo tijekom početne instalacije sustava, već i tijekom cijele životni ciklus sustava. U većini slučajeva lutka koristi se u konfiguraciji klijent/poslužitelj.

Ovaj odjeljak prikazuje instalaciju i konfiguraciju Lutka u konfiguraciji klijent/poslužitelj. Ovaj jednostavan primjer pokazuje kako instalirati Apache korištenjem Lutka.

Montaža

Za ugradnju Lutka unesite u terminal:

Sudo apt-get instalirajte lutkar

Na klijentskim računalima unesite:

Sudo apt-get instaliraj lutku

postavke

Prije postavljanja lutke možda ćete htjeti dodati unos DNS CNAME Za lutka.example.com, Gdje primjer.com- ovo je vaša domena. Zadani klijenti Lutka provjerite DNS za puppet.example.com kao naziv poslužitelja lutke ( Majstor lutaka). Pogledajte Usluga naziva domene za dodatne pojedinosti o korištenju DNS-a.

Ako ne namjeravate koristiti DNS, možete dodati unose u datoteku /etc/hosts na poslužitelju i klijentu. Na primjer, u datoteci /etc/hosts Lutka dodavanje poslužitelja:

127.0.0.1 localhost.localdomain localhost lutka 192.168.1.17 meercat02.example.com meercat02

Na svakom Lutka U klijentu dodajte unos za poslužitelj:

192.168.1.16 meercat.example.com meercat lutka

Zamijenite IP adrese i imena domena od primjera do vaših trenutnih adresa i imena poslužitelja i klijenata.

Sada postavimo neke resurse za apache2. Stvorite datoteku /etc/puppet/manifests/site.pp koji sadrži sljedeće:

Paket ( "apache2": osigurati => instaliran) usluga ( "apache2": osigurati => istina, omogućiti => istina, zahtijevati => Paket["apache2"] )

Čvor "meercat02.example.com" (uključuje apache2)

Zamijeniti meercat02.example.com na svoje trenutno ime Lutka klijent.

Posljednji korak za ovo jednostavno Lutka poslužitelj treba ponovno pokrenuti uslugu:

Sudo /etc/init.d/puppetmaster ponovno pokrenite

Sada dalje Lutka sve je konfigurirano na poslužitelju i vrijeme je da konfigurirate klijenta.

Prvo, konfigurirajmo uslugu Lutka agent za pokretanje. Uredite /etc/default/puppet, zamjenjujući vrijednost POČETAK na Da:

Sudo /etc/init.d/puppet start

Vratimo se na Lutka poslužitelj za potpisivanje certifikata klijenta pomoću naredbe:

Sudo lutka --znak meercat02.example.com

Ček /var/log/syslog za sve konfiguracijske pogreške. Ako je sve prošlo u redu, paket apache2 a njegove će se ovisnosti instalirati na Lutka klijent.

Ovaj primjer je vrlo jednostavan i ne pokazuje mnoge značajke i prednosti. Lutka. Za dodatne informacije izgled