Only search for floating ips if the server has them

We have a server dict, which has an addresses dict. If the addresses
dict does not list any floating ips, then there is no need to spend the
API call to look for the fip ids needed to do the delete.

Change-Id: Iaf7583fe29bd197a59ae2728fd52d8de2ac1d411
This commit is contained in:
Monty Taylor 2017-06-20 14:47:24 -05:00
parent f5daebebc1
commit 45e6899426
No known key found for this signature in database
GPG Key ID: 7BAE94BC7141A594

View File

@ -5886,6 +5886,26 @@ class OpenStackCloud(
server, wait=wait, timeout=timeout, delete_ips=delete_ips,
delete_ip_retry=delete_ip_retry)
def _delete_server_floating_ips(self, server, delete_ip_retry):
# Does the server have floating ips in its
# addresses dict? If not, skip this.
server_floats = meta.find_nova_interfaces(
server['addresses'], ext_tag='floating')
if not server_floats:
return
ips = self.search_floating_ips(filters={
'device_id': server['id']})
for ip in ips:
deleted = self.delete_floating_ip(
ip['id'], retry=delete_ip_retry)
if not deleted:
raise OpenStackCloudException(
"Tried to delete floating ip {floating_ip}"
" associated with server {id} but there was"
" an error deleting it. Not deleting server.".format(
floating_ip=ip['floating_ip_address'],
id=server['id']))
def _delete_server(
self, server, wait=False, timeout=180, delete_ips=False,
delete_ip_retry=1):
@ -5893,20 +5913,7 @@ class OpenStackCloud(
return False
if delete_ips and self._has_floating_ips():
# TODO(mordred) Does the server have floating ips in its
# addresses dict? If not, skip this.
ips = self.search_floating_ips(filters={
'device_id': server['id']})
for ip in ips:
deleted = self.delete_floating_ip(
ip['id'], retry=delete_ip_retry)
if not deleted:
raise OpenStackCloudException(
"Tried to delete floating ip {floating_ip}"
" associated with server {id} but there was"
" an error deleting it. Not deleting server.".format(
floating_ip=floating_ip,
id=server['id']))
self._delete_server_floating_ips(server, delete_ip_retry)
try:
self._compute_client.delete(