Teht3 (W45)


Tehtävänanto:

w45 läksy: Opiskele “Learning Puppet” luvut Templates, Parameterized Classes (Modules, Part Two) ja Defined Types. Kirjoita omia, aiheen kannalta olennaisia esimerkkiohjelmia, vähintään 1 kunkin luvun aiheesta. Tutustu Henrin ja Armensin blogiin, ja kirjoita oma moduli tai ohjelma valitsemasi artikkelin aiheesta.

(http://terokarvinen.com/2012/aikataulu-linuxin-keskitetty-hallinta-ict4tn011-2-puppet)



Kokoonpano:

HP EliteBook 2560p
└── SanDisk Cruzer 32GB (USB 2.0)
     └── Xubuntu 12.10 32-bit


Templates


Tehdään moduli, joka käyttää templatea asentaakseen mumble-serverin kustomoidulla conf-tiedostolla.


Ensin tehdään modulille vaadittavat kansiot käyttämäämme modules-kansioon.

$ mkdir mumbleserver; mkdir mumbleserver/manifests; mkdir mumbleserver/templates

Luodaan modulissa tarvittavat tiedostot.

$ touch mumbleserver/manifests/init.pp ; touch mumbleserver/manifests/init.pp

Mumbleserver-modulin rakenne:

.
└── mumbleserver
    ├── manifests
    │   └── init.pp
    └── templates
        └── mumble-server.ini.erb

Lisätään seuraava sisältö init.pp tiedostoon.


			

Kopioidaan /etc/mumble-server.ini templates kansioon.

$ cp /etc/mumble-server.ini mumbleserver/templates/mumble-server.ini.erb

Korvataan rivit:


welcometext="Welcome to this server running Murmur. Enjoy your stay!"

serverpassword=

users=100


Riveillä:


welcometext="<%= welcometext %>"

serverpassword=<%= serverpassword %>

users=<%= users %>


Ajetaan moduli(oletetaan, että ollaan 'modules' kansiossa):


$ sudo puppet apply --modulepath . -e 'include mumbleserver'
notice: /Stage[main]/Mumbleserver/Package[mumble-server]/ensure: ensure changed 'purged' to 'present'
notice: /Stage[main]/Mumbleserver/File[/etc/mumble-server.ini]/content: content changed '{md5}5ddb1ffe70a122591b3b359bb0e930f4' to '{md5}fa4569ebc7b83891fe9eafee33914972'
notice: /Stage[main]/Mumbleserver/Service[mumble-server]: Triggered 'refresh' from 1 events
notice: Finished catalog run in 24.08 seconds

Tarkistetaan tuliko muutokset voimaan /etc/mumble-server.ini tiedostoon

$ sudo cat /etc/mumble-server.ini |grep -v ^# |grep -v ^$
database=/var/lib/mumble-server/mumble-server.sqlite
dbus=system
ice="tcp -h 127.0.0.1 -p 6502"
icesecretwrite=
logfile=/var/log/mumble-server/mumble-server.log
pidfile=/var/run/mumble-server/mumble-server.pid
welcometext="
Welcome!
This is just a test" port=64738 serverpassword=NotGoodPassword bandwidth=72000 users=10 uname=mumble-server [Ice] Ice.Warn.UnknownProperties=1 Ice.MessageSizeMax=65536

Tulosteesta näemme, että muutokset tulivat voimaan.



Parametrisoidut luokat


Käytetään samaa modulia kuin ylhäällä, mutta parametrisoidaan luokka.


Muokataan manifests/init.pp -tiedostoa tämän näköiseksi:

## Varmistaa mumble-serverin olemassaolon ja korvaa sen conf-tiedoston
## modulin sisältämällä muunnellulla conf-tiedostolla (mumble-server.ini.erb)

# Luokka ottaa vastaan arvoja parametreille
# Parametreille on asetettu oletusarvot, joita luokka käyttää jos arvoja ei syötetä
class mumbleserver2($serverpassword = "pass", $welcometext = "Hello", $users = 100) {

        package {'mumble-server':
                ensure => present,
        }

        service {'mumble-server':
                ensure => running,
                enable => true,
                subscribe => File['/etc/mumble-server.ini'],
        }

        file {'/etc/mumble-server.ini':
                ensure => file,
                content => template('mumbleserver2/mumbleserver2.erb'),
                require => Package['mumble-server'],
        }

}

Ajetaan (oletetaan, että ollaan 'modules' kansiossa):

$ sudo puppet apply --modulepath . -e 'class{"mumbleserver":serverpassword=>MyPassword, welcometext=>HelloThere, users=>50}'
notice: /Stage[main]/Mumbleserver/Package[mumble-server]/ensure: ensure changed 'purged' to 'present'
notice: /Stage[main]/Mumbleserver/File[/etc/mumble-server.ini]/content: content changed '{md5}5ddb1ffe70a122591b3b359bb0e930f4' to '{md5}19d57f3b14cb9848c1b4a9d2fe48ada8'
notice: /Stage[main]/Mumbleserver/Service[mumble-server]: Triggered 'refresh' from 1 events
notice: Finished catalog run in 32.50 seconds

Tarkistetaan vielä, että syöttämiämme arvoja käytettiin:

$ sudo cat /etc/mumble-server.ini |grep -v ^# |grep -v ^$
database=/var/lib/mumble-server/mumble-server.sqlite
dbus=system
ice="tcp -h 127.0.0.1 -p 6502"
icesecretwrite=
logfile=/var/log/mumble-server/mumble-server.log
pidfile=/var/run/mumble-server/mumble-server.pid
welcometext="HelloThere"
port=64738
serverpassword=MyPassword
bandwidth=72000
users=50
uname=mumble-server
[Ice]
Ice.Warn.UnknownProperties=1
Ice.MessageSizeMax=65536

Syöttämämme arvot näkyvät tulosteessa. Toimii.



Ajetaan vielä ilman parametrien arvoja ja katsotaan toimiiko oletusarvot:

$ sudo puppet apply --modulepath . -e 'class{"mumbleserver":}'
notice: /Stage[main]/Mumbleserver/File[/etc/mumble-server.ini]/content: content changed '{md5}19d57f3b14cb9848c1b4a9d2fe48ada8' to '{md5}005b192026561d8c9846584cf83dac78'
notice: /Stage[main]/Mumbleserver/Service[mumble-server]: Triggered 'refresh' from 1 events
notice: Finished catalog run in 0.28 seconds

$ sudo cat /etc/mumble-server.ini |grep -v ^# |grep -v ^$
database=/var/lib/mumble-server/mumble-server.sqlite
dbus=system
ice="tcp -h 127.0.0.1 -p 6502"
icesecretwrite=
logfile=/var/log/mumble-server/mumble-server.log
pidfile=/var/run/mumble-server/mumble-server.pid
welcometext="Hello"
port=64738
serverpassword=pass
bandwidth=72000
users=100
uname=mumble-server
[Ice]
Ice.Warn.UnknownProperties=1
Ice.MessageSizeMax=65536

Oletusarvot näkyvät tulosteessa. Toimii.



Määritellyt tyypit (Defined Types)


Tehdään moduli, joka vie määritettyjen käyttäjien kotikansioon tiedoston.

Luodaan modulia varten vaadittavat kansiot ja tiedostot.


$ mkdir userfile ; mkdir userfile/manifests ; mkdir userfile/templates
$ touch userfile/manifests/init.pp ; touch userfile/manifests/users.pp ; touch userfile/templates/testfile.erb

Userfile-modulin rakenne:

.
└──userfile
   ├── manifests
   │   ├── init.pp
   │   └── users.pp
   └── templates
       └── testfile.erb

Lisätään seuraava sisältö init.pp -tiedostoon:


			

Lisätään seuraava sisältö users.pp -tiedostoon:


			

Lisätään seuraava sisältö testfile.erb -tiedostoon:


                        

Ajetaan moduli (oletetaan, että ollaan 'modules' kansiossa) ja katsotaan toimiiko:

$ puppet apply --modulepath . userfile/manifests/users.pp
notice: /Stage[main]//Userfile::Ufile[testman]/File[/home/testman/TestFile]/ensure: defined content as '{md5}f72c3b4a751d254b99b87ccda52f414e'
notice: /Stage[main]//Userfile::Ufile[testman2]/File[/home/testman2/TestFile]/ensure: defined content as '{md5}f6355663d27c88687e29694817ab96ea'
notice: Finished catalog run in 0.03 seconds

Tarkistetaan vielä tiedostojen olemassaolo:


$ sudo cat /home/testman/TestFile ; sudo cat /home/testman2/TestFile
		
Thu, 15 Nov 2012 22:03:24
------------------

Hey, testman!
This is just a test.
Don't worry be happy.

--------------
Regards,
Master of Puppets

		
Thu, 15 Nov 2012 22:03:24
------------------

Hey, testman2!
This is just a test.
Don't worry be happy.

--------------
Regards,
Master of Puppets



Moduli toimii toivotusti.





Lähteet:

http://docs.puppetlabs.com/learning/templates.html

http://docs.puppetlabs.com/learning/modules2.html

http://docs.puppetlabs.com/learning/definedtypes.html