Puppet-moduulien laatu pysyy korkeana, kun syntaksi- ja tyylivirheitä päästetä edes versionhallintaan asti. Puppet-koodin syntaksivirheet löytyvät helposti:
$ puppet parser validate <tiedosto>
ERB-templateiden virheet saa selvitettyä seuraavalla tavalla:
$ erb -P -x -T '-' <tiedosto>|ruby -c
JSON-tiedostojen (metadata.json) virheet etsiminen vaatii hieman kikkailua:
$ cat <tiedosto>|json_pp -f json -t null
Tyylivirheitä voi etsiä puppet-lint -työkalulla:
$ puppet-lint <tiedosto> $ puppet-lint .
Puppet-lint tunnistaa myös puppet-koodin, joka on eteenpäin tai taaksepäin epäyhteensopivaa. Onkin hyvin järkevää ajaa puppet-koodi aina puppet-lintin läpi ennen suuria Puppet-ympäristön päivityksiä.
Puppet-lint osaa paitsi havaita virheitä ja potentiaalisia ongelmia, myös korjata suuren osan niistä:
$ puppet-lint --fix .
Yllä oleva komento korjaa kaikki Puppet-manifestit työhakemistossa ja sen alla olevissa hakemistoissa. Vaikka useimmat puppet-lintin tekemät muutokset ovat turvallisia, voivat tietyt muutokset aiheuttaa toiminnallisia muutoksia koodissa ja noodien konfiguraatiossa. Ongelmien välttämiseksi on syytä lukea versionhallinnan (tässä Git) muutoslogit tarkasti ennen seuraavia Puppet-ajoja:
$ git diff --- snip --- diff --git a/manifests/loadsql.pp b/manifests/loadsql.pp index e4d028f..f0be81d 100644 --- a/manifests/loadsql.pp +++ b/manifests/loadsql.pp @@ -28,26 +28,26 @@ define postgresql::loadsql ) { file { "postgresql-${basename}.sql": - name => "${::postgresql::params::data_dir}/${basename}.sql", + ensure => present, + name => "${::postgresql::params::data_dir}/${basename}.sql", content => template("${modulename}/${basename}.sql.erb"), - ensure => present, - owner => postgres, - group => postgres, - mode => 600, + owner => postgres, + group => postgres, + mode => '0600', --- snip ---
Yllä olevat muutokset ovat kaikki täysin turvallisia, sillä toiminnallisesti mikään ei muutu. Sen sijaan alla oleva $pg_dump_extra_params -parametrin oletusarvon muutos voisi aiheuttaa ongelmia, etenkin jos kyseistä arvoa käytettäisiin ERB-templatessa:
define postgresql::backup ( - $ensure = 'present', $database, + $ensure = 'present', $output_dir = '/var/backups/local', - $pg_dump_extra_params = '', + $pg_dump_extra_params = undef, $hour = '01', $minute = '10', $weekday = '*',
Tässä Puppet-Finlandin postgresql-moduulin tapauksessa tyhjän merkkijonon ('') muuttuminen määrittämättömäksi arvoksi (undef) ei kuitenkaan aiheuta ongelmia.
Muutoslokien lukemisen lisäksi kannattaa ajaa puppet testimoodissa (puppet agent --test --noop), jotta mitään yllättäviä muutoksia ei tule myöskään käytännössä.
Kaikki yllä mainitut syntaksi- ja tyylitarkistukset löytyvät kätevästi paketoituna Puppet-Finlandin puppetmaster-moduulista. Luokka puppetmaster::validation asentaa kullekin tarkistukselle oman skriptinsä sekä erillisen skriptin, joka ajaa kaikki tarkistukset rekursiivisesti työhakemistossa. Lisäksi luokka lisää tarkistukset croniin, jolloin virheistä lähetetään sähköpostia, mikäli niitä moduulikansioon pääsee eksymään.