Files
harmony/iot/iot-operator-v0/chart/values.schema.json
Jean-Gabriel Gill-Couture 99e661ce4d
All checks were successful
Run Check Script / check (pull_request) Successful in 2m44s
feat(iot-operator): helm chart + gen-chart-crd subcommand
Chapter 3 scaffolding. Chart layout mirrors the CloudNativePG
convention after reviewing the CRD-in-chart vs CRD-as-hook
tradeoff: CRDs live inside templates/ (so helm upgrade re-applies
schema changes) with helm.sh/resource-policy: keep so
helm uninstall never deletes them. Chart publication target is
hub.nationtech.io.

CRD yaml is generated at chart-release time by a new
`iot-operator-v0 gen-chart-crd` subcommand reading
Deployment::crd() — the runtime install path remains the typed
Score; only the chart deliverable uses generated yaml. Wrapped
with the helm conditional + annotations by templates/crds.yaml
via .Files.Get so the generated yaml stays pure.

Install / upgrade / uninstall-preserves-CRD validated against a
scratch k3d cluster; the operator pod naturally stays pending
because the hub.nationtech.io image hasn't been published yet.
2026-04-21 23:33:06 -04:00

59 lines
1.7 KiB
JSON

{
"$schema": "https://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"image": {
"type": "object",
"required": ["repository", "pullPolicy"],
"properties": {
"repository": { "type": "string", "minLength": 1 },
"tag": { "type": "string" },
"pullPolicy": { "enum": ["Always", "IfNotPresent", "Never"] }
}
},
"imagePullSecrets": {
"type": "array",
"items": {
"type": "object",
"required": ["name"],
"properties": { "name": { "type": "string" } }
}
},
"replicaCount": { "type": "integer", "minimum": 1 },
"nats": {
"type": "object",
"required": ["url"],
"properties": { "url": { "type": "string", "minLength": 1 } }
},
"kvBucket": { "type": "string" },
"logLevel": { "type": "string" },
"crds": {
"type": "object",
"required": ["create"],
"properties": { "create": { "type": "boolean" } }
},
"serviceAccount": {
"type": "object",
"required": ["create"],
"properties": {
"create": { "type": "boolean" },
"name": { "type": "string" },
"annotations": { "type": "object" }
}
},
"rbac": {
"type": "object",
"required": ["create"],
"properties": { "create": { "type": "boolean" } }
},
"resources": { "type": "object" },
"podSecurityContext": { "type": "object" },
"containerSecurityContext": { "type": "object" },
"nodeSelector": { "type": "object" },
"tolerations": { "type": "array" },
"affinity": { "type": "object" },
"podAnnotations": { "type": "object" },
"podLabels": { "type": "object" }
}
}