From feb89009e990033d5d782e8c05dde6e32e345ec7 Mon Sep 17 00:00:00 2001 From: Maysa Macedo Date: Fri, 20 Nov 2020 17:15:10 +0100 Subject: [PATCH] Ensure leftover loadbalancer is cleaned up The openstacksdk version used (0.17.2) does not support tags for loadbalancer. However, the Octavia API does and the loadbalancers are created with a tag. This commit ensures the loadbalancer can be also filtered with tags allowing the needed loadbalancers to get cleaned up. Change-Id: I62b0ae41a90bd2e0f72a56592cbd88fce3ad1a87 --- kuryr_kubernetes/controller/drivers/lbaasv2.py | 11 +++++++++++ kuryr_kubernetes/controller/handlers/lbaas.py | 7 +++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/kuryr_kubernetes/controller/drivers/lbaasv2.py b/kuryr_kubernetes/controller/drivers/lbaasv2.py index 2e0b30084..8c683520d 100644 --- a/kuryr_kubernetes/controller/drivers/lbaasv2.py +++ b/kuryr_kubernetes/controller/drivers/lbaasv2.py @@ -778,6 +778,17 @@ def _post_lb_resource(self, resource, request, **kwargs): response_dict = response.json()[resource.resource_key] return resource(**response_dict) + def get_loadbalancers(self, request): + lbaas = clients.get_loadbalancer_client() + resource = o_lb.LoadBalancer + response = lbaas.get(resource.base_path, params=request) + if not response.ok: + LOG.error('Error when retrieving %s: %s', resource.resources_key, + response.text) + response.raise_for_status() + response = response.json()[resource.resources_key] + return response + def _create_loadbalancer(self, loadbalancer): request = { 'name': loadbalancer.name, diff --git a/kuryr_kubernetes/controller/handlers/lbaas.py b/kuryr_kubernetes/controller/handlers/lbaas.py index 7d77f17c2..72dfd4769 100644 --- a/kuryr_kubernetes/controller/handlers/lbaas.py +++ b/kuryr_kubernetes/controller/handlers/lbaas.py @@ -631,7 +631,6 @@ def _sync_lbaas_loadbalancer(self, endpoints, lbaas_state, lbaas_spec): return changed def _cleanup_leftover_lbaas(self): - lbaas_client = clients.get_loadbalancer_client() services = [] try: services = driver_utils.get_services().get('items') @@ -644,11 +643,11 @@ def _cleanup_leftover_lbaas(self): if service['spec'].get('clusterIP')) lbaas_spec = {} self._drv_lbaas.add_tags('loadbalancer', lbaas_spec) - loadbalancers = lbaas_client.load_balancers(**lbaas_spec) + loadbalancers = self._drv_lbaas.get_loadbalancers(lbaas_spec) for loadbalancer in loadbalancers: + loadbalancer = obj_lbaas.LBaaSLoadBalancer(**loadbalancer) if loadbalancer.vip_address not in services_cluster_ip: - lb_obj = obj_lbaas.LBaaSLoadBalancer(**loadbalancer) - eventlet.spawn(self._ensure_release_lbaas, lb_obj) + eventlet.spawn(self._ensure_release_lbaas, loadbalancer) def _ensure_release_lbaas(self, lb_obj): attempts = 0