argoproj/argo-workflows · error

failed to load input artifacts from plugin %q: %w

Error message

failed to load input artifacts from plugin %q: %w

What it means

In runSupervisorPreMain's errgroup, each artifact plugin gets its own goroutine calling LoadArtifactsFromPlugin; failures are wrapped as "failed to load input artifacts from plugin %q" with the plugin name. Plugin-based artifact loading (artifact plugins handle fetch themselves) failing means the named plugin sidecar/service did not deliver the artifact, and the errgroup aborts pre-main.

Source

Thrown at cmd/argoexec/commands/supervisor.go:160

func runSupervisorPreMain(ctx context.Context, stages preMainStages, pluginNames []wfv1.ArtifactPluginName) error {
	if err := stages.WriteTemplate(); err != nil {
		return fmt.Errorf("failed to write template: %w", err)
	}
	if err := stages.StageFiles(ctx); err != nil {
		return fmt.Errorf("failed to stage files: %w", err)
	}

	g, gctx := errgroup.WithContext(ctx)
	g.Go(func() error {
		if err := stages.LoadArtifactsWithoutPlugins(gctx); err != nil {
			return fmt.Errorf("failed to load non-plugin input artifacts: %w", err)
		}
		return nil
	})
	for _, name := range pluginNames {
		g.Go(func() error {
			if err := stages.LoadArtifactsFromPlugin(gctx, name); err != nil {
				return fmt.Errorf("failed to load input artifacts from plugin %q: %w", name, err)
			}
			return nil
		})
	}
	return g.Wait()
}

// inputArtifactPluginNames reads the controller-supplied list of input
// artifact plugin names from the supervisor's environment.
func inputArtifactPluginNames() []wfv1.ArtifactPluginName {
	raw := common.SplitPluginNames(os.Getenv(common.EnvVarInputArtifactPluginNames))
	names := make([]wfv1.ArtifactPluginName, 0, len(raw))
	for _, p := range raw {
		names = append(names, wfv1.ArtifactPluginName(p))
	}
	return names
}

View on GitHub (pinned to 35bff19146)

Solutions

  1. Check the named plugin in the error for container crash/logs in the same pod
  2. Verify the plugin is configured and discoverable by argoexec (mount/env wiring in the pod spec)
  3. Confirm the plugin name in the Workflow matches the registered plugin name
  4. Restart/redeploy the plugin sidecar and retry the workflow node
Defensive patterns

Strategy: fallback

Validate before calling

// verify plugin registration before submit:
// argo executor-plugin build / verify plugin is mounted and named correctly
// kubectl get pod <pod> -o jsonpath='{.containers[*].name}'  # plugin sidecar present?

Try / catch

// errgroup already aggregates: match by plugin name from the message
if err := runSupervisorPreMain(ctx, stages, pluginNames); err != nil {
    if strings.Contains(err.Error(), "failed to load input artifacts from plugin") {
        // fall back to non-plugin loading path or restart the plugin sidecar
    }
}

Prevention

When it happens

Trigger: supervisorPreMain's per-plugin errgroup goroutine: LoadArtifactsFromPlugin(gctx, name) fails — the plugin container isn't running, its socket/service is unreachable, or the plugin reported an error for the artifact.

Common situations: Artifact plugin sidecar crashed or OOMed; plugin name typo in the Workflow's artifact plugin configuration; plugin not registered in the executor's plugin discovery (env var / volume mount missing); version mismatch between plugin and executor.

Related errors


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