Vagrant (Software)

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
Vagrant

Logo
Screenshot
Vagrant startet eine virtuelle Maschine beim Befehl
vagrant up
Basisdaten

Entwickler HashiCorp (Mitchell Hashimoto und John Bender)
Erscheinungsjahr 8. März 2010
Aktuelle Version 2.4.1[1]
(19. Januar 2024)
Betriebssystem POSIX (Linux, Unix, OpenBSD, macOS), Windows
Programmier­sprache Ruby
Kategorie Softwareverteilung und Virtualisierung
Lizenz Business Source License 1.1
deutschsprachig nein
www.vagrantup.com

Vagrant ist eine Ruby-Anwendung zum Erstellen und Verwalten virtueller Maschinen.[2] Vagrant ermöglicht einfache Softwareverteilung (englisch Deployment) 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 | Quelltext bearbeiten]

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

Projektinitialisierung

[Bearbeiten | Quelltext 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.[3] Durch den Zusatz vagrant init --minimal wird eine minimale Version des Vagrantfiles ohne Beispiele und Erklärungen erzeugt.[4]

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.[4] Diese Angaben lassen sich auch im Vagrantfile konfigurieren.

Diese Datei kann nun mit einem beliebigen Texteditor konfiguriert werden.

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.[5] 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“.[6] 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.

Die gesamte Konfiguration erfolgt im Vagrantfile, das ein spezielles Ruby-Programm enthält.[7]

Ein Beispiel:[5]

Vagrant.configure("2") do |config|
 config.vm.box = "hashicorp/precise32"
end

Dies sagt Vagrant, es soll die Konfigurationsversion 2 benutzt werden. Dies ist für die Rückwärtskompatibilität nötig.[8] Daraufhin wird mit der „config“-Funktion festgelegt, dass Vagrant die Box „hashicorp/precise32“ benutzen soll.

Beim Provisioning ruft Vagrant andere Programme auf, zumeist SCM-Software wie Ansible oder die Shell. Dies automatisiert die Konfiguration.[9][10]

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

Beispiel:

Vagrant.configure("2") do |config|
 config.vm.box = "hashicorp/precise32"
 config.vm.provision "shell", path: "script.sh"
end

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:

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

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 | Quelltext 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.[11][12]

Beispiel für einen FTP-push

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

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 | Quelltext 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.[13]

Sitzung beenden

[Bearbeiten | Quelltext 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.[14]

Mit Vagrant können viele virtuelle Maschinen gleichzeitig betrieben werden, deren Status mit dem Befehl vagrant global-status abgefragt werden kann.[15]

Ab Version 1.1 werden auch andere Virtualisierungsanwendungen wie der VMware Player und Serverumgebungen wie Amazon EC2 unterstützt.[16][17]

Mit Version 1.5 wurden Ordnersynchronisierung mit Rsync und SMB sowie eine Unterstützung von Hyper-V zur Visualisierung hinzugefügt.[18]

Mit Version 1.6 wird Docker auch zur Laufzeit nativ unterstützt, was Overhead reduzieren soll, da Docker mit LXC arbeitet.[19]

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.[12]

Am 21. Dezember 2015 wurde Version 1.8 veröffentlicht. Diese Version benutzt nun nach Möglichkeit "verlinkte Abbildungen" (englisch linked images), wodurch keine Systemabbildungen mehr dupliziert werden müssen, sondern als Referenz angegeben werden können. Außerdem können nun Schnappschüsse (englisch snapshots) von Systemen erstellt werden.[20]

Um die weitere Entwicklung des Projekts zu begleiten, gründeten Mitchell Hashimoto und Armon Dadgar 2012 Hashicorp, Inc.[21]

Es gibt ein Plugin namens vagrant-libvirt, welches Unterstützung für Libvirt in Vagrant ermöglicht.[22]

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.[18][23]

  1. Release 2.4.1. 19. Januar 2024 (abgerufen am 20. Februar 2024).
  2. Introducing Vagrant. In: Linux Journal. 14. November 2012, abgerufen am 26. Oktober 2014 (englisch, Einführung in Vagrant).
  3. Getting Started. Project Setup. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (englisch, Offizielle Dokumentation zur Initialisierung in Vagrant).
  4. a b Command-Line-Interface. vagrant init. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (englisch, Offizielle Dokumentation zum Befehl vagrant init in Vagrant).
  5. a b Boxes. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (englisch, Offizielle Dokumentation zu Boxen in Vagrant).
  6. Command-Line-Interface. box. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (englisch, Offizielle Dokumentation zum Befehl box in Vagrant).
  7. Vagrantfile. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (englisch, Offizielle Dokumentation zu Vagrantfiles in Vagrant).
  8. Vagrantfile. Configuration Version. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (englisch, Offizielle Dokumentation zur Konfigurationsversion in Vagrant).
  9. Provisioning. Configuration Version. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (englisch, Offizielle Dokumentation zum Provisioning in Vagrant).
  10. Provisioning. Basic Usage. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (englisch, Offizielle Dokumentation zur grundlegende Bedienung des Provisionings in Vagrant).
  11. Provisioning. Configuration Version. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (englisch, Offizielle Dokumentation zum Provisioning in Vagrant).
  12. a b Mitchell Hashimoto: Vagrant Push. One Command to Deploy Any Application. In: Vagrant. 12. Dezember 2014, abgerufen am 13. Dezember 2014 (englisch).
  13. Getting Started. Up And SSH. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (englisch, Offizielle Dokumentation zum Starten einer Virtuellen Maschine in Vagrant).
  14. Command-Line-Interface. Teardown. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (englisch, Offizielle Dokumentation zum Beenden von Vagrant).
  15. Command-Line-Interface. Global Status. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (englisch, Offizielle Dokumentation zum Anzeigen des globalen Status von Vagrant).
  16. Mitchell Hashimoto: Vagrant. Up and Running. O’Reilly Verlag, 2013, ISBN 978-1-4493-3583-0, S. 13 (amerikanisches Englisch, freier Auszug [PDF; abgerufen am 2. Oktober 2014]).
  17. Peter Cooper: Vagrant: EC2-Like Virtual Machine Building and Provisioning from Ruby. In: rubyinside.com. 8. März 2014, abgerufen am 23. Oktober 2014 (englisch).
  18. a b Mitchell Hashimoto: Vagrant 1.5 and Vagrant Cloud. In: Vagrant. 10. März 2014, abgerufen am 26. Oktober 2014 (englisch).
  19. Mitchell Hashimoto: Feature Preview: Docker-Based Development Environments. In: Vagrant. 28. April 2014, abgerufen am 26. Oktober 2014 (englisch).
  20. Mitchell Hashimoto: Vagrant 1.8. In: HashiCorp. 21. Dezember 2015, abgerufen am 26. Dezember 2015 (englisch).
  21. About Us. „HashiCorp’s Vision“ und „Our Timeline“. In: hashicorp.com. Abgerufen am 9. November 2014 (englisch).
  22. Vagrant Libvirt Provider. In: GitHub. Abgerufen am 26. Oktober 2014 (englisch).
  23. Website von Vagrant Cloud. In: Vagrant. Abgerufen am 26. Oktober 2014 (englisch).