{"record":{"id":"0247f6a7f932e863","repo":"GoogleContainerTools/skaffold","slug":"unable-to-parse-path-q-w-0247f6","errorCode":null,"errorMessage":"unable to parse path %q: %w","messagePattern":"unable to parse path %q: %w","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/skaffold/render/renderer/kustomize/kustomize.go","lineNumber":77,"sourceCode":"\tmanifestOverrides map[string]string\n\n\tapplySetters       applysetters.ApplySetters\n\ttransformer        transform.Transformer\n\tvalidator          validate.Validator\n\ttransformAllowlist map[apimachinery.GroupKind]latest.ResourceFilter\n\ttransformDenylist  map[apimachinery.GroupKind]latest.ResourceFilter\n}\n\nfunc (k Kustomize) Render(ctx context.Context, out io.Writer, builds []graph.Artifact, offline bool) (manifest.ManifestListByConfig, error) {\n\tvar manifests manifest.ManifestList\n\tkCLI := kubectl.NewCLI(k.cfg, \"\")\n\tuseKubectlKustomize := !generate.KustomizeBinaryCheck() && generate.KubectlVersionCheck(kCLI)\n\n\tvar kustomizePaths []string\n\tfor _, kustomizePath := range k.rCfg.Kustomize.Paths {\n\t\tkPath, err := sUtil.ExpandEnvTemplate(kustomizePath, nil)\n\t\tif err != nil {\n\t\t\treturn manifest.ManifestListByConfig{}, fmt.Errorf(\"unable to parse path %q: %w\", kustomizePath, err)\n\t\t}\n\t\tkustomizePaths = append(kustomizePaths, kPath)\n\t}\n\n\tfor _, kustomizePath := range kustomizePaths {\n\t\tif !sUtil.IsURL(kustomizePath) && !filepath.IsAbs(kustomizePath) {\n\t\t\tkustomizePath = filepath.Join(k.cfg.GetWorkingDir(), kustomizePath)\n\t\t}\n\t\tout, err := k.render(ctx, kustomizePath, useKubectlKustomize, kCLI)\n\t\tif err != nil {\n\t\t\treturn manifest.ManifestListByConfig{}, err\n\t\t}\n\t\tif len(out) == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tmanifests.Append(out)\n\t}\n","sourceCodeStart":59,"sourceCodeEnd":95,"githubUrl":"https://github.com/GoogleContainerTools/skaffold/blob/a1189de023efc32d4b8e11f395acc678aa555011/pkg/skaffold/render/renderer/kustomize/kustomize.go#L59-L95","documentation":"Skaffold's kustomize renderer expands each configured kustomize path as an environment-variable Go template via ExpandEnvTemplate before rendering. If the template is malformed (bad syntax, unknown field, missing env key in strict mode), expansion fails and this error wraps the underlying cause. The original path is quoted to identify the offending entry.","triggerScenarios":"Calling Render with k.rCfg.Kustomize.Paths containing a string like `{{ .FOO }}` or `${MISSING_VAR}` that ExpandEnvTemplate cannot resolve; a path containing stray `{{` characters; a template referencing an undefined env var.","commonSituations":"Developer uses skaffold template syntax not supported by ExpandEnvTemplate (e.g. sprig functions), forgets to export an env var referenced in the kustomize path, or typos `{{` in a path containing literal braces.","solutions":["Set the referenced environment variable (e.g. export FOO=... ) before running skaffold","Remove or correct the template expression in the kustomize path in skaffold.yaml","If the path should be literal, escape or drop the {{ }} braces","Run with debug logging to see the wrapped inner error for the exact template failure"],"exampleFix":"// before (skaffold.yaml)\nrender:\n  kustomize:\n    paths:\n      - '{{ .UNSET_ENV }}/overlays/prod'\n// after\nrender:\n  kustomize:\n    paths:\n      - './overlays/prod'","handlingStrategy":"validation","validationCode":"for _, p := range kustomizePaths {\n    if _, err := os.ExpandEnv(p); p != os.ExpandEnv(p) {\n        // template present: ensure referenced vars are set\n    }\n    if strings.Contains(p, \"{{\") {\n        // verify template vars exist before calling skaffold\n        t := template.Must(template.New(\"p\").Parse(p))\n        _ = t.Execute(io.Discard, envMap) // surfaces missing keys early\n    }\n}","typeGuard":"func isWellFormedTemplatePath(p string, env map[string]string) bool {\n    if !strings.Contains(p, \"{{\") { return true }\n    t, err := template.New(\"p\").Parse(p)\n    if err != nil { return false }\n    return t.Execute(io.Discard, env) == nil\n}","tryCatchPattern":null,"preventionTips":["Avoid {{ }} templates in kustomize paths unless the env var is guaranteed to be set","Prefer static relative paths and use kustomize overlays for environment variation","Validate skaffold.yaml paths in CI before render"],"tags":["kustomize","template","path","skaffold"],"backgroundTag":"template-expansion-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"}