Puppet (šablony)

Z DCEwiki
Skočit na navigaci Skočit na vyhledávání
Verze k tisku již není podporovaná a může obsahovat chyby s vykreslováním. Aktualizujte si prosím záložky ve svém prohlížeči a použijte prosím zabudovanou funkci prohlížeče pro tisknutí.

Pro jednoduché konfigurační soubory lze využít funkci inline_template., která interpretuje jako obsah šablony textový řetězec

Pro rozsáhlejší konfigurační soubory je výhodnější použít šablonu uloženou v samostatném souboru. K jejímu načtení se použije funkce template.

Poznámka
class basic {
    file {"/etc/hosts":
        content => template("hosts.erb"),
    }
}

Pokud je uveden pouze název šablony, pak tato funkce hledá šablonu automaticky v adresáři /etc/puppet/templates. V případě že je šablona součástí modulu, musí modul kromě adresáře manifests obsahovat také adresář templates, do kterého je uložena. Zápis pak vypadá takto:

Poznámka
class basic {
    file {"/etc/hosts":
        content => template("hosts/hosts.erb"),
    }
}


Není nutné hlídat správnost cesty k souboru a jeho obsah jako šablonu zpracuje klient až na straně nodu. Takže na straně stroje master není třeba nic víc, než v manifestu uvést jakou má vzít šablonu.


Obsah šablony hosts.erb je pak následující:

Poznámka
127.0.0.1 localhost localhost.localdomain
<%= ipaddress -%>	<%= hostname -%>	<%= fqdn %>
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters


I když šablony pracují s proměnnými a umožňují používat funkce a jiné věci, nejsou stejným typem souboru jako ty, které se používají pro sestavení manifestu a které zpracovává master na straně serveru. Proto se také odlišují příponou '.erb' ač při jejich zpracování na příponě vůbec nezáleží.

Šablony umožňují vkládat mezi tagy '<% %>' kód v Ruby - jazyce, ve kterém je naprogramován celý Puppet. O jeho interpretaci na straně nodu se pak stará klient, který si šablonu stáhne. V šablonách lze využívat všech možností objektového programování, ale na většinu věcí postačí využít podmínek, smyček a proměnných.

Rozdíly v použití proměnných oproti Puppetu

  • U proměnných v šblonách se neuvádí počáteční znak '$' (string)
  • "Vytištění" proměnné se zajistí, když se umístí za počáteční tag znak '=' (rovnítko) '<%= %>'
  • Nemá-li dojít k odřádkování jednotlivých bloků kódu, lze potlačit konec řádku tím, že se před uzavírací tag umístí znak '-' (mínus) '<%= promenna -%><%= dalsi_promenna -%>'

Použití smyčky v šabloně

Kód manifestu, ve kterém se nastaví obsah proměnné $servers (pole)

Poznámka
class basic {
    $servers = [ "10.0.0.1      nod-1",
                 "10.0.0.2      nod-2",
                 "10.0.0.3      nod-3", ]
    file {"/etc/hosts":
        content => template("hosts.erb"),
    }
}

Obsah šablony hosts.erb, ve které se na straně klienta přes smyčku zpracuje obsah proměnné $servers

Poznámka
127.0.0.1 localhost localhost.localdomain
<%= ipaddress -%> 
<%= hostname -%> 
<%= fqdn %>
<% servers.each do | server | -%>
<%= server %>
<% end -%>
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters

A ukázka obsahu výsledného souboru /etc/hosts

Poznámka
127.0.0.1 localhost localhost.localdomain
147.32.87.200 master master.felk.cvut.cz
10.0.0.1      nod-1
10.0.0.2      nod-2
10.0.0.3      nod-3
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters

Kód v šabloně i manifestu lze pochopitelně dále vypilovat, ale to už je mimo rámec tohoto seznámení se šablonami.