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 je cílovým objektem adresář, symlink, nebo soubor, určuje parametr ensure. V případě adresáře, u kterého nezáleží na přístupových právech není žádný jiný parametr zapotřebí.
file {"/etc/hosts":
ensure => directory,
}
|
Ale pomocí dalších parametrů lze zajistit, aby měl takový adresář správně nastaveného vlastníka, skupinu a přístupová práva.
file {"/users":
mode => 777,
owner => root,
group => users,
ensure => directory,
}
|
S nimi lze ošetřit správné nastavení adresářů (i souborů), tam kde by mohla případná změna v přístupových právech představovat bezpečnostní riziko.
class basic {
file {"/etc/hosts":
ensure => link,
}
}
|
- ↑ 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.