Zum Inhalt springen

Vagrant (Software)

aus Wikipedia, der freien Enzyklopädie
Vagrant

colspan="2" class="notheme" style="text-align:center; background:#Vorlage:Standardfarbe; color:#202122;" | Logo
Screenshot
Vagrant startet eine virtuelle Maschine beim Befehl
vagrant up
Basisdaten

Maintainer Lua-Fehler in Modul:Wikidata, Zeile 1703: attempt to index field 'wikibase' (a nil value)
Entwickler HashiCorp (Mitchell Hashimoto und John Bender)
Erscheinungsjahr Lua-Fehler in Modul:Wikidata, Zeile 1703: attempt to index field 'wikibase' (a nil value)
Aktuelle Version Lua-Fehler in Modul:Wikidata, Zeile 1703: attempt to index field 'wikibase' (a nil value)
(Lua-Fehler in Modul:Wikidata, Zeile 1703: attempt to index field 'wikibase' (a nil value))
Aktuelle Vorabversion Lua-Fehler in Modul:Wikidata, Zeile 1703: attempt to index field 'wikibase' (a nil value)
(Lua-Fehler in Modul:Wikidata, Zeile 1703: attempt to index field 'wikibase' (a nil value))
Betriebssystem POSIX (Linux, Unix, OpenBSD, macOS), Windows
Programmier­sprache Ruby
Kategorie Softwareverteilung und Virtualisierung
Lizenz Business Source License 1.1
deutschsprachig ja
www.vagrantup.com

Vagrant ist eine Ruby-Anwendung zum Erstellen und Verwalten virtueller Maschinen.<ref>Introducing Vagrant. In: Linux Journal. 14. November 2012, abgerufen am 26. Oktober 2014 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value), Einführung in Vagrant).</ref> Vagrant ermöglicht einfache Softwareverteilung ({{Modul:Vorlage:lang}} Modul:Vorlage:lang:103: attempt to index field 'wikibase' (a nil value)) insbesondere in der Software- und Webentwicklung und dient als Wrapper zwischen Virtualisierungssoftware wie VirtualBox, KVM/QEMU, VMware und Hyper-V und Software-Configuration-Management-Anwendungen beziehungsweise Systemkonfigurationswerkzeugen wie Chef, Saltstack und Puppet.

Funktionsweise und Konzepte[Bearbeiten]

Vagrant wird über eine Shell gesteuert. Nachfolgend findet sich eine Auflistung der wichtigsten Befehle und Konzepte von Vagrant.

Projektinitialisierung[Bearbeiten]

Um einen Ordner zu initialisieren, muss man den Ordner anwählen und den Befehl vagrant init ausführen, daraufhin wird ein sogenanntes „Vagrantfile“ mit Beispielen und Erklärungen erzeugt und in dem Ordner platziert.<ref>Getting Started. Project Setup. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value), Offizielle Dokumentation zur Initialisierung in Vagrant).</ref> Durch den Zusatz vagrant init --minimal wird eine minimale Version des Vagrantfiles ohne Beispiele und Erklärungen erzeugt.<ref name="vagrant init">Command-Line-Interface. vagrant init. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value), Offizielle Dokumentation zum Befehl vagrant init in Vagrant).</ref>

Der Befehl vagrant init nimmt zwei Parameter an vagrant init [box-name] [box-url]: durch die Angabe eines „box-name“ kann das Vagrantfile direkt mit einer entsprechenden Vorlage („Box“) generiert werden und durch die Angabe „box-url“ wird die URL (Internetadresse) angegeben, an der sich diese Box befindet und heruntergeladen werden kann.<ref name="vagrant init" /> Diese Angaben lassen sich auch im Vagrantfile konfigurieren.

Diese Datei kann nun mit einem beliebigen Texteditor konfiguriert werden.

Boxen[Bearbeiten]

Boxen sind bei Vagrant vorkonfigurierte (Vorlagen) Virtuelle Maschinen. Dies soll den Prozess der Softwareverteilung und der Entwicklung beschleunigen. Jede Box, die von dem Nutzer benutzt wurde, wird auf dem Computer gespeichert und muss so nicht wieder aus dem Internet geladen werden.<ref name="boxes">Boxes. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value), Offizielle Dokumentation zu Boxen in Vagrant).</ref> Boxen können explizit durch den Befehl vagrant box add [box-name] oder vagrant box add [box-url] heruntergeladen und durch vagrant box remove [box-name] entfernt werden. Ein „box-name“ ist dabei durch Konvention wie folgt aufgebaut: „Entwickler/Box“, zum Beispiel „hashicorp/precise32“.<ref>Command-Line-Interface. box. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value), Offizielle Dokumentation zum Befehl box in Vagrant).</ref> Vagrant Cloud dient dabei als Austauschplattform für die Suche nach Boxen und das Einstellen von eigenen Boxen. Wird nur ein box-name angegeben, wird davon ausgegangen, dass die Box lokal vorhanden ist. Ansonsten wird in der Vagrant Cloud nach der Box gesucht.

Konfiguration[Bearbeiten]

Die gesamte Konfiguration erfolgt im Vagrantfile, das ein spezielles Ruby-Programm enthält.<ref>Vagrantfile. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value), Offizielle Dokumentation zu Vagrantfiles in Vagrant).</ref>

Ein Beispiel:<ref name="boxes" />

<syntaxhighlight lang="ruby"> Vagrant.configure("2") do |config|

config.vm.box = "hashicorp/precise32"

end </syntaxhighlight>

Dies sagt Vagrant, es soll die Konfigurationsversion 2 benutzt werden. Dies ist für die Rückwärtskompatibilität nötig.<ref>Vagrantfile. Configuration Version. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value), Offizielle Dokumentation zur Konfigurationsversion in Vagrant).</ref> Daraufhin wird mit der „config“-Funktion festgelegt, dass Vagrant die Box „hashicorp/precise32“ benutzen soll.

Provisioning[Bearbeiten]

Beim Provisioning ruft Vagrant andere Programme auf, zumeist SCM-Software wie Ansible oder die Shell. Dies automatisiert die Konfiguration.<ref>Provisioning. Configuration Version. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value), Offizielle Dokumentation zum Provisioning in Vagrant).</ref><ref>Provisioning. Basic Usage. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value), Offizielle Dokumentation zur grundlegende Bedienung des Provisionings in Vagrant).</ref>

In Vagrant stehen folgende Provisioner zur Verfügung: File, Shell, Ansible, CFEngine, Chef Solo, Chef Client, Docker, Puppet Apply, Puppet Agent und Salt.

Beispiel: <syntaxhighlight lang="ruby"> Vagrant.configure("2") do |config|

config.vm.box = "hashicorp/precise32"
config.vm.provision "shell", path: "script.sh"

end </syntaxhighlight> Dies führt das Shellskript „script.sh“ aus.

Es können verschiedenste Provisioner in einer Datei ausgeführt werden. Beispiel für mehrere parallele Provisioner: <syntaxhighlight lang="ruby"> Vagrant.configure("2") do |config|

config.vm.box = "hashicorp/precise32"
config.vm.provision "shell", path: "script.sh"
config.vm.provision "file", source: "~/.gitconfig", destination: ".gitconfig"
config.vm.provision "ansible" do |ansible|
 ansible.playbook = "playbook.yml"
end

end </syntaxhighlight> Dies führt den Shellprovisioner aus, der die Datei script.sh ausführt. Anschließend wird die Datei unter der Adresse „~/.gitconfig“ nach „.gitconfig“ in die virtuelle Maschine verschoben. Als letztes wird der Ansible-Provisioner ausgeführt, der die „playbook.yml“ ausführt.

Softwareverteilung[Bearbeiten]

Ab Version 1.7 vom Dezember 2014 ist Softwareverteilung mithilfe des Befehls vagrant push durch Heroku, SFTP und FTP, durch selbstgeschriebene Kommandozeilenskripte sowie durch das hauseigene „Atlas“ möglich.<ref>Provisioning. Configuration Version. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value), Offizielle Dokumentation zum Provisioning in Vagrant).</ref><ref name="v 1.7">Mitchell Hashimoto: Vagrant Push. One Command to Deploy Any Application. In: Vagrant. 12. Dezember 2014, abgerufen am 13. Dezember 2014 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref>

Beispiel für einen FTP-push <syntaxhighlight lang="ruby"> config.push.define "ftp" do |push|

push.host = "ftp.test.com"
push.username = "benutzer1"
push.password = "Passwort1"
push.secure = false
push.destination = "/"
push.dir = "/"

end </syntaxhighlight>

Dieser Abschnitt führt einen Softwareverteilungsvorgang mithilfe des FTP-Protokolls auf den Server mit der Adresse „ftp.test.com“ mit dem Benutzer „benutzer1“ und dem Passwort „Passwort1“ aus. push.secure sagt aus ob das SFTP-Protokoll benutzt werden soll, standardmäßig auf false gesetzt. push.destination enthält den Zielpfad (auf dem Server), an den die Dateien geschickt werden sollen, dahingegen enthält push.dir den lokalen Pfad zu den Dateien die hochgeladen werden sollen. Alle Pfade sind relativ zum Vagrantfile. Darüber hinaus können Dateien und Ordner mithilfe von exclude ausgeschlossen oder mit include eingeschlossen werden.

Sitzung beginnen[Bearbeiten]

Um die virtuelle Maschine zu starten, führt man den Befehl vagrant up aus. Anschließend kann, falls nötig, mit vagrant ssh eine SSH-Sitzung gestartet werden.<ref>Getting Started. Up And SSH. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value), Offizielle Dokumentation zum Starten einer Virtuellen Maschine in Vagrant).</ref>

Sitzung beenden[Bearbeiten]

Die virtuelle Maschine kann auf verschiedene Art und Weise beendet werden. Die Maschine kann mit dem Befehl vagrant destroy mit allen Abhängigkeiten komplett „zerstört“ werden, daneben kann die virtuelle Maschine mit vagrant halt angehalten und mit vagrant suspend in einen Ruhezustand gebracht werden. Ansonsten kann die Maschine auch mit vagrant reload neugestartet werden.<ref>Command-Line-Interface. Teardown. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value), Offizielle Dokumentation zum Beenden von Vagrant).</ref>

Sonstiges[Bearbeiten]

Mit Vagrant können viele virtuelle Maschinen gleichzeitig betrieben werden, deren Status mit dem Befehl vagrant global-status abgefragt werden kann.<ref>Command-Line-Interface. Global Status. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value), Offizielle Dokumentation zum Anzeigen des globalen Status von Vagrant).</ref>

Versionen[Bearbeiten]

Ab Version 1.1 werden auch andere Virtualisierungsanwendungen wie der VMware Player und Serverumgebungen wie Amazon EC2 unterstützt.<ref></ref><ref>Peter Cooper: Vagrant: EC2-Like Virtual Machine Building and Provisioning from Ruby. In: rubyinside.com. 8. März 2014, abgerufen am 23. Oktober 2014 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref>

Mit Version 1.5 wurden Ordnersynchronisierung mit Rsync und SMB sowie eine Unterstützung von Hyper-V zur Visualisierung hinzugefügt.<ref name="1.5">Mitchell Hashimoto: Vagrant 1.5 and Vagrant Cloud. In: Vagrant. 10. März 2014, abgerufen am 26. Oktober 2014 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref>

Mit Version 1.6 wird Docker auch zur Laufzeit nativ unterstützt, was Overhead reduzieren soll, da Docker mit LXC arbeitet.<ref>Mitchell Hashimoto: Feature Preview: Docker-Based Development Environments. In: Vagrant. 28. April 2014, abgerufen am 26. Oktober 2014 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref>

Mit der am 9. Dezember 2014 veröffentlichten Version 1.7 wird einfache Softwareverteilung mithilfe des Befehls vagrant push durch Heroku, SFTP und FTP, durch selbstgeschriebene Kommandozeilenskripte sowie durch das hauseigene „Atlas“ ermöglicht.<ref name="v 1.7" />

Am 21. Dezember 2015 wurde Version 1.8 veröffentlicht. Diese Version benutzt nun nach Möglichkeit "verlinkte Abbildungen" (englisch {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)), wodurch keine Systemabbildungen mehr dupliziert werden müssen, sondern als Referenz angegeben werden können. Außerdem können nun Schnappschüsse (englisch {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)) von Systemen erstellt werden.<ref name="v1.8.0-announcement">Mitchell Hashimoto: Vagrant 1.8. In: HashiCorp. 21. Dezember 2015, abgerufen am 26. Dezember 2015 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref>

Ergänzendes[Bearbeiten]

Um die weitere Entwicklung des Projekts zu begleiten, gründeten Mitchell Hashimoto und Armon Dadgar 2012 Hashicorp, Inc.<ref>About Us. „HashiCorp’s Vision“ und „Our Timeline“. In: hashicorp.com. Abgerufen am 9. November 2014 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref>

Es gibt ein Plugin namens vagrant-libvirt, welches Unterstützung für Libvirt in Vagrant ermöglicht.<ref>Vagrant Libvirt Provider. In: GitHub. Abgerufen am 26. Oktober 2014 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref>

Zeitgleich mit Version 1.5 wurde auch Vagrant Cloud vorgestellt. Diese Cloud macht es möglich, im Team zeitgleich an einer Virtuellen Maschine zu arbeiten und diese über HTTPS in einem Browser darzustellen und bietet vordefinierte Pakete (sogenannte Boxes) an.<ref name="1.5" /><ref>Website von Vagrant Cloud. In: Vagrant. Abgerufen am 26. Oktober 2014 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref>

Weblinks[Bearbeiten]

Belege[Bearbeiten]

<references responsive />