nova compute fail to remove instance with port if network is broken
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
OpenStack Compute (nova) |
New
|
Undecided
|
Unassigned |
Bug Description
If user was capable to create broken network configuration, instance become undeletable. Reason why user can create broken networking is under investigation (current hypothesis: if network (neutron) created in one tennant and instance in other, and user is admin in both tenants, it cause broken configuration).
But such instance deletetion cause trace on nova-compute:
Traceback (most recent call last):
File "/usr/lib/
**args)
File "/usr/lib/
result = getattr(proxyobj, method)(ctxt, **kwargs)
File "/usr/lib/
return function(self, context, *args, **kwargs)
File "/usr/lib/
payload)
File "/usr/lib/
return f(self, context, *args, **kw)
File "/usr/lib/
pass
File "/usr/lib/
return function(self, context, *args, **kwargs)
File "/usr/lib/
function(self, context, *args, **kwargs)
File "/usr/lib/
e, sys.exc_info())
File "/usr/lib/
return function(self, context, *args, **kwargs)
File "/usr/lib/
do_
File "/usr/lib/
return f(*args, **kwargs)
File "/usr/lib/
reservation
File "/usr/lib/
rv = f(*args, **kwargs)
File "/usr/lib/
user_
File "/usr/lib/
self.
File "/usr/lib/
network_info = self._get_
File "/usr/lib/
instance)
File "/usr/lib/
result = self._get_
File "/usr/lib/
nw_info = self._build_
File "/usr/lib/
subnets)
File "/usr/lib/
label=
UnboundLocalError: local variable 'network_name' referenced before assignment
The reason is following code :
def _nw_info_
# NOTE(danms): This loop can't fail to find a network since we
# filtered ports to only the ones matching networks in our parent
for net in networks:
if port['network_id'] == net['id']:
(if no net found network_name become undefined).
Following patch should allow instance deletion in case of networking problems:
diff --git a/nova/
index a41924d..8a44f99 100644
--- a/nova/
+++ b/nova/
@@ -939,6 +939,8 @@ class API(base.Base):
if port['network_id'] == net['id']:
+ else:
+ network_name = ""
bridge = None