Tehtäväksi anto: Tee moduuli, joka käyttää vähintään kahta erityyppistä resurssia (esim package ja file).
Bonus: tee moduuli jollekin käyttämällesi ohjelmalle.
Linkki palautetaan Moodleen, lisäksi kannattaa laittaa linkki kommentiksi tälle sivulle.
Aloitan tekemään tehtävää luomalla Digital Ocean Dropletin Ubuntu 14.04.5 millä tulen tarkistamaan Puppet moduuleita. Oikean syntaksin tiedostoja löytyy kuitenkin tästä: https://github.com/xelsinki/puppet Otan yhteyttä koneeseen Putty:lla.
Kirjauduin koneeseen. Jatkan vielä root tunnuksilla asennukset ja Puppet moduuleiden tarkistuksen. (Jos käyttää muu, kun root tunnuksen jotkut komennot pitää aloittaa sudo:lla) Alkuun päivitän paketteja komennolla:
apt-get update
Asennan puppet komennolla:
apt-get install puppet
Asennuksen lopussa tuli ilmoitus:
* Starting puppet agent [ OK ]
Asennus on valmis, puppet on käynnistetty. Teen tiedoston tekstillä Hello Tero! komennolla:
puppet apply -e ‘file { “/tmp/helloPuppet”: content => “Hello Tero!\n” }’
Tuli virheilmoitus joka koskee FQDN ja ilmoitus että tiedosto on luotu.
Googlamalla sain selville, että puppet vaati kokonaista domain nimeä. Tämä ei mitenkään vaikuta tehtävän etenemiseen, niin päätin jatkaa. Tarkistan kuitenkin samaa VirtualBox VM:llä.
Toisella koneella se toimii. Sama komento VirtualBox:iin asennetulla Xubuntulla antaa seuraavan vastauksen:
Kävin tarkistamassa sitä komennolla:
cat /tmp/helloPuppet
Ruudulle ilmestyi teksti Hello Tero! ja rivi vaihtunut uuteen.
Muokataan vähän. Poistan /n rivinvaihto:
puppet apply -e ‘file { “/tmp/helloPuppet”: content => “Hello Tero!” }’
Content changed. Ja uusi tarkistussumma. Rivi ei ole vaihdettu.
Siirrytään moduuleihin. Luon kansioon /etc/puppet/modules/ uusi kansio ja tiedosto init.pp
mkdir /etc/puppet/modules/puppetka/manifests/
cd /etc/puppet/modules/puppetka/manifests/
nano init.pp
Ja kirjoitan tiedostoon:
class puppetka {
file { ‘/tmp/helloModule’:
content => “This is a PUPPET!!!\n”
}
}
Tallensin tiedoston ja käynnistän sen komennolla:
puppet apply -e ‘class {“puppetka”:}’
Tuli ilmoitus, että tiedosto on luotu. Tarkistin sen cat:illä
Manifestit luodaan tiettyyn kansioon /etc/puppet/modules/class/manifests/init.pp , jossa class on manifestin nimi.
Luettua yhtä venäjänkielistä sivua sain selville, että pystyy vielä tekemään näin. Luomaan manifest suoraan tiedostoon.
nano /tmp/helloworld.pp
file { '/tmp/helloworld':
ensure => present,
content => 'Hello, world!',
mode => 0644,
owner => 'alex',
}
Ja käynnistää sen komennolla:
puppet apply helloworld.pp
Tämä oli taas tehty Virtual Box VM:llä. Ei tule ilmoitusta FQDN:stä vaan näyttää ubuntu.pp.htv.fi eli näyttää koko domainnimen: ubuntu.{minun kotiNetti – kaapeli DNA} Eli tuo virheilmoitus FQDN:stä koskee DigitalOcean VPS:än nimipalvelua.
Jatkan Digital Ocean VPS:llä.. Teen apache2 asennus-manifestin.
manifest/apache.pp sisältää:
Tässä näy miten olen luonnut sen ja käynnistänyt.
Tuli virheilmoitus. Kokeilin mennä web-selaimella VPS:n ip-osoitteseen. Apache oli päällä. Ilmeisesti tätä parempi tehdä just EI-Venäläisen tapaan mukaan. Mutta kokeilen sen huomenna aamulla.
Sain sitten selville, että Tero opettaa meidät tekemään “crossdistributiivisesti” eli niin että asiat toimivat käyttöjärjestelmästä riippumatta. Ja niin että kaikki manifestit ovat omassa paikassa eikä tarvitse joka kertaa mainita polkua manifestiin.
Aamusta asensin VMwaren Workstation 12 (Haaga-Helia:n opiskelijana sain ilmaisen lisenssin vuodeksi), asensin sinne Xubuntu 14.04.3 ja otin heti snapshotin. Jatkossa on helpompi tarvittaessa aloittaa ihan puhtaalta pöydältä. Sitten luin muutamaa julkaisua Puppetista ja vilkaisin dokumentaatiota.
Resurssit: https://docs.puppet.com/puppet/3/reference/lang_resources.html
Syntax: https://docs.puppet.com/puppet/3/reference/lang_resources.html#syntax
Resurssien tyypit: https://docs.puppet.com/puppet/latest/reference/type.html
Package atribuutit: https://docs.puppet.com/puppet/latest/reference/type.html#package-attributes
Riippuvuudet: https://docs.puppet.com/puppet/3/reference/lang_relationships.html
Pysyn olemaan kopioiva apina, ellei aloitan lukea kunnon dokumentaatiota. Siinä selitetään jokaisen polun ja pilkun.
Minun uusi puppet manifest sshd:
class sshd {
package { ‘openssh-server’:
ensure => “installed”,
}
file { ‘/etc/ssh/sshd_config’:
content => template(“sshd/sshd_config”),
require => Package[“openssh-server”],
notify => Service[“ssh”],
}
service { ‘ssh’:
ensure => running,
enable => true,
require => Package[“openssh-server”],
hasstatus => ‘false’,
status =>”/etc/init.d/ssh status|grep running”,
}
}
Heti se ei toiminut, vaan vaatinut että luodaan templates/sshd_config kun tähän koodissa väitetään. Sitten koodi alkanut toimimaan ilman virheilmoitusta. Kun laitoin koodi-tiedoston GitHub:iin https://github.com/xelsinki/puppet/blob/master/init.pp , niin väreistä huomasin puutuvat lainausmerkit yhdestä paikasta. Korjasin koodin ja ajanut sen uudelleen.