Zachu / Jani Korhonen

Linuxin keskitetty hallinta – Viikko 43

w43 läksy: Opiskele “Learning Puppet” (http://docs.puppetlabs.com/learning/) luvut “Resources and the RAL” ja “Manifests”. Kirjoita esimerkkiohjelmia, vähintään 1 kunkin luvun aiheesta.Tero Karvinen

Valitettavasti minulla on läksyä tehdessä hieman hämärän peitossa mitä tehtävänannossa tarkoitetaan “esimerkkiohjelma”-termillä. Myös termi “luku” on tässä kysymysmerkin takana. Haluaako opettaja resursseista kirjoitettavan yhden ohjelman ja manifesteista toisen. Pienen pohdinnan jälkeen tulkitsen tehtävänannon niin, että opiskelijoiden tulee kirjoittaa manifesteja ainakin Learning Puppet – Manifests -sivun aiheista Resource Declarations, Once More, With Feeling ja The Destination. Tehdään siis niin!

Ensimmäinen manifesti

Laitetaan ensimmäinen manifest luomaan (oikeammin ylläpitämään) tiedostoa, ja määritellään tiedostolle sisältö.

$ cat 1.file.pp
file {'just testing':
path => '/tmp/this is just testfile',
ensure => present,
mode => 0640,
content => "containing test content\n",
}

Ajetaan manifesti

$ puppet apply 1.file.pp
notice: /Stage[main]//File[just testing]/ensure: created
notice: Finished catalog run in 0.02 seconds

Tarkastetaan että se toimi kuten oli määritelty

$ cat /tmp/this\ is\ just\ testfile
containing test content

Ja näinhän tosiaan oli tapahtunut! Ensimmäinen Puppet-manifestimme toimii kuin unelma! Aivan kuten olimme määritelleetkin.

Toinen manifesti

Kokeillan file-resurssin muita ensure-tyyppejä. Näin saadaan luotua linkkejä, hakemistoja ja poistettua tiedostoja. Samalla voidaan kokeilla notify-viestejä.

$ cat 2.file.pp 
notify{"Pathia ei tarvitse asettaa jos nimeää file-resurssin tiedostonimeksi":}
file {'/tmp/testi1':
	ensure	=> present,
	content	=> "Testi1",
}

notify{"Pathin voi asettaa jos nimeää filen jotenkin muutoin":}
file {'Testi2':
	ensure	=> present,
	content	=> "Testi2",
	path	=> "/tmp/testi2",
}

notify{"Luodaan hakemisto":}
file {'/tmp/testi3':
	ensure => directory,
}

notify{"Luodaan linkki, osoitetaan se testi1:seen":}
file {'/tmp/testi4':
	ensure => link,
	target => '/tmp/testi1',
}

notify{"Poistetaan testi5":}
file {'/tmp/testi5':
	ensure => absent,
}

Luodaan manifestille poistettava tiedosto

$ touch /tmp/testi5

Ajetaan manifesti

$ puppet apply 2.file.pp 
warning: Could not retrieve fact fqdn
notice: /Stage[main]//File[/tmp/testi1]/ensure: created
notice: Pathin voi asettaa jos nimeää filen jotenkin muutoin
notice: /Stage[main]//Notify[Pathin voi asettaa jos nimeää filen jotenkin muutoin]/message: defined 'message' as 'Pathin voi asettaa jos nimeää filen jotenkin muutoin'
notice: /Stage[main]//File[Testi2]/ensure: created
notice: Luodaan hakemisto
notice: /Stage[main]//Notify[Luodaan hakemisto]/message: defined 'message' as 'Luodaan hakemisto'
notice: Luodaan linkki, osoitetaan se testi1:seen
notice: /Stage[main]//Notify[Luodaan linkki, osoitetaan se testi1:seen]/message: defined 'message' as 'Luodaan linkki, osoitetaan se testi1:seen'
notice: /Stage[main]//File[/tmp/testi3]/ensure: created
notice: Poistetaan testi5
notice: /Stage[main]//Notify[Poistetaan testi5]/message: defined 'message' as 'Poistetaan testi5'
notice: /Stage[main]//File[/tmp/testi5]/ensure: removed
notice: Pathia ei tarvitse asettaa jos nimeää file-resurssin tiedostonimeksi
notice: /Stage[main]//Notify[Pathia ei tarvitse asettaa jos nimeää file-resurssin tiedostonimeksi]/message: defined 'message' as 'Pathia ei tarvitse asettaa jos nimeää file-resurssin tiedostonimeksi'
notice: /Stage[main]//File[/tmp/testi4]/ensure: created
notice: Finished catalog run in 0.05 seconds

Tarkastetaan, että manifesti loi halutut tiedostot

$ ls -l /tmp/
-rw-r--r-- 1 xubuntu xubuntu  6 Oct 31 20:39 testi1
-rw-r--r-- 1 xubuntu xubuntu  6 Oct 31 20:39 testi2
drwxrwxr-x 2 xubuntu xubuntu 40 Oct 31 20:39 testi3
lrwxrwxrwx 1 xubuntu xubuntu 11 Oct 31 20:39 testi4 -> /tmp/testi1

Ja kaikki näyttäisi taas kerran toimivan! Hauskana huomiona, eri resursseja ei luotu samassa järjestyksessä kuin missä ne olivat tiedostossa. Hyvä tietää, että siihen järjestykseen ei voi luottaa!

Kolmas manifesti

Asennetaan Puppetilla apache ja pidetään huoli siitä, että apache on päällä.

$ cat 1.apache2.pp 
package { 'apache2':
	ensure	=> installed
}
service { 'apache2':
	ensure	=> running
}

Ajetaan manifesti. Huomattavaa on, että manifesti pitää ajaa root-oikeuksilla, koska nyt on tarkoitus asentaa uusia palveluita.

$ sudo puppet apply 1.apache2.pp 
warning: Could not retrieve fact fqdn
err: /Stage[main]//Service[apache2]: Could not evaluate: Could not find init script for 'apache2'
notice: /Stage[main]//Package[apache2]/ensure: ensure changed 'purged' to 'present'
notice: Finished catalog run in 8.32 seconds

Saimme virheitä, miksi? Tämä johtuu siitä, että puppet yritti käynnistää apache2-palvelua ennen sen asentamista. Kokeillaan ajaa puppet-skripti uudestaan.

$ sudo puppet apply 1.apache2.pp 
warning: Could not retrieve fact fqdn
notice: Finished catalog run in 0.39 seconds

Tällä kertaa ei virheitä tullut. Kokeillaan vielä käynnistääkö puppet apachen mikäli se ei ole päällä.

$ sudo service apache2 status
Apache2 is running (pid 12758).
$ sudo service apache2 stop
 * Stopping web server apache2                                             apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
 ... waiting .                                                      [ OK ]
$ sudo puppet apply 1.apache2.pp 
warning: Could not retrieve fact fqdn
notice: /Stage[main]//Service[apache2]/ensure: ensure changed 'stopped' to 'running'
notice: Finished catalog run in 0.21 seconds
$ sudo service apache2 status
Apache2 is running (pid 13178).

Kyllä, tämäkin näyttää toimivan!

Tässä muutama helppo ns. “Hello World”-manifesti Puppettiin. Kuten huomataan, ei se puppetin käyttö niin hankalaa ollutkaan :)

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 :(