Puppet (funkce)

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

Puppet umožňuje při generování manifestů používat kromě integrovaných typů také funkce a metody.

Metoda

Metoda, je kontejner definovaný direktivou define, který lze volat opakovaně, podobně jako funkce, ovšem s tím rozdílem že k jeho interpretaci dochází až během zpracování manifestu na straně agenta.

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ů.

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

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

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

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

Poznámka
notice: /Stage[main]//Metoda[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]//Metoda[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]//Metoda[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]//Metoda[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]//Metoda[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]//Metoda[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)
$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

Funkce, jsou programované v ruby, a od metod se liší tím, že je volá při sestavení manifestu na straně serveru master


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

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.