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]