Puppet (funkce)

Z DCEwiki
Skočit na navigaci Skočit na vyhledávání

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.

Definovaný typ je kontejner, definovaný direktivou define, který se chová jako funkce. Obsahem kontejneru je kód, který může dále zpracovávat obsah předaný přes parametry, nebo na jejich základě předaných parametrů modifikovat obsah manifestu. Z hlediska použití se definovaný typ používá stejně jako integrované typy.


Upozornění 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

Poznámka
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.

Poznámka
define funkce($parametr) {
      notify { "Hodnota parametru parametr je u položky $name - $parametr":; }
}
 
funkce { [ "A", "B", "C" ]:
      parametr => "platná"
}
funkce { [ "D", "E", "F" ]:
      parametr => "neplatná"
}

Výsledkem výše uvedeného kódu by byly následující vypsané řetězce:

Poznámka
notice: /Stage[main]//Funkce[C]/Notify[Hodnota parametru parametr je u poloÅky C - platnÃ]/
message: is absent, should be Hodnota parametru parametr je u poloÅky C - platnà (noop)
notice: /Stage[main]//Funkce[F]/Notify[Hodnota parametru parametr je u poloÅky F - neplatná]/
message: is absent, should be Hodnota parametru parametr je u poloÅky F - neplatná (noop)
notice: /Stage[main]//Funkce[A]/Notify[Hodnota parametru parametr je u poloÅky A - platnÃ]/
message: is absent, should be Hodnota parametru parametr je u poloÅky A - platnà (noop)
notice: /Stage[main]//Funkce[D]/Notify[Hodnota parametru parametr je u poloÅky D - neplatná]/
message: is absent, should be Hodnota parametru parametr je u poloÅky D - neplatná (noop)
notice: /Stage[main]//Funkce[B]/Notify[Hodnota parametru parametr je u poloÅky B - platnÃ]/
message: is absent, should be Hodnota parametru parametr je u poloÅky B - platnà (noop)
notice: /Stage[main]//Funkce[E]/Notify[Hodnota parametru parametr je u poloÅky E - neplatná]/
message: is absent, should be Hodnota parametru parametr je u poloÅky E - neplatná (noop)



Přehled vestavěných funkcí

Poznámka 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í.

Poznámka
$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.

Upozornění 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.

Poznámka
$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

Puppet (funkce) 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

Upozornění 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ý.

Poznámka Rozdělení obsahu proměnné $retezec
$sekana = split($retezec,",")

A použití druhé položky vytvořeného pole $sekana

$druhacastretezce = $sekana[1]
Upozornění 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.