Puppet (funkce)
Puppet umožňuje při generování manifestů používat kromě integrovaných typů také funkce a metody.
Metoda
Obsahem kontejneru je kód, kterým můžeme dále modifikovat výslednou podobu manifestu, na základě lokálních fakt a předaných parametrů.
define metoda {
notify { "Metodě byl předán pouze parametr - $name": }
}
metoda { 'jmeno': }
|
Výsledkem zavolání této metody by bylo pouze vypsání textového řetězce 'Metodě byl předán pouze parametr - jmeno' do logu na straně agenta (přes notify). Nicméně pro demonstraci použití metody tento jednoduchý příklad stačí.
Ačkoliv metoda vypadá z hlediska syntaxe zápisu i použití podobně jako parametrizovaná třída, funguje jinak.
Zatím co třídu lze v rámci jednoho jmenného prostoru (scope) deklarovat pouze jednou, ať již s parametry nebo bez, metody lze volat opakovaně. S jedinou podmínkou, a to, že jméno objektu vytvořeného pomocí metody nebude stejné jako má jiný, již existující objekt. V takovém případě agent při zpracování manifestu oznámí chybu a přeruší proces jeho zpracování. |
Parametry
Je-li místo textového řetězce metodě předáno pole, nebo proměnná, která pole obsahuje, volá se metoda pro každou položku pole zvlášť, přičemž obsah proměnné $name
bude vždy odpovídat jménu aktuální položky. Jak je demonstrováno v následujícím příkladu použití parametrizované metody.
Výsledkem zpracování výše uvedeného kódu by byly následující vypsané řetězce:
- $name
- Je parametr kterým disponuje metoda vždy, neboť se do něj při volání metody ukládá jméno volané položky seznamu.
- $parametr
- Je parametr, do kterého se při volání metody přiřadí hodnota atributu $hodnota. Tento atribut musí být při volání metody nastaven vždy. Kdyby tomu tak nebylo, skončilo by zpracování metody chybou.
- $default_parametr
- Demonstruje implementaci parametru, který při volání metody nastaven být může, ale nemusí. V takovém případě se při zpracování metody použila jeho deklarovaná hodnota - byť by šlo o prázdný řetězec.
Funkce
Toto je pouze malý přehled použitelných funkcí. Pro jejich kompletní přehled viz dokumentaci Docs: Function Reference na oficiálních stránkách stránkách http://puppetlabs.com |
file
Parametrem funkce file je seznam jednoho a více URL souborů, které se agent postupně pokusí vyhledat. Funkce pak načte obsah prvního platného souboru na který narazí.
$ntp_conf = file('/etc/ntp.conf', '/etc/openntpd/ntpd.conf')
|
U výše uvedeného příkladu načte agent obsah konfiguračního souboru pro NTP démona do proměnné $ntp_conf
, se kterou lze dále pracovat.
Pozor na rozdíl mezi funkcí file, která načítá obsah souboru a typem file, který pracuje se souborem jako s objektem! |
include
Funkce pro deklaraci instance třídy.
inline_template
Vestavěná funkce inline_template umožňuje interpretovat textový řetězec stejným způsobem, jako by šlo o šablonu.
Textový řetězec, který je výsledkem interpretace lze využít při dalším zpracování manifestu.
$ip = 'IP'
$setip = inline_template("$ip=<%= ipaddress %>")
notify { "$setip": }
|
Výsledkem zpracování ukázkového kódu je sestavení řetězce, který lze kupř. vložit do konfiguračního souboru, který vyžaduje k proměnné IP
přiřazenou aktuální IP adresu klienta. Výsledený řetězec na stroji s IP adresou 10.0.0.103 pak bude vypadat takto:
IP=10.0.0.103
Metaparametr notify je v příkladu uveden pouze pro kontrolní výpis obsahu proměnné $setip
do logu.
notice
Funkce, která zapíše obsah předaný jako parametr manifestu do systémového logu (/var/log/syslog
) na stroji kde běží Master
regsubst
require
Je funkce pro deklaraci tříd na nichž je závislé zpracování objektu, v jehož kontextu se funkce volá. Na rozdíl od funkce include není při jejím použití nutné explicitní určení závislosti
Pozor na rozdíl mezi funkcí require, která provádí deklaraci tříd a metaparametrem require, kterým se nastavují vzájemné závislosti mezi objekty! |
split
Funkce rozseká obsah proměnné, která je předaná jako první parametr. Jako rozdělovací řetězec použije řetězec, který následuje jako parametr druhý.
Rozdělení obsahu proměnné $retezec
$sekana = split($retezec,",")
A použití druhé položky vytvořeného pole $druhacastretezce = $sekana[1]
|
Pozor na funkci split, jde-li o master server v distribuci Debian squeezy (verze 2.6.2). Bug, který byl opraven od verze 2.6.3 tuto funkci neumožňuje použít! Nefunguje správně vytvoření pole. |
Debugovací funkce
Jejich pomocí lze do kódu manifestu integrovat nejrůznější kontrolní výpisy a upozornění. Ty se pak podle nastavené úrovně logování zapisují do systémového logu stroje kde běží master.
- alert
- crit
- debug
- info
- notice
- emerg
- err
- warning
fail
Umožňuje nastavit podobně jako debugovací funkce řetězec, který se vypíše jako chyba, která se vyskytla během během zpracování manifestu, ovšem tentokrát na straně agenta.