Linux palvelimena -kurssi päättyi tällä viikolla ja päällä on mielettömät kotitehtävävajarit, jotain pitäisi päästä tekemään. Siispä teen ja kirjoitan siitä muistiinpanot tämän blogiartikkelin muodossa. Kurssilla on tullut monta kertaa vastaan Puppet, josta en tiedä sen enempää kuin että se liittyy Linux-käyttöjärjestelmien keskitettyyn hallintaan. Ilmeisesti siis vähän samaan tyyliin kuin Windows-ympäristössä voidaan määritellä työasemien asetuksia Group Policyillä.

Yritän tässä artikkelissa asentaa ja konfiguroida Puppetin yritys-erehdys menetelmällä sen kummemmin asiaan etukäteen tutustumatta. Hyvä englanninkielinen ohje saman asian aikaansaamiseksi löytyy Puppetin omasta dokumentaatiosta. Dokumentoin kaikki työvaiheet, tämän artikkelin lukijan kannattaa ehkä lukea loppuun asti ennen kuin yrittää samoja komentoja itse :)

1. Mikä ihmeen Puppet?

Wikipediaa lukemalla selviää hieman lähtötietoja enemmän, mutta kaadun jo ensimmäiseen lauseeseen:

Puppet is a tool designed to manage the configuration of Unix-like and Microsoft Windows systems declaratively.

Siis, Puppetilla voidaan hallinnoida sekä Unixin kaltaisten käyttöjärjestelmien (esim. Linux) että Windowsin asetuksia deklaratiivisesti. Fiksumpi voisi heti tietää mitä ihmettä tuo deklaratiivisuus tarkoittaa, mutta minä joudun turvautumaan ystäväämme Googleen.

Deklaratiivisuus tässä yhteydessä tarkoittaa nähdäkseni sitä että kerrotaan vain mitä halutaan tehtävän, ei sitä miten se tehdään. Jos olen oikeassa niin Puppetia käyttäessä kerrotaan vain että halutaan esimerkiksi koneille a, b ja c asennetuksi ohjelmistot x, y ja z, taustakuvaksi tietty kuva, tai vaikka vakioidut pikakuvakkeet työpöydälle ja Puppetin pitäisi hoitaa loput. Katsotaan miten käy.

2. Puppetin asennus – Ubuntu 12.04 LTS (Precise Pangolin) Beta 1

Puppet on saatavilla suoraan Ubuntun Main-repositorysta, joten asennus onnistuu helposti komennolla sudo apt-get install puppet. Tällä hetkellä asentuva versio on numeroltaan 2.7.11-1.

Asennuksen aikana sain näytölle tekstin “puppet not configured to start, please edit /etc/default/puppet to enable“, joten tutkitaan seuraavaksi tuota tiedostoa.

Tiedoston sisältö oletuksena on vain

# Defaults for puppet - sourced by /etc/init.d/puppet

# Start puppet on boot?
START=no

# Startup options
DAEMON_OPTS=""

Tuohon tiedostoon pitää muuttaa START=yes että Puppet suostuu käynnistymään edes manuaalisesti komennolla sudo /etc/init.d/puppet start. Kun asetustiedostoa on muokattu, antaa tuo komento vastauksen “** Starting puppet agent [ OK ]*” ja Puppet on käynnissä työasemalla.

3. Puppetin käyttö Manifesteilla

Olen luonut testailuja varten kotihakemistooni uuden kansion puppet jonka sisällä kaikki testailut tehdään. Luon Puppetin dokumentaatiota noudattaen uuden manifestin eli tiedoston 1.file.pp sisällöllä…

# Tämä manifest luo pienen tekstitiedoston /home/jkw/puppet/ hakemistoon

file {'testfile':
path    => '/home/jkw/puppet/testitiedosto',
ensure  => present,
mode    => 0640,
content => "Testataan 1. kertaa tätä! Whoa!",
}

…ja testaan toimivuutta näin:

jkw@xubuntu32-vb:~/puppet$ puppet apply 1.file.pp
warning: Could not retrieve fact fqdn
notice: /Stage[main]//File[testfile]/ensure: created
notice: Finished catalog run in 0.01 seconds

Hyvin näytti toimivan, hakemistoon ilmestyi kuin ilmestyikin tiedosto ihan oikealla nimellä ja sisällöllä. Hienoa!

Itse asiassa tätä varten puppetin ei tarvitse edes olla käynnissä kun ajamme komentoja manuaalisesti komentoriviltä. Annetaan sen nyt kuitenkin pyöriä taustalla hetken aikaa..

Tällä manuaalisella systeemillä testaillen selviää Puppetin perustoiminta ihan hyvin, erilaisia asetuksia ja vaihtoehtoja löytyy pilvin pimein (tärkeimpinä package, file ja service). File tuli jo testattua joten koitetaan seuraavaksi packagea eli teen seuraavanlaisen tiedoston 2.package.pp

# Tämä manifest pitää huolen siitä että paketti apache2 on asennettuna, ja että paketti cmatrix ei ole

package {'apache2':
ensure  => present,
}

package {'cmatrix':
ensure  => absent,
}

Ja testaan toimiiko. Testitilanteessa apache2 ei siis ole asennettuna mutta cmatrix ok, eli molempien tilanteen pitäisi muuttua.

jkw@xubuntu32-vb:~/puppet$ sudo puppet apply 2.package.pp
warning: Could not retrieve fact fqdn
notice: /Stage[main]//Package[cmatrix]/ensure: removed
notice: /Stage[main]//Package[apache2]/ensure: ensure changed 'purged' to 'present'
notice: Finished catalog run in 4.55 seconds
jkw@xubuntu32-vb:~/puppet$ /etc/init.d/apache2 status
Apache2 is running (pid 17756).
jkw@xubuntu32-vb:~/puppet$ cmatrix
The program 'cmatrix' is currently not installed.  You can install it by typing:
sudo apt-get install cmatrix

Toimii, onpa kätevää! Ja testataan vielä serviceä tiedostolla 3.service.pp:

# Tämä manifest pitää huolen siitä että palvelu apache2 on päällä

service {'apache2':
ensure  => running,
}

..ja suoritetaan niin että apache2 on kiinni:

jkw@xubuntu32-vb:~/puppet$ sudo /etc/init.d/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 ]
jkw@xubuntu32-vb:~/puppet$ sudo /etc/init.d/apache2 status
Apache2 is NOT running.
jkw@xubuntu32-vb:~/puppet$ sudo puppet apply 3.service.pp
warning: Could not retrieve fact fqdn
notice: /Stage[main]//Service[apache2]/ensure: ensure changed 'stopped' to 'running'
notice: Finished catalog run in 0.15 seconds
jkw@xubuntu32-vb:~/puppet$ sudo /etc/init.d/apache2 status
Apache2 is running (pid 18186).

Ja toimii, erittäin bueno!

4. Mitä seuraavaksi?

Tässä välissä otetaan aikalisä ja tutustutaan rauhassa eri tyyppeihin ja niiden asetuksiin. Tärkeimmät löytyvät mainiosta PDF:stä ja loput osoitteesta http://docs.puppetlabs.com/references/stable/type.html.

Seuraavassa osassa selvittelen Puppetin peruskäytön jatkoksi sitä perusideaa, miten tätä nyt pitäisi käyttää? Miten saan kaikki asetukset monelle koneelle automaattisesti? Mitä tuo tässä kirjoituksessa tarpeeton pupper -service edes tekee? Uusia kysymyksiä ja vastauksia näihin seuraavassa osassa :)