Waarom Hiera?

Written by Ger Apeldoorn on. Posted in Sysadmin

Intro

Als je een tijdje aan het bouwen bent geweest, kom je er waarschijnlijk op enig moment achter dat het bestand waar je de nodes classificeert (sites.pp of nodes.pp) niet erg overzichtelijk meer is.

Voor veel servers zijn er toch individuele settings nodig, je hebt bijvoorbeeld op elke webserver weer andere virtualhosts.

Dit ziet er dan bijvoorbeeld zo uit:

node 'web01.puppetspecialist.nl' extends basenode {
  apache::virtualhost { "gerapeldoorn.nl":
    aliases => "www.gerapeldoorn.nl",
    ssl     => "no",
  }
  apache::virtualhost { "autiplan.nl":
    aliases => "*.autiplan.nl *.autiplan.com autiplan.com",
    ssl     => "no",
  }
}

node 'web02.puppetspecialist.nl' {
  apache::virtualhost { "puppetspecialist.nl":
    aliases => "www.puppetspecialist.nl",
    ssl     => "no",
  }
  apache::virtualhost { "depuppetmaster.nl":
    aliases => "*.depuppetmaster.nl *.depuppetmaster.com",
    ssl     => "no",
  }
}

enzovoort....

Iedere node een blokje, en dat wordt al snel onoverzichtelijk. Het probleem is, dat we hier data en code doorelkaar gooien.

Hiera

Hiera biedt je de mogelijkheid om je data apart op te slaan in YAML (Yet Another Markup Language) files. Door een hierarchisch model te gebruiken hoef je veelvuldig voorkomende data toch maar 1 keer op te slaan.

Met Hiera krijgen we twee data-files. Voorbeeld: web01.puppetspecialist.nl.yaml

---
virtualhosts:
  puppetspecialist.nl:
    aliases: www.puppetspecialist.nl
    ssl: no

  depuppetmaster.nl:
    aliases: *.depuppetmaster.nl *.depuppetmaster.com
    ssl: no

Je nodes.pp ziet er dan als volgt uit, let op de regular expression van de nodenaam!

node /web\d\d\.puppetspecialist\.nl/ {
	create_resources('apache::virtualhosts', hiera('virtualhosts', []))
}

Door de regular expression is deze node-classification geldig voor alle servers die zich aanmelden met web[2 getallen].puppetlabs.nl. Hiera zoekt het juiste data-bestand erbij en de juiste virtualhosts worden aangemaakt.

Dat ruimt lekker op, of niet?

Hierarchisch

Het is ook mogelijk om een hierarchisch model te gebruiken. Vaak zie je dat er instellingen zijn die domein specifiek zijn of voor alle gemanagede servers gelden.

Ik kan bijvoorbeeld het volgende yaml bestand maken: puppetspecialist.nl.yaml

---
mailserver: mail.puppetspecialist.nl

Zo krijgen alle servers de beschikking over deze parameter. Wanneer ik een uitzondering heb in mijn serverpark, dan kan ik in de yaml-file van die ene server deze waarde overriden.

Om even op ons voorbeeld terug te komen: De uitgaande-mailserver moet de mail natuurlijk niet naar zichzelf doorsturen, maar naar de smtp-relay van de provider. Daarom zetten we in mail.puppetspecialist.nl.yaml het volgende:

---
mailserver: smtp.xs4all.nl

Hoewel beide yaml files van toepassing zijn om onze uitgaande mailserver, is de yaml-file met de volledige hostname het meest specifiek. In onze Hiera configuratie staat daarom dat deze voorrang krijgt.

Op deze manier maken we onze node-classificatie een stuk overzichtelijker.

Meer artikelen over Hiera

Labels:, , ,