MCPcopy Create free account
hub / github.com/NVIDIA/gpu-operator / transformKataRuntimeClasses

Function transformKataRuntimeClasses

controllers/object_controls.go:5162–5263  ·  view source on GitHub ↗
(n ClusterPolicyController)

Source from the content-addressed store, hash-verified

5160}
5161
5162func transformKataRuntimeClasses(n ClusterPolicyController) (gpuv1.State, error) {
5163 ctx := n.ctx
5164 state := n.idx
5165 config := n.singleton.Spec
5166
5167 // Get all existing Kata RuntimeClasses
5168 opts := []client.ListOption{&client.MatchingLabels{"nvidia.com/kata-runtime-class": "true"}}
5169 list := &nodev1.RuntimeClassList{}
5170 err := n.client.List(ctx, list, opts...)
5171 if err != nil {
5172 n.logger.Info("Could not get Kata RuntimeClassList", err)
5173 return gpuv1.NotReady, fmt.Errorf("error getting kata RuntimeClassList: %v", err)
5174 }
5175 n.logger.V(1).Info("Kata RuntimeClasses", "Number", len(list.Items))
5176
5177 if !config.KataManager.IsEnabled() {
5178 // Delete all Kata RuntimeClasses
5179 n.logger.Info("Kata Manager disabled, deleting all Kata RuntimeClasses")
5180 for _, rc := range list.Items {
5181 rc := rc
5182 n.logger.V(1).Info("Deleting Kata RuntimeClass", "Name", rc.Name)
5183 err := n.client.Delete(ctx, &rc)
5184 if err != nil {
5185 return gpuv1.NotReady, fmt.Errorf("error deleting kata RuntimeClass '%s': %v", rc.Name, err)
5186 }
5187 }
5188 return gpuv1.Ready, nil
5189 }
5190
5191 // Get names of desired kata RuntimeClasses
5192 rcNames := make(map[string]struct{})
5193 for _, rc := range config.KataManager.Config.RuntimeClasses {
5194 rcNames[rc.Name] = struct{}{}
5195 }
5196
5197 // Delete any existing Kata RuntimeClasses that are no longer specified in KataManager configuration
5198 for _, rc := range list.Items {
5199 if _, ok := rcNames[rc.Name]; !ok {
5200 rc := rc
5201 n.logger.Info("Deleting Kata RuntimeClass", "Name", rc.Name)
5202 err := n.client.Delete(ctx, &rc)
5203 if err != nil {
5204 return gpuv1.NotReady, fmt.Errorf("error deleting kata RuntimeClass '%s': %v", rc.Name, err)
5205 }
5206 }
5207 }
5208
5209 // Using kata RuntimClass template, create / update RuntimeClass objects specified in KataManager configuration
5210 template := n.resources[state].RuntimeClasses[0]
5211 for _, rc := range config.KataManager.Config.RuntimeClasses {
5212 logger := n.logger.WithValues("RuntimeClass", rc.Name)
5213
5214 if rc.Name == config.Operator.RuntimeClass {
5215 return gpuv1.NotReady, fmt.Errorf("error creating kata runtimeclass '%s' as it conflicts with the runtimeclass used for the gpu-operator operand pods itself", rc.Name)
5216 }
5217
5218 obj := nodev1.RuntimeClass{}
5219 obj.Name = rc.Name

Callers 1

RuntimeClassesFunction · 0.85

Calls 6

ListMethod · 0.65
DeleteMethod · 0.65
GetMethod · 0.65
CreateMethod · 0.65
UpdateMethod · 0.65
IsEnabledMethod · 0.45

Tested by

no test coverage detected