summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMandar Vaze <mandar.vaze@vertex.co.in>2012-04-26 04:24:26 -0700
committerMandar Vaze <mandar.vaze@vertex.co.in>2012-04-26 04:24:26 -0700
commitd901b44fea897a038ce9a8afa32751ab79ffa210 (patch)
treef6175dd6602c364dcbef036a6918524b7a45e0cd
parentcaa1b282c701d5e9b9e02ffdb07d432d9b35ed13 (diff)
Fixes bug 983024
enable_dhcp, kill_dhcp and update_dhcp calls are sent to remote nova-network, when a network is not associated with current host. Change-Id: If7c7c6e58700cc171a8f56669e6455037df7f7e7
-rw-r--r--nova/network/quantum/manager.py46
1 files changed, 40 insertions, 6 deletions
diff --git a/nova/network/quantum/manager.py b/nova/network/quantum/manager.py
index 1dbcaafe5..15bbe50b3 100644
--- a/nova/network/quantum/manager.py
+++ b/nova/network/quantum/manager.py
@@ -98,6 +98,10 @@ class QuantumManager(manager.FloatingIP, manager.FlatManager):
networks = self.get_all_networks(context.get_admin_context())
cidrs = []
for net in networks:
+ # Don't update host information for network that does not
+ # belong to you
+ if net['host'] != self.host:
+ continue
if net['gateway']:
LOG.debug("Initializing NAT: %s (cidr: %s, gw: %s)" % (
net['label'], net['cidr'], net['gateway']))
@@ -284,9 +288,20 @@ class QuantumManager(manager.FloatingIP, manager.FlatManager):
self.ipam.delete_subnets_by_net_id(context, net_uuid, project_id)
# Get rid of dnsmasq
if FLAGS.quantum_use_dhcp:
- dev = self.driver.get_dev(net_ref)
- if self.driver._device_exists(dev):
- self.driver.kill_dhcp(dev)
+ if net_ref['host'] == self.host:
+ self.kill_dhcp(net_ref)
+ else:
+ topic = self.db.queue_get_for(context,
+ FLAGS.network_topic,
+ net_ref['host'])
+
+ rpc.call(context, topic, {'method': 'kill_dhcp',
+ 'args': {'net_ref': net_ref}})
+
+ def kill_dhcp(self, net_ref):
+ dev = self.driver.get_dev(net_ref)
+ if self.driver._device_exists(dev):
+ self.driver.kill_dhcp(dev)
def allocate_for_instance(self, context, **kwargs):
"""Called by compute when it is creating a new VM.
@@ -370,8 +385,18 @@ class QuantumManager(manager.FloatingIP, manager.FlatManager):
allowed_address_pairs=pairs)
# Set up/start the dhcp server for this network if necessary
if FLAGS.quantum_use_dhcp:
- self.enable_dhcp(context, network['quantum_net_id'], network,
- vif_rec, network['net_tenant_id'])
+ if network['host'] == self.host:
+ self.enable_dhcp(context, network['quantum_net_id'],
+ network, vif_rec, network['net_tenant_id'])
+ else:
+ topic = self.db.queue_get_for(context,
+ FLAGS.network_topic, network['host'])
+ rpc.call(context, topic, {'method': 'enable_dhcp',
+ 'args': {'quantum_net_id': network['quantum_net_id'],
+ 'network_ref': network,
+ 'vif_rec': vif_rec,
+ 'project_id': network['net_tenant_id']}})
+
return self.get_instance_nw_info(context, instance_id,
instance['uuid'],
rxtx_factor, host,
@@ -579,8 +604,17 @@ class QuantumManager(manager.FloatingIP, manager.FlatManager):
network['uuid'], project_id, vif, instance_id)
if FLAGS.quantum_use_dhcp:
- self.update_dhcp(context, ipam_tenant_id, network,
+ if network['host'] == self.host:
+ self.update_dhcp(context, ipam_tenant_id, network,
vif, project_id)
+ else:
+ topic = self.db.queue_get_for(context,
+ FLAGS.network_topic, network['host'])
+ rpc.call(context, topic, {'method': 'update_dhcp',
+ 'args': {'ipam_tenant_id': ipam_tenant_id,
+ 'network_ref': network,
+ 'vif_ref': vif,
+ 'project_id': network['project_id']}})
db.virtual_interface_delete(admin_context, vif['id'])