{"record":{"id":"95c0b57036f369f3","repo":"GoogleContainerTools/skaffold","slug":"error-converting-s-to-map-string-interface","errorCode":null,"errorMessage":"error converting %s to map[string]interface{}","messagePattern":"error converting (.+?) to map\\[string\\]interface(.+?)","errorType":"exception","errorClass":"nsSettingErr","httpStatus":null,"severity":"error","filePath":"pkg/skaffold/kubernetes/manifest/namespaces.go","lineNumber":127,"sourceCode":"\t\t}\n\t\tupdated = append(updated, updatedManifest)\n\t}\n\n\tlog.Entry(context.TODO()).Debugln(\"manifests set with namespace\", updated.String())\n\treturn updated, nil\n}\n\nfunc addOrUpdateNamespace(manifest map[string]interface{}, ns string) error {\n\toriginalMetadata, ok := manifest[metadataField]\n\tif !ok {\n\t\tmetadataAdded := make(map[string]interface{})\n\t\tmetadataAdded[namespaceField] = ns\n\t\tmanifest[metadataField] = metadataAdded\n\t\treturn nil\n\t}\n\tmetadata, ok := originalMetadata.(map[string]interface{})\n\tif !ok {\n\t\treturn nsSettingErr(fmt.Errorf(\"error converting %s to map[string]interface{}\", originalMetadata))\n\t}\n\tnsValue, present := metadata[namespaceField]\n\tif !present || isEmptyOrEqual(nsValue, ns) {\n\t\tmetadata[namespaceField] = ns\n\t\treturn nil\n\t}\n\n\tif present && isEmptyOrEqual(ns, defaultNamespace) {\n\t\treturn nil\n\t}\n\n\twarnings.Printf(\"a manifest already has namespace set \\\"%s\\\" which conflicts with namespace on the CLI \\\"%s\\\"\", nsValue, ns)\n\treturn nil\n}\n\nfunc isEmptyOrEqual(v interface{}, s string) bool {\n\t// check if namespace is set to empty string\n\tif v == nil {","sourceCodeStart":109,"sourceCodeEnd":145,"githubUrl":"https://github.com/GoogleContainerTools/skaffold/blob/a1189de023efc32d4b8e11f395acc678aa555011/pkg/skaffold/kubernetes/manifest/namespaces.go#L109-L145","documentation":"Skaffold's addOrUpdateNamespace sets metadata.namespace on each Kubernetes manifest. Before writing the namespace field it asserts the manifest's `metadata` value is a map[string]interface{} (as produced by yaml.Unmarshal). If metadata holds any other Go type (string, number, list, bool), the conversion fails and this error is returned wrapped by nsSettingErr.","triggerScenarios":"Calling SetNamespace (directly or via namespace-transform of a ManifestList) on a manifest whose top-level `metadata:` key parses to a non-map YAML scalar or sequence, e.g. `metadata: my-ns` or `metadata: [a, b]`.","commonSituations":"Hand-written or generated YAML where metadata is accidentally a scalar; templating tools emitting malformed manifests; manifests with duplicate/odd keys parsed into unexpected types.","solutions":["Fix the manifest so `metadata:` is a mapping containing name/namespace fields","Re-render the manifests (kustomize/helm) and verify with yamllint or `kubectl apply --dry-run=client` before running Skaffold","If the document is not a real Kubernetes resource, exclude it from the manifest list passed to Skaffold"],"exampleFix":"# before\nmetadata: prod\nkind: ConfigMap\n# after\nmetadata:\n  name: my-config\n  namespace: prod\nkind: ConfigMap","handlingStrategy":"type-guard","validationCode":"var check map[string]interface{}\nif err := yaml.Unmarshal(manifestBytes, &m); err != nil { return err }\nif md, ok := m[\"metadata\"].(map[string]interface{}); !ok && m[\"metadata\"] != nil {\n    return fmt.Errorf(\"metadata must be a mapping, got %T\", m[\"metadata\"])\n}","typeGuard":"func isMetadataMap(m map[string]interface{}) bool {\n    if md, ok := m[\"metadata\"]; ok {\n        _, ok := md.(map[string]interface{})\n        return ok\n    }\n    return true\n}","tryCatchPattern":null,"preventionTips":["Lint manifests with yamllint/kubeconform before feeding them to Skaffold","Keep `metadata:` always a mapping in generated YAML","Dry-run render output with kubectl before running namespace transforms"],"tags":["kubernetes","yaml","manifest","namespace"],"backgroundTag":"manifest-metadata-not-a-map","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"}