Hiera inrichten
De meeste Puppet inrichtingen hebben veel baat bij Hiera. Je manifests worden nodeloos complex of onoverzichtelijk omdat er data in komt. Met de tool Hiera kun je eenvoudig de data scheiden van je manifests. Hier vind je meer goede redenen om Hiera te gebruiken.
In dit artikel ga ik ervan uit dat je al Environments gebruikt voor je manifests, klik hier om te tonen hoe je dat kunt opzetten met Git.
Configuratie
Hiera wordt standaard geïnstalleerd wanneer je een recente Puppet Enterprise gebruikt.
Ik wil graag dat het bestand met de volledige hostnaam (fqdn.yaml) de hoogste prioriteit krijgt, vervolgens het bestand met domeinnaam.yaml en als laatste common.yaml.
Om het overzicht te bewaren zet ik de bestanden met de volledige hostnamen in een subdirectory.
Voor iedere environment dat we gebruiken, krijgen we een aparte data directory. Deze stoppen we verderop in een nieuwe GIT repository.
Dat brengt ons op het volgende configuratiefile: /etc/puppetlabs/puppet/hiera.yaml
--- :hierarchy: - hosts/%{fqdn} - %{domain} - common :backends: - yaml :yaml: :datadir: '/etc/puppetlabs/puppet/environments/%{environment}_data'
Setup Git repositories
Git is enorm krachtig en kan ontzettend veel. Het is ook een redelijk complexe tool om te gebruiken en ik heb dan ook niet de illusie dat ik je in dit korte artikel de ins- en outs kan bijbrengen. Ik ga je wel de setup-procedure laten zien voor een nieuwe GIT repository, waar we onze Hieradata mee gaan managen.
We willen uiteindelijk 3 kopieen van onze datafiles hebben, elk ervan is een GIT repository:
- /etc/puppetlabs/puppet/environments/development_data
- /etc/puppetlabs/puppet/environments/testing_data
- /etc/puppetlabs/puppet/environments/production_data
Om makkelijk en gecontroleerd de data van development naar testing en production te kunnen promoten, maken we nog een vierde, centrale repository. Met deze centrale repository gaan we beginnen.
De centrale repository hoeft niet op de Puppet master te staan, met GIT kun je ook via SSH repositories clonen. Om deze howto niet nog complexer te maken dan nodig is, maken wij de centrale repository in /opt/git/puppet_data
Stap 1: Aanmaken van de Centrale Repository
git init --bare /opt/git/puppet_data
Stap 2: Maken van de development_data repository
git clone /opt/git/puppet_data /etc/puppetlabs/puppet/environments/development_data
Je hebt nu een lege repository, laten we er een file inzetten.
Stap 3: Eerste files in je repo
cd /etc/puppetlabs/puppet/environments/development_data touch common.yaml mkdir hosts
Nu moeten we de files toevoegen aan Git en ze committen:
git add * git commit -a -m 'Eerste files'
Stap 4: Eerste push naar de centrale repo
git push origin master
Stap 5: testing en production aanmaken
git clone /opt/git/puppet_data /etc/puppetlabs/puppet/environments/testing_data git clone /opt/git/puppet_data /etc/puppetlabs/puppet/environments/production_data
Nu heb je de basis staan. Voor een workflow van het updaten van deze Hiera-data en je manifests zie Puppet en Hiera workflow.
Conversie
Om bestaande node-definities enigszins gemakkelijk naar YAML om te zetten gebruik ik de volgende VIM search/replace regexp. Let op: Dit is geen kant-en-klare oplossing, slechts een startpunt!
# VIM kung-fu voor conversie database entries naar YAML :%s/' , /', /ge|%s/\(\S*\) => ['"]\(\S*\)['"],/\r \1: \2/g|%s/ { ['"]\(\S*\)['"]:/\r \1:/|%s/ }//|%s/\s*postgresql::dbcreate/dbcreate:/e
Dagelijks Gebruik
Voor uitleg hoe je Hiera in je manifests kunt gebruiken, zie: Hiera dagelijks gebruik
Extra documentatie
Labels:best-practices, git, hiera, howto, inrichting, techniek