...

Source file src/edge-infra.dev/pkg/sds/devices/class/class.go

Documentation: edge-infra.dev/pkg/sds/devices/class

     1  package class
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  
     7  	corev1 "k8s.io/api/core/v1"
     8  )
     9  
    10  const (
    11  	// DeviceClassPrefix is the label prefix for classed devices (grouped)
    12  	DeviceClassPrefix = "device-system.class.edge.ncr.com"
    13  	// deviceClassFmt is formatted string to device-system.class.edge.ncr.com/<class-name>
    14  	deviceClassFmt = "%s/%s"
    15  )
    16  
    17  // DefaultClass is default set of devices required by containers
    18  var DefaultClass = FmtClassLabel("default")
    19  
    20  // formats label for devices based on grouped classes
    21  func FmtClassLabel(name string) string {
    22  	return fmt.Sprintf(deviceClassFmt, DeviceClassPrefix, name)
    23  }
    24  
    25  // IsDeviceClass returns true if the request name is
    26  // of a Edge managed device
    27  func IsDeviceClass(className string) bool {
    28  	return strings.Contains(className, DeviceClassPrefix)
    29  }
    30  
    31  // BaseName returns the class name without the device class prefix
    32  func BaseName(className string) (string, error) {
    33  	if !IsDeviceClass(className) {
    34  		return "", fmt.Errorf("%s is not a device class with prefix %s", className, DeviceClassPrefix)
    35  	}
    36  	classSplit := strings.Split(className, "/")
    37  	if len(classSplit) != 2 {
    38  		return "", fmt.Errorf("%s is an invalid class name", className)
    39  	}
    40  	return classSplit[1], nil
    41  }
    42  
    43  // FetchPodDeviceRequests returns a list of device classes
    44  // that a pod requests within its list of containers
    45  func FetchPodDeviceRequests(ctrs []corev1.Container) []string {
    46  	requests := []string{}
    47  	for _, ctr := range ctrs {
    48  		for reqName := range ctr.Resources.Requests {
    49  			if IsDeviceClass(reqName.String()) {
    50  				requests = append(requests, reqName.String())
    51  			}
    52  		}
    53  	}
    54  	return requests
    55  }
    56  

View as plain text