Collaborative Development mit Vagrant share

Keine Kommentare

Bei codecentric arbeiten wir in einem „4+1-Modell“. Das bedeutet: Einen Tag pro Woche arbeiten wir nicht (direkt) für unsere Kunden, sondern investieren diesen Tag in unser eigenes Know-How. In dieser Zeit gehen wir eigenen Projekten nach oder entdecken neue Technologien. Doch wer sich in eine neue Technologie einarbeitet, stellt oft fest, dass ein Tag sehr kurz sein kann. Viel Zeit geht schon dadurch verloren, eine VM-Infrastruktur hochzuziehen und das neue Produkt zu installieren.
Um zumindest hierbei weniger Zeit zu verlieren, setze ich das kostenlose Tool „Vagrant“ ein. Es hat sich mittlerweile zu einem meiner absoluten Lieblings-Werkzeuge entwickelt. Mein Kollege Bastian Spanneberg hat vor langem bereits einen Artikel zu Vagrant geschrieben. Da dieses Tool jedoch bei vielen unserer Kunden auf beste Resonanz stößt, möchte ich es mit einem Artikel über deren Sharing-Möglichkeiten in Erinnerung rufen.

Kurz und knapp: Was ist Vagrant?
Vagrant schafft es, mit nur zwei Dateien eine oder mehrere VMs inklusive installierter Software hochzufahren. Die erste Datei (das „Vagrantfile“) beschreibt die VMs (OS, RAM, CPU, Netzwerk), die zweite ist ein einfaches Shell-Script, welches nach dem booten ausgeführt wird. Die VMs lassen sich nun durch einfache Kommandos starten, stoppen oder neu provisionieren. So lassen sich sogar ganze Cluster hochziehen. So lässt sich auch „mal kurz“ ausprobieren, ob die Installation auch auf einem anderen Betriebssystem funktioniert.

Wie arbeiten wir mit Vagrant?
In Karlsruhe nutzen wir Vagrant meist in Kombination mit Puppet. Puppet wird dann entweder aus dem Shell-Script oder direkt aus Vagrant heraus ausgeführt. Möchte ein Kollege am gleichen Projekt arbeiten, so klont er das Projekt und führt einfach „vagrant up“ aus, und hat sofort die gleichen Voraussetzungen. Wir folgen dem Ansatz „Infrastructure as Code“, und das Ergebnis lässt sich leicht auf eine „echte“ VM oder auf Baremetal ausrollen – Das Installations-Script bzw das Puppet-Modul genügt. Wenn am Ende ein robustes Stück Infrastruktur-Coder herauskommt, sind das außerdem beste Voraussetzungen zur Umsetzung eines Phoenix-Servers.

Vorbereitung
Einen guten Einstieg in Vagrant bietet der Artikel von Bastian oder die Doku selbst.
Zur Verwendung von Vagrant Share ist ein kostenloser HashiCorp Atlas Account erforderlich.
Weitere Infos dazu wie das ganze funktioniert und welche weiteren Möglichkeiten es gibt stehen in der Doku.

Vagrant SSH share
Häufiges Problem: Eine neue Software lässt sich einfach nicht installieren, leider sitzt der passende codecentric-Experte jedoch an einem anderen Standort und kann einem nicht über die Schulter schauen. Vagrant hat eine Lösung für diesen Zustand: Die VM kann per SSH über eine externe Adresse freigegeben werden.

Hierzu einfach folgende Kommandos ausführen:

vagrant up (Falls die VM noch nicht gestartet ist)
vagrant share *boxname* --ssh

Es folgt eine Aufforderung zur Vergabe eines Passwortes, und schon steht alles bereit. Das ganze sieht dann wie folgt aus:

Vagrant HTTP Share

Der gewünschte Kollege benötigt nun ebenfalls eine Vagrant-Installation, und kann sich dann mit dem Kommando:

vagrant connect --ssh *boxname*
Zum Beispiel:
vagrant connect --ssh cold-panther-2870

per SSH verbinden. Er muss nur noch das zuvor gesetzte Passwort eingeben, und schon kann er die lokale VM bearbeiten! [Strg+C] beendet die Freigabe.

Vagrant HTTP share
Nachdem wir mithilfe des Kollegen unsere VM zum Fliegen gebracht haben und das Web-Frontend sichtbar ist, fällt uns auf, dass die Software nicht wie gewünscht funktioniert. Wäre es jetzt nicht super, wenn sich der Kollege mal kurz über die Web-Gui in die lokale VM einloggen könnte? Hierzu müssen wir der gewünschten VM im Vagrantfile eine interne Netzwerkkarte verpassen und folgendes ausführen:

vagrant up (zum Starten der VM)
vagrant share *boxname* --http 8080

Wobei 8080 der Port ist, auf dem die Web-Anwendung lokal läuft. Das ganze sieht dann so aus:

Vagrant SSH Share

Wir bekommen nun eine URL angegeben, über die die Weboberfläche von außen erreichbar ist. Und schon hat der benötigte Experte Zugriff auf die Oberfläche! [Strg+C] reicht aus, um die Freigabe zu beenden.
Das ganze lässt sich natürlich auch prima für Demo-Anwendungen oder Reviews mit den Kollegen vom Fach nutzen.

Und sonst so?
Vagrant kennt außer HTTP-Ports und SSH weitere Sharing-Mechanismen. So ist es möglich, generell alle Ports freizugeben, oder bestimmte Ports im Vagrantfile zu definieren, die dann zur Freigabe bereitstehen. Möchte sich jemand von außen auf diese Ports connecten, so nutzt er das „vagrant connect“ Kommando, wodurch eine eigene kleine (lokale) VM mit statischer IP gestartet wird, die dann jeglichen Verkehr an die eigentliche (externe) VM routet. Diese Möglichkeiten sind in der Doku beschrieben.

Ansonsten lohnt sich ein Blick auf Otto, das ich in einem weiteren Artikel vorstellen werde.

Tobias Schaber

Neben seinem Schwerpunkt „Verteilte Systeme“ beschäftigt sich Tobias Schaber mit den Themen DevOps und Infrastructure-As-Code und automatisiert zum Beispiel die Bereitstellung von komplexen Systemen wie OpenStack oder Elasticsearch-Clustern.

Share on FacebookGoogle+Share on LinkedInTweet about this on TwitterShare on RedditDigg thisShare on StumbleUpon

Weitere Inhalte zu Allgemein

Kommentieren

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.