Vagrant kenne ich schon eine zeitlang, hatte aber lange nicht genügend, Zeit um es genauer anzuschauen und zu testen. Dies habe ich in den letzten Wochen nachgeholt.
Für die, die Vagrant nicht kennen, stelle ich es kurz vor. Vagrant ist eine Anwendung, die das Erstellen und Verwalten von virtuellen Maschinen erlaubt. Dabei funktioniert sie als sogenannter Wrapper zwischen der Virtualisierung-Software wie z.B. VirtualBox oder VMware und den Systemkonfigurations-werkzeugen wie Puppet oder Chief.
Vagrant gibt es für alle Platformen (Windows, Mac OS, CentOS (RPM), Debian (deb)). Die Software wird über die Kommandozeile verwaltet, dazu verwende ich vorzugsweise den cmder unter Windows, ein erweitertes Kommandozeilen-Werkzeug.
Aufbau von Vagrant
Die zwei Hauptteile von Vagrant sind: die Konfigurationsdatei namens Vagrantfile und die vorkonfigurierten Vorlagen von virtuellen Maschinen namens Boxen.
Boxen
Die Boxen sind vorkonfigurierte virtuelle Maschinen, die über Vagrant verwaltet und heruntergeladen werden. Sie dienen der Grundlage für die Anweisungen, die im Vagrantfile hinterlegt sind.
Vagrantfile
Der Hauptteil der Konfiguration wird im Vagrantfile festgelegt, das in einem beliebigen Ordner abgelegt werden kann. Der Syntax der Datei lehnt sich dabei an Ruby.
Box
Der erste Punkt im Vagrantfile ist die Angabe, auf welcher Box das alles aufgebaut werden soll. Im folgenden Beispiel würde das heissen von der Box hashicorp/precise32
.
Vagrant.configure("2") do |config| config.vm.box = "hashicorp/precise32" end
Provisioning
In der Vagrant Datei können dabei auch Provisioning mitgegeben werden, das sind Anweisungen an ein anderes Programm wie z.B. Puppet oder Chief, aber auch grundlegende Anwendungen wie die Shell können angegeben werden. Sie dienen dazu, um die Konfiguration zu automatisieren. Unterstützt werden: File, Shell, Ansible, CFEngine, Chef Solo, Chef Client, Docker, Puppet Apply, Puppet Agent und Salt.
Ordner Synchronisation
Eine der wichtigsten Funktionen, warum Vagrant so häufig von Entwicklern genutzt wird, ist die Ordner Synchronisation. Diese wird auch im Vagrantfile angegeben und erzeugt einen geteilten Ordner, der auf dem Host und in der virtuellen Maschine verfügbar ist, in dem z.B. eine Laravel oder eine WordPress Applikation abgespeichert werden kann, um sie weiter zu entwickeln und dabei gleichzeitig in einer Linux Maschine zu testen.
Provider
In Vagrant gibt es sogenannte Provider das sind Plugins, die die Schnittstelle zwischen dem Vagrant und der Verwaltungssoftware der virtuellen Maschine herstellen. Standardmässig wird der Provider der VirtuelBox genommen. Es gibt weitere Provider für VMware Workstation, VMware Fusion, Proxmox oder KVM. Aber auch zu Cloud-hosting Providern wie DigitalOcean, Linode oder AWS gibt es Provider.