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'.

folder_file_link2.pp


## 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).

folder_file_link3.pp


## 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.

apache_custom.pp


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:

permissions.pp


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

http://manpages.ubuntu.com/manpages/lucid/man1/chmod.1.html