Puppet (moduly)
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.
Ú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:
/etc/puppet/environments/testing/modules/basic/manifests/init.pp
/etc/puppet/modules/basic/manifests/init.pp
/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:
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 souboruconfig.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í:
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:
class hosts::config {
host {"master":
ip => '147.32.87.200',
name => 'master',
comment => "Puppetmaster",
host_aliases => "master.felk.cvut.cz",
ensure => present,
}
}
|