func()

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
}