argoproj/argo-workflows · error
artifact driver %s not found
Error message
artifact driver %s not found
What it means
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.
Source
Thrown at config/config.go:214
ConnectionTimeoutSeconds int32 `json:"connectionTimeoutSeconds,omitempty" protobuf:"varint,3,opt,name=connectionTimeoutSeconds"`
}
const defaultArtifactConnectionTimeout = time.Duration(5) * time.Second
func (a ArtifactDriver) ConnectionTimeout() time.Duration {
if a.ConnectionTimeoutSeconds != 0 {
return time.Duration(a.ConnectionTimeoutSeconds) * time.Second
}
return defaultArtifactConnectionTimeout
}
func (c Config) GetArtifactDriver(name wfv1.ArtifactPluginName) (ArtifactDriver, error) {
for _, driver := range c.ArtifactDrivers {
if driver.Name == name {
return driver, nil
}
}
return ArtifactDriver{}, fmt.Errorf("artifact driver %s not found", name)
}
func (c Config) GetArtifactDrivers(plugins []wfv1.ArtifactPluginName) ([]ArtifactDriver, error) {
drivers := []ArtifactDriver{}
for _, plugin := range plugins {
driver, err := c.GetArtifactDriver(plugin)
if err != nil {
return nil, err
}
drivers = append(drivers, driver)
}
return drivers, nil
}
func (c Config) GetExecutor() *apiv1.Container {
if c.Executor != nil {
return c.Executor
}View on GitHub (pinned to 35bff19146)
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.
Example fix
// before (workflow-controller-configmap) // artifactDrivers: [] // after // artifactDrivers: // - name: my-plugin // ...driver config...
Defensive patterns
Strategy: validation
Validate before calling
// validate config before submitting workflows using artifact plugins
cfg, _ := getConfig()
for _, p := range workflowPluginsUsed(wf) {
if _, err := cfg.GetArtifactDriver(p); err != nil {
return fmt.Errorf("plugin %s not configured: %w", p, err)
}
} Type guard
func hasDriver(c config.Config, name wfv1.ArtifactPluginName) bool {
_, err := c.GetArtifactDriver(name)
return err == nil
} Try / catch
driver, err := cfg.GetArtifactDriver(pluginName)
if err != nil {
return nil, fmt.Errorf("artifact plugin %q not configured in controller configmap: %w", pluginName, err)
} Prevention
- 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.
When it happens
Trigger: 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.
Common situations: 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.
Related errors
- if you have an item in your config map named 'config', you m
- no artifact logs are available
- invalid TTL
- Artifact driver connection validation failed: %v
- Artifact driver validation failed: The following artifact dr
AI-assisted analysis of argoproj/argo-workflows@35bff19146 (2026-09-03).
Data as JSON: /api/errors/63962a67e2d57379.
Report an issue: GitHub.