XML-tiedostojen muokkaus Puppetin Augeas-resurssilla
NOTE: this article is now also available in English (here).
Aiemmassa blogikirjoituksessa käsittelin Augeaksen käyttöä Puppetin kanssa esimerkkinä PostgreSQL:n pg_hba.conf -tiedoston muokkaus. Tässä kirjoituksessa käsitellään XML-tiedostojen muokkausta Augeaksella, mikä on luultavasti siistein ratkaisu silloin, kun ei haluta hallita koko tiedostoa esimerkiksi ERB-templatena. Alla muokataan Pwm:n web.xml-tiedostoa, johon on määritettävä asetushakemiston polku.
Ennen itse Augeas-resurssin kirjoitusta kannattaa tarkistaa, mikä Augeaksen käsitys muokattavan tiedoston rakenteesta on. Ensin augtoolille pitää kertoa, mistä hallittava tiedosto löytyy:
$ augtool
augtool> set /augeas/load/Xml/incl[1] /var/lib/tomcat8/webapps/pwm/WEB-INF/web.xml
augtool> load
Nyt Augeas näkee var-hakemiston polussa /files:
augtool> ls /files
etc/ = (none)
lib/ = (none)
home/ = (none)
boot/ = (none)
augtool> load
augtool> ls /files
etc/ = (none)
lib/ = (none)
home/ = (none)
boot/ = (none)
var/ = (none)
Varmistetaan vielä, että muokattava tiedosto näkyy Augeakselle:
augtool> ls var/lib/tomcat8/webapps/pwm/WEB-INF/
web.xml/ = (none)
Nyt katsotaan, miltä tiedosto Augeaksen mielestä näyttää. Tämä komento tuottaa valtavan määrän tulostetta, josta alla näytetään vain oleellinen:
augtool> print var/lib/tomcat8/webapps/pwm/WEB-INF/web.xml/
--- snip ---
/files/var/lib/tomcat8/webapps/pwm/WEB-INF/web.xml/web-app/context-param/param-name
/files/var/lib/tomcat8/webapps/pwm/WEB-INF/web.xml/web-app/context-param/param-name/#text = "applicationPath"
/files/var/lib/tomcat8/webapps/pwm/WEB-INF/web.xml/web-app/context-param/#text[3] = " "
/files/var/lib/tomcat8/webapps/pwm/WEB-INF/web.xml/web-app/context-param/param-value
/files/var/lib/tomcat8/webapps/pwm/WEB-INF/web.xml/web-app/context-param/param-value/#text = "unspecified"
/files/var/lib/tomcat8/webapps/pwm/WEB-INF/web.xml/web-app/context-param/#text[4] = " "
--- snip --
Tämän pohjalta voidaan jo luoda varsinainen Augeas-resurssi:
augeas { 'pwm applicationPath':
incl => "/var/lib/tomcat8/webapps/pwm/WEB-INF/web.xml",
lens => 'Xml.lns',
changes => "set web-app/context-param/param-value/#text /etc/pwm",
}
Resurssi kannattaa tallentaa esim. augtest.pp -tiedostoon ja alustavasti testata puppet apply-komennolla:
$ puppet apply augtest.pp
Tämän jälkeen koodin voikin jo integroida haluttuun Puppet-moduuliin (tässä tapauksessa puppet-pwm).