Läksy w47: Oman Puppet modulin suunnitteleminen ja nodes.pp:n kokeileminen

Harjoitustehtävän aiheena oli oman Puppet modulin suunniteleminen ja nodes.pp:n kokeileminen Käytännön harjoituksena tehtiin testiversioita oman Puppet ominaisuuksist sekä kokeiltiin nodes.pp:tä kahden tietokoneen Puppet Master/Agent testiympäristössä.

Harjoitusympäristö

Harjoitusta suoritettiin 29.11.2012 opiskelijan kotona käyttäen 1 henkilökohtaista tietokonetta ja 1 Haaga-Helian TIKO-kannettavaa. Internet-yhteytenä oli Elisa Oyj:n tarjoama VDSL tyyppinen 100/10 mbit kiinteä laajakaistayhteys. Harjoituksessa käytettiin Lenovo R60 kannettavaa tietokonetta ja sen kiintolevylle asennettua Xubuntu 12.04  32-bittistä Linux käyttöjärjestelmää. Haaga-Helian TIKO-kannettavan 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. Tietokoneet olivat kytkettyinä VDSL modeemin reitittimeen ja ne olivat samassa lähiverkossa 192.168.100.0/24.

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

Haaga-Helian TIKO-kannettava HP EliteBook 2560p kokoonpano:

  • Suoritin:Intel Core i5-2450M @2.50GHz
  • Keskusmuisti: 8 Gt DDR3
  • Kiintolevy: 500 Gt SATA300 7200rpm
  • Käyttöjärjestelmä: Windows 7 Professional 64-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.

Oman Puppet modulin suunnittelu

Valitsin oman Puppet modulin aiheeksi käyttäjien hallinnan Puppet Agent koneilla. Modulin ominaisuuksiin suunnittelin käyttäjien luomisen, käyttäjäprofiilin tiedostojen ja hakemiston hallinnan, salasanojen ylläpitämisen sekä käyttäjien oletusasetusten syöttämisen /etc/skel hakemistoon. Olin tehnyt aikaisemmissa kotitehtävissä käyttäjien hallintaan liittyviä Puppet moduleja ja ajattelin hyödyntää niitä oman Puppet modulin suunnittelussa. Olin myös tutustunut valmiisiin käyttäjien hallintaan tarkoitettuihin Puppet moduleihin ja niistä erityisesti Daniel Sobralin dscobral/users moduli vaikutti parhaimmalta toteutukselta.

Annoin modulille työnimen usermgt. Suunniteltu modulin rakenne /etc/puppet/modules hakemistossa Puppet Master koneella:


xubuntu@xubuntu:/etc/puppet/modules/usermgt$ tree
.
├── files
│   └── bash_aliases
├── lib
│   └── puppet
│       └── parser
│           └── functions
│               └── hashpw.rb
└── manifests
    ├── account.pp
    ├── etcskel.pp
    └── init.pp

6 directories, 5 files

Kuvaus modulin tiedostoista:

Tiedostonimi Lyhyt kuvaus tiedostosta ja sen käyttötarkoituksesta
bash_aliases Bash komentotulkin aliases määritykset, jotka kopioidaan orjakoneen tiedostoon /etc/skel/.bash_aliases
hashpw.rb Omatekoinen Ruby funktio hashpw, joka generoi selväkielisestä salasanasta SHA-512 tiivisteen, joka on sopii Linux käyttöjärjestelmän salasanatiivisteeksi
account.pp Määritelty tyyppi usermgt::account, jolla luodaan käyttäjä orjakoneelle uusi käyttäjä
etcskel.pp Luokka usermgt::etcskel, jolla kopioidaan käyttäjän oletusasetustiedostot orjakoneen /etc/skel hakemistoon
init.pp Modulin tulokohta, sisältää vain tyhjän luokan usermgt

Tiedoston files/bash_aliases sisältö, joka on lainattu Advanced Bash-Scripting Guide dokumentin osasta Appendix M Sample .bashrc and .bash_profile Files:


alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# -> Prevents accidentally clobbering files.
alias mkdir='mkdir -p'

alias h='history'
alias j='jobs -l'
alias which='type -a'
alias ..='cd ..'

Tiedoston lib/puppet/parser/functions/hashpw.rb sisältö:

module Puppet::Parser::Functions
  newfunction(:hashpw, :type => :rvalue) do |args|
    passwd = args[0]
    hashtype = '$6$'
    salt = rand(36**8).to_s(36)
    hash = passwd.crypt(hashtype + salt)
  end 
end

Tiedoston manifests/account.pp sisältö:


define usermgt::account($username = $title,$shell = '/bin/bash',$passwordtype='cleartext',$password) {

    if $passwordtype == 'cleartext' {
        $shadowpw = hashpw($password)
    }
    elsif $passwordtype ='hash' {
        $shadowpw = $password
    }

    user { $username:
      ensure     => present,
      gid        => $username,
      shell      => $shell,
      password   => $shadowpw,
      home       => "/home/${username}",
      managehome => true,
      require    => Group["$username"],
    }

    group { "$username":
        ensure    => present,
        allowdupe => false,
    }

}

Tiedoston manifests/etcskel.pp sisältö:


class usermgt::etcskel {

    file { "/etc/skel/.bash_aliases":
        mode => 0755,
        owner   => root,
        group   => root,
        source => ["puppet:///modules/usermgt/bash_aliases"],
    }
}

Tiedoston manifests/init.pp sisältö:


class usermgt  {

}

Puppet Master/Agent testiympäristön pystyttäminen

Testasin oma moduliani Puppet Master/Agent testiympäristössä, jossa Haaga-Helian TIKO-kannettava oli Puppet Master koneena ja Lenovo R 60 kannettava tietokone oli orjakoneena. Käytin koneiden .local nimiä Avahi palvelun kautta. Puppet Master koneen nimi oli xubuntu.local (IP-osoite 192.168.100.100) ja orjakoneen eino-ThinkPad-R60.local (IP-osoite 192.168.100.101).

Asensin Puppet Master palvelun xubuntu.local koneelle komennolla:

$ sudo apt-get install puppetmaster

Poistin vanhan SSL-sertfikaatin Puppet Master koneelle komennoilla:

$ sudo service puppetmaster stop
$ sudo rm -r /var/lib/puppet/ssl

Muokkasin Puppet Masterin asetuksiin xubuntu.local koneen nimen:

$ sudo nano /etc/puppet/puppet.conf

Lisäsin [master] lohkon sisään rivin:

dns_alt_names = puppet, xubuntu.local, puppet.xubuntu.local

Käynnistin Puppet Master palvelun uudelleen komennolla:

$ sudo service puppetmaster start

Tarkistin uuden SSL-sertifikaatin komennoilla:

xubuntu$ sudo ls /var/lib/puppet/ssl/certs/
ca.pem	xubuntu.pem
xubuntugt$ sudo openssl x509 -in /var/lib/puppet/ssl/certs/xubuntu.pem  -text | grep -i dns
DNS:puppet, DNS:puppet.xubuntu.local, DNS:xubuntu, DNS:xubuntu.local

Asensin Puppetin orjakoneelle komennolla:

$ sudo apt-get install puppetmaster

Muokkasin Puppetin asetuksiin Puppet Master koneen xubuntu.local nimen:

$ sudo nano /etc/puppet/puppet.conf

Lisäsin [agent] lohkon sisään rivin:

server = xubuntu.local

Muokkasin Puppetin oletusasetuksia tiedostossa /etc/default/puppet.conf:

$ sudo nano /etc/default/puppet.conf

Muutin seuraavan rivin:

START=yes

Käynnistin Puppet palvelun uudelleen orjakoneella komennolla:

$ sudo service puppet restart

Allekirjoitin orjakoneen sertifikaatin Puppet Master koneella komennoilla:

xubuntu@xubuntu:/etc/puppet/modules/usermgt$ sudo puppet cert --list
  "eino-thinkpad-r60" (51:92:00:89:8B:2D:B7:1C:27:97:0F:43:F6:99:66:CB)
xubuntu@xubuntu:/etc/puppet/modules/usermgt$ sudo puppet cert --sign eino-thinkpad-r60
notice: Signed certificate request for eino-thinkpad-r60
notice: Removing file Puppet::SSL::CertificateRequest eino-thinkpad-r60 at '/var/lib/puppet/ssl/ca/requests/eino-thinkpad-r60.pem'

Oman modulin työversion kokeileminen nodes.pp konfiguraatiolla

Loin Puppet Master koneelle tiedostot /etc/puppet/manifests/site.pp ja /etc/puppet/manifests/nodes.pp, joilla orjakoneella ajettavat asetukset määritellään.
Tiedoston site.pp sisältö:

import "nodes"

Tiedoston nodes.pp sisältö:

node default {

}

node manageusers {
	include usermgt
        include usermgt::etcskel
}

node 'eino-thinkpad-r60' inherits manageusers {

       usermgt::account{"testuser1":
            password => 'x0WaR2Id5Ows',
       }
}

Käynnistin Puppet palvelun uudelleen orjakoneella komennolla:


$ sudo service puppet restart

Uuden käyttäjän luominen orjakoneelle ei kuitenkaan onnistunut. Puppet moduli vaatii lisäkehitystyötä, jotta toiminta voitaisiin korjata.

Lähteet

Cooper, M. 2012. Advanced Bash-Scripting Guide. Appendix M. Sample .bashrc and .bash_profile Files.
http://tldp.org/LDP/abs/html/sample-bashrc.html

Finninday.net 2011. Zero to puppet in one day. Puppet master configs.
http://finninday.net/wiki/index.php/Zero_to_puppet_in_one_day#Puppet_master_configs

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

Karvinen, Tero 2012b. PuppetMaster on Ubuntu 12.04.
http://terokarvinen.com/2012/puppetmaster-on-ubuntu-12-04

Liimatta, Eino 2012. Läksy w45: Muotit, parametrisoidut luokat ja määritellyt tyypit.
http://eliimatt.wordpress.com/2012/11/15/laksy-w45-muotit-parametrisoidut-luokat-ja-maaritellyt-tyypit

Sobral, Daniel 2010. Module dcsobral/users. Puppet Forge.
http://forge.puppetlabs.com/dcsobral/users

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: , , , ,

Yksi vastaus kohteelle “Läksy w47: Oman Puppet modulin suunnitteleminen ja nodes.pp:n kokeileminen”

  1. Läksy w48: Oman Puppet modulin toteuttaminen « eliimatt sanoo:

    [...] Raportteja ja harjoitustehtäviä Haaga-Helia AMK kursseista « Läksy w47: Oman Puppet modulin suunnitteleminen ja nodes.pp:n kokeileminen [...]

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.