111fa5403SJim Harris# -*- mode: ruby -*- 211fa5403SJim Harris# vi: set ft=ruby : 311fa5403SJim Harris 4f7d520e8SMaciej Wawrykrequire 'open3' 5264e0a0aSMichal Bergerdef get_box_type(distro, force_distro) 69620760bSPawel Piatek spdk_distro = 'spdk/' + distro 7344c3184SMaciej Wawryk localboxes, stderr, status = Open3.capture3("vagrant box list") 89620760bSPawel Piatek return spdk_distro if localboxes.include?(spdk_distro) 99620760bSPawel Piatek 109620760bSPawel Piatek distro_to_type = { 119620760bSPawel Piatek 'centos7' => 'centos/7', 1255de68f1SMaciej Wawryk 'ubuntu2004' => 'peru/ubuntu-20.04-server-amd64', 13400aadf8SJaroslaw Chachulski 'ubuntu2204' => 'generic/ubuntu2204', 1446e00b54SKamil Godzwon 'fedora37' => 'generic/fedora37', 1546e00b54SKamil Godzwon 'fedora38' => 'generic/fedora38', 169620760bSPawel Piatek 'arch' => 'generic/arch', 179620760bSPawel Piatek 'freebsd12' => 'generic/freebsd12', 18d21dc150SPawel Piatek 'freebsd13' => 'generic/freebsd13', 19401d3c53SPawel Piatek 'rocky8' => 'rockylinux/8', 20401d3c53SPawel Piatek 'rocky9' => 'rockylinux/9' 219620760bSPawel Piatek } 22264e0a0aSMichal Berger abort("Invalid argument! #{distro}") unless distro_to_type.key?(distro) || force_distro 239620760bSPawel Piatek 24264e0a0aSMichal Berger return distro_to_type[distro] ? distro_to_type[distro] : distro 25344c3184SMaciej Wawrykend 26344c3184SMaciej Wawryk 27e08eae22SPawel Piatekdef setup_proxy(config,distro) 28e08eae22SPawel Piatek return unless ENV['http_proxy'] 29e08eae22SPawel Piatek 30e08eae22SPawel Piatek if Vagrant.has_plugin?("vagrant-proxyconf") 31e08eae22SPawel Piatek config.proxy.http = ENV['http_proxy'] 32e08eae22SPawel Piatek config.proxy.https = ENV['https_proxy'] 33e08eae22SPawel Piatek config.proxy.no_proxy = "localhost,127.0.0.1" 34e08eae22SPawel Piatek end 35e08eae22SPawel Piatek 36e08eae22SPawel Piatek # Proxyconf does not seem to support FreeBSD boxes or at least it's 37e08eae22SPawel Piatek # docs do not mention that. Set up proxy configuration manually. 38e08eae22SPawel Piatek if distro.include?("freebsd") 39e08eae22SPawel Piatek $freebsd_proxy = <<-SCRIPT 40e08eae22SPawel Piatek sudo -s 41e08eae22SPawel Piatek echo "export http_proxy=#{ENV['http_proxy']}" >> /etc/profile 42e08eae22SPawel Piatek echo "export https_proxy=#{ENV['http_proxy']}" >> /etc/profile 43e08eae22SPawel Piatek echo "pkg_env: {http_proxy: #{ENV['http_proxy']}}" > /usr/local/etc/pkg.conf 44e08eae22SPawel Piatek chown root:wheel /usr/local/etc/pkg.conf 45e08eae22SPawel Piatek chmod 644 /usr/local/etc/pkg.conf 46e08eae22SPawel Piatek SCRIPT 47e08eae22SPawel Piatek config.vm.provision "shell", inline: $freebsd_proxy 48e08eae22SPawel Piatek end 49e08eae22SPawel Piatekend 50e08eae22SPawel Piatek 51b5fea131SPawel Piatekdef copy_gitconfig(config) 52b5fea131SPawel Piatek src_path = '~/.gitconfig' 53b5fea131SPawel Piatek return unless File.file?(File.expand_path(src_path)) 54b5fea131SPawel Piatek 55b5fea131SPawel Piatek config.vm.provision "file", source: src_path, destination: ".gitconfig" 56b5fea131SPawel Piatekend 57b5fea131SPawel Piatek 58b5fea131SPawel Piatekdef copy_tsocks(config) 59b5fea131SPawel Piatek tsocks_file = 'tsocks.conf' 60b5fea131SPawel Piatek tsocks_file_path = '/etc/' + tsocks_file 61b5fea131SPawel Piatek 62b5fea131SPawel Piatek return unless File.file?(tsocks_file_path) 63b5fea131SPawel Piatek 64b5fea131SPawel Piatek $tsocks_copy_cmd = <<-SCRIPT 65b5fea131SPawel Piatek sudo -s 66b5fea131SPawel Piatek mv -f "#{tsocks_file}" "#{tsocks_file_path}" 67b5fea131SPawel Piatek chown root "#{tsocks_file_path}" 68b5fea131SPawel Piatek chmod 644 "#{tsocks_file_path}" 69b5fea131SPawel Piatek SCRIPT 70b5fea131SPawel Piatek 71b5fea131SPawel Piatek config.vm.provision "file", source: tsocks_file_path, destination: tsocks_file 72b5fea131SPawel Piatek config.vm.provision "shell", inline: $tsocks_copy_cmd 73b5fea131SPawel Piatekend 74b5fea131SPawel Piatek 75b5fea131SPawel Piatekdef copy_vagrant_tools(config,files_sync_backend) 76b5fea131SPawel Piatek src_path = '~/vagrant_tools' 77b5fea131SPawel Piatek return unless File.directory?(File.expand_path(src_path)) 78b5fea131SPawel Piatek 79b5fea131SPawel Piatek config.vm.synced_folder src_path, "/home/vagrant/tools", files_sync_backend 80b5fea131SPawel Piatekend 81b5fea131SPawel Piatek 8264c27c8dSPawel Piatekdef copy_sources_dirs(config, files_sync_backend) 83b5fea131SPawel Piatek return unless ENV['COPY_SPDK_DIR'] == "1" 84b5fea131SPawel Piatek return unless ENV['SPDK_DIR'] 85b5fea131SPawel Piatek 8664c27c8dSPawel Piatek repo_prefix = '/home/vagrant/spdk_repo' 8764c27c8dSPawel Piatek config.vm.synced_folder ENV['SPDK_DIR'], "#{repo_prefix}/spdk", files_sync_backend 8864c27c8dSPawel Piatek 8964c27c8dSPawel Piatek # Optional directories 9064c27c8dSPawel Piatek for dir in ['spdk-abi', 'dpdk'] 9164c27c8dSPawel Piatek src_path = "#{ENV['SPDK_DIR']}/../#{dir}" 9264c27c8dSPawel Piatek next unless File.directory?(File.expand_path(src_path)) 9364c27c8dSPawel Piatek 9464c27c8dSPawel Piatek config.vm.synced_folder src_path, "#{repo_prefix}/#{dir}", files_sync_backend 9564c27c8dSPawel Piatek end 96b5fea131SPawel Piatekend 97b5fea131SPawel Piatek 98b5fea131SPawel Piatekdef copy_spdk_artifacts(config, plugins_sync_backend) 99b5fea131SPawel Piatek return unless ENV['COPY_SPDK_ARTIFACTS'] == "1" 100b5fea131SPawel Piatek 101b5fea131SPawel Piatek vagrantfile_dir=(ENV['VAGRANTFILE_DIR'] || "none") 102b5fea131SPawel Piatek config.vm.synced_folder "#{vagrantfile_dir}/output", "/home/vagrant/spdk_repo/output", plugins_sync_backend 103b5fea131SPawel Piatekend 104b5fea131SPawel Piatek 105d0426c87SPawel Piatekdef make_spdk_local_copy_of_nfs(config,distro) 106d0426c87SPawel Piatek user_group = 'vagrant:vagrant' 107d0426c87SPawel Piatek 108d0426c87SPawel Piatek spdk_path = '/home/vagrant/spdk_repo/spdk' 109d0426c87SPawel Piatek spdk_tmp_path = '/tmp/spdk' 110d0426c87SPawel Piatek $spdk_repo_cmd = <<-SCRIPT 111d0426c87SPawel Piatek sudo -s 112d0426c87SPawel Piatek cp -R '#{spdk_path}' '#{spdk_tmp_path}' 113d0426c87SPawel Piatek umount '#{spdk_path}' && rm -rf '#{spdk_path}' 114d0426c87SPawel Piatek mv '#{spdk_tmp_path}' '#{spdk_path}' 115d0426c87SPawel Piatek chown -R #{user_group} '#{spdk_path}' 116d0426c87SPawel Piatek SCRIPT 117d0426c87SPawel Piatek 118d0426c87SPawel Piatek config.vm.provision "shell", inline: $spdk_repo_cmd 119d0426c87SPawel Piatekend 120b5fea131SPawel Piatek 121221c5b5eSPawel Piatekdef get_nvme_disk(disk, index) 122221c5b5eSPawel Piatek if ENV['NVME_FILE'] 123221c5b5eSPawel Piatek nvme_file = ENV['NVME_FILE'].split(',') 124221c5b5eSPawel Piatek nvme_disk = nvme_file[index] 125221c5b5eSPawel Piatek else 126221c5b5eSPawel Piatek nvme_disk = '/var/lib/libvirt/images/nvme_disk.img' 127221c5b5eSPawel Piatek end 128221c5b5eSPawel Piatek 129ea71df4fSMichal Berger unless nvme_disk == "none" || File.exist?(nvme_disk) 130221c5b5eSPawel Piatek puts 'If run with libvirt provider please execute create_nvme_img.sh' 131221c5b5eSPawel Piatek end 132221c5b5eSPawel Piatek 133221c5b5eSPawel Piatek return nvme_disk 134221c5b5eSPawel Piatekend 135221c5b5eSPawel Piatek 136221c5b5eSPawel Piatekdef setup_nvme_disk(libvirt, disk, index) 137221c5b5eSPawel Piatek nvme_disk_id = disk + '-' + index.to_s 138221c5b5eSPawel Piatek nvme_disk = get_nvme_disk(disk, index) 139221c5b5eSPawel Piatek 140221c5b5eSPawel Piatek nvme_namespaces=(ENV['NVME_DISKS_NAMESPACES'] || "").split(',') 141221c5b5eSPawel Piatek nvme_cmbs=(ENV['NVME_CMB'] || "").split(',') 14245fc211eSMichal Berger nvme_pmrs=(ENV['NVME_PMR'] || "").split(',') 143ea71df4fSMichal Berger nvme_zns=(ENV['NVME_ZNS'] || "").split(',') 144c4acef02SMichal Berger nvme_ms=(ENV['NVME_MS'] || "").split(',') 14529ba5b1bSMichal Berger nvme_fdp=(ENV['NVME_FDP'] || "").split(',') 146221c5b5eSPawel Piatek 147ea71df4fSMichal Berger namespace_disks = [] 148ea71df4fSMichal Berger pmr_cmdline = "" 149ea71df4fSMichal Berger nvme_controller = "" 15029ba5b1bSMichal Berger fdp_subsys = "" 15129ba5b1bSMichal Berger fdp_subsys_id = "" 1524b481146SMichal Berger ms = "" 153ea71df4fSMichal Berger 154*245c82b2SMichal Berger addr = 0x10 + index 155*245c82b2SMichal Berger 156ea71df4fSMichal Berger # Define controller 157*245c82b2SMichal Berger nvme_controller = "nvme,id=#{nvme_disk_id},serial=1234#{index},addr=0x#{addr.to_s(16)}" 158ea71df4fSMichal Berger 15929ba5b1bSMichal Berger # For the FDP, we need to hook our nvme into a dedicated subsystem 16029ba5b1bSMichal Berger if !nvme_fdp[index].nil? && nvme_fdp[index] != "" 16129ba5b1bSMichal Berger fdp_subsys_id = "fdp-subsys#{index}" 16229ba5b1bSMichal Berger fdp = nvme_fdp[index].split(':')[0..3] 16329ba5b1bSMichal Berger fdp_ruhs = (nvme_fdp[index].split(':')[4..]) # fdp.ruhs per ns 16429ba5b1bSMichal Berger 16529ba5b1bSMichal Berger # Put some defaults in place if needed 16629ba5b1bSMichal Berger fdp_enable = "#{fdp[0] != nil && fdp[0] != '' ? fdp[0] : 'off'}" 16729ba5b1bSMichal Berger fdp_runs = "#{fdp[1] != nil && fdp[1] != '' ? fdp[1] : '96M'}" 16829ba5b1bSMichal Berger fdp_nrg = "#{fdp[2] != nil && fdp[2] != '' ? fdp[2] : 2}" 16929ba5b1bSMichal Berger fdp_nruh = "#{fdp[3] != nil && fdp[3] != '' ? fdp[3] : 8}" 17029ba5b1bSMichal Berger 17129ba5b1bSMichal Berger fdp_subsys = "nvme-subsys,id=#{fdp_subsys_id},fdp=#{fdp_enable}" 17229ba5b1bSMichal Berger fdp_subsys << ",fdp.runs=#{fdp_runs},fdp.nrg=#{fdp_nrg},fdp.nruh=#{fdp_nruh}" 17329ba5b1bSMichal Berger 17429ba5b1bSMichal Berger nvme_controller << ",subsys=#{fdp_subsys_id}" 17529ba5b1bSMichal Berger 17629ba5b1bSMichal Berger libvirt.qemuargs :value => "-device" 17729ba5b1bSMichal Berger libvirt.qemuargs :value => fdp_subsys 17829ba5b1bSMichal Berger end 179ea71df4fSMichal Berger # Gather all drives - each namespace requires separate drive 180ea71df4fSMichal Berger if nvme_namespaces[index].nil? 181ea71df4fSMichal Berger namespace_disks = namespace_disks + nvme_disk.split() 182ea71df4fSMichal Berger elsif !nvme_namespaces[index].nil? && !nvme_namespaces[index].match(/^[0-9]+$/) 183ea71df4fSMichal Berger namespace_disks = namespace_disks + nvme_disk.split() + nvme_namespaces[index].split(':') 184e9d44aa3SMichal Berger elsif !nvme_namespaces[index].nil? && nvme_namespaces[index] == "1" 185221c5b5eSPawel Piatek libvirt.qemuargs :value => "-drive" 186221c5b5eSPawel Piatek libvirt.qemuargs :value => "format=raw,file=#{nvme_disk},if=none,id=#{nvme_disk_id}" 187ea71df4fSMichal Berger nvme_controller <<",drive=#{nvme_disk_id}" 188221c5b5eSPawel Piatek end 189221c5b5eSPawel Piatek 190ea71df4fSMichal Berger if !nvme_cmbs[index].nil? && nvme_cmbs[index] != "" 191221c5b5eSPawel Piatek # Fix the size of the buffer to 128M 192ea71df4fSMichal Berger nvme_controller << ",cmb_size_mb=128" 19345fc211eSMichal Berger end 194ea71df4fSMichal Berger 195ea71df4fSMichal Berger if !nvme_pmrs[index].nil? && nvme_pmrs[index] != "" 19645fc211eSMichal Berger pmr_path, pmr_size = nvme_pmrs[index].split(':') 19745fc211eSMichal Berger if pmr_size.nil? 19845fc211eSMichal Berger pmr_size = "16M" 19945fc211eSMichal Berger end 200ea71df4fSMichal Berger nvme_controller << ",pmrdev=pmr#{index}" 20145fc211eSMichal Berger pmr_cmdline = "memory-backend-file,id=pmr#{index},share=on,mem-path=#{pmr_path},size=#{pmr_size}" 202221c5b5eSPawel Piatek end 203ea71df4fSMichal Berger 204ea71df4fSMichal Berger libvirt.qemuargs :value => "-device" 205ea71df4fSMichal Berger libvirt.qemuargs :value => nvme_controller 206ea71df4fSMichal Berger 207a5c3f72aSMichal Berger if pmr_cmdline != "" 20845fc211eSMichal Berger libvirt.qemuargs :value => "-object" 20945fc211eSMichal Berger libvirt.qemuargs :value => pmr_cmdline 21045fc211eSMichal Berger end 211ea71df4fSMichal Berger 212ea71df4fSMichal Berger # Define all namespaces 213ea71df4fSMichal Berger namespace_disks.each_with_index { |disk, nsid| 214ea71df4fSMichal Berger if disk == "none" 215ea71df4fSMichal Berger next 216ea71df4fSMichal Berger end 217ea71df4fSMichal Berger zoned = nvme_zns[index].nil? ? "false" : "true" 2184b481146SMichal Berger if ! nvme_ms[index].nil? && nvme_ms[index] == "true" 2194b481146SMichal Berger ms = ",ms=64" 2204b481146SMichal Berger end 22129ba5b1bSMichal Berger ns = "nvme-ns,drive=#{nvme_disk_id}-drive#{nsid},bus=#{nvme_disk_id},nsid=#{nsid + 1},zoned=#{zoned},logical_block_size=4096,physical_block_size=4096#{ms}" 22229ba5b1bSMichal Berger if !fdp_ruhs.nil? && !fdp_ruhs[nsid].nil? && fdp_ruhs[nsid] != "" 22329ba5b1bSMichal Berger ns << ",fdp.ruhs=#{fdp_ruhs[nsid]}" 22429ba5b1bSMichal Berger end 225ea71df4fSMichal Berger libvirt.qemuargs :value => "-drive" 226ea71df4fSMichal Berger libvirt.qemuargs :value => "format=raw,file=#{disk},if=none,id=#{nvme_disk_id}-drive#{nsid}" 227ea71df4fSMichal Berger libvirt.qemuargs :value => "-device" 22829ba5b1bSMichal Berger libvirt.qemuargs :value => ns 229ea71df4fSMichal Berger } 230ea71df4fSMichal Berger 231221c5b5eSPawel Piatekend 232221c5b5eSPawel Piatek 233211be739SPawel Piatekdef setup_ssh(config) 234211be739SPawel Piatek config.ssh.forward_agent = true 235211be739SPawel Piatek config.ssh.forward_x11 = true 236211be739SPawel Piatek if ENV['VAGRANT_PASSWORD_AUTH'] == "1" 237211be739SPawel Piatek config.ssh.username = "vagrant" 238211be739SPawel Piatek config.ssh.password = "vagrant" 2393c98c8f7SMichal Berger config.ssh.private_key_path = nil 240211be739SPawel Piatek end 241211be739SPawel Piatekend 242211be739SPawel Piatek 2439433190fSMichal Bergerdef deploy_test_vm(config, distro, plugins_sync_backend) 244b9e3b917SPawel Piatek return unless ENV['DEPLOY_TEST_VM'] == "1" 245ca31f3c5SMichal Berger return unless ENV['COPY_SPDK_DIR'] == "1" 246b9e3b917SPawel Piatek return unless ENV['SPDK_DIR'] 247b9e3b917SPawel Piatek 2481ff3715dSJosh Soref # use http proxy if available 2499433190fSMichal Berger setup_proxy(config, distro) 2509433190fSMichal Berger 2519433190fSMichal Berger # Copy the tsocks configuration file for use when installing some spdk test pool dependencies 2529433190fSMichal Berger copy_tsocks(config) 2539433190fSMichal Berger 2549433190fSMichal Berger # freebsd boxes in order to have spdk sources synced from 2559433190fSMichal Berger # host properly will use NFS with "ro" option enabled to prevent changes 2569433190fSMichal Berger # on host filesystem. 2579433190fSMichal Berger # To make sources usable in the guest VM we need to unmount them and use 2589433190fSMichal Berger # local copy. 2599433190fSMichal Berger make_spdk_local_copy_of_nfs(config,distro) if plugins_sync_backend[:type] == :nfs 2609433190fSMichal Berger 261b9e3b917SPawel Piatek config.vm.provision "shell" do |setup| 262be07560dSMichal Berger setup.inline = "/home/vagrant/spdk_repo/spdk/test/common/config/autotest_setup.sh" 263b9e3b917SPawel Piatek setup.privileged = false 264b9e3b917SPawel Piatek setup.args = ["-u", "-i"] 265b9e3b917SPawel Piatek end 266b9e3b917SPawel Piatekend 267b9e3b917SPawel Piatek 2682e617732SPawel Piatekdef setup_virtualbox(config, vmcpu, vmram) 2692e617732SPawel Piatek config.vm.provider "virtualbox" do |vb| 2702e617732SPawel Piatek vb.customize ["modifyvm", :id, "--ioapic", "on"] 2712e617732SPawel Piatek vb.memory = vmram 2722e617732SPawel Piatek vb.cpus = vmcpu 2732e617732SPawel Piatek 2742e617732SPawel Piatek nvme_disk=(ENV['NVME_FILE'] || "nvme_disk.img") 2752e617732SPawel Piatek unless File.exist? (nvme_disk) 2762e617732SPawel Piatek vb.customize ["createhd", "--filename", nvme_disk, "--variant", "Fixed", "--size", "1024"] 2772e617732SPawel Piatek vb.customize ["storagectl", :id, "--name", "nvme", "--add", "pcie", "--controller", "NVMe", "--portcount", "1", "--bootable", "off"] 2782e617732SPawel Piatek vb.customize ["storageattach", :id, "--storagectl", "nvme", "--type", "hdd", "--medium", nvme_disk, "--port", "0"] 2792e617732SPawel Piatek end 2802e617732SPawel Piatek 2812e617732SPawel Piatek #support for the SSE4.x instruction is required in some versions of VB. 2822e617732SPawel Piatek vb.customize ["setextradata", :id, "VBoxInternal/CPUM/SSE4.1", "1"] 2832e617732SPawel Piatek vb.customize ["setextradata", :id, "VBoxInternal/CPUM/SSE4.2", "1"] 2842e617732SPawel Piatek end 2852e617732SPawel Piatekend 2862e617732SPawel Piatek 287282b1945SPawel Piatekdef setup_libvirt(config, vmcpu, vmram, distro) 288282b1945SPawel Piatek emulated_nvme_types=(ENV['NVME_DISKS_TYPE'] || "nvme").split(',') 289282b1945SPawel Piatek 290282b1945SPawel Piatek config.vm.provider "libvirt" do |libvirt, override| 291282b1945SPawel Piatek libvirt.random_hostname = "1" 292282b1945SPawel Piatek libvirt.driver = "kvm" 293282b1945SPawel Piatek libvirt.graphics_type = "vnc" 294282b1945SPawel Piatek libvirt.memory = vmram 295282b1945SPawel Piatek libvirt.cpus = vmcpu 296282b1945SPawel Piatek libvirt.video_type = "cirrus" 29702e00efcSMichal Berger libvirt.nic_model_type = (ENV['NIC_MODEL'] || "virtio") 298282b1945SPawel Piatek 299282b1945SPawel Piatek if (distro.include?("freebsd")) 300282b1945SPawel Piatek # generic/freebsd boxes need to be explicitly run with SCSI bus, 301282b1945SPawel Piatek # otherwise boot process fails on mounting the disk 302282b1945SPawel Piatek libvirt.disk_bus = "scsi" 303282b1945SPawel Piatek elsif (distro.include?("arch")) 304282b1945SPawel Piatek # Run generic/arch boxes explicitly with IDE bus, 305282b1945SPawel Piatek # otherwise boot process fails on mounting the disk 306282b1945SPawel Piatek libvirt.disk_bus = "ide" 307282b1945SPawel Piatek else 308282b1945SPawel Piatek libvirt.disk_bus = "virtio" 309282b1945SPawel Piatek end 310282b1945SPawel Piatek 311282b1945SPawel Piatek if ENV['SPDK_QEMU_EMULATOR'] 312282b1945SPawel Piatek libvirt.emulator_path = ENV['SPDK_QEMU_EMULATOR'] 313282b1945SPawel Piatek libvirt.machine_type = "pc" 314282b1945SPawel Piatek end 315282b1945SPawel Piatek 316282b1945SPawel Piatek # we put nvme_disk inside default pool to eliminate libvirt/SELinux Permissions Problems 317282b1945SPawel Piatek # and to be able to run vagrant from user $HOME directory 318282b1945SPawel Piatek 319282b1945SPawel Piatek # Loop to create all emulated disks set 320282b1945SPawel Piatek emulated_nvme_types.each_with_index { |disk, index| 321282b1945SPawel Piatek setup_nvme_disk(libvirt, disk, index) 322282b1945SPawel Piatek } 323282b1945SPawel Piatek 3247bea0a07SMichal Berger # Add network interface for openstack tests 3257bea0a07SMichal Berger if ENV['SPDK_OPENSTACK_NETWORK'] == "1" 3267bea0a07SMichal Berger libvirt.qemuargs :value => "-device" 3277bea0a07SMichal Berger libvirt.qemuargs :value => "virtio-net,netdev=openstack.0" 3287bea0a07SMichal Berger libvirt.qemuargs :value => "-netdev" 3297bea0a07SMichal Berger libvirt.qemuargs :value => "user,id=openstack.0" 3307bea0a07SMichal Berger end 3317bea0a07SMichal Berger 332282b1945SPawel Piatek if ENV['VAGRANT_HUGE_MEM'] == "1" 333282b1945SPawel Piatek libvirt.memorybacking :hugepages 334282b1945SPawel Piatek end 335282b1945SPawel Piatek 336282b1945SPawel Piatek # Optional field if we want use other storage pools than default 337282b1945SPawel Piatek # libvirt.storage_pool_name = "vm" 338282b1945SPawel Piatek end 339282b1945SPawel Piatekend 340282b1945SPawel Piatek 341dca3fdc4SPawel Piatek################################################################################################# 34246e00b54SKamil Godzwon# Pick the right distro and bootstrap, default is fedora37 34346e00b54SKamil Godzwondistro = (ENV['SPDK_VAGRANT_DISTRO'] || "fedora37") 3441cbd14caSLavar Askewprovider = (ENV['SPDK_VAGRANT_PROVIDER'] || "virtualbox") 3457fe1b36aSKarol Latecki 3466fac35a3SMaciej Wawryk# Get all variables for creating vm 3476fac35a3SMaciej Wawrykvmcpu = (ENV['SPDK_VAGRANT_VMCPU'] || 2) 3486fac35a3SMaciej Wawrykvmram = (ENV['SPDK_VAGRANT_VMRAM'] || 4096) 3496fac35a3SMaciej Wawryk 350264e0a0aSMichal Bergerforce_distro = ENV['FORCE_DISTRO'] == "true" ? true : false 351264e0a0aSMichal Berger 352264e0a0aSMichal Bergerdistro_to_use = get_box_type(distro, force_distro) 353e1287f7fSMichal Berger# Remove --copy-links from default rsync cmdline since we do want to sync 354e1287f7fSMichal Berger# actual symlinks as well. Also, since copy is made between host and its 355e1287f7fSMichal Berger# local VM we don't need to worry about saturating the local link so skip 356e1287f7fSMichal Berger# the compression to speed up the whole transfer. 357e1287f7fSMichal Bergerfiles_sync_backend = {type: "rsync", rsync__auto: false, rsync__args: ["--archive", "--verbose", "--delete"]} 358680ed635SPawel Piatek 359680ed635SPawel Piatekif ENV['NFS4_BACKEND'] or not Vagrant.has_plugin?("vagrant-sshfs") 360edc93a24SPawel Piatek plugins_sync_backend = {type: :nfs, nfs_udp: false, nfs_version: 4} 361680ed635SPawel Piatekelse 362680ed635SPawel Piatek plugins_sync_backend = {type: :sshfs} 363680ed635SPawel Piatekend 364dca3fdc4SPawel Piatek 365dca3fdc4SPawel PiatekVagrant.configure(2) do |config| 366264e0a0aSMichal Berger config.vm.box = distro_to_use 36711fa5403SJim Harris config.vm.box_check_update = false 368485d615dSKarol Latecki config.vm.synced_folder '.', '/vagrant', disabled: true 369182adb70SMichal Berger if ENV['VAGRANT_BOX_VERSION'] 370182adb70SMichal Berger config.vm.box_version = ENV['VAGRANT_BOX_VERSION'] 371182adb70SMichal Berger end 37211fa5403SJim Harris 37311fa5403SJim Harris # Copy in the .gitconfig if it exists 374b5fea131SPawel Piatek copy_gitconfig(config) 37511fa5403SJim Harris 376b5fea131SPawel Piatek # Copy in the user's tools if they exists 377b5fea131SPawel Piatek copy_vagrant_tools(config,files_sync_backend) 378b5fea131SPawel Piatek 37964c27c8dSPawel Piatek copy_sources_dirs(config, files_sync_backend) 380b5fea131SPawel Piatek 381b5fea131SPawel Piatek # rsync artifacts from build 382b5fea131SPawel Piatek copy_spdk_artifacts(config, plugins_sync_backend) 3836695ac27SSeth Howell 384211be739SPawel Piatek # Setup SSH 385211be739SPawel Piatek setup_ssh(config) 38611fa5403SJim Harris 3872e617732SPawel Piatek # Virtualbox configuration 3882e617732SPawel Piatek setup_virtualbox(config,vmcpu,vmram) 38930dfc6d5SDaniel Mrzyglod 390282b1945SPawel Piatek setup_libvirt(config,vmcpu,vmram,distro) 39130dfc6d5SDaniel Mrzyglod 3926695ac27SSeth Howell # provision the vm with all of the necessary spdk dependencies for running the autorun.sh tests 3939433190fSMichal Berger deploy_test_vm(config, distro, plugins_sync_backend) 39411fa5403SJim Harrisend 3958aee39f9SMichal Berger 3968aee39f9SMichal Bergerif ENV['EXTRA_VAGRANTFILES'] 3978aee39f9SMichal Berger loaders = (ENV['EXTRA_VAGRANTFILES'].split(',')) 3988aee39f9SMichal Berger loaders.each { |loader| 3998aee39f9SMichal Berger load loader if File.exists?(loader) 4008aee39f9SMichal Berger } 4018aee39f9SMichal Bergerend 402