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
