Vagrant (Software)
Vagrant
| |
---|---|
![]() | |
![]() 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 |
Programmiersprache | 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
Vagrant wird über eine Shell gesteuert. Nachfolgend findet sich eine Auflistung der wichtigsten Befehle und Konzepte von Vagrant.
Projektinitialisierung
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
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.
Konfiguration
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.
Provisioning
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
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
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
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]
Sonstiges
Mit Vagrant können viele virtuelle Maschinen gleichzeitig betrieben werden, deren Status mit dem Befehl vagrant global-status
abgefragt werden kann.[15]
Versionen
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]
Ergänzendes
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]
Weblinks
- Website
- Entwicklerdokumentation
- Blog
Belege
- ↑ Release 2.4.1. 19. Januar 2024 (abgerufen am 20. Februar 2024).
- ↑ Introducing Vagrant. In: Linux Journal. 14. November 2012, abgerufen am 26. Oktober 2014 (englisch, Einführung in Vagrant).
- ↑ Getting Started. Project Setup. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (englisch, Offizielle Dokumentation zur Initialisierung in Vagrant).
- ↑ 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).
- ↑ a b Boxes. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (englisch, Offizielle Dokumentation zu Boxen in Vagrant).
- ↑ Command-Line-Interface. box. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (englisch, Offizielle Dokumentation zum Befehl box in Vagrant).
- ↑ Vagrantfile. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (englisch, Offizielle Dokumentation zu Vagrantfiles in Vagrant).
- ↑ Vagrantfile. Configuration Version. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (englisch, Offizielle Dokumentation zur Konfigurationsversion in Vagrant).
- ↑ Provisioning. Configuration Version. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (englisch, Offizielle Dokumentation zum Provisioning in Vagrant).
- ↑ Provisioning. Basic Usage. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (englisch, Offizielle Dokumentation zur grundlegende Bedienung des Provisionings in Vagrant).
- ↑ Provisioning. Configuration Version. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (englisch, Offizielle Dokumentation zum Provisioning in Vagrant).
- ↑ a b Mitchell Hashimoto: Vagrant Push. One Command to Deploy Any Application. In: Vagrant. 12. Dezember 2014, abgerufen am 13. Dezember 2014 (englisch).
- ↑ 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).
- ↑ Command-Line-Interface. Teardown. In: docs.vagrantup.com. Hashicorp, abgerufen am 9. November 2014 (englisch, Offizielle Dokumentation zum Beenden von Vagrant).
- ↑ 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).
- ↑ 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]).
- ↑ 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).
- ↑ a b Mitchell Hashimoto: Vagrant 1.5 and Vagrant Cloud. In: Vagrant. 10. März 2014, abgerufen am 26. Oktober 2014 (englisch).
- ↑ Mitchell Hashimoto: Feature Preview: Docker-Based Development Environments. In: Vagrant. 28. April 2014, abgerufen am 26. Oktober 2014 (englisch).
- ↑ Mitchell Hashimoto: Vagrant 1.8. In: HashiCorp. 21. Dezember 2015, abgerufen am 26. Dezember 2015 (englisch).
- ↑ About Us. „HashiCorp’s Vision“ und „Our Timeline“. In: hashicorp.com. Abgerufen am 9. November 2014 (englisch).
- ↑ Vagrant Libvirt Provider. In: GitHub. Abgerufen am 26. Oktober 2014 (englisch).
- ↑ Website von Vagrant Cloud. In: Vagrant. Abgerufen am 26. Oktober 2014 (englisch).