diff options
| author | Mandar Vaze <mandar.vaze@vertex.co.in> | 2012-04-26 04:24:26 -0700 |
|---|---|---|
| committer | Mandar Vaze <mandar.vaze@vertex.co.in> | 2012-04-26 04:24:26 -0700 |
| commit | d901b44fea897a038ce9a8afa32751ab79ffa210 (patch) | |
| tree | f6175dd6602c364dcbef036a6918524b7a45e0cd /nova | |
| parent | caa1b282c701d5e9b9e02ffdb07d432d9b35ed13 (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
Diffstat (limited to 'nova')
| -rw-r--r-- | nova/network/quantum/manager.py | 46 |
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']) |
