code: func updateNodeIDInNode(
  	csiDriverName string,
  	csiDriverNodeID string) nodeUpdateFunc {
  	return func(node *v1.Node) (*v1.Node, bool, error) {
  		existingDriverMap, err := buildNodeIDMapFromAnnotation(node)
  		if err != nil {
  			return nil, false, err
  		}
  
  		if val, ok := existingDriverMap[csiDriverName]; ok {
  			if val == csiDriverNodeID {
  				// Value already exists in node annotation, nothing more to do
  				return node, false, nil
  			}
  		}
  
  		// Add/update annotation value
  		existingDriverMap[csiDriverName] = csiDriverNodeID
  		jsonObj, err := json.Marshal(existingDriverMap)
  		if err != nil {
  			return nil, false, fmt.Errorf(
  				"error while marshalling node ID map updated with driverName=%q, nodeID=%q: %v",
  				csiDriverName,
  				csiDriverNodeID,
  				err)
  		}
  
  		if node.ObjectMeta.Annotations == nil {
  			node.ObjectMeta.Annotations = make(map[string]string)
  		}
  		node.ObjectMeta.Annotations[annotationKeyNodeID] = string(jsonObj)
  
  		return node, true, nil
  	}
  }
docs: // updateNodeIDInNode returns a function that updates a Node object with the given
  // Node ID information.