Puppet (augeas)

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

Augeas je konfigurační nástroj, který umí zpracovat nativní formát konfiguračních souborů v systému do editovatelné stromové struktury a její modifikovaný obsah ukládat zpět tam kam patří.

Pro lokální administraci na příkazovém řádku lze použít nástroj augtool - u Debianu je v samostatném balíčku augeas-tools. Při správě systému přes Puppet sice není zapotřebí, protože ten provádí veškeré operace prostřednictvím API, rozhodně se však hodí.

Práce s augtool

Je-li augtool spuštěn bez jakýchkoliv příkazů, spustí příkazovou řádku v interaktivní módu na které lze dále pracovat. Jako vůbec první příkaz je vhodné spustit help, který vypíše stručný přehled základních příkazů.

Pro výpis potomků na příslušné pozici se používá příkaz ls. To připomíná práci se stromovou strukturou unixových souborových systémů - nejspíš i díky tomu, že se po natažení parseru a odpovídajících konfiguračních souborů do příslušné pozice ve stromové struktuře integrují také cesty k příslušným souborům v rámci systému.

Poznámka
root@stroj:~# augtool -A
augtool> ls /
augeas/ = (none)
files = (none)
Poznámka Pokud spustíme augtool s parametrem -A (alt. --noautoload), který zakáže automatické natažení parsovacích filtrů i souborů

Chceme-li vypsat celý podstrom, je třeba použít příkaz print.

Poznámka
augtool> print /augeas
...
Poznámka Při zadávání pozice lze s výhodou používat automatické doplňování s pomocí tabulátoru. Pěkné je, že nástroj augtool má k dispozici také vlastní historii.

Stromová struktura augeasu

Parsery konfiguračních souborů - lens

Pod jménem lens se u augeasu rozumí parsery konfiguračních souborů.

Jsou to skripty, u Debianu uložené v adresáři /usr/share/augeas/lenses/dist/, s příponou .aug, které většinou mají předdefinovány parametry pro identifikaci konfiguračních souborů, které rozparsují při svém automatickém načtení.

Toto načtení parsovacích filtrů (lenses) a parsování konfiguračních souborů, které rozpoznají, se provádí automaticky, je-li augtool spuštěn bez jakýchkoliv omezujících parametrů. Pro natažení manuální se používá příkaz load

Poznámka Ne každý filtr se však načítá automaticky. Automaticky se totiž načtou pouze ty, které mají ve skriptu nastaven autoload. Ve výpisu příslušného filtru se liší od těch manuálně natažených tím, že mají před názvem v parametru lens znak @

Informace o zavedených filtrech

Informace o zavedených filtrech jsou součástí větve /augeas/load. Viz ukázkový výpis parsovacího filtru pro zpracování konfigurace zdrojů pro APT

Poznámka
augtool> ls /augeas/load/Aptsources/
lens = @Aptsources
incl[1] = /etc/apt/sources.list.d/*
incl[2] = /etc/apt/sources.list
excl[1] = /*.augnew
excl[2] = /*.augsave
excl[3] = /*.dpkg-dist
excl[4] = /*.dpkg-bak
excl[5] = /*.dpkg-new
excl[6] = /*.dpkg-old
excl[7] = /*.rpmsave
excl[8] = /*.rpmnew
excl[9] = /*~
incl

Z názvu, který je obsahem parametru lens je zřejmé, že jde o automaticky načtený filtr, který zpracovává obsahy souborů identifikovaných jako parametry incl, tj. soubory v adresáři /etc/apt/sources.list.d a obsah souboru /etc/apt/sources.list.

excl

Prostřednictvím nastavení parametrů excl je naopak určeno, které soubory má parser ignorovat.

Parsovaný konfigurační soubor ve struktuře augeasu

Obsah konfiguračního souboru, zpracovaného přes parsovací filtr, je součástí větve /files:

Poznámka
augtool> ls /files/etc/apt/sources.list/
1/ = (none)
augtool> print /files/etc/apt/sources.list/
/files/etc/apt/sources.list
/files/etc/apt/sources.list/1
/files/etc/apt/sources.list/1/type = "deb"
/files/etc/apt/sources.list/1/uri = "http://ftp.cz.debian.org/debian"
/files/etc/apt/sources.list/1/distribution = "wheezy"
/files/etc/apt/sources.list/1/component = "main

Jak vidět z ukázkového výpisu, je parsovaný soubor /etc/apt/sources.list, včetně absolutní cesty, integrován do stromové struktury augeasu.

To, jak je interpretován jeho obsah závisí na použitém filtru (lens) - tomto konkrétním případě byl aplikován obsah skriptu aptsources.aug.

Parsovaný obsah konfiguračního souboru lze vypsat také v XML formátu, a to tak, že na příslušný nod /files/etc/apt/sources.list je aplikován místo příkazu print příkaz dump-xml

Poznámka
<augeas match="/files/etc/apt/sources.list">
  <node label="sources.list" path="/files/etc/apt/sources.list">
    <node label="1">
      <node label="type">
        <value>deb</value>
      </node>
      <node label="uri">
        <value>http://ftp.cz.debian.org/debian</value>
      </node>
      <node label="distribution">
        <value>wheezy</value>
      </node>
      <node label="component">
        <value>main</value>
      </node>
    </node>
  </node>
</augeas>

Ve stromové struktuře augeasu ale není udržován pouze obsah parsovaného souboru, ale také informace o tom, jaký parser byl na soubor aplikován a kdy došlo k poslední úpravě (mtime). To vše je součástí větve /augeas/files

Poznámka
augtool> print /augeas/files/etc/apt/sources.list
/augeas/files/etc/apt/sources.list
/augeas/files/etc/apt/sources.list/path = "/files/etc/apt/sources.list"
/augeas/files/etc/apt/sources.list/mtime = "1367244944"
/augeas/files/etc/apt/sources.list/lens = "@Aptsources"
/augeas/files/etc/apt/sources.list/lens/info = "/usr/share/augeas/lenses/dist/aptsources.aug:22.12-.42:"

Zpracování konfiguračních souborů z jiných lokací

Ve výchozím nastavení zpracovává augeas pouze konfigurační soubory umístěné v adresáři /etc. Umožňuje ale přidat poměrně jednoduše do své stromové struktury také konfigurační soubory z jiné lokace.

  1. Nejdřív je třeba přidat cestu k tomuto konfiguračnímu souboru k nastavení odpovídajícího parsovacího filtru.
  2. A pak aplikovat příkaz load

Následující ukázkový příkaz demonstruje jak lze přidat do stromové struktury augeasu přidat ke zpracování testovací soubor se zdroji pro APT /root/sources.list.temporary

Poznámka
augtool> set /augeas/load/Aptsources/incl[2] /root/sources.list.temporary
Upozornění Jak si lze povšimnout v ukázkovém výpisu parsovacího filtru který zpracovává zdrojové soubory pro APT, položku s indexem 2 měl výchozí soubor /etc/apt/sources.list. Pokud by tedy byl přidán další soubor ke zpracování takto, tak by pravděpodobně došlo k chybě.

Hodnota indexu by tedy měla být přinejhorším větší, než než je počet aktuálně nastavených parametrů incl - augtool v takovém případě použije automaticky funkci last()+1. Vhodnější je použít tuto funci rovnou:

Poznámka
augtool> set /augeas/load/Aptsources/incl[last()+1] /root/sources.list.temporary

Použití jiného parsovacího filtru