From 20c5da0348d5b45cdd126225fe8d22365312dff5 Mon Sep 17 00:00:00 2001 From: Aleksei Sviridkin Date: Tue, 29 Sep 2026 19:02:16 +0300 Subject: [PATCH] fix(lb): delete the balancer with a single request cleanup removed every service and every target one request at a time and only then deleted the balancer, so a balancer with 3 ports and 10 targets cost 14 API calls instead of 1. That matters when the project is close to the hourly rate limit. The API reference only says "Deletes a Load Balancer" and does not describe what happens to its services and targets. The change follows how Hetzner's own cloud controller manager and CLI delete a balancer: one delete call, with no prior removal of services or targets and no network detach. Network handling is left as it was. A failure part-way no longer leaves a balancer with some services already removed. Assisted-by: LLM Signed-off-by: Aleksei Sviridkin --- src/lb.rs | 33 --------------------------------- 1 file changed, 33 deletions(-) diff --git a/src/lb.rs b/src/lb.rs index cee831f..8fa5c29 100644 --- a/src/lb.rs +++ b/src/lb.rs @@ -542,39 +542,6 @@ impl LoadBalancer { let Some(hcloud_balancer) = hcloud_balancer else { return Ok(()); }; - for service in &hcloud_balancer.services { - tracing::info!( - "Deleting service that listens for port {} from load-balancer {}", - service.listen_port, - hcloud_balancer.name, - ); - hcloud::apis::load_balancers_api::delete_service( - &self.hcloud_config, - DeleteServiceParams { - id: hcloud_balancer.id, - delete_service_request: Some(DeleteServiceRequest { - listen_port: service.listen_port, - }), - }, - ) - .await?; - } - for target in &hcloud_balancer.targets { - if let Some(target_ip) = target.ip.clone() { - tracing::info!("Removing target {}", target_ip.ip); - hcloud::apis::load_balancers_api::remove_target( - &self.hcloud_config, - RemoveTargetParams { - id: hcloud_balancer.id, - remove_target_request: Some(RemoveTargetRequest { - ip: Some(target_ip), - ..Default::default() - }), - }, - ) - .await?; - } - } hcloud::apis::load_balancers_api::delete_load_balancer( &self.hcloud_config, DeleteLoadBalancerParams {