Puppet (moduly)

Z DCEwiki
Skočit na navigaci Skočit na vyhledávání

V kapitole věnované seznámení se strukturou manifestu bylo v odstavci o třídách uvedeno několik ukázkových příkladů vytvoření a implementace třídy. I když třídy mohou být součástí hlavního manifestu, je lepší udržovat je v samostatných modulech.

V deklaraci nodu se taková třída natahuje přes direktivu include stejným způsobem, jako kdyby byla součástí výchozího manifestu.

Master, pokud nenajde deklarovanou třídu ve výchozím manifestu, předpokládá, že ji nalezne ve stejnojmenném modulu.

Ve té nejprostší podobě je modul adresář, v úložišti modulů na stroji kde běží master, který má stejný název jako hledaná třída. Ten obsahuje podadresář manifests se souborem init.pp, ve kterém je deklarovaná třída.

Úložiště modulů

Puppet může mít prostřednictvím proměnné $modulepath nastaveno více než jedno úložiště modulů. Na prvním místě je, coby jako výchozí úložiště, adresář modulů příslušného prostředí. Za ním, odděleny dvojtečkou, mohou být uvedeny další cesty. Nepracuje-li agent v odděleném prostředí, jsou moduly obvykle umístěny v adresáři /etc/puppet/modules.

user@stroj~$ sudo puppet agent --configprint modulepath
/etc/puppet/environments/testing/modules:/etc/puppet/modules:/usr/share/puppet/modules

Třídu "basic" z ukázkové deklarace nodu by tedy master postupně hledal v souborech:

  1. /etc/puppet/environments/testing/modules/basic/manifests/init.pp
  2. /etc/puppet/modules/basic/manifests/init.pp
  3. /usr/share/puppet/modules/basic/manifests/init.pp

Pro další proces zpracování manifestu akceptuje master vždy pouze první deklaraci třídy, na kterou narazí.

Pokud by na deklaraci třídy "basic" nikde nenarazil, ukončil by generování manifestu chybovým oznámením.

Struktura modulu

Jméno modulu, které natahuje direktiva include je relevantní názvu podadresáře.

Tento poadresář kromě povinného adresáře manifests může obsahovat ještě další adresáře:

files
ve kterém jsou soubory, které bude puppet distribuovat beze změn (ssh klíče, výchozí konfigurační soubory atp.)
templates
do kterého se ukládají šablony konfiguračních souborů, což jsou soubory s příponou .erb

Vůbec nevadí pokud zůstane některý těchto adresářů z nich prázdný, takže můžeme všechny tři adresáře vytvořit najednou:

Poznámka
 root@master~# mkdir -p /etc/puppet/modules/<jméno modulu>/{files,manifests,templates}

Výchozím souborem modulu pak je soubor <code>init.pp</code>, ve kterém je modul inicializován jako třída.


init.pp

Kód, který bude soubor generovat budeme zapisovat do souboru init.pp, ve kterém je definován modul jako třída. Ale jednotlivé záznamy pro typ host, přes které se budou zpracovávat jednotlivé záznamy budeme zapisovat do samostatného souboru s názvem config.pp, který se do třídy natáhne přes direktivu include. Tedy..

file
Přes který budeme soubor /etc/hosts zakládat, bude součástí init.pp.
host
Který bude modifikovat jednotlivé záznamy v souboru /etc/hosts umístíme do souboru config.pp ve kterém je budeme udržovat. Na začátku budeme spravovat pouze /etc/hosts stroje master, tudíž můžeme použít jeho výchozí nastavení.

Obsah souboru init.pp je tedy prozatím následující:

Poznámka
class hosts {
	file {"/etc/hosts":
		content => template("obsah_pro_hosts"),
	}
	include hosts::config
}

config.pp

Obsahem tohoto souboru bude subtřída modulu host - config, která prozatím bude obsahovat pouze jeden záznam a to stroje master:

Poznámka
class hosts::config {
	host {"master":
		ip => '147.32.87.200',
		name => 'master',
		comment => "Puppetmaster",
		host_aliases => "master.felk.cvut.cz",
		ensure => present,
	}
}