mirror of
https://github.com/ansible-collections/kubernetes.core.git
synced 2026-03-26 21:33:02 +00:00
Improve error message for pod disruption budget when draining a node (#798)
SUMMARY Closes #797 . The error message "Too Many Requests" is confusing and is changed to a more meaningful message: TASK [Drain node] ************************************************************************* Montag 25 November 2024 09:20:28 +0100 (0:00:00.014) 0:00:00.014 ******* fatal: [host -> localhost]: FAILED! => {"changed": false, "msg": "Failed to delete pod kube-public/draintest-6b84677b99-9jf7m due to: Cannot evict pod as it would violate the pod's disruption budget."} The new task output would allow to deal with a pod disruption budget with the retries/until logic in a more controlled way: --- - hosts: "{{ target }}" serial: 1 gather_facts: false tasks: - name: Drain node kubernetes.core.k8s_drain: kubeconfig: "{{ kubeconfig_path }}" name: "{{ inventory_hostname }}" delete_options: ignore_daemonsets: true delete_emptydir_data: true wait_timeout: 100 disable_eviction: false wait_sleep: 1 delegate_to: localhost retries: 10 delay: 5 until: drain_result is success or 'disruption budget' not in drain_result.msg register: drain_result ISSUE TYPE Feature Pull Request COMPONENT NAME k8s_drain Reviewed-by: Mike Graves <mgraves@redhat.com>
This commit is contained in:
@@ -143,6 +143,7 @@ result:
|
||||
"""
|
||||
|
||||
import copy
|
||||
import json
|
||||
import time
|
||||
import traceback
|
||||
from datetime import datetime
|
||||
@@ -187,6 +188,17 @@ except ImportError:
|
||||
HAS_EVICTION_API = False
|
||||
|
||||
|
||||
def format_dynamic_api_exc(exc):
|
||||
if exc.body:
|
||||
if exc.headers and exc.headers.get("Content-Type") == "application/json":
|
||||
message = json.loads(exc.body).get("message")
|
||||
if message:
|
||||
return message
|
||||
return exc.body
|
||||
else:
|
||||
return "%s Reason: %s" % (exc.status, exc.reason)
|
||||
|
||||
|
||||
def filter_pods(pods, force, ignore_daemonset, delete_emptydir_data):
|
||||
k8s_kind_mirror = "kubernetes.io/config.mirror"
|
||||
daemonSet, unmanaged, mirror, localStorage, to_delete = [], [], [], [], []
|
||||
@@ -338,7 +350,7 @@ class K8sDrainAnsible(object):
|
||||
if exc.reason != "Not Found":
|
||||
self._module.fail_json(
|
||||
msg="Failed to delete pod {0}/{1} due to: {2}".format(
|
||||
namespace, name, exc.reason
|
||||
namespace, name, to_native(format_dynamic_api_exc(exc))
|
||||
)
|
||||
)
|
||||
except Exception as exc:
|
||||
|
||||
Reference in New Issue
Block a user