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
}