Files
argocd-apps/schemas/logstash.k8s.elastic.co/logstash_v1alpha1.json
T
unkinben 2bd8fcc0c2
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/pr/kubeconform Pipeline was successful
Add JSON schema generation for kubeconform CRD validation
- ci/generate-schemas.sh extracts schemas from live cluster CRDs via kubectl
- Generated schemas committed to schemas/ for CI use
- Run `make schemas` to regenerate after CRD or K8s version changes
- validate-apps.sh and validate-clusters.sh check local schemas first
- CRD instances (Gateway, TLSRoute, Pooler, etc.) now validated instead of skipped
- CustomResourceDefinition meta-type still skipped (no schema exists upstream)
2026-06-28 17:24:47 +10:00

758 lines
24 KiB
JSON

{
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"apiVersion": {
"type": "string"
},
"kind": {
"type": "string"
},
"metadata": {
"type": "object"
},
"spec": {
"properties": {
"config": {
"type": "object",
"x-kubernetes-preserve-unknown-fields": true
},
"configRef": {
"properties": {
"secretName": {
"type": "string"
}
},
"type": "object"
},
"count": {
"format": "int32",
"type": "integer"
},
"elasticsearchRefs": {
"items": {
"properties": {
"clusterName": {
"minLength": 1,
"type": "string"
},
"name": {
"type": "string"
},
"namespace": {
"type": "string"
},
"secretName": {
"type": "string"
},
"serviceName": {
"type": "string"
}
},
"required": [
"clusterName"
],
"type": "object"
},
"type": "array"
},
"image": {
"type": "string"
},
"monitoring": {
"properties": {
"logs": {
"properties": {
"elasticsearchRefs": {
"items": {
"properties": {
"name": {
"type": "string"
},
"namespace": {
"type": "string"
},
"secretName": {
"type": "string"
},
"serviceName": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
},
"metrics": {
"properties": {
"elasticsearchRefs": {
"items": {
"properties": {
"name": {
"type": "string"
},
"namespace": {
"type": "string"
},
"secretName": {
"type": "string"
},
"serviceName": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
"type": "object"
},
"pipelines": {
"items": {
"type": "object"
},
"type": "array",
"x-kubernetes-preserve-unknown-fields": true
},
"pipelinesRef": {
"properties": {
"secretName": {
"type": "string"
}
},
"type": "object"
},
"podTemplate": {
"type": "object",
"x-kubernetes-preserve-unknown-fields": true
},
"revisionHistoryLimit": {
"format": "int32",
"type": "integer"
},
"secureSettings": {
"items": {
"properties": {
"entries": {
"items": {
"properties": {
"key": {
"type": "string"
},
"path": {
"type": "string"
}
},
"required": [
"key"
],
"type": "object"
},
"type": "array"
},
"secretName": {
"type": "string"
}
},
"required": [
"secretName"
],
"type": "object"
},
"type": "array"
},
"serviceAccountName": {
"type": "string"
},
"services": {
"items": {
"properties": {
"name": {
"type": "string"
},
"service": {
"properties": {
"metadata": {
"properties": {
"annotations": {
"additionalProperties": {
"type": "string"
},
"type": "object"
},
"finalizers": {
"items": {
"type": "string"
},
"type": "array"
},
"labels": {
"additionalProperties": {
"type": "string"
},
"type": "object"
},
"name": {
"type": "string"
},
"namespace": {
"type": "string"
}
},
"type": "object"
},
"spec": {
"properties": {
"allocateLoadBalancerNodePorts": {
"type": "boolean"
},
"clusterIP": {
"type": "string"
},
"clusterIPs": {
"items": {
"type": "string"
},
"type": "array",
"x-kubernetes-list-type": "atomic"
},
"externalIPs": {
"items": {
"type": "string"
},
"type": "array",
"x-kubernetes-list-type": "atomic"
},
"externalName": {
"type": "string"
},
"externalTrafficPolicy": {
"type": "string"
},
"healthCheckNodePort": {
"format": "int32",
"type": "integer"
},
"internalTrafficPolicy": {
"type": "string"
},
"ipFamilies": {
"items": {
"type": "string"
},
"type": "array",
"x-kubernetes-list-type": "atomic"
},
"ipFamilyPolicy": {
"type": "string"
},
"loadBalancerClass": {
"type": "string"
},
"loadBalancerIP": {
"type": "string"
},
"loadBalancerSourceRanges": {
"items": {
"type": "string"
},
"type": "array",
"x-kubernetes-list-type": "atomic"
},
"ports": {
"items": {
"properties": {
"appProtocol": {
"type": "string"
},
"name": {
"type": "string"
},
"nodePort": {
"format": "int32",
"type": "integer"
},
"port": {
"format": "int32",
"type": "integer"
},
"protocol": {
"default": "TCP",
"type": "string"
},
"targetPort": {
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
}
],
"x-kubernetes-int-or-string": true
}
},
"required": [
"port"
],
"type": "object"
},
"type": "array",
"x-kubernetes-list-map-keys": [
"port",
"protocol"
],
"x-kubernetes-list-type": "map"
},
"publishNotReadyAddresses": {
"type": "boolean"
},
"selector": {
"additionalProperties": {
"type": "string"
},
"type": "object",
"x-kubernetes-map-type": "atomic"
},
"sessionAffinity": {
"type": "string"
},
"sessionAffinityConfig": {
"properties": {
"clientIP": {
"properties": {
"timeoutSeconds": {
"format": "int32",
"type": "integer"
}
},
"type": "object"
}
},
"type": "object"
},
"trafficDistribution": {
"type": "string"
},
"type": {
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
},
"tls": {
"properties": {
"certificate": {
"properties": {
"secretName": {
"type": "string"
}
},
"type": "object"
},
"selfSignedCertificate": {
"properties": {
"disabled": {
"type": "boolean"
},
"subjectAltNames": {
"items": {
"properties": {
"dns": {
"type": "string"
},
"ip": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
"type": "object"
}
},
"type": "object"
},
"type": "array"
},
"updateStrategy": {
"properties": {
"rollingUpdate": {
"properties": {
"maxUnavailable": {
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
}
],
"x-kubernetes-int-or-string": true
},
"partition": {
"format": "int32",
"type": "integer"
}
},
"type": "object"
},
"type": {
"type": "string"
}
},
"type": "object"
},
"version": {
"type": "string"
},
"volumeClaimTemplates": {
"items": {
"properties": {
"apiVersion": {
"type": "string"
},
"kind": {
"type": "string"
},
"metadata": {
"properties": {
"annotations": {
"additionalProperties": {
"type": "string"
},
"type": "object"
},
"finalizers": {
"items": {
"type": "string"
},
"type": "array"
},
"labels": {
"additionalProperties": {
"type": "string"
},
"type": "object"
},
"name": {
"type": "string"
},
"namespace": {
"type": "string"
}
},
"type": "object"
},
"spec": {
"properties": {
"accessModes": {
"items": {
"type": "string"
},
"type": "array",
"x-kubernetes-list-type": "atomic"
},
"dataSource": {
"properties": {
"apiGroup": {
"type": "string"
},
"kind": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"kind",
"name"
],
"type": "object",
"x-kubernetes-map-type": "atomic"
},
"dataSourceRef": {
"properties": {
"apiGroup": {
"type": "string"
},
"kind": {
"type": "string"
},
"name": {
"type": "string"
},
"namespace": {
"type": "string"
}
},
"required": [
"kind",
"name"
],
"type": "object"
},
"resources": {
"properties": {
"limits": {
"additionalProperties": {
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
}
],
"pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$",
"x-kubernetes-int-or-string": true
},
"type": "object"
},
"requests": {
"additionalProperties": {
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
}
],
"pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$",
"x-kubernetes-int-or-string": true
},
"type": "object"
}
},
"type": "object"
},
"selector": {
"properties": {
"matchExpressions": {
"items": {
"properties": {
"key": {
"type": "string"
},
"operator": {
"type": "string"
},
"values": {
"items": {
"type": "string"
},
"type": "array",
"x-kubernetes-list-type": "atomic"
}
},
"required": [
"key",
"operator"
],
"type": "object"
},
"type": "array",
"x-kubernetes-list-type": "atomic"
},
"matchLabels": {
"additionalProperties": {
"type": "string"
},
"type": "object"
}
},
"type": "object",
"x-kubernetes-map-type": "atomic"
},
"storageClassName": {
"type": "string"
},
"volumeAttributesClassName": {
"type": "string"
},
"volumeMode": {
"type": "string"
},
"volumeName": {
"type": "string"
}
},
"type": "object"
},
"status": {
"properties": {
"accessModes": {
"items": {
"type": "string"
},
"type": "array",
"x-kubernetes-list-type": "atomic"
},
"allocatedResourceStatuses": {
"additionalProperties": {
"type": "string"
},
"type": "object",
"x-kubernetes-map-type": "granular"
},
"allocatedResources": {
"additionalProperties": {
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
}
],
"pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$",
"x-kubernetes-int-or-string": true
},
"type": "object"
},
"capacity": {
"additionalProperties": {
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
}
],
"pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$",
"x-kubernetes-int-or-string": true
},
"type": "object"
},
"conditions": {
"items": {
"properties": {
"lastProbeTime": {
"format": "date-time",
"type": "string"
},
"lastTransitionTime": {
"format": "date-time",
"type": "string"
},
"message": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "string"
},
"type": {
"type": "string"
}
},
"required": [
"status",
"type"
],
"type": "object"
},
"type": "array",
"x-kubernetes-list-map-keys": [
"type"
],
"x-kubernetes-list-type": "map"
},
"currentVolumeAttributesClassName": {
"type": "string"
},
"modifyVolumeStatus": {
"properties": {
"status": {
"type": "string"
},
"targetVolumeAttributesClassName": {
"type": "string"
}
},
"required": [
"status"
],
"type": "object"
},
"phase": {
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
},
"type": "array"
}
},
"required": [
"version"
],
"type": "object"
},
"status": {
"properties": {
"availableNodes": {
"format": "int32",
"type": "integer"
},
"elasticsearchAssociationsStatus": {
"additionalProperties": {
"type": "string"
},
"type": "object"
},
"expectedNodes": {
"format": "int32",
"type": "integer"
},
"health": {
"type": "string"
},
"monitoringAssociationStatus": {
"additionalProperties": {
"type": "string"
},
"type": "object"
},
"observedGeneration": {
"format": "int64",
"type": "integer"
},
"selector": {
"type": "string"
},
"version": {
"type": "string"
}
},
"required": [
"selector"
],
"type": "object"
}
},
"type": "object"
}