diff --no-dereference -uNr opennebula-5.2.1.orig/src/vm/VirtualMachine.cc opennebula-5.2.1-addcpumodel/src/vm/VirtualMachine.cc
--- opennebula-5.2.1.orig/src/vm/VirtualMachine.cc	2017-01-04 10:40:37.000000000 -0600
+++ opennebula-5.2.1-addcpumodel/src/vm/VirtualMachine.cc	2017-03-03 13:10:21.046955688 -0600
@@ -487,6 +487,15 @@
     // Check for CPU, VCPU and MEMORY attributes
     // ------------------------------------------------------------------------
 
+    /* CPU Model */
+    user_obj_template->get("CPU_MODEL", value);
+    if ( value.empty() == false )
+    {
+        user_obj_template->erase("CPU_MODEL");
+        obj_template->add("CPU_MODEL", value);
+    }
+
+    /* Memory */
     if ( user_obj_template->get("MEMORY", ivalue) == false || (ivalue * 1024) <= 0 )
     {
         goto error_memory;
diff --no-dereference -uNr opennebula-5.2.1.orig/src/vmm/LibVirtDriverKVM.cc opennebula-5.2.1-addcpumodel/src/vmm/LibVirtDriverKVM.cc
--- opennebula-5.2.1.orig/src/vmm/LibVirtDriverKVM.cc	2017-01-04 10:40:37.000000000 -0600
+++ opennebula-5.2.1-addcpumodel/src/vmm/LibVirtDriverKVM.cc	2017-03-03 14:00:33.844102647 -0600
@@ -93,6 +93,7 @@
 
     int       num;
 
+    string  cpuModel;
     string  vcpu;
     float   cpu;
     int     memory;
@@ -252,6 +253,25 @@
     // CPU & Memory
     // ------------------------------------------------------------------------
 
+    vm->get_template_attribute("CPU_MODEL", cpuModel);
+    if (cpuModel.empty()) {
+        get_default("CPU_MODEL", cpuModel);
+    }
+
+    if (!cpuModel.empty()) {
+        if (cpuModel == "host") {
+            cpuModel.assign("host-model");
+        }
+
+        if (cpuModel == "host-model" || cpuModel == "host-passthrough") {
+            file << "\t<cpu mode=" << one_util::escape_xml_attr(cpuModel) << "/>" << endl;
+        } else {
+            file << "\t<cpu mode='custom'>" << endl;
+            file << "\t\t<model>" << one_util::escape_xml(cpuModel) << "</model>" << endl;
+            file << "\t</cpu>" << endl;
+        }
+    }
+
     vm->get_template_attribute("VCPU", vcpu);
 
     if(vcpu.empty())
