Skip to content

kustomize should leave all ConfigMap values as quoted strings, since no other type is legal. #5558

Open

Description

@spkane

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 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)?

# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - "configmap.yaml"
# resources.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: test-object
data:
  pci: '${TEST}'

Expected output

apiVersion: v1
data:
  pci: '${TEST}'
kind: ConfigMap
metadata:
  name: test-object

Actual output

apiVersion: v1
data:
  pci: ${TEST}
kind: ConfigMap
metadata:
  name: test-object
  • Note the missing quotes. If that variable is then templated with a boolean or integer, this is a significant problem.

Kustomize version

v5.3.0

Operating system

MacOS

Activity

  1. added
    kind/bugCategorizes issue or PR as related to a bug.
    on Feb 29, 2024
  2. added
    needs-triageIndicates an issue or PR lacks a `triage/foo` label and requires one.
    on Feb 29, 2024
  3. 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
  4. spkane commented on Feb 29, 2024

    @spkane
    Author

    Potentially related to: #5124

  5. spkane commented on Feb 29, 2024

    @spkane
    Author
  6. 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
  7. sibucan commented on Feb 29, 2024

    @sibucan

    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 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:

    return yaml.JSONToYAML(json)

    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 {} or a boolean true) gets its quotes stripped (You can test the code out in this playground link: https://go.dev/play/p/rFUUlFjPk5f):

  8. stormqueen1990 commented on Feb 29, 2024

    @stormqueen1990
    Member

    This may be related to #5432
    /assign

  9. 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
  10. spkane commented on Feb 29, 2024

    @spkane
    Author

    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.

  11. k8s-triage-robot commented on May 29, 2024

    @k8s-triage-robot

    The Kubernetes project currently lacks enough contributors to adequately respond to all issues.

    This bot triages un-triaged issues according to the following rules:

    • After 90d of inactivity, lifecycle/stale is applied
    • After 30d of inactivity since lifecycle/stale was applied, lifecycle/rotten is applied
    • After 30d of inactivity since lifecycle/rotten was applied, the issue is closed

    You can:

    • Mark this issue as fresh with /remove-lifecycle stale
    • Close this issue with /close
    • Offer to help out with Issue Triage

    Please send feedback to sig-contributor-experience at kubernetes/community.

    /lifecycle stale

  12. added
    lifecycle/staleDenotes an issue or PR has remained open with no activity and has become stale.
    on May 29, 2024
  13. stormqueen1990 commented on May 29, 2024

    @stormqueen1990
    Member
  14. added
    lifecycle/frozenIndicates that an issue or PR should not be auto-closed due to staleness.
    and removed
    lifecycle/staleDenotes an issue or PR has remained open with no activity and has become stale.
    on May 29, 2024
  15. stormqueen1990 commented on May 29, 2024

    @stormqueen1990
    Member

    /triage accepted

  16. added
    triage/acceptedIndicates an issue or PR is ready to be actively worked on.
    and removed
    needs-triageIndicates an issue or PR lacks a `triage/foo` label and requires one.
    on May 29, 2024
  17. stormqueen1990 commented on Aug 30, 2025

    @stormqueen1990
    Member

    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

  18. HarshithaMS005 commented on Sep 17, 2026

    @HarshithaMS005
    Member

    /assign

  19. added 3 commits that reference this issue on Sep 17, 2026
    ae262f5
    45fb174
    e2baeb7
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

kind/bugCategorizes issue or PR as related to a bug.lifecycle/frozenIndicates that an issue or PR should not be auto-closed due to staleness.triage/acceptedIndicates an issue or PR is ready to be actively worked on.

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions