{"record":{"id":"384a61af5daa3599","repo":"argoproj/argo-workflows","slug":"artifact-driver-connection-validation-failed-v","errorCode":null,"errorMessage":"Artifact driver connection validation failed: %v","messagePattern":"Artifact driver connection validation failed: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"server/apiserver/argoserver.go","lineNumber":551,"sourceCode":"\n\t\t\tlog.WithField(\"driver\", driver.Name).Info(ctx, \"Successfully validated connection to artifact driver\")\n\t\t})\n\t}\n\n\t// Wait for all validations to complete\n\twg.Wait()\n\tclose(errorChannel)\n\n\t// Collect any errors\n\tvar connectionErrors []string\n\tfor err := range errorChannel {\n\t\tconnectionErrors = append(connectionErrors, err.Error())\n\t}\n\n\tif len(connectionErrors) > 0 {\n\t\terrorMsg := fmt.Sprintf(\"Artifact driver connection validation failed: %v\", connectionErrors)\n\t\tlog.WithField(\"errors\", connectionErrors).Error(ctx, errorMsg)\n\t\treturn errors.New(errorMsg)\n\t}\n\n\tlog.WithField(\"driverCount\", len(cfg.ArtifactDrivers)).Info(ctx, \"Artifact driver connection validation passed: All configured artifact drivers are accessible\")\n\treturn nil\n}\n\n// validateArtifactDriverImages validates that the artifact driver images are present in the server pod\nfunc (as *argoServer) validateArtifactDriverImages(ctx context.Context, cfg *config.Config) error {\n\tlog := logging.RequireLoggerFromContext(ctx)\n\tif len(cfg.ArtifactDrivers) == 0 {\n\t\tlog.Info(ctx, \"No artifact drivers configured, skipping validation\")\n\t\treturn nil\n\t}\n\n\tlog.Info(ctx, \"Validating artifact driver images against server pod\")\n\n\t// Get the current pod name using the standard Argo pattern\n\tpodName, err := k8sutil.GetCurrentPodName(ctx, as.clients.Kubernetes, as.namespace, \"app=argo-server\")","sourceCodeStart":533,"sourceCodeEnd":569,"githubUrl":"https://github.com/argoproj/argo-workflows/blob/35bff19146f5a6ada77468c431f2624bd577e373/server/apiserver/argoserver.go#L533-L569","documentation":"During argo-server startup, Run calls validateArtifactDriverConnections which attempts a real connection for each configured artifact driver (S3, GCS, Azure, etc.). If any driver fails its connectivity check, the collected errors are joined into this message and server startup aborts.","triggerScenarios":"Starting `argo server` (or the argo-server pod starting) with artifact drivers configured whose backing storage is unreachable: wrong endpoint/bucket names, missing or expired credentials, network policy / egress blocks, or a local dev stack where MinIO isn't up.","commonSituations":"Misconfigured artifactRepository in workflow-controller-configmap for the server; S3 endpoint typos or wrong port (e.g. minio:9000 not exposed); IAM/secret keys absent in the server pod; firewalls blocking outbound storage traffic; driver enabled in config but its service not deployed.","solutions":["Read the embedded connectionErrors list in the message to see which driver(s) failed and their underlying cause.","Fix the artifact repository config (endpoint, bucket, region, keys) used by the argo-server pod.","Verify credentials/secret mounts exist in the argo-server deployment and are current.","Test connectivity from inside the server pod (e.g. `kubectl exec` + curl/nc to the storage endpoint).","If a driver is unused, remove it from config so it isn't validated."],"exampleFix":"# before (wrong endpoint in artifact config)\ns3:\n  endpoint: minio:9001\n# after\ns3:\n  endpoint: minio:9000\n  bucket: my-bucket\n  accessKeySecret: {name: minio, key: accesskey}\n  secretKeySecret: {name: minio, key: secretkey}","handlingStrategy":"try-catch","validationCode":"// before starting argo-server, verify storage endpoints\nconn, err := net.DialTimeout(\"tcp\", \"minio:9000\", 5*time.Second)\nif err != nil {\n    return fmt.Errorf(\"artifact storage unreachable: %w\", err)\n}\nconn.Close()","typeGuard":null,"tryCatchPattern":"if err := server.Run(ctx); err != nil {\n    if strings.Contains(err.Error(), \"Artifact driver connection validation failed\") {\n        log.Printf(\"check artifact repo config/credentials: %v\", err)\n        // fix config, then restart\n    }\n    return err\n}","preventionTips":["Validate artifact repository endpoint/bucket/credentials before deploy","Ensure egress from argo-server pods to storage backends is allowed","Keep storage secrets mounted and rotated in the server deployment","Test drivers with a small artifact upload/download after config changes"],"tags":["startup","artifacts","storage","connectivity"],"backgroundTag":"artifact-driver-connection-failed","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"}