Im Rahmen des Testens und der Demonstration unserer fortschrittlichen Deployit-Plattform für die Bereitstellungsautomatisierung1 verwenden wir bei XebiaLabs viele Cloud- und Devops-Tools, um all die verschiedenen Arten von Middleware, die wir unterstützen, sowie die Build-, CI- und Ops-Tools, mit denen wir integriert sind, handhaben zu können2. Vor kurzem habe ich eine Vagrant3-Umgebung eingerichtet, um das Puppet-Modul von Deployit zu demonstrieren, mit dem neue Middleware, die von Puppet bereitgestellt wird, automatisch bei Ihrer Plattform für die Bereitstellungsautomatisierung registriert wird, um die Bereitstellung von Anwendungsschichten auf dieser Plattform zu ermöglichen.
Das Problem besteht nun schon seit mehr als zwei Jahren und bezieht sich darauf, dass der DHCP-Server von VirtualBox manchmal unter noch nicht geklärten Umständen der NAT-Schnittstelle keine IP-Adresse zuweist. Da alle von Vagrant verwalteten Images standardmäßig eine NAT-Schnittstelle erhalten4, ist dies mehr als nur ein wenig lästig: Vagrant bleibt während der VM-Konfigurationsphase einfach hängen.
Da das Problem nicht deterministisch auftritt, besteht eine Möglichkeit, dieses Problem zu umgehen, darin, einen Neustart des Images zu vermeiden: Spielen Sie die "NAT-Lotterie", bis Sie Glück haben, indem Sie den VBoxManage-Prozess beenden, wenn das Image hängt, und vagrant erneut versuchen. Dann führen Sie 
Leider kommen Sie damit bei einem Image, das Vagrant selbst zu starten versucht, nicht weit: Vagrant erstellt Headless-Sitzungen, so dass Sie erst dann über die VirtualBox-Benutzeroberfläche darauf zugreifen können, wenn Sie Vagrant und den von ihm gestarteten VBoxHeadless-Prozess beendet haben.
Geändert am 24. April, um hinzuzufügen: siehe den Kommentar von Richard Pot für eine Anleitung, wie man Boxen im GUI-Modus startet.
Glücklicherweise können Sie mit VirtualBox über den Befehl guestcontrol von VBoxManage Befehle auf dem Gastbetriebssystem ausführen , ohne die Benutzeroberfläche verwenden zu müssen. Als sich Vagrant also wieder einmal aufhängte, während es darauf wartete, sich mit dem Image zu verbinden, versuchte ich als erstes
/path/to/vboxmanage guestcontrol my-vagrant-image exec "/usr/bin/sudo" --username vagrant --password vagrant --verbose --wait-stdout ifdown eth0
/path/to/vboxmanage guestcontrol my-vagrant-image exec "/usr/bin/sudo" --username vagrant --password vagrant --verbose --wait-stdout ifup eth0
Das ermöglichte es dem NAT-Adapter, wie erhofft, eine IP-Adresse anzufordern. Leider verwirrte dies auch Vagrant, das (vermutlich in dem Glauben, das Image sei offline gegangen) beendet wurde.
Glücklicherweise müssen Sie den Adapter nicht herunterfahren, um eine neue IP-Adresse anzufordern: dhclient tut es genauso gut. Und tatsächlich
/path/to/vboxmanage guestcontrol my-vagrant-image exec "/usr/bin/sudo" --username vagrant --password vagrant --verbose --wait-stdout dhclient
funktioniert: der NAT-Adapter nimmt eine IP-Adresse auf und nach ein paar Sekunden fährt Vagrant mit der Konfiguration des Images fort.
Etwas, das hoffentlich hilft, auch wenn es tatsächlich noch ein paar Jahre dauert, dem eigentlichen Problem auf den Grund zu gehen ;-)
- Oder Application Release Automation (ARA), wenn Sie Gartner folgen
- Einzelheiten finden Sie auf der Support-Seite der Plattform
- Für diejenigen, die mit Vagrant nicht vertraut sind: Es handelt sich um ein leistungsstarkes Tool (geschrieben in Ruby), mit dem Sie deklarativ mehrere zusammenhängende virtuelle Images auf der Grundlage von Vorlagen, den so genannten 'Boxen', definieren können. Vagrant orchestriert die Interaktion mit VirtualBox, um Ihnen eine sehr einfache Möglichkeit zu bieten, einen Cluster von Images zu stoppen, zu starten und zu konfigurieren. In diesem Sinne ist es ein wenig wie eine VirtualBox-basierte CloudFormation.
- So kommuniziert Vagrant mit dem Image, während es konfiguriert wird
- Das erkennen Sie daran, dass ifconfig anzeigt, dass der eth0-Adapter keine IPv4-Adresse hat
Verfasst von
Andrew Phillips
Unsere Ideen
Weitere Blogs
Contact



