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.





