From 893f15f802112b9a54684b3a2426022bd169a52e Mon Sep 17 00:00:00 2001 From: Jayson Wang Date: Fri, 10 Nov 2023 08:15:20 +0800 Subject: [PATCH] check if the Node already cordoned when executing Drain (#2275) * check if the Node already cordoned when executing Drain * ensure node cordoned --- internal/dao/node.go | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/internal/dao/node.go b/internal/dao/node.go index b878d0ea..8f9cb0b5 100644 --- a/internal/dao/node.go +++ b/internal/dao/node.go @@ -84,10 +84,17 @@ func (o DrainOptions) toDrainHelper(k kubernetes.Interface, w io.Writer) drain.H // Drain drains a node. func (n *Node) Drain(path string, opts DrainOptions, w io.Writer) error { - if err := n.ToggleCordon(path, true); err != nil { + cordoned, err := n.ensureCordoned(path) + if err != nil { return err } + if !cordoned { + if err = n.ToggleCordon(path, true); err != nil { + return err + } + } + dial, err := n.GetFactory().Client().Dial() if err != nil { return err @@ -217,6 +224,16 @@ func (n *Node) GetPods(nodeName string) ([]*v1.Pod, error) { return pp, nil } +// ensureCordoned returns whether the given node has been cordoned +func (n *Node) ensureCordoned(path string) (bool, error) { + o, err := FetchNode(context.Background(), n.Factory, path) + if err != nil { + return false, err + } + + return o.Spec.Unschedulable, nil +} + // ---------------------------------------------------------------------------- // Helpers...