Läksy w46: Valmiin Puppet modulin käyttäminen ja Puppet Cookbook

Harjoitustehtävän aiheena oli tutustua Puppet Forgesta tai GitHubista saataviin valmiisiin Puppet moduleihin sekä Puppet Cookbook ohjekokoelmaan. Käytännön harjoituksena analysoitiin valmista Puppet modulia sekä tehtiin lyhyitä Puppet ohjelmia edellä mainitun Puppet Cookbook dokumentaation teemoista.

Harjoitusympäristö

Harjoitusta suoritettiin 22.11.2012 opiskelijan kotona käyttäen henkilökohtaista tietokonetta. Internet-yhteytenä oli Elisa Oyj:n tarjoama VDSL tyyppinen 100/10 mbit kiinteä laajakaistayhteys. Harjoituksessa käytettiin Lenovo R60 kannettavaa tietokonetta. Käyttöjärjestelmä ladattiin Xubuntu versio 12.04 32-bittinen Linux live-cd:ltä. Tietokoneen kiintolevylle asennettua käyttöjärjestelmää ei käytetty harjoitustehtävän suorittamiseen.

Lenovo R60 kokoonpano:

  • Suoritin: Intel Core 2 Duo T56000 @1.83 Ghz
  • Keskusmuisti: 4 Gt DDR2
  • Kiintolevy: 100 Gt SATA150 54000rpm
  • Käyttöjärjestelmä: Xubuntu versio 12.04 32-bittinen

Puppet palvelinautomaatio järjestelmän asentaminen

Aloitin harjoitustehtävän tekemisen päivittämällä Ubuntun pakettivarastot komennolla:

$sudo apt-get update

Pakettivarastojen päivitys kesti muutamia sekunteja.

Asensin Puppet järjestelmän komennolla:

$sudo apt-get install puppet

Testasin asennuksen ajamalla komennon puppet komentoriviltä:

$puppet

Komento antoi tulosteen:

See 'puppet help' for help on available puppet subcommands

Totesin puppet asennuksen onnistuneen.about:config

Valmiin Puppet modulin käyttäminen

Aluksin tein hakemiston puppet ja sen alihakemiston modules:

xubuntu@xubuntu:~$ cd
xubuntu@xubuntu:~$ mkdir puppet
xubuntu@xubuntu:~$ cd puppet/
xubuntu@xubuntu:~/puppet$ mkdir modules
xubuntu@xubuntu:~/puppet$

Valitsin tutkittavaksi Puppet moduliksi GitHubista saatavan R.I. Pieenarin kehittämän puppet-concat modulin, jolla voidaan koota tekstimuotoisia konfiguraatiotiedostoja pienemmistä osatiedostoista. Osatiedostoja säilytetään modulin työhakemistossa ja ne voidaan numeroida kokoamisjärjestyksen mukaisesti. Osatiedostojen numerointikäytäntö vastaa /etc hakemiston asetustiedostoissa yleisesti käytettyä mallia. jossa tiedostonimen alkuun lisätty numero kuvaa tiedoston lukemisen prioriteettijärjestystä. Pienempi numero merkitsee suurempaa prioriteettia. Latasin modulin ZIP pakettina ja purin hakemistoon $HOME/puppet/modules. Modulin rakenne oli seuraavanlainen:

xubuntu@xubuntu:~/puppet/modules/concat$ tree
.
├── CHANGELOG
├── files
│   ├── concatfragments.sh
│   └── null
├── lib
│   └── facter
│       └── concat_basedir.rb
├── LICENSE
├── manifests
│   ├── fragment.pp
│   ├── init.pp
│   └── setup.pp
├── Modulefile
├── Rakefile
├── README.markdown
└── spec
    ├── defines
    │   └── init_spec.rb
    ├── fixtures
    │   └── manifests
    │       └── site.pp
    └── spec_helper.rb

9 directories, 13 files

Modulissa käytetyt tiedostot:

Tiedostonimi Lyhyt kuvaus tiedostosta ja sen käyttötarkoituksesta
concatfragments.sh Shell skripti, jota käytetään kokoamaan tekstimuotoinen konfiguraatiotiedosto alihakemistossa olevista lyhyistä numeroidusta osista. Skriptille voidaan antaa parametriksi erilaisia komentolippuja
concat_basedir.rb Kustomoitu Puppet fact, joka palauttaa modulin väliaikaistiedostojen hakemistopolun, joka on Puppetin työhakemisto vardir/concat
fragment.pp Puppet modulin määritelty tyyppi concat::fragment, joka kopioi määritellyn konfiguraatiotiedoston osatiedostot modulin työhakemistoon
init.pp Puppet modulin tulokohta, jossa kuvataan konfiguraatiotiedostojen kokoamiseen käytettävä määritelty tyyyppi concat.
setup.pp Puppet modulin apuluokka concat::setup, jossa asetetaan modulin tarvitsemia resursseja. Käyttää kustomoitua Fact funktiota concat_basedir työhakemiston määritykseen ja asentaa shell skriptin concatfragments.sh modulin työhakemistoon
Modulefile Puppet modulin DSL kuvaus
Rakefile Puppet modulin RSpec testien ohjaustiedosto
Licence Puppet modulin lisenssi, joka Apache Licence v2.0
Changelog Puppet modulin muutoshistoria
README.markdown Puppet modulin lyhyt esittely, joka on kirjoitettu markdown työkalun formaatissa
init_spec.rb Puppet modulin RSpec testitiedosto
site.pp Tyhjä site.pp RSpec testejä varten
site.pp Tyhjä site.pp RSpec testejä varten
spec_helper.rb spec_helper työkalu RSPec testejä varten

Testasin puppet-concat modulia tekemällä sitä käyttävän testconcat modulin, joka kokoaa kahdesta osasta tiedoston /tmp/testfile.txt. Modulin rakenne oli seuraava:

xubuntu@xubuntu:~/puppet/modules/testconcat$ tree
.
└── manifests
    └── init.pp

1 directory, 1 file

Tiedoston init.pp sisältö:

class testconcat {
  
  include concat::setup
  
  concat{"/tmp/testfile.txt":

  }

  concat::fragment{"file_fragment_1":
    target  => "/tmp/testfile.txt",
    order   => 10,
    content => "\nThis is the first fragment of this file\n",
  }
  concat::fragment{"file_fragment_2":
    target  => "/tmp/testfile.txt",
    order   => 12,
    content => "\nThis is the second fragment of this file\n",

  }

}

Modulin testaaminen:

xubuntu@xubuntu:~/puppet$ sudo puppet apply --modulepath modules/ -e 'include testconcat'
warning: Could not retrieve fact fqdn
notice: /Stage[main]/Testconcat/Concat[/tmp/testfile.txt]/File[/tmp/testfile.txt]/ensure: defined content as '{md5}540b3047e9d90d715b20045e724653c3'
notice: Finished catalog run in 0.28 seconds

Tiedoston /tmp/testfile.txt sisältö:

xubuntu@xubuntu:~/puppet$ cat /tmp/testfile.txt 

This is the first fragment of this file

This is the second fragment of this file

Osatiedostot modulin työhakemistossa:

xubuntu@xubuntu:~/puppet$ sudo tree /var/lib/puppet/concat
/var/lib/puppet/concat
├── bin
│   └── concatfragments.sh
└── _tmp_testfile.txt
    ├── fragments
    │   ├── 10_file_fragment_1
    │   └── 12_file_fragment_2
    ├── fragments.concat
    └── fragments.concat.out

3 directories, 5 files

Modulille ei löytynyt kunnollista vertailukohdetta, koska suurimmaksi osaksi kaikki GitHubin vastaavat Puppet modulit olivat tämän modulin fork-versioita. Modulin tekninen toteutus on korkeatasoinen ja toteutuksessa on otettu monipuolisesti erilaisia käyttötapauksia huomioon. Modulin rakenne on modulaarinen ja toimiva.

Puppet Cookbook dokumentaation käyttäminen modulien kirjoittamisessa

Tein Puppet modulin, jossa käytettiin kahta Puppet Cookbook dokumentaation ohjetta Create a directory tree ja Only manage absent files. Moduli tekee oman hakemistopuun /tmp hakemistoon ja luo tiedoston, joka ei ole Puppetin ylläpidettävänä. Modulin rakenne on seuraava:

xubuntu@xubuntu:~/puppet/modules/testdir$ tree
.
└── manifests
    └── init.pp

1 directory, 1 file

Tiedoston init.pp sisältö:

class testdir {

   file { [ "/tmp/testdir", "/tmp/testdir/node1",
         "/tmp/testdir/node2", "/tmp/testdir/node2/docs" ]:

        ensure => "directory",
        mode   => 750,
        recurse => true,
        owner => 'xubuntu',
        group => 'xubuntu',

   }

   file { "/tmp/testdir/node2/unmaintained.txt":

        replace => "no",
        ensure  => "present",
        owner => 'xubuntu',
        group => 'xubuntu',
        content => "This file is not maintained by Puppet\n",
        require => File['/tmp/testdir/node2'],

    }
}

Modulin testaaminen:

xubuntu@xubuntu:~/puppet$ sudo puppet apply --modulepath modules/ -e 'include testdir'
warning: Could not retrieve fact fqdn
notice: /Stage[main]/Testdir/File[/tmp/testdir]/ensure: created
notice: /Stage[main]/Testdir/File[/tmp/testdir/node2]/ensure: created
notice: /Stage[main]/Testdir/File[/tmp/testdir/node1]/ensure: created
notice: /Stage[main]/Testdir/File[/tmp/testdir/node2/docs]/ensure: created
notice: /Stage[main]/Testdir/File[/tmp/testdir/node2/unmaintained.txt]/ensure: created
notice: Finished catalog run in 0.09 seconds

Hakemisto puu /tmp/testdir:

xubuntu@xubuntu:~/puppet$ tree /tmp/testdir
/tmp/testdir
├── node1
└── node2
    ├── docs
    └── unmaintained.txt

3 directories, 1 file

Tiedoston /tmp/node2/unmaintained.txt muuttaminen:

xubuntu@xubuntu:~/puppet$ cat /tmp/testdir/node2/unmaintained.txt 
This file is not maintained by Puppet
xubuntu@xubuntu:~/puppet$ echo "Making local changes to file" > /tmp/testdir/node2/unmaintained.txt 
xubuntu@xubuntu:~/puppet$ cat /tmp/testdir/node2/unmaintained.txt 
Making local changes to file
xubuntu@xubuntu:~/puppet$ sudo puppet apply --modulepath modules/ -e 'include testdir'
warning: Could not retrieve fact fqdn
notice: Finished catalog run in 0.20 seconds
xubuntu@xubuntu:~/puppet$ cat /tmp/testdir/node2/unmaintained.txt 
Making local changes to file

Lähteet

Karvinen, Tero 2012. Linux keskitetty hallinta ICT4TN011-2 kurssin kotisivu.
http://terokarvinen.com/2012/aikataulu-linuxin-keskitetty-hallinta-ict4tn011-2-puppet

Pienaar, R.I. 2012. ripienaar/puppet-concat. GitHub.
https://github.com/ripienaar/puppet-concat

Puppet Labs 2011. Docs: Publishing Modules on the Puppet Forge.
http://docs.puppetlabs.com/puppet/2.7/reference/modules_publishing.html

Sharpe, Tim 2012. rspec-puppet
http://rspec-puppet.com/

Soimasysadmin 2012. Simple facts with Puppet.
http://soimasysadmin.wordpress.com/2012/09/12/simple-facts-with-puppet/

Wilson, Dean 2011. Puppet Cookbook.
http://www.puppetcookbook.com/

About

Tätä dokumenttia saa kopioida ja muokata GNU General Public License (versio 2 tai uudempi) mukaisesti.
http://www.gnu.org/licenses/gpl.html
Pohjana Tero Karvisen Linux-kurssi, www.iki.fi/karvinen

About these ads

Avainsanat: , , , , ,

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

You are commenting using your WordPress.com account. Log Out / Muuta )

Twitter-kuva

You are commenting using your Twitter account. Log Out / Muuta )

Facebook-kuva

You are commenting using your Facebook account. Log Out / Muuta )

Muodostetaan yhteyttä palveluun %s


Seuraa

Get every new post delivered to your Inbox.