func NewGCSDriver()

in pkg/csi_driver/gcs_fuse_driver.go [64:109]


func NewGCSDriver(config *GCSDriverConfig) (*GCSDriver, 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 := &GCSDriver{
		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_VOLUME_MOUNT_GROUP,
		}
		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.StorageServiceManager)
	}

	return driver, nil
}