fix: compare only if ip set has changed
parent
971cbb667f
commit
15ad2e5902
|
|
@ -26,14 +26,16 @@ def is_valid_ip(ip):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
async def update_service_annotation(v1, service, external_ips):
|
async def update_service_annotation(v1, service, external_ipset):
|
||||||
try:
|
try:
|
||||||
|
external_ips = list(external_ipset)
|
||||||
service_name = service.metadata.name
|
service_name = service.metadata.name
|
||||||
namespace = service.metadata.namespace
|
namespace = service.metadata.namespace
|
||||||
logger.debug(f"Fetching service {service_name} in namespace {namespace}")
|
logger.debug(f"Fetching service {service_name} in namespace {namespace}")
|
||||||
service_obj = await v1.read_namespaced_service(service_name, namespace)
|
service_obj = await v1.read_namespaced_service(service_name, namespace)
|
||||||
|
|
||||||
current_annotation = service_obj.metadata.annotations.get(ANNOTATION_KEY)
|
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)
|
zlan_gateway_ip = service_obj.metadata.labels.get(ZLAN_GATEWAY_IP_KEY)
|
||||||
logger.debug(f"Zlan Gateway IP: {zlan_gateway_ip}")
|
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"Current annotation: {current_annotation}")
|
||||||
logger.debug(f"Target annotation: {target_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}}}
|
body = {"metadata": {"annotations": {ANNOTATION_KEY: target_annotation}}}
|
||||||
logger.debug(f"Patching service {service_name} with body: {body}")
|
logger.debug(f"Patching service {service_name} with body: {body}")
|
||||||
await v1.patch_namespaced_service(service_name, namespace, 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
|
# remove old ip lists before populating
|
||||||
while not external_ips_update_queue.empty():
|
while not external_ips_update_queue.empty():
|
||||||
_previous_external_ips = await external_ips_update_queue.get()
|
_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}")
|
logger.debug(f"Added external IPs to update queue: {external_node_ips}")
|
||||||
|
|
||||||
except client.exceptions.ApiException as e:
|
except client.exceptions.ApiException as e:
|
||||||
|
|
@ -128,12 +130,12 @@ async def watch_services(v1, external_ips_update_queue):
|
||||||
logger.debug(
|
logger.debug(
|
||||||
f"Processing event type: {event['type']} for service: {service.metadata.name}"
|
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
|
# put back the last one if it turns empty
|
||||||
if external_ips_update_queue.empty():
|
if external_ips_update_queue.empty():
|
||||||
await external_ips_update_queue.put(external_ips)
|
await external_ips_update_queue.put(external_ipset)
|
||||||
logger.debug(f"Retrieved external IPs: {external_ips}")
|
logger.debug(f"Retrieved external IPs: {list(external_ipset)}")
|
||||||
await update_service_annotation(v1, service, external_ips)
|
await update_service_annotation(v1, service, external_ipset)
|
||||||
logger.debug(f"Service updated: {service.metadata.name}")
|
logger.debug(f"Service updated: {service.metadata.name}")
|
||||||
|
|
||||||
except client.exceptions.ApiException as e:
|
except client.exceptions.ApiException as e:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue