Vagrant

install and setup

install on centos download-link: https://www.vagrantup.com/downloads.html

echo options kvm_intel nested=Y | sudo tee /etc/modprobe.d/kvm_intel.conf
yum install -y qemu-kvm libvirt libvirt-devel gcc patch
systemctl enable libvirtd
systemctl start libvirtd

cd /tmp
wget <link>
wget https://releases.hashicorp.com/vagrant/2.2.5/vagrant_2.2.5_x86_64.rpm (latest on 2019.09.27)
rpm -ivh /tmp/vagrant_*.rpm

install on ubuntu

write soon

setup

vagrant plugin install vagrant-libvirt
vagrant box add centos/7
vagrant box add ubuntu/bionic64

sample manufests

virtualbox backend

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

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"
  config.disksize.size = '20GB' # vagrant plugin install vagrant-disksize

  config.vm.provider "virtualbox" do |vb|
    vb.cpus = 2
    vb.memory = "4000"
  end

  config.vm.define "vm" do |vm|
    vm.vm.hostname = "vm"
    vm.vm.network "private_network", ip: "192.168.33.10"
  end
end

libvirt backend

# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.define "hv00" do |node|
      node.vm.hostname = "hv00"
      node.vm.provider :libvirt do |v|
          v.cpus = 4
          v.cpu_mode = "host-passthrough"
          v.memory = 8000
      end
      node.vm.network :private_network,
        :ip => "192.168.99.10",
        :libvirt__guest_ipv6 => "yes"
  end
  config.vm.define "hv01" do |node|
      node.vm.hostname = "hv01"
      node.vm.provider :libvirt do |v|
          v.cpus = 4
          v.cpu_mode = "host-passthrough"
          v.memory = 8000
      end
      node.vm.network :private_network,
        :ip => "192.168.99.11",
        :libvirt__guest_ipv6 => "yes"
  end
end #|config|

networking

  • ref: https://github.com/vagrant-libvirt/vagrant-libvirt#private-network-options

private network (virtualbox)

Vagrant.configure("2") do |config|
  config.vm.define "tst" do |node|
		node.vm.network "private_network", ip: "192.168.99.10"
  end
  config.vm.define "dut" do |node|
		node.vm.network "private_network", ip: "192.168.99.11"
  end
end

private network (libvirt)

Vagrant.configure("2") do |config|
  config.vm.define "hv00" do |node|
      node.vm.network :private_network,
        :ip => "192.168.99.10",
        :libvirt__guest_ipv6 => "yes"
  end
  config.vm.define "hv01" do |node|
      node.vm.network :private_network,
        :ip => "192.168.99.11",
        :libvirt__guest_ipv6 => "yes"
  end
end

private network (auto_config:false)

host$ cat Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.define :node1 do |node|
    node.vm.network :private_network, ip:"192.168.33.11", auto_config:false
  end
end

host$ vagrant reload
host$ vagrant ssh
vm$ ip a
...(snip)...
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:c7:09:b0 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::a00:27ff:fec7:9b0/64 scope link
       valid_lft forever preferred_lft forever

provision script from file

$ cat Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic"
  config.vm.provision :shell, path: "setup.sh"
end

$ cat setup.sh
apt update
apt install -y nginx

$ vagrant destroy -f && vagrant up
$ vagrant provision

provision script inline version

Vagrant.configure("2") do |config|
	config.vm.box = "ubuntu/bionic"
	config.vm.provision :shell, inline: $script
end

$script = <<END
apt update
apt install -y nginx
END

Good references

  • explanation how to use vagrant-libvirt simply by manji-san https://qiita.com/manji0/items/d1ab7a0c134ed0e32b3f
  • specifications are listed. https://github.com/vagrant-libvirt/vagrant-libvirt#libvirt-configuration