Skip to content

Commit 19b65d1

Browse files
authored
feat: Add idempotency check for node pool create/delete (GoogleCloudPlatform#1107)
This PR introduces an idempotency check for GKE node pool lifecycle management. It ensures that the `create` and `delete` tasks can handle existing or missing resources gracefully by verifying the state using `gcloud container node-pools describe` before taking action. This skips creation if the node pool already exists and skips deletion if the pool is already gone.
1 parent 92980ae commit 19b65d1

1 file changed

Lines changed: 28 additions & 0 deletions

File tree

dags/tpu_observability/utils/node_pool_util.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,21 @@ def copy_node_pool_info_with_override(info: Info, **overrides) -> Info:
163163
return replaced_info
164164

165165

166+
def _node_pool_exists(node_pool: Info) -> bool:
167+
check_cmd = (
168+
f"gcloud container node-pools describe {node_pool.node_pool_name} "
169+
f"--project={node_pool.project_id} "
170+
f"--cluster={node_pool.cluster_name} "
171+
f"--location={node_pool.location} "
172+
f"--format='value(name)'"
173+
)
174+
try:
175+
subprocess.run_exec(check_cmd)
176+
return True
177+
except Exception:
178+
return False
179+
180+
166181
@task
167182
def create(
168183
node_pool: Info,
@@ -179,6 +194,12 @@ def create(
179194
"accelerator_type": node_pool.machine_type,
180195
})
181196

197+
if _node_pool_exists(node_pool):
198+
logging.info(
199+
f"Node pool {node_pool.node_pool_name} already exists. Skipping."
200+
)
201+
return
202+
182203
command = (
183204
f"gcloud container node-pools create {node_pool.node_pool_name} "
184205
f"--project={node_pool.project_id} "
@@ -203,6 +224,13 @@ def create(
203224
def delete(node_pool: Info) -> None:
204225
"""Deletes the GKE node pool using gcloud command."""
205226

227+
"""Check if the node pool is valid."""
228+
if not _node_pool_exists(node_pool):
229+
logging.info(
230+
f"Node pool {node_pool.node_pool_name} already deleted or does not exist. Skipping."
231+
)
232+
return
233+
206234
command = (
207235
f"gcloud container node-pools delete {node_pool.node_pool_name} "
208236
f"--project={node_pool.project_id} "

0 commit comments

Comments
 (0)