| 5160 | } |
| 5161 | |
| 5162 | func 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 |