func UpdateNodeLabel(clusterID, nodeName, labelKey, labelVal string) error {
ctx := context.TODO()
clientSet, err := GetClientSet(clusterID)
if err != nil {
log.Errorf("[UpdateNodeLabel] get clientSet failed, %s", err)
return err
}
node, err := clientSet.CoreV1().Nodes().Get(ctx, nodeName, metav1.GetOptions{})
if err != nil {
log.Errorf("[UpdateNodeLabel] get node info failed %s", err)
return err
}
labels := node.Labels
labels[labelKey] = labelVal
patchData := map[string]interface{}{
"metadata": map[string]map[string]string{
"labels": labels,
},
}
playLoadBytes, err := json.Marshal(patchData)
if err != nil {
log.Errorf("[UpdateNodeLabel] json marshal to bytes failed %s", err)
return err
}
if _, err := clientSet.CoreV1().Nodes().Patch(ctx, nodeName, types.StrategicMergePatchType, playLoadBytes, metav1.PatchOptions{}); err != nil {
log.Errorf("[UpdateNodeLabel] update node label failed %s", err)
return err
}
log.Infof("[UpdateNodeLabel] update node %s label %s to %s success!", nodeName, labelKey, labelVal)
return nil
}