ChangeNodeLabelWithUpdateMode updates the input labels in UPDATE mode.
(client client.Client, node *v1.Node, labelsToModify common.LabelsToModify)
| 31 | |
| 32 | // ChangeNodeLabelWithUpdateMode updates the input labels in UPDATE mode. |
| 33 | func ChangeNodeLabelWithUpdateMode(client client.Client, node *v1.Node, labelsToModify common.LabelsToModify) (modifiedLabels []string, err error) { |
| 34 | labels := labelsToModify.GetLabels() |
| 35 | |
| 36 | for _, labelToModify := range labels { |
| 37 | oldLabels := node.Labels |
| 38 | operationType := labelToModify.GetOperationType() |
| 39 | labelToModifyKey := labelToModify.GetLabelKey() |
| 40 | labelToModifyValue := labelToModify.GetLabelValue() |
| 41 | |
| 42 | switch operationType { |
| 43 | case common.AddLabel: |
| 44 | if _, exists := oldLabels[labelToModifyKey]; exists { |
| 45 | err = fmt.Errorf("fail to add the label due to the label %s already exist", labelToModifyKey) |
| 46 | return nil, err |
| 47 | } |
| 48 | node.Labels[labelToModifyKey] = labelToModifyValue |
| 49 | case common.UpdateLabel: |
| 50 | if _, exists := oldLabels[labelToModifyKey]; !exists { |
| 51 | err = fmt.Errorf("fail to update the label due to the label %s does not exist", labelToModifyKey) |
| 52 | return nil, err |
| 53 | } |
| 54 | node.Labels[labelToModifyKey] = labelToModifyValue |
| 55 | case common.DeleteLabel: |
| 56 | if _, exists := oldLabels[labelToModifyKey]; !exists { |
| 57 | err = fmt.Errorf("fail to delete the label due to the label %s does not exist", labelToModifyKey) |
| 58 | return nil, err |
| 59 | } |
| 60 | delete(node.Labels, labelToModifyKey) |
| 61 | default: |
| 62 | err = fmt.Errorf("fail to update the label due to the wrong operation: %s", operationType) |
| 63 | return nil, err |
| 64 | } |
| 65 | modifiedLabels = append(modifiedLabels, labelToModifyKey) |
| 66 | } |
| 67 | err = client.Update(context.TODO(), node) |
| 68 | if err != nil { |
| 69 | return nil, errors.Wrapf(err, "update node labels failed, node name: %s, labels: %v", node.Name, node.Labels) |
| 70 | } |
| 71 | return modifiedLabels, nil |
| 72 | } |
| 73 | |
| 74 | func PatchLabels(cli client.Client, obj client.Object, labelsToModify common.LabelsToModify) (modifiedLabels []string, err error) { |
| 75 | labels := labelsToModify.GetLabels() |