DaemonSet creates Daemonset resource
(n ClusterPolicyController)
| 4619 | |
| 4620 | // DaemonSet creates Daemonset resource |
| 4621 | func DaemonSet(n ClusterPolicyController) (gpuv1.State, error) { |
| 4622 | ctx := n.ctx |
| 4623 | state := n.idx |
| 4624 | obj := n.resources[state].DaemonSet.DeepCopy() |
| 4625 | obj.Namespace = n.operatorNamespace |
| 4626 | |
| 4627 | logger := n.logger.WithValues("DaemonSet", obj.Name, "Namespace", obj.Namespace) |
| 4628 | |
| 4629 | // Check if state is disabled and cleanup resource if exists |
| 4630 | if !n.isStateEnabled(n.stateNames[n.idx]) { |
| 4631 | err := n.client.Delete(ctx, obj) |
| 4632 | if err != nil && !apierrors.IsNotFound(err) { |
| 4633 | logger.Info("Couldn't delete", "Error", err) |
| 4634 | return gpuv1.NotReady, err |
| 4635 | } |
| 4636 | return gpuv1.Disabled, nil |
| 4637 | } |
| 4638 | |
| 4639 | if !n.hasGPUNodes { |
| 4640 | // multiple DaemonSets (eg, driver, dgcm-exporter) cannot be |
| 4641 | // deployed without knowing the OS name, so skip their |
| 4642 | // deployment for now. The operator will be notified |
| 4643 | // (addWatchNewGPUNode) when new nodes will join the cluster. |
| 4644 | logger.Info("No GPU node in the cluster, do not create DaemonSets") |
| 4645 | return gpuv1.Ready, nil |
| 4646 | } |
| 4647 | |
| 4648 | if n.resources[state].DaemonSet.GetName() == commonDriverDaemonsetName { |
| 4649 | podCount, err := n.cleanupUnusedDriverDaemonSets(n.ctx) |
| 4650 | if err != nil { |
| 4651 | return gpuv1.NotReady, err |
| 4652 | } |
| 4653 | if podCount != 0 { |
| 4654 | logger.Info("Driver DaemonSet cleanup in progress", "podCount", podCount) |
| 4655 | return gpuv1.NotReady, nil |
| 4656 | } |
| 4657 | |
| 4658 | // Daemonsets using pre-compiled packages or using driver-toolkit (openshift) require creation of |
| 4659 | // one daemonset per kernel version (or rhcos version). |
| 4660 | // If currentKernelVersion or currentRhcosVersion (ocp) are not set, we intercept here |
| 4661 | // and call Daemonset() per specific version |
| 4662 | if n.singleton.Spec.Driver.UsePrecompiledDrivers() { |
| 4663 | if n.currentKernelVersion == "" { |
| 4664 | overallState, errs := precompiledDriverDaemonsets(ctx, n) |
| 4665 | if len(errs) != 0 { |
| 4666 | // log errors |
| 4667 | return overallState, fmt.Errorf("unable to deploy precompiled driver daemonsets %v", errs) |
| 4668 | } |
| 4669 | return overallState, nil |
| 4670 | } |
| 4671 | } else if n.openshift != "" && n.ocpDriverToolkit.enabled && |
| 4672 | n.ocpDriverToolkit.currentRhcosVersion == "" { |
| 4673 | return n.ocpDriverToolkitDaemonSets(ctx) |
| 4674 | } |
| 4675 | } else if n.resources[state].DaemonSet.Name == commonVGPUManagerDaemonsetName { |
| 4676 | podCount, err := n.cleanupUnusedVGPUManagerDaemonsets(ctx) |
| 4677 | if err != nil { |
| 4678 | return gpuv1.NotReady, err |
no test coverage detected