summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYaguang Tang <yaguang.tang@canonical.com>2013-02-15 22:57:00 +0800
committerYaguang Tang <yaguang.tang@canonical.com>2013-02-17 11:57:03 +0800
commit7e04e0f6acf6b8e2ceeca273133570786c8e0f91 (patch)
treeb70499241298140c72115bc18dfbce0509d2040a
parent082c4ca417705975b8ef3672ce6ed40661d0f019 (diff)
Add support for instance vif traffic control.
Part 2 for blueprint quota-instance-resource, by adding exposed params "vif_inbound_average, vif_inbound_burst, vif_inbound_peak, vif_outbound_average, vif_outbound_burst, vif_outbound_peak" through nova flavor-set, user can implement instance net traffic control policy. for example: nova flavor-set m1.medium set vif_inbound_average=10240000, then the max inbound speed is 10MB/s. The usecase details of other params will be noted on openstack-manuals. Partly implement blueprint quota-instance-resource DocImpact original reviews https://review.openstack.org/#/c/14151/ Change-Id: I9934daadbf0e136e88530f5c23b556d070395bd0
-rw-r--r--nova/tests/test_libvirt.py3
-rw-r--r--nova/tests/utils.py3
-rw-r--r--nova/virt/libvirt/designer.py11
-rw-r--r--nova/virt/libvirt/vif.py1
4 files changed, 16 insertions, 2 deletions
diff --git a/nova/tests/test_libvirt.py b/nova/tests/test_libvirt.py
index d2cd5a757..6f63d3791 100644
--- a/nova/tests/test_libvirt.py
+++ b/nova/tests/test_libvirt.py
@@ -293,7 +293,8 @@ class LibvirtConnTestCase(test.TestCase):
'image_ref': '155d900f-4e14-4e4c-a73d-069cbf4541e6',
'root_gb': 10,
'ephemeral_gb': 20,
- 'instance_type_id': '5'} # m1.small
+ 'instance_type_id': '5', # m1.small
+ 'extra_specs': {}}
def tearDown(self):
nova.tests.image.fake.FakeImageService_reset()
diff --git a/nova/tests/utils.py b/nova/tests/utils.py
index 56be3ab71..74199eb92 100644
--- a/nova/tests/utils.py
+++ b/nova/tests/utils.py
@@ -83,7 +83,8 @@ def get_test_instance(context=None, instance_type=None):
'bridge': 'br101',
'image_ref': 'cedef40a-ed67-4d10-800e-17455edce175',
'instance_type_id': '5',
- 'system_metadata': metadata}
+ 'system_metadata': metadata,
+ 'extra_specs': {}}
instance_ref = nova.db.instance_create(context, test_instance)
return instance_ref
diff --git a/nova/virt/libvirt/designer.py b/nova/virt/libvirt/designer.py
index 176eeef4c..3ccf1b8c6 100644
--- a/nova/virt/libvirt/designer.py
+++ b/nova/virt/libvirt/designer.py
@@ -131,3 +131,14 @@ def set_vif_host_backend_filter_config(conf, name,
net, prefix = netutils.get_net_and_prefixlen(ipv6_cidr)
conf.add_filter_param("PROJNET6", net)
conf.add_filter_param("PROJMASK6", prefix)
+
+
+def set_vif_bandwidth_config(conf, extra_specs):
+ """Config vif inbound/outbound bandwidth limit."""
+
+ bandwidth_items = ['vif_inbound_average', 'vif_inbound_peak',
+ 'vif_inbound_burst', 'vif_outbound_average', 'vif_outbound_peak',
+ 'vif_outbound_burst']
+ for key, value in extra_specs.iteritems():
+ if key in bandwidth_items:
+ setattr(conf, key, value)
diff --git a/nova/virt/libvirt/vif.py b/nova/virt/libvirt/vif.py
index ee4f7e194..000c77db9 100644
--- a/nova/virt/libvirt/vif.py
+++ b/nova/virt/libvirt/vif.py
@@ -188,6 +188,7 @@ class LibvirtGenericVIFDriver(LibvirtBaseVIFDriver):
designer.set_vif_host_backend_filter_config(
conf, name, primary_addr, dhcp_server,
ra_server, ipv4_cidr, ipv6_cidr)
+ designer.set_vif_bandwidth_config(conf, instance)
return conf