diff --git a/src/vmm/LibVirtDriverKVM.cc b/src/vmm/LibVirtDriverKVM.cc index 8aced64d54..4f20eae2bf 100644 --- a/src/vmm/LibVirtDriverKVM.cc +++ b/src/vmm/LibVirtDriverKVM.cc @@ -335,6 +335,39 @@ static void vtopol(ofstream& file, const VectorAttribute * topology, } } +/** + * Returns disk bus based on this table: + * \ prefix hd sd vd + * chipset \ + * pc-q35-* sata [sd_default] virtio + * (other) ide [sd_default] virtio + * + * sd_default - SD_DISK_BUS value from vmm_exec_kvm.conf/template + * 'sata' or 'scsi' + */ +static string get_disk_bus(std::string &machine, std::string &target, + std::string &sd_default) +{ + switch(target[0]) + { + case 's': // sd_ disk + return sd_default; + case 'v': // vd_ disk + return "virtio"; + default: + { + std::size_t found = machine.find("q35"); + + if (found != std::string::npos) + { + return "sata"; + } + } + } + + return "ide"; +} + /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ @@ -517,6 +550,9 @@ int LibVirtDriver::deployment_description_kvm( std::string numa_tune = ""; std::string mbacking = ""; + std::string sd_bus; + std::string disk_bus; + string vm_xml; // ------------------------------------------------------------------------ @@ -605,6 +641,7 @@ int LibVirtDriver::deployment_description_kvm( bootloader = os->vector_value("BOOTLOADER"); arch = os->vector_value("ARCH"); machine = os->vector_value("MACHINE"); + sd_bus = os->vector_value("SD_DISK_BUS"); } if ( arch.empty() ) @@ -656,6 +693,11 @@ int LibVirtDriver::deployment_description_kvm( get_default("OS","KERNEL_CMD",kernel_cmd); } + if ( sd_bus.empty() ) + { + get_default("OS", "SD_DISK_BUS", sd_bus); + } + // Start writing to the file with the info we got if ( !kernel.empty() ) @@ -1073,7 +1115,17 @@ int LibVirtDriver::deployment_description_kvm( // ---- target device to map the disk ---- - file << "\t\t\t\n"; + file << "\t\t\t\n"; + // ---- boot order for this device ---- @@ -1226,8 +1278,16 @@ int LibVirtDriver::deployment_description_kvm( file << "\t\t\n" << "\t\t\t\n" - << "\t\t\t\n" + << "\t\t\t\n" << "\t\t\t\n" << "\t\t\t\n" << "\t\t\n"; diff --git a/src/vmm_mad/exec/vmm_exec_kvm.conf b/src/vmm_mad/exec/vmm_exec_kvm.conf index 71cfb31cc3..e206bbdb72 100644 --- a/src/vmm_mad/exec/vmm_exec_kvm.conf +++ b/src/vmm_mad/exec/vmm_exec_kvm.conf @@ -18,7 +18,7 @@ # (all domains will use these values as defaults). These values can # be overridden in each VM template. Valid atributes are: # - emulator -# - os [kernel,initrd,boot,root,kernel_cmd,arch,machine] +# - os [kernel,initrd,boot,root,kernel_cmd,arch,machine,sd_disk_bus] # - vcpu # - features [acpi, pae, apic, hyperv, localtime, guest_agent, virtio_scsi_queues] # - disk [driver, cache, io, discard, total_bytes_sec, total_iops_sec, read_bytes_sec, write_bytes_sec, read_iops_sec, write_iops_sec]