1# -*- mode: ruby -*- 2# vi: set ft=ruby : 3 4Vagrant.configure(2) do |config| 5 6 # Pick the right distro and bootstrap, default is fedora28 7 distro = ( ENV['SPDK_VAGRANT_DISTRO'] || "fedora28") 8 provider = (ENV['SPDK_VAGRANT_PROVIDER'] || "virtualbox") 9 case distro 10 when "centos7" 11 config.vm.box = "puppetlabs/centos-7.2-64-nocm" 12 config.ssh.insert_key = false 13 # Puppetlabs does not provide libvirt Box so we will use official one 14 config.vm.provider :libvirt do |libvirt| 15 config.vm.box = "centos/7" 16 end if Vagrant.has_plugin?('vagrant-libvirt') 17 when "ubuntu16" 18 if provider.eql?("libvirt") 19 # https://app.vagrantup.com/sjohnsen/boxes/ubuntu1604 20 config.vm.box = "sjohnsen/ubuntu1604" 21 else 22 # See: https://app.vagrantup.com/puppetlabs/boxes/ubuntu-16.04-64-nocm 23 config.vm.box = "puppetlabs/ubuntu-16.04-64-nocm" 24 config.vm.box_version = "1.0.0" 25 end 26 when "ubuntu18" 27 if provider.eql?("libvirt") 28 # https://app.vagrantup.com/sjohnsen/boxes/ubuntu1804 29 config.vm.box = "sjohnsen/ubuntu1804" 30 else 31 # See: https://app.vagrantup.com/bento/boxes/ubuntu-18.04 32 config.vm.box = "bento/ubuntu-18.04" 33 config.vm.box_version = "201803.24.0" 34 end 35 when "fedora28" 36 #See: https://app.vagrantup.com/generic/boxes/fedora28 37 config.vm.box = "generic/fedora28" 38 when "fedora29" 39 #See: https://app.vagrantup.com/generic/boxes/fedora29 40 config.vm.box = "generic/fedora29" 41 when "fedora30" 42 #See: https://app.vagrantup.com/generic/boxes/fedora30 43 config.vm.box = "generic/fedora30" 44 when "freebsd11" 45 #See: https://app.vagrantup.com/generic/boxes/freebsd11 46 config.vm.box = "generic/freebsd11" 47 if File.file?(File.expand_path("~/vagrant_pkg.conf")) 48 config.vm.provision "file", source: "~/vagrant_pkg.conf", destination: "pkg.conf" 49 config.vm.provision "shell", inline: "sudo mv pkg.conf /usr/local/etc/pkg.conf" 50 config.vm.provision "shell", inline: "sudo chown root:wheel /usr/local/etc/pkg.conf" 51 config.vm.provision "shell", inline: "sudo chmod 644 /usr/local/etc/pkg.conf" 52 end 53 else 54 "Invalid argument #{distro}" 55 abort("Invalid argument!") 56 end 57 config.vm.box_check_update = false 58 59 # Copy in the .gitconfig if it exists 60 if File.file?(File.expand_path("~/.gitconfig")) 61 config.vm.provision "file", source: "~/.gitconfig", destination: ".gitconfig" 62 end 63 64 # Copy the tsocks configuration file for use when installing some spdk test pool dependencies 65 if File.file?("/etc/tsocks.conf") 66 config.vm.provision "file", source: "/etc/tsocks.conf", destination: "tsocks.conf" 67 config.vm.provision "shell", inline: "sudo mv tsocks.conf /etc/tsocks.conf" 68 config.vm.provision "shell", inline: "sudo chown root:wheel /etc/tsocks.conf" 69 config.vm.provision "shell", inline: "sudo chmod 644 /etc/tsocks.conf" 70 end 71 72 # vagrant-cachier caches apt/yum etc to speed subsequent 73 # vagrant up 74 # to enable, run 75 # vagrant plugin install vagrant-cachier 76 # 77 if Vagrant.has_plugin?("vagrant-cachier") 78 config.cache.scope = :box 79 end 80 81 if !(distro.include?("ubuntu")) 82 config.vm.network "private_network", type: "dhcp" 83 end 84 85 # use http proxy if avaiable 86 if ENV['http_proxy'] && Vagrant.has_plugin?("vagrant-proxyconf") 87 config.proxy.http = ENV['http_proxy'] 88 config.proxy.https = ENV['https_proxy'] 89 config.proxy.no_proxy = "localhost,127.0.0.1" 90 end 91 92 vmcpu=(ENV['SPDK_VAGRANT_VMCPU'] || 2) 93 vmram=(ENV['SPDK_VAGRANT_VMRAM'] || 4096) 94 spdk_dir=(ENV['SPDK_DIR'] || "none") 95 vhost_host_dir=(ENV['VHOST_HOST_DIR'] || "none") 96 vhost_vm_dir=(ENV['VHOST_VM_DIR'] || "none") 97 98 config.ssh.forward_agent = true 99 config.ssh.forward_x11 = true 100 101 config.vm.provider "virtualbox" do |vb| 102 vb.customize ["modifyvm", :id, "--ioapic", "on"] 103 vb.memory = "#{vmram}" 104 vb.cpus = "#{vmcpu}" 105 106 nvme_disk=(ENV['NVME_FILE'] || "nvme_disk.img") 107 unless File.exist? (nvme_disk) 108 vb.customize ["createhd", "--filename", nvme_disk, "--variant", "Fixed", "--size", "1024"] 109 vb.customize ["storagectl", :id, "--name", "nvme", "--add", "pcie", "--controller", "NVMe", "--portcount", "1", "--bootable", "off"] 110 vb.customize ["storageattach", :id, "--storagectl", "nvme", "--type", "hdd", "--medium", nvme_disk, "--port", "0"] 111 end 112 113 #support for the SSE4.x instruction is required in some versions of VB. 114 vb.customize ["setextradata", :id, "VBoxInternal/CPUM/SSE4.1", "1"] 115 vb.customize ["setextradata", :id, "VBoxInternal/CPUM/SSE4.2", "1"] 116 end 117 118 # This setup was Tested on Fedora 27 119 # libvirt configuration need modern Qemu(tested on 2.10) & vagrant-libvirt in version 0.0.39+ 120 # There are few limitation for SElinux - The file added outside libvirt must have proper SE ACL policy or setenforce 0 121 config.vm.provider "libvirt" do |libvirt, override| 122 libvirt.random_hostname = "1" 123 libvirt.disk_bus = "virtio" 124 125 # we put nvme_disk inside default pool to eliminate libvirt/SELinux Permissions Problems 126 # and to be able to run vagrant from user $HOME directory 127 if ENV['NVME_FILE'] 128 nvme_disk="/var/lib/libvirt/images/" + ENV['NVME_FILE'] 129 else 130 nvme_disk="/var/lib/libvirt/images/nvme_disk.img" 131 end 132 133 unless File.exist? (nvme_disk) 134 puts "If run with libvirt provider please execute create_nvme_img.sh" 135 end 136 137 libvirt.qemuargs :value => "-drive" 138 libvirt.qemuargs :value => "file=#{nvme_disk},if=none,id=D22" 139 libvirt.qemuargs :value => "-device" 140 libvirt.qemuargs :value => "nvme,drive=D22,serial=1234" 141 libvirt.driver = "kvm" 142 libvirt.graphics_type = "spice" 143 libvirt.memory = "#{vmram}" 144 libvirt.cpus = "#{vmcpu}" 145 libvirt.video_type = "qxl" 146 147 # Optional field if we want use other storage pools than default 148 # libvirt.storage_pool_name = "vm" 149 end 150 151 # rsync the spdk directory if provision hasn't happened yet 152 if ENV['COPY_SPDK_DIR'] == "1" && spdk_dir != "none" 153 config.vm.synced_folder "#{spdk_dir}", "/home/vagrant/spdk_repo/spdk", type: "rsync", rsync__auto: false 154 end 155 156 # provision the vm with all of the necessary spdk dependencies for running the autorun.sh tests 157 if ENV['DEPLOY_TEST_VM'] == "1" && spdk_dir != "none" 158 config.vm.provision "shell" do |setup| 159 setup.path = "#{spdk_dir}/test/common/config/vm_setup.sh" 160 setup.privileged = false 161 setup.args = ["-u", "-i"] 162 end 163 end 164 165 if vhost_host_dir != "none" 166 config.vm.synced_folder "#{vhost_host_dir}", "#{vhost_vm_dir}", type: "rsync", rsync__auto: false 167 config.vm.provision "shell", inline: "sudo mkdir -p /root/.ssh" 168 config.vm.provision "shell", inline: "sudo cp #{vhost_vm_dir}/spdk_vhost_id_rsa* /root/.ssh" 169 config.vm.provision "shell", inline: "sudo chmod 600 /root/.ssh/spdk_vhost_id_rsa" 170 end 171 172 # Copy in the user's tools if they exists 173 if File.directory?(File.expand_path("~/vagrant_tools")) 174 config.vm.synced_folder "~/vagrant_tools", "/home/vagrant/tools", type: "rsync", rsync__auto: false 175 end 176end 177