argoproj/argo-workflows · error

expected parameter of the form: NAME=VALUE. Received: %s

Error message

expected parameter of the form: NAME=VALUE. Received: %s

What it means

overrideParameters applies -p NAME=VALUE parameter overrides to the workflow's spec.arguments.parameters. Each parameter string must contain '='; SplitN on '=' must yield exactly 2 parts. A token without '=' is rejected with this message showing the offending string.

Source

Thrown at workflow/util/util.go:319

		wf.GenerateName = opts.GenerateName
	}
	if opts.Name != "" {
		wf.Name = opts.Name
	}
	if opts.OwnerReference != nil {
		wf.SetOwnerReferences(append(wf.GetOwnerReferences(), *opts.OwnerReference))
	}
	return nil
}

func overrideParameters(wf *wfv1.Workflow, parameters []string) error {
	if len(parameters) > 0 {
		newParams := make([]wfv1.Parameter, 0)
		passedParams := make(map[string]bool)
		for _, paramStr := range parameters {
			parts := strings.SplitN(paramStr, "=", 2)
			if len(parts) != 2 {
				return fmt.Errorf("expected parameter of the form: NAME=VALUE. Received: %s", paramStr)
			}
			param := wfv1.Parameter{Name: parts[0], Value: wfv1.AnyStringPtr(parts[1])}
			newParams = append(newParams, param)
			passedParams[param.Name] = true
		}
		for _, param := range wf.Spec.Arguments.Parameters {
			if _, ok := passedParams[param.Name]; ok {
				// this parameter was overridden via command line
				continue
			}
			newParams = append(newParams, param)
		}
		wf.Spec.Arguments.Parameters = newParams
		if wf.Status.StoredWorkflowSpec != nil {
			wf.Status.StoredWorkflowSpec.Arguments.Parameters = newParams
		}
	}
	return nil

View on GitHub (pinned to 35bff19146)

Solutions

  1. Pass parameters as NAME=VALUE: -p key=value (quote values containing spaces)
  2. Check shell quoting: -p "message=hello world" not -p message=hello world
  3. Remove empty parameter tokens coming from scripts/loops building the -p list

Example fix

// before
argo submit wf.yaml -p message
// after
argo submit wf.yaml -p "message=hello world"
Defensive patterns

Strategy: validation

Validate before calling

for _, p := range parameters {
    if !strings.Contains(p, "=") || strings.SplitN(p, "=", 2)[0] == "" {
        return fmt.Errorf("invalid parameter %q; use NAME=VALUE", p)
    }
}

Try / catch

err := util.ApplySubmitOpts(wf, opts)
if err != nil && strings.Contains(err.Error(), "expected parameter of the form") {
    return fmt.Errorf("fix -p flag to NAME=VALUE: %w", err)
}

Prevention

When it happens

Trigger: argo submit/resubmit -p with a value lacking '=', e.g. -p foo (no =value), or an empty string slipping into the parameters list; called from ApplySubmitOpts, FormulateResubmitWorkflow, and createNewRetryWorkflow.

Common situations: Shell splitting dropping the value ('-p key= with space'); flags like -p message="hello world" quoted incorrectly so only the key remains; forgetting the value entirely; using ':' instead of '='.

Related errors


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