Zachu / Jani Korhonen

Linuxin keskitetty hallinta – Viikko 46

Kokeile valitsemaasi puppet-modulia. Valitse itsellesi uusi moduli Puppet Forgesta tai GitHubista. Kokeile ja arvioi yksi moduli perusteellisesti. Kirjoita lisäksi lyhyt vertailu muista moduleista samaan tarkoitukseen.

Tutustu Puppet Cookbookiin. Kirjoita esimerkkimoduli hyödyntäen kahta Cookbookin reseptiä.

Tero Karvinen

Valitsin aiheekseni ntp-modulin. Tarkemmin tutustun moduliin puppetlabs/ntp. Muita ntp-moduleita on esimerkiksi saz/ntp ja dhoppe/ntp.

puppetlabs/ntp

Aloitetaan puppetlabs/ntp:n testaamisella. Paketti ladataan ja puretaan Puppetin moduulihakemistoon. Näissä esimerkeissä hakemisto on ~/puppet/modules/. Uudelleennimetään puretun hakemiston nimi vastaamaan luokan nimeä:

$ mv puppetlabs-ntp-0.1.0/ ntp

Avataan ensin modulin init.pp manifesti, koska tiedämme sen olevan ensimmäinen manifesti jolla luokka käynnistyy.

$ nano -w ntp/manifests/init.pp

...
# Sample Usage:
#
#   class { "ntp":
#     servers    => [ 'time.apple.com' ],
#     autoupdate => false,
#   }
...
class ntp($servers='UNSET',
          $ensure='running',
          $autoupdate=false
) {

Löysimme siis heti ohjeet siitä, miten luokkaa käytetään. Itse luokan deklaraatiosta näemme myös sen, että yksikään parametri ei ole pakollinen, koska kaikilla parametreilla on oletusarvot. Voimme siis kokeilla modulin toimintaa aluksi vaikka ilman parametreja, kunhan pääsemme sinne asti.

Pikaisella vilkaisulal init.pp:stä huomaamme myös, että eri Linux-distribuutioille käytetään eri konfiguraatiotiedostoa (esim. $config_tpl = ‘ntp.conf.debian.erb’) ja eri oletuspalvelimia (esim.  $servers_real = [ ‘0.centos.pool.ntp.org’,  ‘1.centos.pool.ntp.org’, ‘2.centos.pool.ntp.org’, ]). Huomataan myös, että init.pp koostuu meillekin tutusta package-file-service -mallista, halliten ntp-nimistä pakettia ja /etc/ntp.conf tiedostoa.

Nopea pikavilkaisu ntp/templates/ntp.conf.debian.erb ei myöskään paljastanut mitään vaarallista, joten voimme kokeilla jo modulin ajoa esimerkiksi ilman parametreja.

$ sudo puppet apply –modulepath . -e ‘include ntp’

notice: /Stage[main]/Ntp/Package[ntp]/ensure: ensure changed 'purged' to 'present'
notice: /Stage[main]/Ntp/File[/etc/ntp.conf]/content: content changed '{md5}32280703a4ba7aa1148c48895097ed07' to '{md5}6e3461437c627101cf53e634abc62400'
notice: /Stage[main]/Ntp/Service[ntp]: Triggered 'refresh' from 2 events
notice: Finished catalog run in 5.51 seconds

Nyt voimme vielä katsastaa, että palvelin on päällä:

$ service ntp status

 * NTP server is running

Näyttäisi siis toimivan kuten pitää. Voimme kokeilla vielä NTP-palvelimen toimintaa asettamalla kello väärään aikaan. Koska olemme malttamattomia, käynnistämme vielä NTP-palvelimen uudestaan, jotta se hakisi nopeammin uudestaan kellonajan.

#Katsotaan tämänhetkinen kellonaika
$ date
Wed Nov 21 13:12:39 EET 2012
#Muutetaan kellonaikaa hieman
$ sudo date --set="Wed Nov 21 11:12:39 EET 2012"
Wed Nov 21 11:12:39 EET 2012
#Käynnistetään palvelu uudestaan
$ sudo service ntp restart 
* Stopping NTP server ntpd [ OK ] 
* Starting NTP server ntpd [ OK ]
#Odotetaan hetki, katsotaan kellonaikaa
$ date
Wed Nov 21 13:29:40 EET 2012

NTP ja näin ollen myös moduli näyttää siis toimivan moitteetta!

Valittu NTP-moduli toimi juuri niinkuin oletettiinkin. Moduli oli myös selkeästi rakennettu, helppo laajentaa useammille jakelupaketeille. 5/5 käyttäisin!

Nimetään ntp-moduli takaisin alkuperäiselle nimelleen, jotta voimme kokeilla seuraavaa ntp-modulia. Poistetaan myös ntp järjestelmästä, jotta seuraava moduli voi asentaa sitä

$ mv ntp/ puppetlabs-ntp-0.1.0
$ sudo apt-get purge ntp

saz/ntp

Tämän modulin luokassa on hyvin paljon enemmän parametreja säädettävänä kuin edellisessä. Parametrit on hyvin dokumentoitu init.pp:ssä ja niillä on fiksut oletusarvot. Toisin kuin edellinen moduli, voi tälle modulille asettaa jakelupakettikohtaisia arvoja käsin sellaisiin kohtiin, joita ei ole vielä konfiguroitu moduliin automaattisesti. Perus toimintalogiikka on sama: Package-file-service, ja init-manifesti on hyvin helppolukuinen.

Koska kyseisessä modulissa on paljon erilaisia muuttujien arvoja, on siinä turvauduttu vain yhteen templateen jolle arvot syötetään. Tämä on ehkä hieman ohjelmoija-lähtökohtainen tapa, tai ainakin se miellyttää minua minua jollain etäisellä tasolla.

Tehdään pikatestaus modulin toiminnasta:

$ mv saz-ntp-2.0.2/ ntp
$ sudo puppet apply --modulepath . -e 'include ntp'

Virheitä ei tulostunut ja moduli näytti tekevän oletetut muutoksetkin. Myös palvelu on päällä. Edellisestä modulista kokeiltu ajanmuutostestauskin toimi aivan kuten aiemminkin.

Taas hyvä moduli, selkeä, vielä enemmän konfiguroitavissa. Monine muuttujineen ehkä hieman vaikeampi konfiguroida omaan järjestelmään sopivaksi, mikäli järjestelmä ei valmiiksi ole tuettu. Ehkä kuitenkin näistä moduleista valitsisin käyttööni edellisen.

Tehdään samanlaiset muutokset alkutilan palautukseksi kuin aiemmin, eli uudelleennimetään ntp-hakemisto saz-ntp-2.0.2:ksi ja poistetaan ntp työasemalta.

dhoppe/ntp

Tätä modulia en saanut edes toimimaan. Se näytti erilaiselta ratkaisulta mihin olin tottunut, vaikka sekin käytti package-file-service-tyyliin. Jostain syystä tässä modulissa oli konfiguraatiotiedosto toteutettu kuitenkin defined typellä, enkä aivan ymmärrä miksi. Suoraan modulista löytyvää examplea kokeillessani sain virheilmoituksen: “Unknown function hiera_array at line 1”. En voi syyllistää puppettia siitä, ettei se tunne funktiota hiera_array, sillä en tunne minäkään. Tämä oli kuitenkin suoraan modulin esimerkistä. 0/5 en käyttäisi.

Keittokirjailu

Päätin ottaa keittokirjaesimerkikseni resurssien globaalit attribuutit. Tein moduulin jonka init.pp on seuraavanlainen:

$ cat globalsetts/manifests/init.pp

class globalsetts {
	#Global settings
	File {
		ensure => "present",
		mode => 666,
	}

	#Couple of resources
	file { "/tmp/test1":
		content => "Foo1",
	}

	file { "/tmp/test2":
		content => "Foo2",
	}
}

Ja testataan sen toimivuutta

$ ls -l /tmp/test*

-rw-rw-rw- 1 root root 4 Nov 21 15:13 /tmp/test1
-rw-rw-rw- 1 root root 4 Nov 21 15:13 /tmp/test2

Homma pelittää!

Kirjoita vastaus

Sähköpostia ei julkaista. Vaaditut kentät on merkitty *-merkillä.

Voit käyttää seuraavia HTML-tageja: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

Under heavy construction :(