From 15ad2e5902d6994f7a9536a3fed02a6d87c65f79 Mon Sep 17 00:00:00 2001 From: Malar Invention Date: Sun, 12 Jan 2025 19:34:16 +0530 Subject: [PATCH] fix: compare only if ip set has changed --- node_external_ip_controller_async.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/node_external_ip_controller_async.py b/node_external_ip_controller_async.py index 4ee6206..b365066 100644 --- a/node_external_ip_controller_async.py +++ b/node_external_ip_controller_async.py @@ -26,14 +26,16 @@ def is_valid_ip(ip): return False -async def update_service_annotation(v1, service, external_ips): +async def update_service_annotation(v1, service, external_ipset): try: + external_ips = list(external_ipset) service_name = service.metadata.name namespace = service.metadata.namespace logger.debug(f"Fetching service {service_name} in namespace {namespace}") service_obj = await v1.read_namespaced_service(service_name, namespace) current_annotation = service_obj.metadata.annotations.get(ANNOTATION_KEY) + annotated_ips = set(current_annotation.split(",")) zlan_gateway_ip = service_obj.metadata.labels.get(ZLAN_GATEWAY_IP_KEY) logger.debug(f"Zlan Gateway IP: {zlan_gateway_ip}") @@ -47,7 +49,7 @@ async def update_service_annotation(v1, service, external_ips): logger.debug(f"Current annotation: {current_annotation}") logger.debug(f"Target annotation: {target_annotation}") - if current_annotation != target_annotation: + if annotated_ips != external_ipset: body = {"metadata": {"annotations": {ANNOTATION_KEY: target_annotation}}} logger.debug(f"Patching service {service_name} with body: {body}") await v1.patch_namespaced_service(service_name, namespace, body) @@ -98,7 +100,7 @@ async def watch_nodes(v1, external_ips_update_queue): # remove old ip lists before populating while not external_ips_update_queue.empty(): _previous_external_ips = await external_ips_update_queue.get() - await external_ips_update_queue.put(external_node_ips) + await external_ips_update_queue.put(external_node_ipset) logger.debug(f"Added external IPs to update queue: {external_node_ips}") except client.exceptions.ApiException as e: @@ -128,12 +130,12 @@ async def watch_services(v1, external_ips_update_queue): logger.debug( f"Processing event type: {event['type']} for service: {service.metadata.name}" ) - external_ips = await external_ips_update_queue.get() + external_ipset = await external_ips_update_queue.get() # put back the last one if it turns empty if external_ips_update_queue.empty(): - await external_ips_update_queue.put(external_ips) - logger.debug(f"Retrieved external IPs: {external_ips}") - await update_service_annotation(v1, service, external_ips) + await external_ips_update_queue.put(external_ipset) + logger.debug(f"Retrieved external IPs: {list(external_ipset)}") + await update_service_annotation(v1, service, external_ipset) logger.debug(f"Service updated: {service.metadata.name}") except client.exceptions.ApiException as e: