func getVolumeTypeMapping()

in pkg/csi/cache.go [93:135]


func getVolumeTypeMapping(configMapData map[string]string) (map[string]volumeTypeInfo, error) {
	nodes, found := configMapData[volumeTypeInfoKey]
	if !found {
		return nil, fmt.Errorf("%s not found in volume type config map", volumeTypeInfoKey)
	}
	typeMap := map[string]volumeTypeInfo{}
	for _, line := range strings.Split(nodes, "\n") {
		line = strings.TrimSpace(line)
		if line == "" {
			continue
		}
		items := strings.Split(line, ",")
		if len(items) < 2 {
			return nil, fmt.Errorf("Bad line in volume type config map: %s", line)
		}
		node := strings.TrimSpace(items[0])
		if _, found := typeMap[node]; found {
			return nil, fmt.Errorf("node %s duplicated in volume type config map: %s", node, line)
		}
		var info volumeTypeInfo
		for _, item := range items[1:] {
			parts := strings.SplitN(item, "=", 2)
			trimmed := strings.TrimSpace(parts[0])
			switch trimmed {
			case "type":
				info.VolumeType = strings.TrimSpace(parts[1])
			case "size":
				szStr := strings.TrimSpace(parts[1])
				q, err := resource.ParseQuantity(szStr)
				if err != nil {
					return nil, fmt.Errorf("bad size in volume type config map: %s", line)
				}
				info.Size = q
			case "disk":
				info.Disk = strings.TrimSpace(parts[1])
			default:
				return nil, fmt.Errorf("bad key %s in volume type config map: %s", trimmed, line)
			}
		}
		typeMap[node] = info
	}
	return typeMap, nil
}