{"record":{"id":"a35d9392577b95f8","repo":"GoogleContainerTools/skaffold","slug":"cannot-parse-the-name-template-on-user-defined-por","errorCode":null,"errorMessage":"cannot parse the name template on user defined port forwarder: %w","messagePattern":"cannot parse the name template on user defined port forwarder: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/skaffold/kubernetes/portforward/resource_forwarder.go","lineNumber":121,"sourceCode":"\t\t\treturn fmt.Errorf(\"retrieving services for automatic port forwarding: %w\", err)\n\t\t}\n\t\tserviceResources = found\n\t}\n\tp.portForwardResources(ctx, append(p.userDefinedResources, serviceResources...))\n\treturn nil\n}\n\nfunc applyWithTemplate(resource *latest.PortForwardResource) error {\n\tif resource.Namespace != \"\" {\n\t\tnamespace, err := util.ExpandEnvTemplateOrFail(resource.Namespace, nil)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"cannot parse the namespace template on user defined port forwarder: %w\", err)\n\t\t}\n\t\tresource.Namespace = namespace\n\t}\n\tname, err := util.ExpandEnvTemplateOrFail(resource.Name, nil)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"cannot parse the name template on user defined port forwarder: %w\", err)\n\t}\n\tresource.Name = name\n\treturn nil\n}\n\nfunc (p *ResourceForwarder) Stop() {\n\tp.entryManager.Stop()\n}\n\n// Port forward each resource individually in a goroutine\nfunc (p *ResourceForwarder) portForwardResources(ctx context.Context, resources []*latest.PortForwardResource) {\n\tvar wg sync.WaitGroup\n\tfor _, r := range resources {\n\t\twg.Add(1)\n\t\tgo func(r latest.PortForwardResource) {\n\t\t\tdefer wg.Done()\n\t\t\tp.portForwardResource(ctx, r)\n\t\t}(*r)","sourceCodeStart":103,"sourceCodeEnd":139,"githubUrl":"https://github.com/GoogleContainerTools/skaffold/blob/a1189de023efc32d4b8e11f395acc678aa555011/pkg/skaffold/kubernetes/portforward/resource_forwarder.go#L103-L139","documentation":"applyWithTemplate expands the resource Name template of a user-defined port-forward entry via util.ExpandEnvTemplateOrFail. Malformed template syntax or a missing environment variable produces this wrapped error. Start aborts preparation of that port-forward resource.","triggerScenarios":"util.ExpandEnvTemplateOrFail(resource.Name, nil) fails in applyWithTemplate (called from Start) when the portForward resourceName in skaffold.yaml contains invalid template syntax or references an unset env var.","commonSituations":"resourceName written as {{.POD_NAME} (missing brace) or referencing an env var absent in CI; using os.Expand-style $VAR syntax where Go templates are expected; typos in field names.","solutions":["Correct the template syntax in the portForward resourceName field","Export the referenced environment variable before invoking skaffold","Replace the template with a literal resource name","Lint skaffold.yaml template expressions against documented util.ExpandEnvTemplateOrFail rules"],"exampleFix":"# before (skaffold.yaml)\nportForward:\n  - resourceType: pod\n    resourceName: \"{{.SERVICE}\"\n# after\nportForward:\n  - resourceType: pod\n    resourceName: \"{{.SERVICE_NAME}}\"  # with SERVICE_NAME exported in the environment","handlingStrategy":"validation","validationCode":"func validNameTemplate(name string) error {\n    if name == \"\" {\n        return fmt.Errorf(\"portForward resourceName is empty\")\n    }\n    if strings.Count(name, \"{{\") != strings.Count(name, \"}}\") {\n        return fmt.Errorf(\"unbalanced template braces in resourceName %q\", name)\n    }\n    return nil\n}","typeGuard":null,"tryCatchPattern":"if err := applyWithTemplate(res); err != nil {\n    if strings.Contains(err.Error(), \"name template\") {\n        return fmt.Errorf(\"fix portForward.resourceName in skaffold.yaml: %v\", err)\n    }\n    return err\n}","preventionTips":["Lint skaffold.yaml templates in CI before deploy","Export required env vars (e.g. SERVICE_NAME) in shell profiles/CI pipeline","Use literal names when dynamic templating is not needed"],"tags":["config","template","port-forward"],"backgroundTag":"template-parse-failed","analyzedSha":"a1189de023efc32d4b8e11f395acc678aa555011","analyzedAt":"2026-09-05T12:09:27.064Z","contentChangedAt":"2026-09-05T12:09:27.064Z","schemaVersion":2},"datasetVersion":"2026-09-12T17:17:11.597Z"}