{"record":{"id":"083360cefe39c313","repo":"argoproj/argo-workflows","slug":"artifact-driver-validation-failed-the-following-a","errorCode":null,"errorMessage":"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.","messagePattern":"Artifact driver validation failed: The following artifact driver images are not present in the server pod: (.+?)\\. Please ensure all artifact driver images are included in the argo-server pod\\.","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"server/apiserver/argoserver.go","lineNumber":599,"sourceCode":"\t\treturn nil\n\t}\n\n\t// Get missing images\n\timages := make([]string, 0, len(cfg.ArtifactDrivers))\n\tfor _, driver := range cfg.ArtifactDrivers {\n\t\timages = append(images, driver.Image)\n\t}\n\n\tfor _, container := range pod.Spec.Containers {\n\t\timages = slices.DeleteFunc(images, func(image string) bool {\n\t\t\treturn image == container.Image\n\t\t})\n\t}\n\n\tif len(images) > 0 {\n\t\terrorMsg := 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)\n\t\tlog.Error(ctx, errorMsg)\n\t\treturn errors.New(errorMsg)\n\t}\n\n\tlog.WithField(\"driverCount\", len(cfg.ArtifactDrivers)).Info(ctx, \"Artifact driver validation passed: All configured artifact driver images are present in the server pod\")\n\treturn nil\n}\n\ntype registerFunc func(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) error\n\n// mustRegisterGWHandler is a convenience function to register a gateway handler\nfunc mustRegisterGWHandler(ctx context.Context, register registerFunc, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) {\n\terr := register(ctx, mux, endpoint, opts)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n}\n\n// checkServeErr checks the error from a .Serve() call to decide if it was a graceful shutdown\nfunc (as *argoServer) checkServeErr(ctx context.Context, name string, err error) {","sourceCodeStart":581,"sourceCodeEnd":617,"githubUrl":"https://github.com/argoproj/argo-workflows/blob/35bff19146f5a6ada77468c431f2624bd577e373/server/apiserver/argoserver.go#L581-L617","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Inspect the image list in the error and add the missing image(s) to the argo-server pod spec (Helm values / kustomize patch).","Use the official argo-server image for the release, which includes all expected driver images.","Disable/remove drivers from config that you don't use so their images aren't required.","If using a custom image, rebuild it including all driver images required by your configuration."],"exampleFix":"// before: custom server pod spec without driver images\ncontainers:\n  - name: argo-server\n    image: my-registry/argo-server-slim:v4\n// after: include the required driver images\ninitContainers/containers += images reported missing, e.g.\n  - name: argo-server\n    image: quay.io/argoproj/argocli:v4.0.0","handlingStrategy":"validation","validationCode":"// verify the argo-server image includes required driver images before rollout\nimgs, _ := clientset.CoreV1().Pods(ns).Get(ctx, \"argo-server\", metav1.GetOptions{})\n_ = imgs // compare pod spec images against the driver list in the error before upgrading","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use official argocli images which bundle all driver images","After enabling a driver in config, confirm its image exists in the pod spec","Pin Helm/Kustomize values that keep driver images during upgrades","Test server startup on a staging cluster after image changes"],"tags":["startup","artifacts","images","kubernetes"],"backgroundTag":"missing-artifact-driver-image","analyzedSha":"35bff19146f5a6ada77468c431f2624bd577e373","analyzedAt":"2026-09-03T19:34:35.908Z","contentChangedAt":"2026-09-03T19:34:35.908Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}