fix: compare only if ip set has changed

main
Malar Invention 2025-01-12 19:34:16 +05:30
parent 971cbb667f
commit 15ad2e5902
1 changed files with 9 additions and 7 deletions

View File

@ -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: