Ensure only lb with no corresponding svc is cleaned up

Right now the lbaas name and the service name are compared when
identifying a load balancer that exist with no matching service.
This might cause a wrong lbaas deletion as the service and the lbaas
name might differ. This commit fixes the issue by ensuring the
cluster_ip field of the service is used to verify the existence
of a matching lbaas.

Closes-bug: 1858108

Change-Id: I4a32b8ce3bae68b406f23429f2ad895dd44c9842
This commit is contained in:
Maysa Macedo 2020-01-02 14:33:45 +00:00
parent 501bf41910
commit c05de06be9
1 changed files with 6 additions and 7 deletions

View File

@ -653,19 +653,18 @@ class LoadBalancerHandler(k8s_base.ResourceEventHandler):
try:
services = driver_utils.get_services().get('items')
except k_exc.K8sClientException:
LOG.debug("Skipping cleanup of leftover lbaas."
LOG.debug("Skipping cleanup of leftover lbaas. "
"Error retriving Kubernetes services")
return
services_set = set('{}/{}'.format(
service['metadata']['namespace'],
service['metadata']['name'])
for service in services)
services_cluster_ip = set(service['spec']['clusterIP']
for service in services
if service['spec'].get('clusterIP'))
lbaas_spec = {}
self._drv_lbaas.add_tags('loadbalancer', lbaas_spec)
loadbalancers = lbaas_client.load_balancers(**lbaas_spec)
for loadbalancer in loadbalancers:
lb_obj = obj_lbaas.LBaaSLoadBalancer(**loadbalancer)
if lb_obj.name not in services_set:
if loadbalancer.vip_address not in services_cluster_ip:
lb_obj = obj_lbaas.LBaaSLoadBalancer(**loadbalancer)
eventlet.spawn(self._ensure_release_lbaas, lb_obj)
def _ensure_release_lbaas(self, lb_obj):