diff --git a/cmd/node-termination-handler.go b/cmd/node-termination-handler.go index d96620c9..26b62020 100644 --- a/cmd/node-termination-handler.go +++ b/cmd/node-termination-handler.go @@ -272,6 +272,11 @@ func watchForCancellationEvents(cancelChan <-chan monitor.InterruptionEvent, int func drainOrCordonIfNecessary(interruptionEventStore *interruptioneventstore.Store, drainEvent *monitor.InterruptionEvent, node node.Node, nthConfig config.Config, nodeMetadata ec2metadata.NodeMetadata, metrics observability.Metrics, wg *sync.WaitGroup) { defer wg.Done() nodeName := drainEvent.NodeName + nodeLabels, err := node.GetNodeLabels(nodeName) + if err != nil { + log.Warn().Err(err).Msgf("Unable to fetch node labels for node '%s' ", nodeName) + } + drainEvent.NodeLabels = nodeLabels if drainEvent.PreDrainTask != nil { err := drainEvent.PreDrainTask(*drainEvent, node) if err != nil { diff --git a/pkg/node/node.go b/pkg/node/node.go index 0a6c9c18..d1612be1 100644 --- a/pkg/node/node.go +++ b/pkg/node/node.go @@ -278,6 +278,19 @@ func (n Node) removeLabel(nodeName string, key string) error { return nil } +// GetNodeLabels will fetch node labels for a given nodeName +func (n Node) GetNodeLabels(nodeName string) (map[string]string, error) { + if n.nthConfig.DryRun { + log.Log().Str("node_name", nodeName).Msg("Node labels would have been fetched, but dry-run flag was set") + return nil, nil + } + node, err := n.fetchKubernetesNode(nodeName) + if err != nil { + return nil, err + } + return node.Labels, nil +} + // TaintSpotItn adds the spot termination notice taint onto a node func (n Node) TaintSpotItn(nodeName string, eventID string) error { if !n.nthConfig.TaintNode {