summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nova/network/manager.py3
-rw-r--r--nova/network/rpcapi.py17
-rw-r--r--nova/tests/network/test_rpcapi.py25
3 files changed, 37 insertions, 8 deletions
diff --git a/nova/network/manager.py b/nova/network/manager.py
index b182613e2..e53573a0e 100644
--- a/nova/network/manager.py
+++ b/nova/network/manager.py
@@ -104,9 +104,6 @@ network_opts = [
cfg.IntOpt('vpn_start',
default=1000,
help='First Vpn port for private networks'),
- cfg.BoolOpt('multi_host',
- default=False,
- help='Default value for multi_host in networks'),
cfg.IntOpt('network_size',
default=256,
help='Number of addresses in each private subnet'),
diff --git a/nova/network/rpcapi.py b/nova/network/rpcapi.py
index a9056845d..5c11f956f 100644
--- a/nova/network/rpcapi.py
+++ b/nova/network/rpcapi.py
@@ -27,6 +27,10 @@ rpcapi_opts = [
cfg.StrOpt('network_topic',
default='network',
help='the topic network nodes listen on'),
+ cfg.BoolOpt('multi_host',
+ default=False,
+ help='Default value for multi_host in networks. Also, if set, '
+ 'some rpc network calls will be sent directly to host.'),
]
CONF = cfg.CONF
@@ -153,15 +157,24 @@ class NetworkAPI(rpc_proxy.RpcProxy):
def allocate_for_instance(self, ctxt, instance_id, instance_uuid,
project_id, host, rxtx_factor, vpn,
requested_networks, macs=None):
+ if CONF.multi_host:
+ topic = rpc.queue_get_for(ctxt, self.topic, host)
+ else:
+ topic = None
return self.call(ctxt, self.make_msg('allocate_for_instance',
instance_id=instance_id, instance_uuid=instance_uuid,
project_id=project_id, host=host, rxtx_factor=rxtx_factor,
vpn=vpn, requested_networks=requested_networks, macs=macs),
- version='1.8')
+ topic=topic, version='1.8')
def deallocate_for_instance(self, ctxt, instance_id, project_id, host):
+ if CONF.multi_host:
+ topic = rpc.queue_get_for(ctxt, self.topic, host)
+ else:
+ topic = None
return self.call(ctxt, self.make_msg('deallocate_for_instance',
- instance_id=instance_id, project_id=project_id, host=host))
+ instance_id=instance_id, project_id=project_id, host=host),
+ topic=topic)
def add_fixed_ip_to_instance(self, ctxt, instance_id, host, network_id):
return self.call(ctxt, self.make_msg('add_fixed_ip_to_instance',
diff --git a/nova/tests/network/test_rpcapi.py b/nova/tests/network/test_rpcapi.py
index 132d5a433..f3a032dfe 100644
--- a/nova/tests/network/test_rpcapi.py
+++ b/nova/tests/network/test_rpcapi.py
@@ -28,6 +28,10 @@ CONF = cfg.CONF
class NetworkRpcAPITestCase(test.TestCase):
+ def setUp(self):
+ super(NetworkRpcAPITestCase, self).setUp()
+ self.flags(multi_host=True)
+
def _test_network_api(self, method, rpc_method, **kwargs):
ctxt = context.RequestContext('fake_user', 'fake_project')
rpcapi = network_rpcapi.NetworkAPI()
@@ -45,13 +49,18 @@ class NetworkRpcAPITestCase(test.TestCase):
'_rpc_allocate_fixed_ip', 'deallocate_fixed_ip', 'update_dns',
'_associate_floating_ip', '_disassociate_floating_ip',
'lease_fixed_ip', 'release_fixed_ip', 'migrate_instance_start',
- 'migrate_instance_finish', 'get_backdoor_port'
+ 'migrate_instance_finish', 'get_backdoor_port',
+ 'allocate_for_instance', 'deallocate_for_instance',
]
if method in targeted_methods and 'host' in kwargs:
- if method != 'deallocate_fixed_ip':
+ if method not in ['allocate_for_instance',
+ 'deallocate_for_instance',
+ 'deallocate_fixed_ip']:
del expected_msg['args']['host']
host = kwargs['host']
- expected_topic = rpc.queue_get_for(ctxt, CONF.network_topic, host)
+ if CONF.multi_host:
+ expected_topic = rpc.queue_get_for(ctxt, CONF.network_topic,
+ host)
expected_msg['version'] = expected_version
self.fake_args = None
@@ -148,6 +157,16 @@ class NetworkRpcAPITestCase(test.TestCase):
self._test_network_api('deallocate_floating_ip', rpc_method='call',
address='addr', affect_auto_assigned=True)
+ def test_allocate_floating_ip_no_multi(self):
+ self.flags(multi_host=False)
+ self._test_network_api('allocate_floating_ip', rpc_method='call',
+ project_id='fake_id', pool='fake_pool', auto_assigned=False)
+
+ def test_deallocate_floating_ip_no_multi(self):
+ self.flags(multi_host=False)
+ self._test_network_api('deallocate_floating_ip', rpc_method='call',
+ address='addr', affect_auto_assigned=True)
+
def test_associate_floating_ip(self):
self._test_network_api('associate_floating_ip', rpc_method='call',
floating_address='blah', fixed_address='foo',