Raw File
Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby
Vagrant.require_version ">= 2.2.0"

# The source of truth for vagrant box versions.
# Sets SERVER_BOX, SERVER_VERSION, NETNEXT_SERVER_BOXET and NEXT_SERVER_VERSION
# Accepts overrides from env variables
require_relative '../vagrant_box_defaults.rb'
$SERVER_BOX = (ENV['SERVER_BOX'] || $SERVER_BOX)
$SERVER_VERSION= (ENV['SERVER_VERSION'] || $SERVER_VERSION)
$NETNEXT_SERVER_BOX = (ENV['NETNEXT_SERVER_BOX'] || $NETNEXT_SERVER_BOX)
$NETNEXT_SERVER_VERSION= (ENV['NETNEXT_SERVER_VERSION'] || $NETNEXT_SERVER_VERSION)

$BUILD_NUMBER = ENV['BUILD_NUMBER'] || "0"
$JOB_NAME = ENV['JOB_BASE_NAME'] || "LOCAL"
$K8S_VERSION = ENV['K8S_VERSION'] || "1.18"
$K8S_NODES = (ENV['K8S_NODES'] || "2").to_i
$NFS = ENV['NFS']=="1"? true : false
$IPv6=(ENV['IPv6'] || "0")
$CONTAINER_RUNTIME=(ENV['CONTAINER_RUNTIME'] || "docker")
$CNI_INTEGRATION=(ENV['CNI_INTEGRATION'] || "")
$CILIUM_IMAGE = ENV['CILIUM_IMAGE'] || ""
$CILIUM_OPERATOR_IMAGE = ENV['CILIUM_OPERATOR_IMAGE'] || ""
$HUBBLE_RELAY_IMAGE = ENV['HUBBLE_RELAY_IMAGE'] || ""
$CILIUM_REGISTRY = ENV['CILIUM_REGISTRY'] || ""
$PRELOAD_VM = ENV['PRELOAD_VM'] || "false"
$SKIP_K8S_PROVISION = ENV['SKIP_K8S_PROVISION'] || "false"
$NO_CILIUM_ON_NODE = ENV['NO_CILIUM_ON_NODE'] || ""
$KUBEPROXY = (ENV['KUBEPROXY'] || "1")

# RAM and CPU settings
$MEMORY = (ENV['VM_MEMORY'] || "4096").to_i
$CPU = (ENV['VM_CPUS'] || "2").to_i

if ENV['NETNEXT'] == "true" || ENV['NETNEXT'] == "1" || ENV['KERNEL'] == "net-next" then
    $SERVER_BOX = $NETNEXT_SERVER_BOX
    $SERVER_VERSION = $NETNEXT_SERVER_VERSION
elsif ENV['KERNEL'] != nil && ENV['KERNEL'] != "" then
    $SERVER_BOX = instance_variable_get("@v"+ ENV['KERNEL'] + "_SERVER_BOX")
    $SERVER_VERSION = instance_variable_get("@v"+ ENV['KERNEL'] + "_SERVER_VERSION")
end

ENV["VAGRANT_DEFAULT_PROVIDER"] = "virtualbox"
Vagrant.configure("2") do |config|

    config.vm.define "runtime" do |server|
        server.vm.provider "virtualbox" do |vb|
            vb.customize ["modifyvm", :id, "--hwvirtex", "on"]
            vb.cpus = $CPU
            vb.memory= $MEMORY
            vb.linked_clone = true
            vb.default_nic_type = "virtio"
            # Prevent VirtualBox from interfering with host audio stack
            vb.customize ["modifyvm", :id, "--audio", "none"]
        end

        server.vm.box =  "#{$SERVER_BOX}"
        server.vm.box_version = $SERVER_VERSION
        server.vm.boot_timeout = 600
        server.vm.hostname = "runtime"

        # This network is only used by NFS
        server.vm.network "private_network", type: "dhcp"
        server.vm.synced_folder "../", "/home/vagrant/go/src/github.com/cilium/cilium",
            nfs: $NFS

        # Provision section
        server.vm.provision :shell,
            :inline => "sed -i 's/^mesg n$/tty -s \\&\\& mesg n/g' /root/.profile"
        server.vm.provision "file", source: "provision/", destination: "/tmp/"
        server.vm.provision "shell" do |sh|
            sh.path = "./provision/runtime_install.sh"
            sh.env = {}
        end
    end

    (1..$K8S_NODES).each do |i|
        config.vm.define "k8s#{i}-#{$K8S_VERSION}" do |server|
            server.vm.provider "virtualbox" do |vb|
                vb.customize ["modifyvm", :id, "--hwvirtex", "on"]
                vb.cpus = $CPU
                vb.memory = $MEMORY
                if "k8s#{i}" == $NO_CILIUM_ON_NODE
                  vb.memory = $MEMORY / 2
                  vb.cpus = 1
                end
                vb.linked_clone = true
                vb.default_nic_type = "virtio"
                # Prevent VirtualBox from interfering with host audio stack
                vb.customize ["modifyvm", :id, "--audio", "none"]
                if ENV['PRELOAD_VM'] == "false" then
                  # Use serial ports if the VM is no longer accessible via SSH
                  vb.customize ["modifyvm", :id, "--uart1", "0x3F8", "4"]
                  vb.customize ["modifyvm", :id, "--uartmode1", "server", "k8s#{i}-#{$K8S_VERSION}-ttyS0.sock"]
                end
            end

            server.vm.box =  "#{$SERVER_BOX}"
            server.vm.box_version = $SERVER_VERSION
            server.vm.hostname = "k8s#{i}"
            server.vm.boot_timeout = 600
            if i == 1 then
                server.vm.network "forwarded_port", guest: 6443, host: 9443,
                  auto_correct: true
            end
            server.vm.network "private_network",
                ip: "192.168.36.1#{i}",
                virtualbox__intnet: "cilium-k8s#{$BUILD_NUMBER}-#{$JOB_NAME}-#{$K8S_VERSION}"
            server.vm.network "private_network",
                ip: "192.168.37.1#{i}",
                virtualbox__intnet: "cilium-k8s-2#{$BUILD_NUMBER}-#{$JOB_NAME}-#{$K8S_VERSION}"

            # @TODO: Clean this one when https://github.com/hashicorp/vagrant/issues/9822 is fixed.
            server.vm.provision "ipv6-config",
                type: "shell",
                run: "always",
                inline: "ip -6 a a fd04::1#{i}/96 dev enp0s8 || true"
            server.vm.provision "ipv6-config",
                type: "shell",
                run: "always",
                inline: "ip -6 a a fd05::1#{i}/96 dev enp0s9 || true"

            # This network is only used by NFS
            server.vm.network "private_network", type: "dhcp"
            server.vm.synced_folder "../", "/home/vagrant/go/src/github.com/cilium/cilium",
                nfs: $NFS
            # Provision section
            server.vm.provision :shell,
                :inline => "sudo sysctl -w net.ipv6.conf.all.forwarding=1"
            server.vm.provision :shell,
                :inline => "sed -i 's/^mesg n$/tty -s \\&\\& mesg n/g' /root/.profile"
            server.vm.provision "file", source: "provision/", destination: "/tmp/"
            server.vm.provision "shell" do |sh|
                sh.path = "./provision/k8s_install.sh"
                sh.args = [
                    "k8s#{i}", "192.168.36.1#{i}", "#{$K8S_VERSION}",
                    "#{$IPv6}", "#{$CONTAINER_RUNTIME}", "#{$CNI_INTEGRATION}"]
                sh.env = {"CILIUM_IMAGE" => "#{$CILIUM_IMAGE}",
                          "CILIUM_OPERATOR_IMAGE" => "#{$CILIUM_OPERATOR_IMAGE}",
                          "HUBBLE_RELAY_IMAGE" => "#{$HUBBLE_RELAY_IMAGE}",
                          "CILIUM_REGISTRY" => "#{$CILIUM_REGISTRY}",
                          "PRELOAD_VM" => "#{$PRELOAD_VM}",
                          "SKIP_K8S_PROVISION" => "#{$SKIP_K8S_PROVISION}",
                          "KUBEPROXY" => "#{$KUBEPROXY}"}
            end
        end
    end
end
back to top