// reconcileCMADAnnotationWithExistingNode reconciles the controller-managed // attach-detach annotation on a new node and the existing node, returning // whether the existing node must be updated. func (kl *Kubelet) reconcileCMADAnnotationWithExistingNode(node, existingNode *v1.Node) bool { var ( existingCMAAnnotation = existingNode.Annotations[volumehelper.ControllerManagedAttachAnnotation] newCMAAnnotation, newSet = node.Annotations[volumehelper.ControllerManagedAttachAnnotation] ) if newCMAAnnotation == existingCMAAnnotation { return false } // If the just-constructed node and the existing node do // not have the same value, update the existing node with // the correct value of the annotation. if !newSet { glog.Info("Controller attach-detach setting changed to false; updating existing Node") delete(existingNode.Annotations, volumehelper.ControllerManagedAttachAnnotation) } else { glog.Info("Controller attach-detach setting changed to true; updating existing Node") if existingNode.Annotations == nil { existingNode.Annotations = make(map[string]string) } existingNode.Annotations[volumehelper.ControllerManagedAttachAnnotation] = newCMAAnnotation } return true }
func addToBeDeletedTaint(node *apiv1.Node) (bool, error) { taints, err := apiv1.GetTaintsFromNodeAnnotations(node.Annotations) if err != nil { glog.Warningf("Error while getting Taints for node %v: %v", node.Name, err) return false, err } for _, taint := range taints { if taint.Key == ToBeDeletedTaint { glog.Infof("ToBeDeletedTaint already present on on node %v", taint, node.Name) return false, nil } } taints = append(taints, apiv1.Taint{ Key: ToBeDeletedTaint, Value: time.Now().String(), Effect: apiv1.TaintEffectNoSchedule, }) taintsJson, err := json.Marshal(taints) if err != nil { glog.Warningf("Error while adding taints on node %v: %v", node.Name, err) return false, err } if node.Annotations == nil { node.Annotations = make(map[string]string) } node.Annotations[apiv1.TaintsAnnotationKey] = string(taintsJson) return true, nil }