You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
kustomize should leave all ConfigMap values as quoted strings, since no other type is legal. #5558
We have a YAML string in a ConfigMap that contains a variable (e.g. ${TEST}) which will be replaced with a string AFTER running kustomize --build .
The problem is that the quotes are removed from the string by kustomize and then if that variable is replaced with something like true, the ConfigMap will be invalid since true is interpreted as a boolean value instead of a string and that is not allowed in a ConfigMap.
What did you expect to happen?
I expect kustomize to leave a quoted string quoted.
How can we reproduce it (as minimally and precisely as possible)?
changed the title [-]`kustomize` is incorrectly removing quotes from string that start with a dollar sign `$`[/-][+]`kustomize` is incorrectly removing quotes from strings that start with a dollar sign `$`[/+]on Feb 29, 2024
changed the title [-]`kustomize` is incorrectly removing quotes from strings that start with a dollar sign `$`[/-][+]`kustomize` is incorrectly removing quotes from strings under various hard-to-predict situations[/+]on Feb 29, 2024
This problem kinda sucks because the original YAML will have quotes that are not preserved between the conversion of kustomize template->JSON->YAML, and if we desire to keep them, there's no way to indicate to kustomize that they shouldn't be removed. Suppose we start with this YAML kustomize template:
When executing kustomize build, it'll read the kustomization.yaml file and render the manifest. I've narrowed the path down to the JSONToYAML() function used by the build command here:
My assumption is that any string that isn’t already a valid JSON type (such as a sub structure with {} or a boolean true) gets its quotes stripped (You can test the code out in this playground link: https://go.dev/play/p/rFUUlFjPk5f):
changed the title [-]`kustomize` is incorrectly removing quotes from strings under various hard-to-predict situations[/-][+]`kustomize` should leave all ConfigMap values as quoted strings, since no other type is legal.[/+]on Feb 29, 2024
Our investigation suggests that the YAML parser is doing the right thing, but the fact that quotes are removed when we explicitly need them, and there appears to be no way to force them to be kept, is very problematic in our use case.
Activity
[-]`kustomize` is incorrectly removing quotes from string that start with a dollar sign `$`[/-][+]`kustomize` is incorrectly removing quotes from strings that start with a dollar sign `$`[/+]spkane commentedon Feb 29, 2024
Potentially related to: #5124
spkane commentedon Feb 29, 2024
cc/ @akbar-mohammad @sibucan
[-]`kustomize` is incorrectly removing quotes from strings that start with a dollar sign `$`[/-][+]`kustomize` is incorrectly removing quotes from strings under various hard-to-predict situations[/+]sibucan commentedon Feb 29, 2024
This problem kinda sucks because the original YAML will have quotes that are not preserved between the conversion of kustomize template->JSON->YAML, and if we desire to keep them, there's no way to indicate to kustomize that they shouldn't be removed. Suppose we start with this YAML kustomize template:
When executing
kustomize build, it'll read the kustomization.yaml file and render the manifest. I've narrowed the path down to theJSONToYAML()function used by thebuildcommand here:kustomize/api/resource/resource.go
Line 371 in 33caee5
This function is supposed to take a JSON byte array and turns it into valid YAML:
JSON:
{"apiVersion":"v1","data":{"test1":"${TEMPLATE_VAR1}","test2":"{TEMPLATE_VAR2}","test3":"true","test4":"test4"},"kind":"ConfigMap","metadata":{"name":"config"}}FINAL RESULT
My assumption is that any string that isn’t already a valid JSON type (such as a sub structure with
{}or a booleantrue) gets its quotes stripped (You can test the code out in this playground link: https://go.dev/play/p/rFUUlFjPk5f):stormqueen1990 commentedon Feb 29, 2024
This may be related to #5432
/assign
[-]`kustomize` is incorrectly removing quotes from strings under various hard-to-predict situations[/-][+]`kustomize` should leave all ConfigMap values as quoted strings, since no other type is legal.[/+]spkane commentedon Feb 29, 2024
Our investigation suggests that the YAML parser is doing the right thing, but the fact that quotes are removed when we explicitly need them, and there appears to be no way to force them to be kept, is very problematic in our use case.
k8s-triage-robot commentedon May 29, 2024
The Kubernetes project currently lacks enough contributors to adequately respond to all issues.
This bot triages un-triaged issues according to the following rules:
lifecycle/staleis appliedlifecycle/stalewas applied,lifecycle/rottenis appliedlifecycle/rottenwas applied, the issue is closedYou can:
/remove-lifecycle stale/closePlease send feedback to sig-contributor-experience at kubernetes/community.
/lifecycle stale
stormqueen1990 commentedon May 29, 2024
stormqueen1990 commentedon May 29, 2024
/triage accepted
stormqueen1990 commentedon Aug 30, 2025
I am currently short on time to continue working on this.
For future contributors looking to fix this issue: any fixes for this issue need to be submitted to https://github.com/yaml/go-yaml, as per kubernetes-sigs/yaml#115 (comment).
/unassign
HarshithaMS005 commentedon Sep 17, 2026
/assign
fix: quote ConfigMap and Secret data values in YAML output
fix: quote ConfigMap and Secret data values in YAML output
fix: quote ConfigMap and Secret data values in YAML output