summaryrefslogtreecommitdiff
path: root/nova/virt/libvirt/migration.py
diff options
context:
space:
mode:
Diffstat (limited to 'nova/virt/libvirt/migration.py')
-rw-r--r--nova/virt/libvirt/migration.py13
1 files changed, 13 insertions, 0 deletions
diff --git a/nova/virt/libvirt/migration.py b/nova/virt/libvirt/migration.py
index 8cea9f2983..4726111a76 100644
--- a/nova/virt/libvirt/migration.py
+++ b/nova/virt/libvirt/migration.py
@@ -62,6 +62,7 @@ def get_updated_guest_xml(instance, guest, migrate_data, get_volume_config,
xml_doc, migrate_data, instance, get_volume_config)
xml_doc = _update_perf_events_xml(xml_doc, migrate_data)
xml_doc = _update_memory_backing_xml(xml_doc, migrate_data)
+ xml_doc = _update_quota_xml(instance, xml_doc)
if get_vif_config is not None:
xml_doc = _update_vif_xml(xml_doc, migrate_data, get_vif_config)
if 'dst_numa_info' in migrate_data:
@@ -71,6 +72,18 @@ def get_updated_guest_xml(instance, guest, migrate_data, get_volume_config,
return etree.tostring(xml_doc, encoding='unicode')
+def _update_quota_xml(instance, xml_doc):
+ flavor_shares = instance.flavor.extra_specs.get('quota:cpu_shares')
+ cputune = xml_doc.find('./cputune')
+ shares = xml_doc.find('./cputune/shares')
+ if shares is not None and not flavor_shares:
+ cputune.remove(shares)
+ # Remove the cputune element entirely if it has no children left.
+ if cputune is not None and not list(cputune):
+ xml_doc.remove(cputune)
+ return xml_doc
+
+
def _update_device_resources_xml(xml_doc, new_resources):
vpmems = []
for resource in new_resources: