Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Ah, I must have met some lazy charts then. Thanks for the correction. Still, it seems like that schema would end up a little inconvenient to integrate into your editor for writing the templates...




Oh, yeah, but who can blame them because writing JSON Schema files by hand is some onoz

Ironically (in the context of this submission) Bitnami has a "--schema" option to their README generator, which is why so many of their charts ship with .schema.json files: https://github.com/bitnami/readme-generator-for-helm/tree/2....

There are likely other "give me a schema for this example JSON/YAML file" but almost certainly wouldn't come with the nice {"description":""} blocks, nor the {"required":false} that an annotated .yaml can offer

While digging up that link, I also spotted the tag line in their GitHub org which is hilarious https://github.com/bitnami#:~:text=trusted%20by%20ops


> a little inconvenient to integrate into your editor for writing the templates...

Another way that JetBrains tooling shines, because it automatically turns on JSON Schema support for the chart when it has one, no extra # schema=file://... dumbness required


That is when you are writing the values when using the chart though, right? Yeah that's not too hard.

I was talking about the go templates that make up the actual chart. Ensuring they only use string values for annotations for example seems like a hard problem to solve. Even just showing the type and description from the schema seems nontrivial.


I don't exactly follow which part you're talking about, but yes JetBrains propagates the type and description from the JSON Schema into the golang templates inside the manifest files, same as it does with any type completion. They are reflected as their JSON Schema types, not golang's types, which I could imagine is potentially confusing to someone used to golang's view of the world but is for sure considerably better than "hurr, the type is whatever you say it is" which will be the case for values.yaml files without an accompanying .schema.json file

---

As for the "only string values for annotations," I think you mean patternProperties:

  {
    "$schema": "http://json-schema.org/draft-07/schema",
    "type": "object",
    "properties": {
      "annotations": {
        "type": "object",
        "description": "this is the description of the annotations key itself",
        "additionalProperties": false,
        "patternProperties": {
          "^[a-z][a-z0-9./]+$": {
            "type": "string",
            "description": "holds the value of the annotation"
          }
        }
      }
    }
  }
and if I put the following, then the 123 gets flagged as a schema violation

  annotations:
    alpha: 123
as does

  annotations:
    _: xxx
    0xcafebabe: denied
---

If you mean schema checking on the output, that is checked by the OpenAPI built into Kubernetes itself, so yes, doing something silly in golang templates will not, by itself, check the result - that's one of the major limitations of Helm's moronic choice of using a text templating language for a structured file format


Oh, OK. I didn't realize it made them visible in the golang templates.



Consider applying for YC's Fall 2025 batch! Applications are open till Aug 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: