V tomto tutoriálu vysvětlím zdroje, manifesty, moduly a třídy Puppet s příklady. Předpokládám také, že již máte nainstalované uzly Puppet master/agent a připravené k použití. Abyste mohli používat Puppet, musíte pochopit, jak puppet zachází se zdroji a jak se vytvářejí manifesty a moduly.
Předpoklady:
Jak jsem řekl dříve, musíte mít nainstalované a nakonfigurované uzly Puppet Master a Agent.
Puppet’s Declarative Domain Specific Language (DSL)
- Puppet má svůj vlastní deklarativní jazyk specifický pro doménu, který definuje STATES systému.
- Kód loutky je zapsán v souboru s názvem MANIFESTY a uloženy s příponou .pp (např. site.pp je soubor hlavního manifestu)
- Kód loutky obsahuje ZDROJE které ovlivňují prvky systému (jako je soubor, balíček, služba, uživatel, hostitel, rozhraní, exec atd…). Zdroje jsou základní jednotkou systémových konfigurací a každý zdroj popisuje aspekt systému.
- Zdroje jsou seskupeny do CLASSES ( pojmenovaný blok kódů loutek), které jsou uloženy (uspořádány) v MODULECH a nejsou použity, dokud nejsou vyvolány.
- Puppet Master vytvoří KATALOG (vygenerované na základě kódu a dat Puppet) a klienti je použijí.
Podívejme se podrobně na termíny Puppet.
Zdroje
Zdroj popisuje něco o stavu systému. Například, zda existuje určitý uživatel nebo soubor, nebo má být spuštěna nebo povolena služba nebo zda by měl být nainstalován balíček.
Formát zdroje:
resource_type { 'name_of_the_resource':argument => hodnota, other_arg => hodnota,}
Příklad 1:
file { 'test':cesta => '/tmp/test', content => 'Příklad obsahu', }
Příklad 2:
package { 'ntp':secure => present,}
Příklad 3:
service { 'ntpd':sure => running, enable => true,}
Zde je příkaz pro seznam typů zdrojů v Puppet:
# / opt / puppetlabs / loutkový / bin / loutka zdroj --typesaugeascomputercronexecfilefilebucketgrouphostinterfacek5loginmacauthorizationmailaliasmaillistmcxmountnagios_commandnagios_contactnagios_contactgroupnagios_hostnagios_hostdependencynagios_hostescalationnagios_hostextinfonagios_hostgroupnagios_servicenagios_servicedependencynagios_serviceescalationnagios_serviceextinfonagios_servicegroupnagios_timeperiodnotifypackageresourcesrouterschedulescheduled_taskselbooleanselmoduleservicessh_authorized_keysshkeystagetidyuservlanwhityumrepozfszonezpool
Manifesty
Jak již bylo řečeno, kód Puppet je zapsán v souboru Manifest spříponou .pp . Výchozí soubor hlavního manifestu se nachází na adrese:
# vim /etc/puppetlabs/code/environments/production/manifests/site.pp
Další soubory manifestu lze vytvořit v /etc/puppetlabs/code/environments/production/manifests/
Třídy
Třídy obsahují bloky kódu, které lze vyvolat odkudkoli v kódu. Třídy poskytují možnost opětovného použití kódu. Pokud znáte programovací jazyky jako Java nebo C++, pak je definování třídy v Puppet úplně stejné.
class class_name { ::::::::::Kód loutky jde sem:::::::::}
Nyní lze výše uvedenou třídu zahrnout do kódu Puppet, jak je uvedeno níže:
include class_name
Moduly
Moduly pomáhají organizovat sadu manifestů. Modul lze přidat pod /etc/puppetlabs/code/environments/production/modules. Velký loutkový kód lze distribuovat do více manifestů a organizovat pomocí modulů (v dolní části tohoto příspěvku se dozvíte, jak nainstalovat, nakonfigurovat a spustit službu Apache – kde je každá z těchto úloh rozdělena do různých tříd).
Dejte nám vědět, zkuste vytvořit manifest, abyste provedli jednoduchou operaci.
Můj první manifest v loutce
Příklad 1:Vytvoření nového souboru (v site.pp)
Krok 1: Přihlaste se k Puppet Server (Master Node) jako privilegovaný uživatel.
Krok 2: Přejděte na /etc/puppetlabs/code/environments/production/manifests
Krok 3: Upravte site.pp – soubor hlavního manifestu. Pokud žádný nenajdete, vytvořte jej.
# vim site.pp
Krok 4: Pojďme napsat Puppet kód pro vytvoření souboru v /tmp/ v uzlu Puppet agent. Kód je uveden níže,
file { "/tmp/myFile":secure => "prezent", vlastník => "root", group => "root", mode => "644", content => "Toto je můj první manifest vytvořit soubor v adresáři temp", }
Ve výše uvedeném kódu jsme použili soubor typ zdroje s argumenty jako zajistit , vlastník , skupina , režim a obsah . Soubor bude vytvořen v /tmp .
Krok 5 :Nyní je soubor manifestu připraven. Přejděte do uzlu Puppet Agent a proveďte níže uvedený příkaz.
[Agent]# /opt/puppetlabs/puppet/bin/puppet agent -t Info:Používání nakonfigurovaného prostředí 'production' Info:Získávání pluginfacts Info:Získávání informací o pluginu:Cachování katalogu pro puppetagent.test.in Info:Použití konfigurace verze '1471021726' Upozornění:/Stage[main]/Main/File[/tmp/myFile]/ensure:definovaný obsah jako '{md5}8eadb0a0feef0bc667702434f816d8e8' Upozornění:Použitý katalog za 0,09 sekund
Výše uvedený výstup říká, že katalog byl použit.
Poznámka :Agenti loutek automaticky kontaktují server Puppet, aby obdrželi katalog pro svou konfiguraci. Pokud ale nechcete čekat na automatickou synchronizaci, můžete provést výše uvedený příkaz.
Krok 6 :Zkontrolujte, zda byl soubor vytvořen s nezbytným obsahem.
# ls /tmp/myFile/tmp/myFile
# more /tmp/myFileToto je můj první manifest k vytvoření souboru v adresáři temp
Vytvoření prvního modulu
Pojďme vytvořit modul, který nainstaluje webový server Apache na uzly agentů.
Krok 1 :Změňte adresář na složku modulů.
# cd /etc/puppetlabs/code/environments/production/modules
Krok 2 :Vytvořme modul s názvem httpd . K tomu použijeme PuppetForge – což vyžaduje dodržování konvence pojmenování. Například,
název organizace-název modulu
Při instalaci webového serveru Apache je balíček, který se má nainstalovat, httpd a moje konvence pojmenování bude taková, jaká je uvedena níže:
mypuppetorg-httpd
Krok 3 :Spusťte níže uvedený příkaz
# /opt/puppetlabs/puppet/bin/puppet module vygenerovat mypuppetorg-httpdPro tento modul potřebujeme vytvořit soubor metadata.json. Odpovězte prosím na následující otázky; pokud se otázka na tento modul nevztahuje, klidně ji nechte prázdnou. Puppet používá k verzi modulů sémantické verzování (semver.org). Jaká je verze tohoto modulu? [0.1.0]-->Kdo napsal tento modul? [mypuppetorg]-->Jaká licence spadá pod tento kód modulu? [Apache-2.0]-->Jak byste popsali tento modul jednou větou?--> Nainstaluje webový server Apache a nakonfiguruje jejKde je úložiště zdrojového kódu tohoto modulu?-->Kde se mohou ostatní dozvědět více o tomto modulu? -->Kam mohou ostatní přejít se žádostí o informace o tomto modulu?-->--------------------------------- -------{"name":"mypuppetorg-httpd","version":"0.1.0","author":"mypuppetorg","summary":"Nainstaluje webový server Apache a nakonfiguruje jej", "license":"Apache-2.0","source":"","project_page":null,"issues_url":null,"dependencies":[{"name":"puppetlabs-stdlib","version_requirement":">=1.0.0"}],"data_provider":null}----------------------------------- -----O generování těchto metadat; pokračovat? [n/Y]--> YUpozornění:Generování modulu v /etc/puppetlabs/code/environments/production/modules/httpd...Upozornění:Naplňování šablon...Dokončeno; modul vygenerovaný v httpd.httpd/Gemfilehttpd/Rakefilehttpd/exampleshttpd/examples/init.pphttpd/manifestshttpd/manifests/init.pphttpd/spechttpd/spec/classeshttpd/spec/classes/init_spec.rbhttpd/spec/spec_helper.rbhttpd/REAdME /metadata.json
Krok 4 :Bude vytvořen modul. Například httpd a jeho struktura je následující:
# ls httpd/ příklady Gemfile manifesty metadata.json Rakefile README.md spec
Krok 5 :Přizpůsobte modul
Krok 4 vytvoří adresářovou strukturu modulu a soubor hlavního manifestu (pro modul) s názvem init.pp . Prostě soubor otevřeme, abychom viděli, jak vypadá, a na konci souboru najdete prázdný httpd třída.
class httpd {}
Krok 6 :Pojďme vytvořit samostatnou třídu pro instalaci (install.pp), konfiguraci (configure.pp) a spouštění (start.pp) služby Apache.
Vytvoření podtřídy pro instalaci Apache: Vytvoříme nový soubor manifestu s názvem install.pp (název modulu třídy::install)
# pwd/etc/puppetlabs/code/environments/production/modules/httpd
# vim manifests/install.pp
Zkopírujte a vložte níže uvedený kód:
# ==Třída:httpd::installclass httpd::install zdědí httpd {balíček { 'httpd':ensure => nainstalován,}}
Zde podtřída ‘install ‘ zdědí hlavní třídu httpd . Podívejte se také na syntaxi balíček , což znamená Typ loutky a zajistit atribut zajišťuje, že je zmíněný balíček nainstalován.
Vytvoření podtřídy pro konfiguraci httpd (configure.pp – název modulu třídy::configure)
# pwd/etc/puppetlabs/code/environments/production/modules/httpd
# vim manifests/configure.pp
Zkopírujte a vložte níže uvedený kód, abyste zajistili, že httpd.conf soubor je správně chráněn.
class httpd::configure zdědí httpd{ soubor { '/etc/httpd/conf/httpd.conf': zajistit => soubor, vlastník => 'root', ro 4 ', }}Vytváření podtřídy pro spuštění httpd služba (start.pp – název modulu třídy::start):
# pwd/etc/puppetlabs/code/environments/production/modules/httpd
# vim manifests/start.pp
Zkopírujte a vložte níže uvedený kód:
třída httpd::start dědí httpd{ service { 'httpd':zajistit => běží, povolit => true, hasstatus => true, hasrestart => true, vyžadovat => Balíček['httpd'], } }Nyní máte vytvořené podtřídy.
- install.pp – k instalaci httpd balíček
- configure.pp – ke konfiguraci správných oprávnění pro httpd.conf soubor
- start.pp – pro povolení a spuštění httpd služby.
Krok 7: Nyní bychom měli nechat hlavní třídu httpd abyste věděli o podtřídách (install , nakonfigurujte a začít ). Chcete-li to provést, stačí otevřít hlavní třídu modulu a zahrnout podtřídy.
# vim manifests/init.pp
Zahrnout prohlášení je následující:
class httpd {include httpd::installinclude httpd::configureinclude httpd::start}
Krok 8: Nyní jsme s třídami hotovi. Ale musíte říct Puppetovi, na kterých uzlech by měl být katalog implementován. Zde je návod, jak to udělat.
Přejděte do hlavního souboru manifestu (pod /etc/puppetlabs/code/environments/production/manifests )
# vim site.pp
Zkopírujte a vložte níže uvedený kód. Zde httpd je hlavní třída vytvořená pro správu webového serveru Apache.
výchozí uzel {include httpd}
A je to! Můžete počkat, až uzly Puppet Agent automaticky stáhnou katalog, nebo jej můžete spustit ručně. Přejděte do uzlu Puppet Agent a proveďte níže uvedený příkaz.
Krok 9:
[Agent]# /opt/puppetlabs/puppet/bin/puppet agent -t Info:Používání nakonfigurovaného prostředí 'production' Info:Získávání pluginfacts Info:Získávání informací o pluginu:Cachování katalogu pro puppetagent.test.in Info:Použití konfigurace verze '1472036234' Upozornění:/Stage[main]/Httpd::Install/Package[httpd]/ensure:created Upozornění:/Stage[main]/Httpd::Configure/File[/etc/httpd/conf/httpd.conf ]/mode:režim se změnil z '0600' na '0644' Upozornění:/Stage[main]/Httpd::Start/Service[httpd]/enure:zajistit, že bylo změněno 'zastaveno' na 'running' Info:/Stage[main]/ Httpd::Start/Service[httpd]:Neplánované obnovení služby[httpd] Upozornění:Použitý katalog za 5,88 sekund
Protože se jedná o váš první modul, možná budete chtít ověřit, zda je balíček nainstalován a služba správně spuštěna.
[Agent]# ot./min -qa|grep httpdhttpd-tools-2.4.6-40.el7.centos.4.x86_64httpd-2.4.6-40.el7.centos.4.x86_64
[Agent]# service httpd statusPřesměrování na /bin/systemctl status httpd.servicehttpd.service – HTTP server Apache načten:načten (/usr/lib/systemd/system/httpd.service; povoleno; přednastaveno dodavatelem:zakázáno) Aktivní:aktivní (běží) od St 2016-08-24 17:29:29 IST; před 6 minutami
Závěr
A je to! Nyní víte, jak napsat své vlastní moduly Puppet pro instalaci, konfiguraci a povolení služby. Tento tutoriál je však pouze výchozím bodem při dělání zázraků s Puppet. Veselé loutkářství!