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 nilView on GitHub (pinned to 35bff19146)
Solutions
- Pass parameters as NAME=VALUE: -p key=value (quote values containing spaces)
- Check shell quoting: -p "message=hello world" not -p message=hello world
- 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
- Quote parameters containing spaces or special characters: -p "key=some value"
- Never pass a bare key without '=value'
- When building -p lists programmatically, filter out empty strings before invoking argo
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
- expected labels of the form: NAME1=VALUE2,NAME2=VALUE2. Rece
- expected Annotations of the form: NAME1=VALUE2,NAME2=VALUE2.
- ${e.Usage()}
- --completed and --running cannot be used together
- unable to parse node field selector '%s': %w
AI-assisted analysis of argoproj/argo-workflows@35bff19146 (2026-09-03).
Data as JSON: /api/errors/839c51b389ffac71.
Report an issue: GitHub.