argoproj/argo-workflows · error

failed to create plugin driver for %s: %w

Error message

failed to create plugin driver for %s: %w

What it means

When an artifact uses the Plugin type, newDriver connects to the artifact-plugin socket (plugin.NewDriver) and wraps any failure as 'failed to create plugin driver for <name>: <cause>'. The underlying cause is typically a bad socket path, connection timeout, or failed handshake.

Source

Thrown at workflow/artifacts/artifacts.go:285

				return nil, err
			}
			accountKey = accountKeyBytes
		}
		driver := azure.ArtifactDriver{
			AccountKey:  accountKey,
			Container:   art.Azure.Container,
			Endpoint:    art.Azure.Endpoint,
			UseSDKCreds: art.Azure.UseSDKCreds,
		}
		return &driver, nil
	}

	if art.Plugin != nil {
		// Get the socket path from the driver configuration
		// This would typically come from the workflow controller configuration
		driver, err := plugin.NewDriver(ctx, art.Plugin.Name, art.Plugin.Name.SocketPath(), art.Plugin.ConnectionTimeout())
		if err != nil {
			return nil, fmt.Errorf("failed to create plugin driver for %s: %w", art.Plugin.Name, err)
		}
		return driver, nil
	}

	return nil, ErrUnsupportedDriver
}

View on GitHub (pinned to 35bff19146)

Solutions

  1. Check the artifact plugin is running (kubectl get pods) and its socket path matches artifactDrivers.plugin.socketPath in the controller configmap.
  2. Increase artifactDrivers.plugin.connectionTimeout if the plugin is slow to start.
  3. Inspect the wrapped cause (%w) in the full error message and controller logs for the real failure.
  4. Verify plugin API compatibility between the plugin version and the Argo controller version.

Example fix

// before — controller configmap
artifactDrivers:
  plugin:
    address: /var/run/argo/artifact-plugin.sock
    timeout: 10s
// after — socket matches deployed plugin
artifactDrivers:
  plugin:
    address: /var/run/argo/artifact-plugin.sock
    timeout: 30s
Defensive patterns

Strategy: try-catch

Validate before calling

cfg, err := clientset.CoreV1().ConfigMaps(ns).Get(ctx, "workflow-controller-configmap", metav1.GetOptions{})
// verify artifactDrivers.plugin.socketPath is set and the plugin pod is Running before submit

Try / catch

driver, err := artifacts.NewDriver(ctx, art, ri)
var perr error
if errors.As(err, &perr) && strings.Contains(err.Error(), "failed to create plugin driver") {
	logger.Error(ctx, "artifact plugin unreachable; check plugin pod and socketPath config", err)
	return nil
}

Prevention

When it happens

Trigger: art.Plugin != nil and plugin.NewDriver fails: plugin socket path missing/wrong in the controller config (artifactDrivers.plugin), the plugin container is not running, or the connection timeout elapses before the plugin responds.

Common situations: Plugin not deployed or crashed in the controller namespace; socketPath misconfigured in the artifact plugin config; plugin version incompatible with the controller; network policy blocking the Unix socket/TCP endpoint.

Related errors


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