argoproj/argo-workflows · critical

Artifact driver validation failed: The following artifact dr

Error message

Artifact driver validation failed: The following artifact driver images are not present in the server pod: %v. Please ensure all artifact driver images are included in the argo-server pod.

What it means

At startup the argo-server validates that the container images required by each configured artifact driver are actually present in the server pod (via the pod spec/status). If one or more driver images are missing, it returns this error and refuses to start, since artifact operations would fail at runtime.

Source

Thrown at server/apiserver/argoserver.go:599

		return nil
	}

	// Get missing images
	images := make([]string, 0, len(cfg.ArtifactDrivers))
	for _, driver := range cfg.ArtifactDrivers {
		images = append(images, driver.Image)
	}

	for _, container := range pod.Spec.Containers {
		images = slices.DeleteFunc(images, func(image string) bool {
			return image == container.Image
		})
	}

	if len(images) > 0 {
		errorMsg := fmt.Sprintf("Artifact driver validation failed: The following artifact driver images are not present in the server pod: %v. Please ensure all artifact driver images are included in the argo-server pod.", images)
		log.Error(ctx, errorMsg)
		return errors.New(errorMsg)
	}

	log.WithField("driverCount", len(cfg.ArtifactDrivers)).Info(ctx, "Artifact driver validation passed: All configured artifact driver images are present in the server pod")
	return nil
}

type registerFunc func(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) error

// mustRegisterGWHandler is a convenience function to register a gateway handler
func mustRegisterGWHandler(ctx context.Context, register registerFunc, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) {
	err := register(ctx, mux, endpoint, opts)
	if err != nil {
		panic(err)
	}
}

// checkServeErr checks the error from a .Serve() call to decide if it was a graceful shutdown
func (as *argoServer) checkServeErr(ctx context.Context, name string, err error) {

View on GitHub (pinned to 35bff19146)

Solutions

  1. Inspect the image list in the error and add the missing image(s) to the argo-server pod spec (Helm values / kustomize patch).
  2. Use the official argo-server image for the release, which includes all expected driver images.
  3. Disable/remove drivers from config that you don't use so their images aren't required.
  4. If using a custom image, rebuild it including all driver images required by your configuration.

Example fix

// before: custom server pod spec without driver images
containers:
  - name: argo-server
    image: my-registry/argo-server-slim:v4
// after: include the required driver images
initContainers/containers += images reported missing, e.g.
  - name: argo-server
    image: quay.io/argoproj/argocli:v4.0.0
Defensive patterns

Strategy: validation

Validate before calling

// verify the argo-server image includes required driver images before rollout
imgs, _ := clientset.CoreV1().Pods(ns).Get(ctx, "argo-server", metav1.GetOptions{})
_ = imgs // compare pod spec images against the driver list in the error before upgrading

Prevention

When it happens

Trigger: Starting argo-server where cfg.ArtifactDrivers lists drivers whose expected sidecar/init images are not among the pod's images — e.g. custom argo-server images that dropped driver images, trimmed distributions, or config enabling a driver whose image was never added to the pod template.

Common situations: Building a slim/custom argo-server image without all driver images baked in; upgrading Argo and the new driver images weren't added to the Helm/Kustomize pod spec; enabling an experimental driver in config on a stock deployment that doesn't ship it.

Related errors


AI-assisted analysis of argoproj/argo-workflows@35bff19146 (2026-09-03). Data as JSON: /api/errors/083360cefe39c313. Report an issue: GitHub.