func createCacheVolume()

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
}