Puppet (funkce)
Puppet umožňuje při generování manifestů používat také funkce. Kromě integrovaných funkcí lze vytvořit a používat také vlastní funkce.
Funkce je kontejner, definovaný direktivou define, ve kterém je kód, který může buď sám o sobě vykonávat další operace, při kterých může zpracovávat hodnoty předané přes parametry. Z hlediska použití se takové funkce chovají stejně jako ty integrované.
Volání funkce bez parametru
define funkce {
notify { "Do funkce je předán pouze parametr - $name":; }
}
funkce { 'jmeno':; }
|
Výsledkem zavolání této funkce by bylo pouze vypsání textového řetězce 'Do funkce je předán pouze parametr - jmeno' do logu klienta (přes notify). Nicméně k demonstraci výsledku tento jednoduchý příklad stačí.
Je-li místo konkrétního jména předáno pole, nebo proměnná, která pole obsahuje, volá se funkce pro každou položku pole zvlášť, přičemž obsah proměnné $name
bude vždy odpovídat této položce. Více v následujícím příkladu.
Volání funkce s parametrem
Funkci lze volat také s parametrem.
Výsledkem výše uvedeného kódu by byly následující vypsané řetězce:
Praktický příklad
Následující ukázka kódu v manifestu zajistí aktivaci a deaktivaci modulů pro apache2
Moduly které se mají aktivovat jsou v uloženy jako položky pole v proměnné $enable
a ty které se v konfguraci vyskytnout nesmí jsou v proměnné $disable
. Kód sám by byl nejspíš součástí třídy pro konfiguraci serveru apache2.
V uvedeném příkladu je v nadefinované uživatelské funkci kontejner zavolaná vestavěná funkce inline_template, která zajistí, že složený řetězec bude interpretován jako šablona
Je-li pak Do nadefinovaného typu s názvem kontejner
se pošle řetězec obsažený v proměnné $konfigurak_ke_zpracovani
. Ten pak na tento řetězcový obsah aplikuje funkci scope.lookupvar která ověřuje výskyt nastavení proměnné s názvem VARIABLE.
Pokud se v řetězci takové nastavení vyskytne, je tato proměnná interpretována šablonou vytvořenou funkcí inline_template a výsledek zpracování je pak skrze notify zapsán do logu.
Přehled vestavěných funkcí
Toto je pouze úzký výběr námi používaných funkcí. Pro kompletní dokumentaci viz Docs:Type Reference na oficiálních stránkách stránkách http://puppetlabs.com |
file
Funkce se dá použít v podmínkách vložení pravdivostní hodnoty do proměnné, kterou lze následně využít v podmínkách.
$etckeeper = file('/etc/.git')
Vrací True pokud na na straně agenta existuje /etc/.git
.
include
inline_template
Puppet (funkce) inline template
regsubst
require
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ý.
$sekana = split($retezec,",")