Skip to main content

Vagrant ist ein in Ruby geschriebenes Open-Source (MIT) Kommandozeilen-Programm, das euch dass Erstellen und Verwalten von virtuellen Testmaschinen extrem vereinfachen soll. Virtuelle Maschinen können durch Vorlagen (Vagrantfiles) automatisiert installiert und durchkonfiguriert werden.

Vagrant ermöglicht übelst einfaches Deployment, insbesondere in der Software- und Webentwicklung. Das Tool dient als Wrapper zwischen Virtualisierungssoftware wie VirtualBox, VMware, Hyper-V und Software-Configuration-Management-Anwendungen beziehungsweise Systemkonfigurationswerkzeugen wie Ansible, Chef, Saltstack und Puppet.

Die Dokumentation ist rattenscharf und als Leckerlie obendrauf gibt es hier vorgefertigte Vagrant Template-Pakete.

Einfache Einrichtung einer Ubuntu 20.04 LTS VM

Folgendem Befehle abfeuern und eine Ubuntu 20.04 LTS VM ist Startklar zum Entern:

vagrant init ubuntu/focal64
vagrant-up

Vagrant steuern

# Vagrant-Box initialisieren
vagrant init
vagrant init ubuntu/focal64

# Vagrant-Box starten
vagrant up

# Vagrant-Box ssh
vagrant ssh-config
vagrant ssh

# Vagrant-Box stoppen
vagrant halt

# Vagrant-Box updaten
vagrant box update

# Vagrant-Box löschen
vagrant destroy -f

# Vagrant-Box Status anzeigen
vagrant status

# Required after changes made in the Vagrantfile to take effect
vagrant reload

# Create Snapshot
vagrant snapshot save

# Restore Snapshot
vagrant snapshot pop

Beispiel – Einrichtung einer Ansible-Testumgebung

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
    
    config.vm.box = "ubuntu/focal64"

    config.vm.synced_folder ".", "/vagrant", disabled: true
    config.vm.provider :virtualbox do |vb|
      vb.cpus = "2"
      vb.memory = 2048
      vb.linked_clone = true
    end
 
    # VM - Master-Node
    config.vm.define "node-master" do |node|
      node.vm.hostname = "node-master"
      node.vm.network "private_network", ip: "192.168.30.10"
      node.vm.provision "shell", inline: <<-SHELL
        sudo apt -q -y update --fix-missing
        sudo apt -q -y install acl apg apt-transport-https bzip2 curl less liblz4-tool moreutils net-tools python3-pip psmisc psutils screen sshpass traceroute unzip zip vim
        sudo pip3 install ansible
        sudo mkdir -p ~/ansible/{inventories,playbooks,roles/role_template/{defaults,files,handlers,meta,tasks,templates,vars}}
        sudo echo -e "192.168.30.10 node-master master 192.168.30.11 node-1 node1 192.168.30.12 node-2 node2" >> /etc/hosts
        ssh-keygen -o -a 100 -t ed25519 -N "" -f ~/.ssh/ssh_ansible_ed25519_key -C "$(whoami)@$(hostname)-$(date -I)"
      SHELL
      node.vm.provider "virtualbox" do |vb|
        vb.name = "node-master"
      end
    end
 
    # VM - node 1
    config.vm.define "node-1" do |node|
      node.vm.hostname = "node-1"
      node.vm.network "private_network", ip: "192.168.30.11"
      node.vm.provision "shell", inline: <<-SHELL
        sudo apt -q -y update --fix-missing
      SHELL
      node.vm.provider "virtualbox" do |vb|
        vb.name = "node-1"
      end
    end

    # VM - Node 2
    config.vm.define "node-2" do |node|
        node.vm.hostname = "node-2"
        node.vm.network "private_network", ip: "192.168.30.12"
        node.vm.provision "shell", inline: <<-SHELL
          sudo apt -q -y update --fix-missing
        SHELL
        node.vm.provider "virtualbox" do |vb|
          vb.name = "node-2"
       end
    end
end