package class import ( "fmt" "strings" corev1 "k8s.io/api/core/v1" ) const ( // DeviceClassPrefix is the label prefix for classed devices (grouped) DeviceClassPrefix = "device-system.class.edge.ncr.com" // deviceClassFmt is formatted string to device-system.class.edge.ncr.com/ deviceClassFmt = "%s/%s" ) // DefaultClass is default set of devices required by containers var DefaultClass = FmtClassLabel("default") // formats label for devices based on grouped classes func FmtClassLabel(name string) string { return fmt.Sprintf(deviceClassFmt, DeviceClassPrefix, name) } // IsDeviceClass returns true if the request name is // of a Edge managed device func IsDeviceClass(className string) bool { return strings.Contains(className, DeviceClassPrefix) } // BaseName returns the class name without the device class prefix func BaseName(className string) (string, error) { if !IsDeviceClass(className) { return "", fmt.Errorf("%s is not a device class with prefix %s", className, DeviceClassPrefix) } classSplit := strings.Split(className, "/") if len(classSplit) != 2 { return "", fmt.Errorf("%s is an invalid class name", className) } return classSplit[1], nil } // FetchPodDeviceRequests returns a list of device classes // that a pod requests within its list of containers func FetchPodDeviceRequests(ctrs []corev1.Container) []string { requests := []string{} for _, ctr := range ctrs { for reqName := range ctr.Resources.Requests { if IsDeviceClass(reqName.String()) { requests = append(requests, reqName.String()) } } } return requests }