in pkg/node/node.go [307:344]
func (n Node) addLabel(nodeName string, key string, value string, skipExisting bool) error {
type metadata struct {
Labels map[string]string `json:"labels"`
}
type patch struct {
Metadata metadata `json:"metadata"`
}
labels := make(map[string]string)
labels[key] = value
payload := patch{
Metadata: metadata{
Labels: labels,
},
}
payloadBytes, err := json.Marshal(payload)
if err != nil {
return fmt.Errorf("An error occurred while marshalling the json to add a label to the node: %w", err)
}
node, err := n.fetchKubernetesNode(nodeName)
if err != nil {
return err
}
if skipExisting {
_, ok := node.ObjectMeta.Labels[key]
if ok {
return nil
}
}
if n.nthConfig.DryRun {
log.Info().Msgf("Would have added label (%s=%s) to node %s, but dry-run flag was set", key, value, nodeName)
return nil
}
_, err = n.drainHelper.Client.CoreV1().Nodes().Patch(context.TODO(), node.Name, types.StrategicMergePatchType, payloadBytes, metav1.PatchOptions{})
if err != nil {
return fmt.Errorf("%v node Patch failed when adding a label to the node: %w", node.Name, err)
}
return nil
}