Puppet en Hiera update configuratie workflow

Written by Ger Apeldoorn on. Posted in Sysadmin

Je hebt iets prachtigs gemaakt in de ‘development’ environment en wilt dit doorzetten naar ‘testing’. Hier vind je een handige manier om dat te doen.

Bij dit stukje ga ik van het volgende uit:

Van start: Enkele wijzigingen lokaal committen

Eerst maar eens naar de juiste directory:

cd /etc/puppetlabs/puppet/environments/development

Met het commando ‘git status’ kun je zien wat er is gewijzigd en welke bestanden nog niet in version control zitten:

[root@puppetenterprise:development(master)]$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
#
# Changed but not updated:
#   (use "git add ..." to update what will be committed)
#   (use "git checkout -- ..." to discard changes in working directory)
#
#       modified:   manifests/nodes.pp
#
# Untracked files:
#   (use "git add ..." to include in what will be committed)
#
#       doc/
no changes added to commit (use "git add" and/or "git commit -a")

Je ziet hier dat manifests/nodes.pp is gewijzigd, en dat de directory doc/ nog niet in versioncontrol zit.

Je kunt bestanden toevoegen met het commando ‘git add’, bijvoorbeeld:

git add doc/

Om de wijzigingen naar de lokale repository te committen, gebruik je ‘git commit’

git commit -a -m 'Omschrijving van de wijziging'

De wijzigingen staan in de lokale GIT repository

Versienummer (tag) toekennen

Vervolgens willen we aan de huidige set manifests/scripts een label (lees: versienummer) hangen, maar we willen eerst zien welke we kunnen gebruiken.

Met het commando ‘git tag’ laten we een lijst van reeds gebruikte tags zien:

git tag

Kies het volgende versienummer, we gebruiken Semantic Versioning: http://semver.org/

(In het kort: Je versie is opgebouwd uit 3 getallen: Major-versie.Minor-versie.Patchnummer)

git tag -a -m 'Omschrijving van de wijziging' 1.2.0

We hebben nu versie 1.2.0 aan de hele set files toegekend.

Pushen naar de centrale GIT repository

Nu moeten we deze set naar de centrale server pushen:

git push --tags

De tag is nu bekend bij de centrale GIT repository

Nu hetzelfde voor de Hiera data

De data uit Hiera hebben we in een aparte GIT repository zitten, dus daar moeten we hetzelfde voor doen. Let op; deze tag heeft zijn eigen versienummer!

In het kort:

cd /etc/puppetlabs/puppet/environments/development_data
git status
git commit -a -m 'Omschrijving'
git tag
git tag -a -m 'Omschrijving' 1.8.0
git push --tags

Updates van beide repositories zitten nu met de tags in de centrale repositories

En nu op naar testing

Voor het updaten van de repositories in het ‘testing’ environment is het aan te raden om ”eerst” de hieradata directory bij te werken.

Aangezien je puppet-manifests inhaken op deze data, kan het zijn dat je anders foutmeldingen krijgt.

cd /etc/puppetlabs/puppet/environments/testing_data
git pull origin tags/1.8.0
cd /etc/puppetlabs/puppet/environments/testing
git pull origin tags/1.2.0

De testing repository is up to date!

Testen tot je vertrouwen hebt

Het is natuurlijk heel erg belangrijk om een grote testomgeving te hebben. Een testomgeving met een handvol machines is waardeloos, dus zet er voldoende servers in om een beetje pijn te voelen als het misgaat!

Houd ook het Puppet Enterprise Console goed in de gaten of er hosts zijn die onverwachts wijzigingen doorvoeren of foutmeldingen geven.

Als er specifieke servers zijn die je nog 1 keer extra wilt testen voordat je de configuratie daadwerkelijk doorzet:

# Op een server in je production environment...
puppet agent --test --environment=testing --noop

Dit ‘Even gluren bij de buren’ is een handige manier om te kijken of je configuratie onverhoopt onverwachte effecten geeft. De –environment switch lijkt me voor zich spreken, met de –noop switch laat hij zien wat er volgens de configuratie moet veranderen maar wordt het niet echt doorgevoerd.

Mocht je nog foutjes ontdekken in je configuratie (of data natuurlijk!) dan moet je dus opnieuw committen en een nieuwe tag aanmaken met het laatste nummertje opgehoogd. (Patchnummer) In dit voorbeeld krijgen we dus versie 1.2.1.

En nu het echte werk

Wederom gaan we ”eerst” de hieradata directory bijwerken, vervolgens de manifests en modules.

cd /etc/puppetlabs/puppet/environments/production_data
git pull origin tags/1.8.0
cd /etc/puppetlabs/puppet/environments/production
git pull origin tags/1.2.0

De production repository is up to date!

Fail!

Terugrollen naar een andere tag kan via

 git pull
 git reset --hard tags/x.y.z

Labels:, , , , ,