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é funkce vlastní, tzv. definované typy.
Ačkoliv definovaný typ 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 parametrem nebo bez, definovaný typ může být volán opakovaně, ale nesmí se stát, že by objekt vytvořený z tohoto typu měl stejné jméno! V takovém případě by agent oznámil chybu při zpracování manifestu.
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:
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
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.