| 5263 | } |
| 5264 | |
| 5265 | func RuntimeClasses(n ClusterPolicyController) (gpuv1.State, error) { |
| 5266 | status := gpuv1.Ready |
| 5267 | state := n.idx |
| 5268 | |
| 5269 | if n.stateNames[state] == "state-kata-manager" { |
| 5270 | return transformKataRuntimeClasses(n) |
| 5271 | } |
| 5272 | |
| 5273 | nvidiaRuntimeClasses := n.resources[state].RuntimeClasses |
| 5274 | if n.stateNames[state] == "pre-requisites" && !n.isStateEnabled(n.stateNames[state]) { |
| 5275 | err := clearRuntimeClasses(n, nvidiaRuntimeClasses) |
| 5276 | if err != nil { |
| 5277 | return gpuv1.NotReady, fmt.Errorf("error clearing nvidia runtime classes: %w", err) |
| 5278 | } |
| 5279 | return gpuv1.Ready, nil |
| 5280 | } |
| 5281 | |
| 5282 | createRuntimeClassFunc := transformRuntimeClass |
| 5283 | if semver.Compare(n.k8sVersion, nodev1MinimumAPIVersion) <= 0 { |
| 5284 | createRuntimeClassFunc = transformRuntimeClassLegacy |
| 5285 | } |
| 5286 | |
| 5287 | for _, obj := range nvidiaRuntimeClasses { |
| 5288 | obj := obj |
| 5289 | // When CDI is disabled, do not create the additional 'nvidia-cdi' and |
| 5290 | // 'nvidia-legacy' runtime classes. Delete these objects if they were |
| 5291 | // previously created. |
| 5292 | if !n.singleton.Spec.CDI.IsEnabled() && (obj.Name == "nvidia-cdi" || obj.Name == "nvidia-legacy") { |
| 5293 | err := n.client.Delete(n.ctx, &obj) |
| 5294 | if err != nil && !apierrors.IsNotFound(err) { |
| 5295 | n.logger.Info("Couldn't delete", "RuntimeClass", obj.Name, "Error", err) |
| 5296 | return gpuv1.NotReady, err |
| 5297 | } |
| 5298 | continue |
| 5299 | } |
| 5300 | stat, err := createRuntimeClassFunc(n, obj) |
| 5301 | if err != nil { |
| 5302 | return stat, err |
| 5303 | } |
| 5304 | if stat != gpuv1.Ready { |
| 5305 | status = gpuv1.NotReady |
| 5306 | } |
| 5307 | } |
| 5308 | return status, nil |
| 5309 | } |
| 5310 | |
| 5311 | // PrometheusRule creates PrometheusRule object |
| 5312 | func PrometheusRule(n ClusterPolicyController) (gpuv1.State, error) { |