in pkg/csi/cache.go [54:91]
func createCacheVolume(ctx context.Context, client *kubernetes.Clientset, nodeName string, volumeTypeMapName types.NamespacedName) (localvolume.LocalVolume, error) {
var volumeTypeMap *corev1.ConfigMap
if err := wait.PollUntilContextTimeout(ctx, 500*time.Millisecond, 1*time.Minute, true, func(ctx context.Context) (bool, error) {
var err error
volumeTypeMap, err = client.CoreV1().ConfigMaps(volumeTypeMapName.Namespace).Get(ctx, volumeTypeMapName.Name, metav1.GetOptions{})
if err != nil {
klog.Errorf("Failed to get volume type map, retrying: %v", err)
return false, nil // retry
}
return true, nil
}); err != nil {
return nil, common.NewVolumePendingError(fmt.Errorf("no node cache volume type found: %w", err))
}
types, err := getVolumeTypeMapping(volumeTypeMap.Data)
if err != nil {
// An error means a badly formed configmap, which is terminal (not a NewVolumePendingError).
return nil, err
}
info, found := types[nodeName]
if !found {
// An unknown type is terminal.
return nil, common.NewVolumePendingError(fmt.Errorf("No volume type information for %s found in %s/%s", nodeName, volumeTypeMapName.Namespace, volumeTypeMapName.Name))
}
var vol localvolume.LocalVolume
switch info.VolumeType {
case "tmpfs":
vol, err = localvolume.NewTmpfsVolume(ctx, tmpfsPath, info.Size)
case "lssd":
vol, err = localvolume.NewLocalSSDVolume(lssdDevice, lssdPath)
case "pd":
vol, err = localvolume.NewPDVolume(info.Disk, pdPath)
default:
err = fmt.Errorf("Unknown volume type from type info %v", info)
}
return vol, err
}