...
1
16
17 package drain
18
19 import (
20 "fmt"
21
22 corev1 "k8s.io/api/core/v1"
23 utilerrors "k8s.io/apimachinery/pkg/util/errors"
24 )
25
26
27
28
29
30
31
32
33 func RunNodeDrain(drainer *Helper, nodeName string) error {
34
35 list, errs := drainer.GetPodsForDeletion(nodeName)
36 if errs != nil {
37 return utilerrors.NewAggregate(errs)
38 }
39 if warnings := list.Warnings(); warnings != "" {
40 fmt.Fprintf(drainer.ErrOut, "WARNING: %s\n", warnings)
41 }
42
43 if err := drainer.DeleteOrEvictPods(list.Pods()); err != nil {
44
45 return err
46 }
47 return nil
48 }
49
50
51 func RunCordonOrUncordon(drainer *Helper, node *corev1.Node, desired bool) error {
52 if drainer.Ctx == nil {
53 return fmt.Errorf("RunCordonOrUncordon error: drainer.Ctx can't be nil")
54 }
55 if drainer.Client == nil {
56 return fmt.Errorf("RunCordonOrUncordon error: drainer.Client can't be nil")
57 }
58
59 c := NewCordonHelper(node)
60
61 if updateRequired := c.UpdateIfRequired(desired); !updateRequired {
62
63 return nil
64 }
65
66 err, patchErr := c.PatchOrReplaceWithContext(drainer.Ctx, drainer.Client, false)
67 if err != nil {
68 if patchErr != nil {
69 return fmt.Errorf("cordon error: %s; merge patch error: %w", err.Error(), patchErr)
70 }
71 return fmt.Errorf("cordon error: %w", err)
72 }
73
74 return nil
75 }
76
View as plain text