in pkg/nfs/controllerserver.go [279:307]
func (cs *ControllerServer) ControllerPublishVolume(ctx context.Context, req *csi.ControllerPublishVolumeRequest) (*csi.ControllerPublishVolumeResponse, error) {
volumeID := req.GetVolumeId()
nodeID := req.GetNodeId()
volumeCapability := req.GetVolumeCapability()
if len(volumeID) == 0 {
return nil, status.Error(codes.InvalidArgument, "ControllerPublishVolume Volume ID must be provided")
}
if len(nodeID) == 0 {
return nil, status.Error(codes.InvalidArgument, "ControllerPublishVolume Node ID must be provided")
}
if volumeCapability == nil {
return nil, status.Error(codes.InvalidArgument, "ControllerPublishVolume Volume capability must be provided")
}
lockingVolumeID := fmt.Sprintf("%s/%s", nodeID, volumeID)
if acquired := cs.Driver.volumeLocks.TryAcquire(lockingVolumeID); !acquired {
return nil, status.Errorf(codes.Aborted, volumeOperationAlreadyExistsFmt, lockingVolumeID)
}
defer cs.Driver.volumeLocks.Release(lockingVolumeID)
ip, err := cs.LBController.AssignIPToNode(ctx, nodeID, volumeID)
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to assign a NFS server IP to node %s: %v", nodeID, err)
}
return &csi.ControllerPublishVolumeResponse{
PublishContext: map[string]string{lbcontroller.NodeAnnotation: ip},
}, nil
}