GoogleContainerTools/skaffold · error
cannot parse the namespace template on user defined port for
Error message
cannot parse the namespace template on user defined port forwarder: %w
What it means
applyWithTemplate expands environment-variable templates in user-defined port-forward resources. If the namespace field contains an invalid template (e.g. unbalanced braces or a missing env var), ExpandEnvTemplateOrFail fails and the error is wrapped with "cannot parse the namespace template on user defined port forwarder".
Source
Thrown at pkg/skaffold/kubernetes/portforward/resource_forwarder.go:115
}
var serviceResources []*latest.PortForwardResource
if p.services {
found, err := retrieveServices(ctx, p.label, namespaces, p.kubeContext)
if err != nil {
return fmt.Errorf("retrieving services for automatic port forwarding: %w", err)
}
serviceResources = found
}
p.portForwardResources(ctx, append(p.userDefinedResources, serviceResources...))
return nil
}
func applyWithTemplate(resource *latest.PortForwardResource) error {
if resource.Namespace != "" {
namespace, err := util.ExpandEnvTemplateOrFail(resource.Namespace, nil)
if err != nil {
return fmt.Errorf("cannot parse the namespace template on user defined port forwarder: %w", err)
}
resource.Namespace = namespace
}
name, err := util.ExpandEnvTemplateOrFail(resource.Name, nil)
if err != nil {
return fmt.Errorf("cannot parse the name template on user defined port forwarder: %w", err)
}
resource.Name = name
return nil
}
func (p *ResourceForwarder) Stop() {
p.entryManager.Stop()
}
// Port forward each resource individually in a goroutine
func (p *ResourceForwarder) portForwardResources(ctx context.Context, resources []*latest.PortForwardResource) {
var wg sync.WaitGroupView on GitHub (pinned to a1189de023)
Solutions
- Fix the template syntax in the portForward namespace field (balanced {{ }} and valid field names)
- Define the referenced environment variable in the shell/CI before running skaffold
- Use a literal namespace string instead of a template if templating is unnecessary
- Validate the config with skaffold config or skaffold dev --dry-run style checks before deploy
Example fix
# before (skaffold.yaml)
portForward:
- resourceType: pod
resourceName: web
namespace: {{.MISSING_NS}}
# after
export NAMESPACE=my-ns # or fix the template
portForward:
- resourceType: pod
resourceName: web
namespace: {{.NAMESPACE}} Defensive patterns
Strategy: validation
Validate before calling
func validNamespaceTemplate(ns string) error {
if ns == "" {
return nil
}
if strings.Count(ns, "{{") != strings.Count(ns, "}}") {
return fmt.Errorf("unbalanced template braces in namespace %q", ns)
}
return nil
} Try / catch
if err := applyWithTemplate(res); err != nil {
if strings.Contains(err.Error(), "namespace template") {
return fmt.Errorf("fix portForward.namespace in skaffold.yaml: %v", err)
}
return err
} Prevention
- Use balanced {{ }} Go template syntax in skaffold.yaml portForward fields
- Export every env var referenced by templates before running skaffold
- Prefer literal namespace values unless templating is required
When it happens
Trigger: PortForwardResource.Namespace is non-empty and util.ExpandEnvTemplateOrFail(resource.Namespace, nil) errors during Start's resource preparation — caused by malformed Go template syntax or an undefined environment variable in skaffold.yaml's portForward.namespace.
Common situations: skaffold.yaml has portForward namespace like {{.MISSING_VAR}} or {{NAMESPACE} (unbalanced brace); CI environment lacks a variable set locally; copy-pasted template using wrong delimiters.
Related errors
- cannot parse the name template on user defined port forwarde
- cannot parse the release namespace template: %w
- bucket name is empty
- INSPECT_PROFILE_NOT_FOUND_ERR
- cannot resolve active Kubernetes context - multiple contexts
AI-assisted analysis of GoogleContainerTools/skaffold@a1189de023 (2026-09-05).
Data as JSON: /api/errors/00a7ee459c29e89d.
Report an issue: GitHub.