diff options
| author | Dan Prince <dprince@redhat.com> | 2012-12-01 21:25:30 -0500 |
|---|---|---|
| committer | Dan Prince <dprince@redhat.com> | 2012-12-04 08:25:09 -0500 |
| commit | 2c84191d93fed209d6ae68cf80f52bbdca7646d7 (patch) | |
| tree | e2a5ef2aa4ff5e7c88d35b5a8d0615756bcb43be | |
| parent | ca1a2566d33aad15de640bf60630330aceb0ef2c (diff) | |
| download | nova-2c84191d93fed209d6ae68cf80f52bbdca7646d7.tar.gz nova-2c84191d93fed209d6ae68cf80f52bbdca7646d7.tar.xz nova-2c84191d93fed209d6ae68cf80f52bbdca7646d7.zip | |
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
| -rw-r--r-- | nova/network/manager.py | 16 |
1 files changed, 12 insertions, 4 deletions
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""" |
