func NewLustreDriver()

in pkg/csi_driver/lustre_driver.go [58:106]


func NewLustreDriver(config *LustreDriverConfig) (*LustreDriver, error) {
	if config.Name == "" {
		return nil, errors.New("driver name missing")
	}
	if config.Version == "" {
		return nil, errors.New("driver version missing")
	}
	if !config.RunController && !config.RunNode {
		return nil, errors.New("must run at least one controller or node service")
	}

	driver := &LustreDriver{
		config: config,
		vcap:   map[csi.VolumeCapability_AccessMode_Mode]*csi.VolumeCapability_AccessMode{},
	}

	vcam := []csi.VolumeCapability_AccessMode_Mode{
		csi.VolumeCapability_AccessMode_SINGLE_NODE_WRITER,
		csi.VolumeCapability_AccessMode_SINGLE_NODE_READER_ONLY,
		csi.VolumeCapability_AccessMode_MULTI_NODE_READER_ONLY,
		csi.VolumeCapability_AccessMode_MULTI_NODE_SINGLE_WRITER,
		csi.VolumeCapability_AccessMode_MULTI_NODE_MULTI_WRITER,
	}
	driver.addVolumeCapabilityAccessModes(vcam)

	// Setup RPC servers
	driver.ids = newIdentityServer(driver)
	if config.RunNode {
		nscap := []csi.NodeServiceCapability_RPC_Type{
			csi.NodeServiceCapability_RPC_STAGE_UNSTAGE_VOLUME,
			csi.NodeServiceCapability_RPC_VOLUME_MOUNT_GROUP,
			csi.NodeServiceCapability_RPC_GET_VOLUME_STATS,
		}
		driver.ns = newNodeServer(driver, config.Mounter)
		driver.addNodeServiceCapabilities(nscap)
	}

	if config.RunController {
		csc := []csi.ControllerServiceCapability_RPC_Type{
			csi.ControllerServiceCapability_RPC_CREATE_DELETE_VOLUME,
		}
		driver.addControllerServiceCapabilities(csc)

		// Configure controller server
		driver.cs = newControllerServer(driver, config.Cloud)
	}

	return driver, nil
}