{"record":{"id":"63962a67e2d57379","repo":"argoproj/argo-workflows","slug":"artifact-driver-s-not-found","errorCode":null,"errorMessage":"artifact driver %s not found","messagePattern":"artifact driver (.+?) not found","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"config/config.go","lineNumber":214,"sourceCode":"\tConnectionTimeoutSeconds int32 `json:\"connectionTimeoutSeconds,omitempty\" protobuf:\"varint,3,opt,name=connectionTimeoutSeconds\"`\n}\n\nconst defaultArtifactConnectionTimeout = time.Duration(5) * time.Second\n\nfunc (a ArtifactDriver) ConnectionTimeout() time.Duration {\n\tif a.ConnectionTimeoutSeconds != 0 {\n\t\treturn time.Duration(a.ConnectionTimeoutSeconds) * time.Second\n\t}\n\treturn defaultArtifactConnectionTimeout\n}\n\nfunc (c Config) GetArtifactDriver(name wfv1.ArtifactPluginName) (ArtifactDriver, error) {\n\tfor _, driver := range c.ArtifactDrivers {\n\t\tif driver.Name == name {\n\t\t\treturn driver, nil\n\t\t}\n\t}\n\treturn ArtifactDriver{}, fmt.Errorf(\"artifact driver %s not found\", name)\n}\n\nfunc (c Config) GetArtifactDrivers(plugins []wfv1.ArtifactPluginName) ([]ArtifactDriver, error) {\n\tdrivers := []ArtifactDriver{}\n\tfor _, plugin := range plugins {\n\t\tdriver, err := c.GetArtifactDriver(plugin)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tdrivers = append(drivers, driver)\n\t}\n\treturn drivers, nil\n}\n\nfunc (c Config) GetExecutor() *apiv1.Container {\n\tif c.Executor != nil {\n\t\treturn c.Executor\n\t}","sourceCodeStart":196,"sourceCodeEnd":232,"githubUrl":"https://github.com/argoproj/argo-workflows/blob/35bff19146f5a6ada77468c431f2624bd577e373/config/config.go#L196-L232","documentation":"GetArtifactDriver looks up an artifact driver by plugin name in the controller's Config (workflow-controller-configmap artifactDrivers list). If no configured driver matches the requested wfv1.ArtifactPluginName, it returns this error. It is called from GetArtifactDrivers, which resolves the plugin list referenced by an artifact plugin.","triggerScenarios":"An artifact references an artifact plugin whose name is absent from `artifactDrivers` in the workflow-controller-configmap, or the name is misspelled / casing differs, so the loop over c.ArtifactDrivers finds no match.","commonSituations":"Controller config updated with plugins but artifactDrivers not extended; typo in plugin name in a workflow spec vs configmap; configmap not reloaded after adding the driver entry.","solutions":["Add (or correct) the driver entry under `artifactDrivers:` in the workflow-controller-configmap so its `name` exactly matches the plugin name used in the artifact.","Compare the plugin name in the failing workflow spec against the configured driver names for spelling/case mismatches.","Restart the workflow-controller after editing the configmap so the new Config is picked up.","Verify with `kubectl get cm workflow-controller-configmap -o yaml` that the driver section actually exists in the live config."],"exampleFix":"// before (workflow-controller-configmap)\n// artifactDrivers: []\n// after\n// artifactDrivers:\n//   - name: my-plugin\n//     ...driver config...","handlingStrategy":"validation","validationCode":"// validate config before submitting workflows using artifact plugins\ncfg, _ := getConfig()\nfor _, p := range workflowPluginsUsed(wf) {\n    if _, err := cfg.GetArtifactDriver(p); err != nil {\n        return fmt.Errorf(\"plugin %s not configured: %w\", p, err)\n    }\n}","typeGuard":"func hasDriver(c config.Config, name wfv1.ArtifactPluginName) bool {\n    _, err := c.GetArtifactDriver(name)\n    return err == nil\n}","tryCatchPattern":"driver, err := cfg.GetArtifactDriver(pluginName)\nif err != nil {\n    return nil, fmt.Errorf(\"artifact plugin %q not configured in controller configmap: %w\", pluginName, err)\n}","preventionTips":["Keep plugin names in workflow specs and configmap artifactDrivers in sync (exact strings).","Validate workflows with `argo lint` against the live controller config.","Restart the controller after editing the configmap so Config reloads.","Document the artifactDrivers list for your cluster's users."],"tags":["config","artifacts","controller"],"backgroundTag":"artifact-driver-not-found","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"}