Files
argocd-apps/ci/crd-schemas/postgresql.cnpg.io/subscription_v1.json
T
unkinben d21d9a92d3 feat(ci): add CRD schema generation for kubeconform validation
Add scripts to extract OpenAPI v3 schemas from CRD definitions in all
kustomize overlays and write JSON schema files to ci/crd-schemas/ for
kubeconform validation. This allows kubeconform to validate CRD instances
(Elasticsearch, Kibana, CNPG Cluster, VictoriaMetrics, etc.) instead of
skipping or erroring on them.

- ci/generate-crd-schemas.py: extracts schemas from CRD YAML on stdin
- ci/generate-crd-schemas.sh: iterates overlays, pipes to Python script
- ci/validate-apps.sh, ci/validate-clusters.sh: add local schema-location fallback
- Makefile: add generate-schemas target
- ci/crd-schemas/: 67 generated schemas (cert-manager, cnpg, elastic, victoriametrics, argocd, gateway)
- .pre-commit-config.yaml: raise large-file limit to 2 MB for generated schemas

Run `make generate-schemas` to regenerate after CRD version changes.
2026-05-30 23:09:34 +10:00

115 lines
4.5 KiB
JSON

{
"$schema": "http://json-schema.org/schema#",
"description": "Subscription is the Schema for the subscriptions API",
"properties": {
"apiVersion": {
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
"type": "string"
},
"kind": {
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
"type": "string"
},
"metadata": {
"type": "object"
},
"spec": {
"description": "SubscriptionSpec defines the desired state of Subscription",
"properties": {
"cluster": {
"description": "The name of the PostgreSQL cluster that identifies the \"subscriber\"",
"properties": {
"name": {
"default": "",
"description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
"type": "string"
}
},
"type": "object",
"x-kubernetes-map-type": "atomic"
},
"dbname": {
"description": "The name of the database where the publication will be installed in\nthe \"subscriber\" cluster",
"type": "string",
"x-kubernetes-validations": [
{
"message": "dbname is immutable",
"rule": "self == oldSelf"
}
]
},
"externalClusterName": {
"description": "The name of the external cluster with the publication (\"publisher\")",
"type": "string"
},
"name": {
"description": "The name of the subscription inside PostgreSQL",
"type": "string",
"x-kubernetes-validations": [
{
"message": "name is immutable",
"rule": "self == oldSelf"
}
]
},
"parameters": {
"additionalProperties": {
"type": "string"
},
"description": "Subscription parameters included in the `WITH` clause of the PostgreSQL\n`CREATE SUBSCRIPTION` command. Most parameters cannot be changed\nafter the subscription is created and will be ignored if modified\nlater, except for a limited set documented at:\nhttps://www.postgresql.org/docs/current/sql-altersubscription.html#SQL-ALTERSUBSCRIPTION-PARAMS-SET",
"type": "object"
},
"publicationDBName": {
"description": "The name of the database containing the publication on the external\ncluster. Defaults to the one in the external cluster definition.",
"type": "string"
},
"publicationName": {
"description": "The name of the publication inside the PostgreSQL database in the\n\"publisher\"",
"type": "string"
},
"subscriptionReclaimPolicy": {
"default": "retain",
"description": "The policy for end-of-life maintenance of this subscription",
"enum": [
"delete",
"retain"
],
"type": "string"
}
},
"required": [
"cluster",
"dbname",
"externalClusterName",
"name",
"publicationName"
],
"type": "object"
},
"status": {
"description": "SubscriptionStatus defines the observed state of Subscription",
"properties": {
"applied": {
"description": "Applied is true if the subscription was reconciled correctly",
"type": "boolean"
},
"message": {
"description": "Message is the reconciliation output message",
"type": "string"
},
"observedGeneration": {
"description": "A sequence number representing the latest\ndesired state that was synchronized",
"format": "int64",
"type": "integer"
}
},
"type": "object"
}
},
"required": [
"metadata",
"spec"
],
"type": "object"
}