-
Notifications
You must be signed in to change notification settings - Fork 75
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
yaml.Marshal() can not be forced to leave strings quoted #108
Comments
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: apiVersion: v1
kind: ConfigMap
data:
test1: "${TEMPLATE_VAR1}"
test2: "{TEMPLATE_VAR2}"
test3: "true"
test4: "test4"
metadata:
name: config When executing 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 apiVersion: v1
data:
test1: ${TEMPLATE_VAR1}
test2: '{TEMPLATE_VAR2}'
test3: "true"
test4: test4
kind: ConfigMap
metadata:
name: config My assumption is that any string that isn’t already a valid JSON type (such as a sub structure with |
Our investigation suggests that the YAML parser is actually 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. |
The Kubernetes project currently lacks enough contributors to adequately respond to all issues. This bot triages un-triaged issues according to the following rules:
You can:
Please send feedback to sig-contributor-experience at kubernetes/community. /lifecycle stale |
I'm also seeing this but its causing |
/remove-lifecycle stale |
This could be solved if the output of apiVersion: v1
data:
test1: !!str ${TEMPLATE_VAR1}
test2: !!str '{TEMPLATE_VAR2}'
test3: !!str "true"
test4: !!str test4
kind: ConfigMap
metadata:
name: config Kustomize at least knows that the values must all be strings
Could you instead prepend
|
So So we'd need to have a parameters object passed through My concern is that while we do use a fork of
I doubt the upstream maintainer would want to support a relative niche feature in their general-purpose library. But on the other hand, I don't see how kustomize can do the right thing without it, and the point of having this library is to support projects like kustomize. Could we make this change in the fork anyway? |
Tagging @niemeyer as the upstream maintainer, about whether either of the changes mentioned in my last comment would be accepted upstream.
|
Originally reported here: kubernetes-sigs/kustomize#5558
What happened?
We have a YAML string in a ConfigMap that contains a variable (e.g.
${TEST}
) which will be replaced with a string AFTER runningkustomize --build .
The problem is that the quotes are removed from the string by
kustomize
and then if that variable is replaced with something liketrue
, the ConfigMap will be invalid sincetrue
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)?
Expected output
Actual output
Kustomize version
v5.3.0
Operating system
MacOS
The text was updated successfully, but these errors were encountered: