Wenn man für Puppet Code oder Module entwickeln möchte gibt es verschiedene Ansätze die man nutzen kann:
- locale Entwicklung, git pushen, in Entwicklungs-Environment auf produktivem Puppetmaster testen
- lokale Entwicklung, VM mit Puppet Agent, puppet apply nutzen
- lokale Entwicklung, VMs Puppetmaster/Puppetserver mit Puppetdb Anbindung und einer oder mehrere Clients mit Puppet Agent
Wir wollen uns hier die dritte Möglichkeit anschauen. Als Basis nutzen wir Vagrant, eine Automatisierungsplattform für reproduzierbare Entwicklungsumgebungen.Die Virtualisierung übernimmt in dem Fall Virtual Box.Vagrant nutzt zum Provisionieren der VMs zwei verschiedene Teile:
- sogenannte Base Boxes, ein Basisimage, auf dem alles weitere aufsetzt
- Das sogenannte Vagrantfile das diese Box kopiert, startet und in den gewünschten Zustand überführt.
Das schöne ist Vagrantfiles und Base Boxes (sofern sie selbstgebaut sind) lassen sich wunderbar unter Versionskontrolle stellen und mit mehreren Leuten weiterentwickeln. Und das Ergebnis sieht am Ende bei jedem gleich aus, ohne das man sich ein Bein dafür ausreissen muss.
Wie sieht jetzt eine fertige Entwicklungs Umgebung aus mehreren VMs aus?
- puppet (Puppetmaster/Puppetserver)
- puppetdb (PuppetDB API Teil)
- postgres-puppetdb (PuppetDB Datenbank Backend)
- puppetclient01 (Puppet Agent, für diesen Node wird Entwickelt)
Um nun die Entwicklungsumgebung aufzubauen checkt man folgendes Git aus und installiert Virtual Box und Vagrant. Jetzt wechselt ins Repository und führt das Script yes_create_a_puppet_development_environment.sh aus. Nun entscheidet man sich für eine Puppetversion, wir nehmen Version 4. Nach ca. 20 Minuten hat man eine laufende Entwicklungsumgebung. Man hat jetzt die Wahl ob man aus dem Vagrant Ordner entwickelt oder die Grundlage in ein neues Git überführt und dieses seperat mountet. Eine Anleitung dazu findet sich in der Readme, genau wie geplante Features und Bugs
Das Git Repository für die Base Boxen findet sich Hier und die Boxen können mit Packer zu Images gebaut werden.