From 7e04e0f6acf6b8e2ceeca273133570786c8e0f91 Mon Sep 17 00:00:00 2001 From: Yaguang Tang Date: Fri, 15 Feb 2013 22:57:00 +0800 Subject: 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 --- nova/tests/test_libvirt.py | 3 ++- nova/tests/utils.py | 3 ++- nova/virt/libvirt/designer.py | 11 +++++++++++ nova/virt/libvirt/vif.py | 1 + 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 -- cgit