Skip to content

Commit

Permalink
Make k8s_drain work when only one pod is present (#770)
Browse files Browse the repository at this point in the history
SUMMARY
Fixes #769 .
k8s_drain was not checking if a pod has been deleted when there was only one pod on the node to be drained.
The list of pods, pods, was being "popped" before the first iteration of the while loop:
        pod = pods.pop()
        while (_elapsed_time() < wait_timeout or wait_timeout == 0) and pods:
When pods contains only one element, the while loop is skipped.

ISSUE TYPE

Bugfix Pull Request

COMPONENT NAME

k8s_drain

Reviewed-by: Mike Graves <[email protected]>
(cherry picked from commit 4c305e7)
  • Loading branch information
OttaviaB authored and patchback[bot] committed Dec 11, 2024
1 parent c73f3e3 commit 028eb81
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
bugfixes:
- k8s_drain - Fix k8s_drain does not wait for single pod (https://github.com/ansible-collections/kubernetes.core/issues/769).
6 changes: 4 additions & 2 deletions plugins/modules/k8s_drain.py
Original file line number Diff line number Diff line change
Expand Up @@ -303,10 +303,10 @@ def _elapsed_time():
return (datetime.now() - start).seconds

response = None
pod = pods.pop()
pod = None
while (_elapsed_time() < wait_timeout or wait_timeout == 0) and pods:
if not pod:
pod = pods.pop()
pod = pods[-1]
try:
response = self._api_instance.read_namespaced_pod(
namespace=pod[0], name=pod[1]
Expand All @@ -315,13 +315,15 @@ def _elapsed_time():
"name"
):
pod = None
del pods[-1]
time.sleep(wait_sleep)
except ApiException as exc:
if exc.reason != "Not Found":
self._module.fail_json(
msg="Exception raised: {0}".format(exc.reason)
)
pod = None
del pods[-1]
except Exception as e:
self._module.fail_json(msg="Exception raised: {0}".format(to_native(e)))
if not pods:
Expand Down

0 comments on commit 028eb81

Please sign in to comment.