Environments en Git, een must!

Written by Ger Apeldoorn on. Posted in Sysadmin

Met environments kun je verschillende versies van je manifests en modules zij-aan-zij gebruiken. Zo is het mogelijk om een ‘development’, ‘testing’ en ‘production’-environment maken op een enkele server. In de configuratie van je nodes (de gemanagede servers) geef je aan bij welke environment de node hoort.

Versioning van je manifests en modules is ook ontzettend belangrijk, bovendien kun je hier goed gebruik van maken wanneer je je code van je development environment naar testing, en vervolgens naar production door te zetten. De versioning tool die ik hier laat zien is Git.

Nog even ter verduidelijking; wijzig NOOIT je Puppet manifests/modules in produktie. Mocht je dit toch voornemens zijn, bookmark dan even deze link: LINK

Git repository maken

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
  • /etc/puppetlabs/puppet/environments/testing
  • /etc/puppetlabs/puppet/environments/production

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

Stap 1: Aanmaken van de Centrale Repository

git init --bare /opt/git/puppet

Stap 2: Maken van de development repository

mkdir /etc/puppetlabs/puppet/environments
git clone /opt/git/puppet /etc/puppetlabs/puppet/environments/development

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
cp -a /etc/puppetlabs/puppet/manifests /etc/puppetlabs/puppet/modules .
mkdir manifests/roles

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 /etc/puppetlabs/puppet/environments/testing
git clone /opt/git/puppet /etc/puppetlabs/puppet/environments/production

Nu heb je de basis staan. Voor een workflow van het updaten van deze Hiera-data en je manifests zie Puppet en Hiera workflow.

Configuratie Server

Voeg het volgende toe aan je Puppet configuratie: /etc/puppetlabs/puppet/puppet.conf

[production]
  manifest = /etc/puppetlabs/puppet/environments/production/manifests/site.pp
  modulepath = /etc/puppetlabs/puppet/environments/production/modules:/opt/puppet/share/puppet/modules
[testing]
  manifest = /etc/puppetlabs/puppet/environments/testing/manifests/site.pp
  modulepath = /etc/puppetlabs/puppet/environments/testing/modules:/opt/puppet/share/puppet/modules
[development]
  manifest = /etc/puppetlabs/puppet/environments/development/manifests/site.pp
  modulepath = /etc/puppetlabs/puppet/environments/development/modules:/opt/puppet/share/puppet/modules

… en restart de pe-httpd service:

/etc/init.d/pe-httpd restart

Je server is er helemaal klaar voor!

Configuratie Client

Het environment ‘production’ is de default environment, voor nodes die naar de testing of development environment moeten wijzen doe je het volgende:

Voeg toe onder het kopje [agent] op de node: /etc/puppetlabs/puppet/puppet.conf

   environment = development  # (of testing natuurlijk)

Vervolgens kun je de puppet agent herstarten:

/etc/init.d/pe-puppet restart

Testing 123

Je kunt nu even een handmatige Puppet-run uitvoeren om te testen of alles werkt:

puppet agent --test

In de /var/log/messages op de SERVER zie je het volgende verschijnen:

Nov 27 08:04:22 puppetenterprise puppet-master[32655]: Compiled catalog for web01o.puppetspecialist.nl in environment development in 4.55 seconds

Labels:, ,