Hiera inrichten

Written by Ger Apeldoorn on. Posted in Sysadmin

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

GIT repositories: Centraal en de clones voor de 3 environments.

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:, , , , ,