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, co 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 ji nikde nenajde, skončí proces generování manifestu chybovým oznámením.

Struktura modulu

Kromě povinného adresáře manifests se mohou ve struktuře modulu vyskytovat další soubory a adresáře:

files
je adresář ve kterém jsou uloženy soubory, které se mají distribuovat tak jak jsou (ssh klíče, výchozí konfigurační soubory atp.)
templates
je adresář, do kterého se ukládají šablony konfiguračních souborů, jako soubory s příponou .erb. Do těchto šablon lze implementovat kód naprogramovaný v ruby.

init.pp

Je soubor, ve kterém je deklarovaná třída a v ní jsou implementovány typy, které se budou zpracovávat na straně agenta.

Zde můžeme tvořit další podtřídy, nebo je zapisovat do dalších samostatných souborů v adresáři manifest. Každý musí mít název podtřídy a příponu .pp.

Následující ukázkový kód demonstruje deklaraci třídy "hosts" ve stejnojmenném modulu, která ssi přes direktivu include natahuje ze souboru s názvem config.pp podtřídu "hosts::config". Před implementací kódu této podtřídy bude aplikován typ file, přes který budeme zakládat na straně agenta soubor /etc/hosts.

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
}

Obsahem dalšího souboru s názvem config.pp bude podtřída modulu "hosts" - "hosts::config", která bude obsahovat typ host, přes který lze spravovat jednotlivé záznamy v souboru /etc/hosts. V ukázkovém příkladu přidává pouze jeden záznam a to nastavení jména pro IP adresu 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,
	}
}