Teht2 (w44)
Tehtävänanto:
"w44 läksy: Opiskele “Learning Puppet” luvut Ordering ja Modules and Classes (Part One). Kirjoita omia, aiheen kannalta olennaisia esimerkkiohjelmia, vähintään 1 kunkin luvun aiheesta. Lue ‘pinfo “File permissions”‘ ja ‘man chmod‘; kirjoita esimerkkimoduli oikeuksista."
(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
Resurssien suoritusjärjestys
Käyttämällä metaparametreja 'before' ja 'require'.
## Manifesti, joka luo kansion, siihen tiedoston ja linkin osoittamaan tiedostoon. # Tämä resurssi ajetaan ensimmäisenä. # Metaparametri 'before' määrittää tämän resrussin # ajettavan ennen 'testfile':n luomista file {'/tmp/test1': ensure => directory, mode => 644, before => File['/tmp/test1/testfile'], } # Tämä resurssi ajetaan vasta toisena, # sillä yllä olevan resurssissa tämä resurssi on # määritelty riippuvaiseksi ylemmästä resurssissa. file {'/tmp/test1/testfile': ensure => present, content => "Just another test..", } # Tämä resurssi ajetaan viimeisenä, # sillä se vaatii 'testfile':n olemassaolon ennen ajamista file {'/tmp/test1/testlink': ensure => link, target => '/tmp/test1/testfile', require => File['/tmp/test1/testfile'], }
Käyttämällä ketjutusta (chaining).
## Manifesti, joka luo kansion, ## siihen tiedoston ja linkin osoittamaan tiedostoon. # Tämä resurssi ajetaan ensimmäisenä. file {'/tmp/test1': ensure => directory, mode => 644, } # Tämä resurssi ajetaan toisena file {'/tmp/test1/testfile': ensure => present, content => "Just another test..", } # Tämä resurssi ajetaan viimeisenä file {'/tmp/test1/testlink': ensure => link, target => '/tmp/test1/testfile', } File['/tmp/test1'] -> File['/tmp/test1/testfile'] -> File['/tmp/test1/testlink']
Moduulit ja luokat
Luokat
Esimerkki luokasta, joka asentaa apachen ja määrittää modatun conf-tiedoston sen käyttöön.
class customApache { # määrittää luokan nimen # määrittää paketin package {'apache2': # asentaa paketin, jos ei ole jo asennettu ensure => installed, } # määrittää sovelluksen service {'apache2': # varmistaa, että sovellus on käynnissä ensure => running, # asettaa sovelluksen käynnistymään koneen käynnistyksen yhteydessä enable => true, # vaatii 'apache2.conf' resurssin ajamisen ennen itseään subscribe => File['apache2.conf'], } file { 'apache2.conf': #määrittää korvattavan tiedoston path => '/etc/apche2/apache2.conf', # varmistaa, että kyseessä on tiedosto ensure => file, # vaatii resurssin 'apache2' ajettavan ennen itseään require => Package['apache2'], # määrittää korvaavan tiedoston source => "/root/learning-manifests/apache2_modded.conf", } }
Moduulit
Luodaan tarvittavat kansiot moduulia varten kansioon '/etc/puppetlabs/puppet/modules/' ja muokataan yllä olevasta luokasta moduuli.
$ cd /etc/puppetlabs/puppet/modules $ mkdir customApache; cd customApache; mkdir manifests; cd manifests $ nano init.pp
Kopioidaan yllä oleva luokan koodi 'init.pp' -tiedostoon ja tallennetaan.
Modulin ajaminen esimerkin puppet kansiosta:
$ puppet apply --modulepath modules/ -e 'include apacheCustom'
Oikeudet
Manifesti, joka luo muutaman kansion ja tiedoston eri oikeuksilla:
class customApache { # määrittää luokan nimen # määrittää paketin package {'apache2': # asentaa paketin, jos ei ole jo asennettu ensure => installed, } # määrittää sovelluksen service {'apache2': # varmistaa, että sovellus on käynnissä ensure => running, # käynnistää sovelluksen uudelleen enable => true, # vaatii 'apache2.conf' resurssin ajamisen ennen itseään subscribe => File['apache2.conf'], } file { 'apache2.conf': #määrittää korvattavan tiedoston path => '/etc/apche2/apache2.conf', # varmistaa, että kyseessä on tiedosto ensure => file, # vaatii resurssin 'apache2' ajettavan ennen itseään require => Package['apache2'], # määrittää korvaavan tiedoston source => "/root/learning-manifests/apache2_modded.conf", } }
Lähteet:
http://docs.puppetlabs.com/learning/ordering.html
http://docs.puppetlabs.com/learning/modules1.html
https://www.gnu.org/software/coreutils/manual/html_node/File-permissions.html#File-permissions