From 2c84191d93fed209d6ae68cf80f52bbdca7646d7 Mon Sep 17 00:00:00 2001 From: Dan Prince Date: Sat, 1 Dec 2012 21:25:30 -0500 Subject: network managers: Pass elevated cxtx to update_dhcp Updates the Nova FlatDHCPManager and VlanManager network managers so they pass an elevated context to update_dhcp. In some cases (linux_net) the network driver may make use of DB calls which require an admin context. This fixes an issue where resize operations (confirm, revert) would fail if the user was not an admin. This is more fallout from 14e2ed3 where we stopped passing admin contexts for resize across RPC. Fixes LP Bug #1085071 Change-Id: I718c40f0df0b2955626033cf3b6f78323527e9cf --- nova/network/manager.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'nova') diff --git a/nova/network/manager.py b/nova/network/manager.py index 7583eaef9..d1eef9d4a 100644 --- a/nova/network/manager.py +++ b/nova/network/manager.py @@ -2083,7 +2083,9 @@ class FlatDHCPManager(RPCAllocateFixedIP, FloatingIP, NetworkManager): if not CONF.fake_network: dev = self.driver.get_dev(network) - self.driver.update_dhcp(context, dev, network) + # NOTE(dprince): dhcp DB queries require elevated context + elevated = context.elevated() + self.driver.update_dhcp(elevated, dev, network) if(CONF.use_ipv6): self.driver.update_ra(context, dev, network) gateway = utils.get_my_linklocal(dev) @@ -2094,7 +2096,9 @@ class FlatDHCPManager(RPCAllocateFixedIP, FloatingIP, NetworkManager): if not CONF.fake_network: network['dhcp_server'] = self._get_dhcp_ip(context, network) dev = self.driver.get_dev(network) - self.driver.update_dhcp(context, dev, network) + # NOTE(dprince): dhcp DB queries require elevated context + elevated = context.elevated() + self.driver.update_dhcp(elevated, dev, network) def _get_network_dict(self, network): """Returns the dict representing necessary and meta network fields""" @@ -2262,7 +2266,9 @@ class VlanManager(RPCAllocateFixedIP, FloatingIP, NetworkManager): network['vpn_private_address']) if not CONF.fake_network: dev = self.driver.get_dev(network) - self.driver.update_dhcp(context, dev, network) + # NOTE(dprince): dhcp DB queries require elevated context + elevated = context.elevated() + self.driver.update_dhcp(elevated, dev, network) if(CONF.use_ipv6): self.driver.update_ra(context, dev, network) gateway = utils.get_my_linklocal(dev) @@ -2273,7 +2279,9 @@ class VlanManager(RPCAllocateFixedIP, FloatingIP, NetworkManager): if not CONF.fake_network: network['dhcp_server'] = self._get_dhcp_ip(context, network) dev = self.driver.get_dev(network) - self.driver.update_dhcp(context, dev, network) + # NOTE(dprince): dhcp DB queries require elevated context + elevated = context.elevated() + self.driver.update_dhcp(elevated, dev, network) def _get_network_dict(self, network): """Returns the dict representing necessary and meta network fields""" -- cgit