{"record":{"id":"4adb68fc1fcd6070","repo":"istio/istio","slug":"only-one-of-name-selector-or-revision-can-be","errorCode":null,"errorMessage":"only one of name, --selector, or --revision can be specified","messagePattern":"only one of name, --selector, or --revision can be specified","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"istioctl/pkg/dashboard/dashboard.go","lineNumber":355,"sourceCode":"  # Open ControlZ web UI for the istiod-56dd66799-jfdvs pod in a custom namespace\n  istioctl dashboard controlz istiod-56dd66799-jfdvs -n custom-ns\n\n  # Open ControlZ web UI for any Istiod pod\n  istioctl dashboard controlz deployment/istiod.istio-system\n\n  # with short syntax\n  istioctl dash controlz istiod-56dd66799-jfdvs.istio-system\n  istioctl d controlz istiod-56dd66799-jfdvs.istio-system\n`,\n\t\tRunE: func(c *cobra.Command, args []string) error {\n\t\t\tif labelSelector == \"\" && opts.Revision == \"\" && len(args) < 1 {\n\t\t\t\tc.Println(c.UsageString())\n\t\t\t\treturn fmt.Errorf(\"specify a pod, --selector, or --revision\")\n\t\t\t}\n\n\t\t\tif (labelSelector != \"\" && len(args) > 0) || (labelSelector != \"\" && opts.Revision != \"\") || (len(args) > 0 && opts.Revision != \"\") {\n\t\t\t\tc.Println(c.UsageString())\n\t\t\t\treturn fmt.Errorf(\"only one of name, --selector, or --revision can be specified\")\n\t\t\t}\n\n\t\t\tclient, err := ctx.CLIClientWithRevision(opts.Revision)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"failed to create k8s client: %v\", err)\n\t\t\t}\n\n\t\t\tif opts.Revision != \"\" {\n\t\t\t\tlabelSelector = \"istio.io/rev=\" + opts.Revision + \", app=istiod\"\n\t\t\t}\n\t\t\tvar podName, ns string\n\t\t\tif labelSelector != \"\" {\n\t\t\t\tlabelSelector += \", app=istiod\"\n\t\t\t\tpl, err := client.PodsForSelector(context.TODO(), ctx.NamespaceOrDefault(ctx.IstioNamespace()), labelSelector)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"not able to locate pod with selector %s: %v\", labelSelector, err)\n\t\t\t\t}\n","sourceCodeStart":337,"sourceCodeEnd":373,"githubUrl":"https://github.com/istio/istio/blob/8dc789c5cf17517c64e3c36cb3288230f149dfae/istioctl/pkg/dashboard/dashboard.go#L337-L373","documentation":"Mutual-exclusion check in 'istioctl dashboard controlz'. The condition (selector AND name) OR (selector AND revision) OR (name AND revision) means any two of the three pod-selection inputs supplied together abort the command after printing usage. Only one of name, --selector, --revision may be used.","triggerScenarios":"'istioctl dashboard controlz istiod-xyz --revision default', or '... --selector app=istiod --revision canary', or '... istiod-xyz --selector app=istiod'.","commonSituations":"Scripts defaulting --revision to a value while also passing a pod name; users adding --revision 'just to be safe'; upgrading from older istioctl versions that ignored extra flags.","solutions":["Remove all but one selection mechanism — keep the name, the selector, or the revision","If you need revision pinning, drop the pod name and use only --revision","Audit wrappers/aliases that unconditionally set --revision"],"exampleFix":"# before\nistioctl dashboard controlz istiod-56dd66799-jfdvs --revision default\n\n# after\nistioctl dashboard controlz istiod-56dd66799-jfdvs\n# or\nistioctl dashboard controlz --revision default","handlingStrategy":"validation","validationCode":"# enforce mutual exclusion in wrappers\ncount=0; [ $# -ge 1 ] && count=$((count+1)); [ -n \"$SELECTOR\" ] && count=$((count+1)); [ -n \"$REVISION\" ] && count=$((count+1))\n[ \"$count\" -eq 1 ] || { echo \"exactly one of name/--selector/--revision\" >&2; exit 2; }","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never default --revision in scripts that also forward user pod names","Document one canonical selection mode per environment (e.g. always --revision)"],"tags":["istioctl","cli","argument-validation","controlz"],"backgroundTag":null,"analyzedSha":"8dc789c5cf17517c64e3c36cb3288230f149dfae","analyzedAt":"2026-08-15T15:16:55.434Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}