Puppet (soubory)
Puppet umožňuje na klientské straně zpracovávat konfiguraci několika způsoby.
- modifikací již existujících konfiguračních souborů
- nahrazením stávajících, či vytvořením nových konfiguračních souborů
K modifikaci existujících konfiguračních souborů lze používat typy jako je např. user, hosts, & etc.
Pro jejich nahrazení se používá typ file. Ten může pro obsah budoucího konfiguračního souboru použít vygenerovaný obsah, uložený v proměnné, nebo jej načíst ze souboru uloženého na stroji master. Šablony umožňují integrovat obsah z uloženého souboru s kódem programovacího jazyka ruby.
Použití jednotného konfiguračního souboru
Příkladem takového souboru, který je v rámci sítě stejný na všech strojích, může být soubor /etc/resolv.conf
, kterým se nastavují doménové servery (DNS).
Nejjednodušším způsobem, jak zajistit aby byl tento soubor k dispozici na každém nodu, je umístit do třídy basic typ file s parametrem source, ve kterém je cesta k souboru, kterým agent cílový soubor - v případě že se liší - přeplácne.
class basic {
file {"/etc/resolv.conf":
source => "/etc/puppet/manifests/obsah_pro_resolv.conf",
}
}
|
Aby agent neskončil chybou:
- Soubor
/etc/puppet/manifests/obsah_pro_resolv.conf
musí existovat - Jeho obsah musí být univerzálně použitelný
- Cesta k souboru musí být uvedena absolutně
- A serverová část Puppetu musí mít do místa kde je uložen přístupová práva[1]
Identifikace konfiguračního souboru s využitím proměnné
Má-li se obsah souboru /etc/resolv.conf
lišit podle domény nodu, lze udržovat pro každou z nich samostatný soubor. Aby pak Puppet věděl, který má zrovna použít, lze využít proměnnou $domain
, nebo $hostname
- má-li být obsah souboru specifický pro určitý konkrétní nod.
class basic {
file {"/etc/hosts":
source => "/etc/puppet/manifests/hosts.$domain",
}
}
|
Puppet tak v případě nodu v doméně 'doma' použije soubor hosts.doma
a v případě nodu v doméně 'work' bude hledat soubor hosts.work
. Atp.
Zapsání obsahu proměnné do konfiguračního souboru
V případě jednoduchých konfiguračních souborů lze obsah dynamicky sestavit do proměnné v rámci manifestu, a pak ji zapsat prostřednictvím parametru content. Takovým souborem je kupř. /etc/hosts
. Možnost upravovat jeho obsah pouze na jednom místě je rozhodně výhodnější než udržovat samostatné konfigurační soubory.
Načtení obsahu konfiguračního souboru do proměnné ze souboru
V případě rozsáhlejších souborů lze kombinovat použití proměnných s načtením společného obsahu do proměnné ze souboru prostřednictvím funkce file:
U řetězců do kterých se vkládají proměnné, jejichž obsah má být na samostatném řádku je třeba umístit konec řádku '\n' . Bez něj by byl obsah proměnných vypsán za sebou, bez odřádkování.
|
Symlinky a adresáře
Symlinky i adresáře jsou specifickým druhem souborů, proto i pro jejich správu lze využívat typ file. To zda-li jde o adresář, nebo symlink se určí parametrem ensure
Na rozdíl od pevných linků (hardlinky) jsou symbolické linky samostatné soubory, které obsahují pouze ukazatel na jiný soubor. Pokud má typ file použít jako zdroj symlink, pak vytvoří na straně nodu zase symlink, který bude odkazovat na stejný cíl. Ale protože nepracuje s obsahem cílového souboru, může vzniknout - na rozdíl od hardlinku - neplatný symlink! |
class basic {
file {"/etc/hosts":
ensure => link,
}
}
|
class basic {
file {"/etc/hosts":
ensure => directory,
}
}
|
- ↑ U modulů lze parametr source používat s adresou
puppet:///modules/nazev_modulu/soubor_s_obsahem
. Master pak hledá soubor v adresářifiles
, který je součástí modulu.