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

Method handleDefaultImagesInObjects

internal/state/driver.go:371–451  ·  view source on GitHub ↗
(
	ctx context.Context,
	desiredObjs []*unstructured.Unstructured,
	cr *nvidiav1alpha1.NVIDIADriver,
	renderData driverRenderData)

Source from the content-addressed store, hash-verified

369}
370
371func (s *stateDriver) handleDefaultImagesInObjects(
372 ctx context.Context,
373 desiredObjs []*unstructured.Unstructured,
374 cr *nvidiav1alpha1.NVIDIADriver,
375 renderData driverRenderData) ([]*unstructured.Unstructured, error) {
376 logger := log.FromContext(ctx)
377
378 // If 'image' field is not set in spec, then the driver image path
379 // was determined via the DRIVER_MANAGER_IMAGE env var
380 managerImageEnvVarUsed := (cr.Spec.Manager.Image == "")
381 if !managerImageEnvVarUsed {
382 return desiredObjs, nil
383 }
384
385 // If the default image is used for driver-manager, make sure this image
386 // is only upgraded iff the driver spec has been updated. This avoids
387 // triggering undesired driver upgrades when the operator itself is upgraded
388 // but the NVIDIADriver spec is unmodified.
389 logger.V(consts.LogLevelDebug).Info("Default env var is being used for k8s-driver-manager image, checking for an updated default image")
390
391 desiredDs, err := getDaemonsetFromObjects(desiredObjs)
392 if err != nil {
393 return nil, fmt.Errorf("error getting DaemonSet from unstructured objects: %w", err)
394 }
395
396 currentDs := &appsv1.DaemonSet{}
397 err = s.client.Get(ctx, types.NamespacedName{Namespace: desiredDs.Namespace, Name: desiredDs.Name}, currentDs)
398 if err != nil {
399 if apierrors.IsNotFound(err) {
400 return desiredObjs, nil
401 }
402 return nil, fmt.Errorf("failed to get current driver DaemonSet object: %w", err)
403 }
404
405 currentManagerImage := ""
406 for _, container := range currentDs.Spec.Template.Spec.InitContainers {
407 if container.Name == "k8s-driver-manager" {
408 currentManagerImage = container.Image
409 break
410 }
411 }
412
413 logger.V(consts.LogLevelDebug).Info("Current k8s-driver-manager image", "image", currentManagerImage)
414 if currentManagerImage == renderData.Driver.ManagerImagePath {
415 logger.V(consts.LogLevelDebug).Info("Default k8s-driver-manager image has not been updated")
416 return desiredObjs, nil
417 }
418
419 // Render manifests again but with the current k8s-driver-manager being used
420 renderData.Driver.ManagerImagePath = currentManagerImage
421 desiredObjsWithCurrentImages, err := s.renderManifestObjects(ctx, &renderData)
422 if err != nil {
423 return nil, fmt.Errorf("failed to render kubernetes manifests: %w", err)
424 }
425
426 obj, err := getObjectOfKind(desiredObjsWithCurrentImages, "DaemonSet")
427 if err != nil {
428 return nil, fmt.Errorf("failed to get DaemonSet object: %w", err)

Callers 1

getManifestObjectsMethod · 0.95

Calls 6

renderManifestObjectsMethod · 0.95
GetObjectHashFunction · 0.92
getDaemonsetFromObjectsFunction · 0.85
getObjectOfKindFunction · 0.85
GetMethod · 0.65

Tested by

no test coverage detected