diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e819d0b7..703a4fa7 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -22,6 +22,17 @@ repos: args: - --chart-search-root=charts + - repo: https://github.com/dadav/helm-schema + rev: 0.16.1 + hooks: + - id: helm-schema + args: + - --add-schema-reference + - --append-newline + - --chart-search-root=charts + - --no-dependencies + - --skip-auto-generation=additionalProperties + - repo: https://github.com/igorshubovych/markdownlint-cli rev: v0.43.0 hooks: diff --git a/charts/argocd-metrics-server/values.schema.json b/charts/argocd-metrics-server/values.schema.json index a7f17f98..34127419 100644 --- a/charts/argocd-metrics-server/values.schema.json +++ b/charts/argocd-metrics-server/values.schema.json @@ -1,182 +1,423 @@ { - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "affinity": { - "type": "object" + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "affinity": { + "description": "Affinity settings for pod assignment", + "required": [], + "title": "affinity", + "type": "object" + }, + "extraEnv": { + "description": "additional environment variables to be added to the pods", + "items": { + "required": [] + }, + "required": [], + "title": "extraEnv", + "type": "array" + }, + "fullnameOverride": { + "default": "", + "description": "String to fully override `\"argocd-extension-metrics.fullname\"`", + "required": [], + "title": "fullnameOverride", + "type": "string" + }, + "global": { + "description": "Global values are values that can be accessed from any chart or subchart by exactly the same name.", + "required": [], + "title": "global", + "type": "object" + }, + "image": { + "properties": { + "pullPolicy": { + "default": "Always", + "description": "image pull policy", + "required": [], + "title": "pullPolicy", + "type": "string" }, - "extraEnv": { - "type": "array" + "registry": { + "default": "quay.io", + "description": "image registory", + "required": [], + "title": "registry", + "type": "string" }, - "fullnameOverride": { - "type": "string" + "repository": { + "default": "argoprojlabs/argocd-extension-metrics", + "description": "image repository", + "required": [], + "title": "repository", + "type": "string" }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "type": "string" - }, - "registry": { - "type": "string" - }, - "repository": { - "type": "string" - }, - "tag": { - "type": "string" - } - } - }, - "imagePullSecrets": { - "type": "array" + "tag": { + "default": "v1.0.3", + "description": "Overrides the image tag", + "required": [], + "title": "tag", + "type": "string" + } + }, + "required": [ + "registry", + "repository", + "pullPolicy", + "tag" + ], + "title": "image", + "type": "object" + }, + "imagePullSecrets": { + "description": "If defined, uses a Secret to pull an image from a private Docker registry or repository.", + "items": { + "required": [] + }, + "required": [], + "title": "imagePullSecrets", + "type": "array" + }, + "nameOverride": { + "default": "", + "description": "Provide a name in place of `argocd-extension-metrics`", + "required": [], + "title": "nameOverride", + "type": "string" + }, + "networkPolicy": { + "properties": { + "additionalAnnotations": { + "description": "Annotations to be added to the NetworkPolicies", + "required": [], + "title": "additionalAnnotations", + "type": "object" }, - "nameOverride": { - "type": "string" + "additionalLabels": { + "description": "Labels to be added to the NetworkPolicies", + "required": [], + "title": "additionalLabels", + "type": "object" }, - "networkPolicy": { - "type": "object", - "properties": { - "additionalAnnotations": { - "type": "object" - }, - "additionalLabels": { - "type": "object" - }, - "argocd": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "namespaceSelector": { - "type": "object" - }, - "podSelector": { - "type": "object" - } - } - }, - "dns": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "namespaceSelector": { - "type": "object", - "properties": { - "kubernetes.io/metadata.name": { - "type": "string" - } - } - }, - "podSelector": { - "type": "object", - "properties": { - "k8s-app": { - "type": "string" - } - } - } - } - }, - "enabled": { - "type": "boolean" - }, - "prometheus": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "podSelector": { - "type": "object", - "properties": { - "app.kubernetes.io/name": { - "type": "string" - } - } - } - } - } + "argocd": { + "properties": { + "enabled": { + "default": true, + "description": "- allow incoming traffic from Argo CD", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "namespaceSelector": { + "description": "The labels of the namespace where Argo CD is running", + "required": [], + "title": "namespaceSelector", + "type": "object" + }, + "podSelector": { + "description": "The labels of the Argo CD Pods", + "required": [], + "title": "podSelector", + "type": "object" } + }, + "required": [ + "enabled", + "namespaceSelector", + "podSelector" + ], + "title": "argocd", + "type": "object" }, - "nodeSelector": { - "type": "object" - }, - "podSecurityContext": { - "type": "object" - }, - "prometheus": { - "type": "object", - "properties": { - "dashboards": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "port": { - "type": "integer" - }, - "service": { - "type": "string" + "dns": { + "properties": { + "enabled": { + "default": true, + "description": "allow outgoing traffic to the Kubernetes DNS", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "namespaceSelector": { + "description": "The labels of the namespace where the Kubernetes DNS is running", + "properties": { + "kubernetes.io/metadata.name": { + "default": "kube-system", + "required": [], + "title": "kubernetes.io/metadata.name", + "type": "string" + } + }, + "required": [ + "kubernetes.io/metadata.name" + ], + "title": "namespaceSelector", + "type": "object" + }, + "podSelector": { + "description": "The labels of the Kubernetes DNS Pods", + "properties": { + "k8s-app": { + "default": "kube-dns", + "required": [], + "title": "k8s-app", + "type": "string" } + }, + "required": [ + "k8s-app" + ], + "title": "podSelector", + "type": "object" } + }, + "required": [ + "enabled", + "namespaceSelector", + "podSelector" + ], + "title": "dns", + "type": "object" }, - "replicaCount": { - "type": "integer" + "enabled": { + "default": false, + "description": "- create a NetworkPolicy resource to limit the allowed traffic", + "required": [], + "title": "enabled", + "type": "boolean" }, - "resources": { - "type": "object", - "properties": { - "requests": { - "type": "object", - "properties": { - "cpu": { - "type": "string" - }, - "memory": { - "type": "string" - } - } + "prometheus": { + "properties": { + "enabled": { + "default": true, + "description": "- allow outgoing traffic to Prometheus", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "podSelector": { + "description": "The labels of the Prometheus Pods", + "properties": { + "app.kubernetes.io/name": { + "default": "prometheus", + "required": [], + "title": "app.kubernetes.io/name", + "type": "string" } + }, + "required": [ + "app.kubernetes.io/name" + ], + "title": "podSelector", + "type": "object" } + }, + "required": [ + "enabled", + "podSelector" + ], + "title": "prometheus", + "type": "object" + } + }, + "required": [ + "enabled", + "additionalAnnotations", + "additionalLabels", + "argocd", + "dns", + "prometheus" + ], + "title": "networkPolicy", + "type": "object" + }, + "nodeSelector": { + "description": "Node labels for pod assignment", + "required": [], + "title": "nodeSelector", + "type": "object" + }, + "podSecurityContext": { + "description": "pod-level security context", + "required": [], + "title": "podSecurityContext", + "type": "object" + }, + "prometheus": { + "properties": { + "dashboards": { + "default": "{\n \"groupKind\": \"pod\",\n \"tabs\": [\"Golden Signal\"],\n \"rows\": [\n {\n \"name\": \"pod\",\n \"title\": \"Pods\",\n \"tab\": \"Golden Signal\",\n \"graphs\": [\n {\n \"name\": \"pod_cpu_line\",\n \"title\": \"CPU\",\n \"description\": \"\",\n \"graphType\": \"line\",\n \"metricName\": \"pod\",\n \"queryExpression\": \"sum(rate(container_cpu_usage_seconds_total{pod=~\\\"{{.name}}\\\", image!=\\\"\\\", container!=\\\"POD\\\", container!=\\\"\\\", container_name!=\\\"POD\\\"}[5m])) by (pod)\"\n },\n {\n \"name\": \"pod_cpu_pie\",\n \"title\": \"CPU Avg\",\n \"description\": \"\",\n \"graphType\": \"pie\",\n \"metricName\": \"pod\",\n \"queryExpression\": \"sum(rate(container_cpu_usage_seconds_total{pod=~\\\"{{.name}}\\\", container!=\\\"POD\\\", image!=\\\"\\\", container!=\\\"\\\", container_name!=\\\"POD\\\"}[5m])) by (pod)\"\n },\n {\n \"name\": \"pod_memory_line\",\n \"title\": \"Memory\",\n \"description\": \"\",\n \"graphType\": \"line\",\n \"metricName\": \"pod\",\n \"queryExpression\": \"sum(rate(container_memory_usage_bytes{pod=~\\\"{{.name}}\\\", container!=\\\"POD\\\", image!=\\\"\\\", container!=\\\"\\\", container_name!=\\\"POD\\\"}[5m])) by (pod)\"\n },\n {\n \"name\": \"pod_memory_pie\",\n \"title\": \"Mem Avg\",\n \"description\": \"\",\n \"graphType\": \"pie\",\n \"metricName\": \"pod\",\n \"queryExpression\": \"sum(rate(container_memory_usage_bytes{pod=~\\\"{{.name}}\\\", container!=\\\"POD\\\", image!=\\\"\\\", container!=\\\"\\\", container_name!=\\\"POD\\\"}[5m])) by (pod)\"\n }\n ]\n },\n {\n \"name\": \"container\",\n \"title\": \"Containers\",\n \"tab\": \"Golden Signal\",\n \"graphs\": [\n {\n \"name\": \"container_cpu_line\",\n \"title\": \"CPU\",\n \"description\": \"\",\n \"graphType\": \"line\",\n \"metricName\": \"container\",\n \"queryExpression\": \"sum(rate(container_cpu_usage_seconds_total{pod=~\\\"{{.name}}\\\", image!=\\\"\\\", container!=\\\"POD\\\", container!=\\\"\\\", container_name!=\\\"POD\\\"}[5m])) by (container)\"\n },\n {\n \"name\": \"container_cpu_pie\",\n \"title\": \"CPU Avg\",\n \"description\": \"\",\n \"graphType\": \"pie\",\n \"metricName\": \"container\",\n \"queryExpression\": \"sum(rate(container_cpu_usage_seconds_total{pod=~\\\"{{.name}}\\\", image!=\\\"\\\",container!=\\\"POD\\\", container!=\\\"\\\", container_name!=\\\"POD\\\"}[5m])) by (container)\"\n },\n {\n \"name\": \"container_memory_line\",\n \"title\": \"Memory\",\n \"description\": \"\",\n \"graphType\": \"line\",\n \"metricName\": \"container\",\n \"queryExpression\": \"sum(rate(container_memory_usage_bytes{pod=~\\\"{{.name}}\\\", image!=\\\"\\\", container!=\\\"POD\\\", container!=\\\"\\\", container_name!=\\\"POD\\\"}[5m])) by (container)\"\n },\n {\n \"name\": \"container_memory_pie\",\n \"title\": \"Mem Avg\",\n \"description\": \"\",\n \"graphType\": \"pie\",\n \"metricName\": \"container\",\n \"queryExpression\": \"sum(rate(container_memory_usage_bytes{pod=~\\\"{{.name}}\\\", image!=\\\"\\\", container!=\\\"POD\\\", container!=\\\"\\\", container_name!=\\\"POD\\\"}[5m])) by (container)\"\n }\n ]\n }\n ]\n},\n{\n \"groupKind\": \"deployment\",\n \"tabs\": [\"Golden Signal\"],\n \"rows\": [\n {\n \"name\": \"httplatency\",\n \"title\": \"HTTP Latency\",\n \"tab\": \"Golden Signal\",\n \"graphs\": [\n {\n \"name\": \"http_200_latency\",\n \"title\": \"Latency\",\n \"description\": \"\",\n \"graphType\": \"line\",\n \"metricName\": \"pod_template_hash\",\n \"queryExpression\": \"sum(rate(http_server_requests_seconds_sum {namespace=\\\"{{.namespace}}\\\", status=\\\"200\\\"} [1m])) by (pod_template_hash)\"\n }\n ]\n },\n {\n \"name\": \"httperrortate\",\n \"title\": \"HTTP Error Rate\",\n \"tab\": \"Golden Signal\",\n \"graphs\": [\n {\n \"name\": \"http_error_rate_500\",\n \"title\": \"HTTP Error 500\",\n \"description\": \"\",\n \"graphType\": \"line\",\n \"metricName\": \"pod_template_hash\",\n \"queryExpression\": \"sum(rate(http_server_requests_seconds_count {namespace=\\\"{{.namespace}}\\\", status=\\\"500\\\"} [1m])) by (pod_template_hash)\"\n },\n {\n \"name\": \"http_error_rate_400\",\n \"title\": \"HTTP Error 400\",\n \"description\": \"\",\n \"graphType\": \"line\",\n \"metricName\": \"pod_template_hash\",\n \"queryExpression\": \"sum(rate(http_server_requests_seconds_count {namespace=\\\"{{.namespace}}\\\", status=\\\"404\\\"} [1m])) by (pod_template_hash)\"\n }\n ]\n },\n {\n \"name\": \"httptraffic\",\n \"title\": \"HTTP Traffic\",\n \"tab\": \"Golden Signal\",\n \"graphs\": [\n {\n \"name\": \"http_traffic\",\n \"title\": \"Traffic\",\n \"description\": \"\",\n \"graphType\": \"line\",\n \"metricName\": \"pod_template_hash\",\n \"queryExpression\": \"sum(rate(http_server_requests_seconds_count {namespace=\\\"{{.namespace}}\\\"} [1m])) by (pod_template_hash)\"\n }\n ]\n },\n {\n \"name\": \"pod\",\n \"title\": \"Pods\",\n \"tab\": \"Golden Signal\",\n \"graphs\": [\n {\n \"name\": \"pod_cpu_line\",\n \"title\": \"CPU\",\n \"description\": \"\",\n \"graphType\": \"line\",\n \"metricName\": \"pod\",\n \"queryExpression\": \"sum(rate(container_cpu_usage_seconds_total{pod=~\\\"{{.name}}\\\", image!=\\\"\\\", container!=\\\"POD\\\", container!=\\\"\\\", container_name!=\\\"POD\\\"}[5m])) by (pod)\"\n },\n {\n \"name\": \"pod_cpu_pie\",\n \"title\": \"CPU Avg\",\n \"description\": \"\",\n \"graphType\": \"pie\",\n \"metricName\": \"pod\",\n \"queryExpression\": \"sum(rate(container_cpu_usage_seconds_total{pod=~\\\"{{.name}}\\\", container!=\\\"POD\\\", image!=\\\"\\\", container!=\\\"\\\", container_name!=\\\"POD\\\"}[5m])) by (pod)\"\n },\n {\n \"name\": \"pod_memory_line\",\n \"title\": \"Memory\",\n \"description\": \"\",\n \"graphType\": \"line\",\n \"metricName\": \"pod\",\n \"queryExpression\": \"sum(rate(container_memory_usage_bytes{pod=~\\\"{{.name}}\\\", container!=\\\"POD\\\", image!=\\\"\\\", container!=\\\"\\\", container_name!=\\\"POD\\\"}[5m])) by (pod)\"\n },\n {\n \"name\": \"pod_memory_pie\",\n \"title\": \"Mem Avg\",\n \"description\": \"\",\n \"graphType\": \"pie\",\n \"metricName\": \"pod\",\n \"queryExpression\": \"sum(rate(container_memory_usage_bytes{pod=~\\\"{{.name}}\\\", container!=\\\"POD\\\", image!=\\\"\\\", container!=\\\"\\\", container_name!=\\\"POD\\\"}[5m])) by (pod)\"\n }\n ]\n }\n ]\n},\n{\n \"groupKind\": \"rollout\",\n \"tabs\": [\"Golden Signal\"],\n \"rows\": [\n {\n \"name\": \"httplatency\",\n \"title\": \"HTTP Latency\",\n \"tab\": \"Golden Signal\",\n \"graphs\": [\n {\n \"name\": \"http_200_latency\",\n \"title\": \"Latency\",\n \"description\": \"\",\n \"graphType\": \"line\",\n \"metricName\": \"rollout_template_hash\",\n \"queryExpression\": \"sum(rate(http_server_requests_seconds_sum {namespace=\\\"{{.namespace}}\\\", status=\\\"200\\\"} [1m])) by (rollout_template_hash)\"\n }\n ]\n },\n {\n \"name\": \"httperrortate\",\n \"title\": \"HTTP Error Rate\",\n \"tab\": \"Golden Signal\",\n \"graphs\": [\n {\n \"name\": \"http_error_rate_500\",\n \"title\": \"HTTP Error 500\",\n \"description\": \"\",\n \"graphType\": \"line\",\n \"metricName\": \"rollout_template_hash\",\n \"queryExpression\": \"sum(rate(http_server_requests_seconds_count {namespace=\\\"{{.namespace}}\\\", status=\\\"500\\\"} [1m])) by (rollout_template_hash)\"\n },\n {\n \"name\": \"http_error_rate_400\",\n \"title\": \"HTTP Error 400\",\n \"description\": \"\",\n \"graphType\": \"line\",\n \"metricName\": \"rollout_template_hash\",\n \"queryExpression\": \"sum(rate(http_server_requests_seconds_count {namespace=\\\"{{.namespace}}\\\", status=\\\"404\\\"} [1m])) by (rollout_template_hash)\"\n }\n ]\n },\n {\n \"name\": \"httptraffic\",\n \"title\": \"HTTP Traffic\",\n \"tab\": \"Golden Signal\",\n \"graphs\": [\n {\n \"name\": \"http_traffic\",\n \"title\": \"Traffic\",\n \"description\": \"\",\n \"graphType\": \"line\",\n \"metricName\": \"rollout_template_hash\",\n \"queryExpression\": \"sum(rate(http_server_requests_seconds_count {namespace=\\\"{{.namespace}}\\\"} [1m])) by (rollout_template_hash)\"\n }\n ]\n },\n {\n \"name\": \"pod\",\n \"title\": \"Pods\",\n \"tab\": \"Golden Signal\",\n \"graphs\": [\n {\n \"name\": \"pod_cpu_line\",\n \"title\": \"CPU\",\n \"description\": \"\",\n \"graphType\": \"line\",\n \"metricName\": \"pod\",\n \"queryExpression\": \"sum(rate(container_cpu_usage_seconds_total{pod=~\\\"{{.name}}\\\", image!=\\\"\\\", container!=\\\"POD\\\", container!=\\\"\\\", container_name!=\\\"POD\\\"}[5m])) by (pod)\"\n },\n {\n \"name\": \"pod_cpu_pie\",\n \"title\": \"CPU Avg\",\n \"description\": \"\",\n \"graphType\": \"pie\",\n \"metricName\": \"pod\",\n \"queryExpression\": \"sum(rate(container_cpu_usage_seconds_total{pod=~\\\"{{.name}}\\\", container!=\\\"POD\\\", image!=\\\"\\\", container!=\\\"\\\", container_name!=\\\"POD\\\"}[5m])) by (pod)\"\n },\n {\n \"name\": \"pod_memory_line\",\n \"title\": \"Memory\",\n \"description\": \"\",\n \"graphType\": \"line\",\n \"metricName\": \"pod\",\n \"queryExpression\": \"sum(rate(container_memory_usage_bytes{pod=~\\\"{{.name}}\\\", container!=\\\"POD\\\", image!=\\\"\\\", container!=\\\"\\\", container_name!=\\\"POD\\\"}[5m])) by (pod)\"\n },\n {\n \"name\": \"pod_memory_pie\",\n \"title\": \"Mem Avg\",\n \"description\": \"\",\n \"graphType\": \"pie\",\n \"metricName\": \"pod\",\n \"queryExpression\": \"sum(rate(container_memory_usage_bytes{pod=~\\\"{{.name}}\\\", container!=\\\"POD\\\", image!=\\\"\\\", container!=\\\"\\\", container_name!=\\\"POD\\\"}[5m])) by (pod)\"\n }\n ]\n }\n ]\n}\n", + "description": "The dashboards that will be displayed in the Argo CD UI", + "required": [], + "title": "dashboards", + "type": "string" }, - "revisionHistoryLimit": { - "type": "integer" + "namespace": { + "default": "monitoring", + "description": "The namespace where Prometheus is running", + "required": [], + "title": "namespace", + "type": "string" }, - "securityContext": { - "type": "object" + "port": { + "default": 9090, + "description": "The port on which the Prometheus service is listening for traffic", + "required": [], + "title": "port", + "type": "integer" }, "service": { - "type": "object", - "properties": { - "port": { - "type": "integer" - }, - "type": { - "type": "string" - } + "default": "prometheus-operated", + "description": "The name of the Prometheus service", + "required": [], + "title": "service", + "type": "string" + } + }, + "required": [ + "dashboards", + "namespace", + "port", + "service" + ], + "title": "prometheus", + "type": "object" + }, + "replicaCount": { + "default": 1, + "description": "Number of replicas", + "required": [], + "title": "replicaCount", + "type": "integer" + }, + "resources": { + "description": "Resource limits and requests for the controller pods.", + "properties": { + "requests": { + "properties": { + "cpu": { + "default": "100m", + "required": [], + "title": "cpu", + "type": "string" + }, + "memory": { + "default": "100Mi", + "required": [], + "title": "memory", + "type": "string" } + }, + "required": [ + "cpu", + "memory" + ], + "title": "requests", + "type": "object" + } + }, + "required": [ + "requests" + ], + "title": "resources", + "type": "object" + }, + "revisionHistoryLimit": { + "default": 0, + "description": "The number of old ReplicaSets to retain", + "required": [], + "title": "revisionHistoryLimit", + "type": "integer" + }, + "securityContext": { + "description": "container-level security context", + "required": [], + "title": "securityContext", + "type": "object" + }, + "service": { + "properties": { + "port": { + "default": 9003, + "description": "Kubernetes port where service is exposed", + "required": [], + "title": "port", + "type": "integer" }, - "serviceAccount": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "create": { - "type": "boolean" - }, - "name": { - "type": "string" - } - } + "type": { + "default": "ClusterIP", + "description": "Kubernetes service type", + "required": [], + "title": "type", + "type": "string" + } + }, + "required": [ + "type", + "port" + ], + "title": "service", + "type": "object" + }, + "serviceAccount": { + "properties": { + "annotations": { + "description": "Annotations to add to the service account", + "required": [], + "title": "annotations", + "type": "object" + }, + "create": { + "default": true, + "description": "Specifies whether a service account should be created", + "required": [], + "title": "create", + "type": "boolean" }, - "tolerations": { - "type": "array" + "name": { + "default": "", + "description": "The name of the service account to use.\nIf not set and create is true, a name is generated using the fullname template", + "required": [], + "title": "name", + "type": "string" } + }, + "required": [ + "create", + "annotations", + "name" + ], + "title": "serviceAccount", + "type": "object" + }, + "tolerations": { + "description": "Toleration labels for pod assignment", + "items": { + "required": [] + }, + "required": [], + "title": "tolerations", + "type": "array" } + }, + "required": [ + "nameOverride", + "fullnameOverride", + "image", + "imagePullSecrets", + "replicaCount", + "revisionHistoryLimit", + "podSecurityContext", + "resources", + "securityContext", + "service", + "serviceAccount", + "nodeSelector", + "tolerations", + "affinity", + "extraEnv", + "networkPolicy", + "prometheus" + ], + "type": "object" } diff --git a/charts/baserow/values.schema.json b/charts/baserow/values.schema.json index 92725828..c1116257 100644 --- a/charts/baserow/values.schema.json +++ b/charts/baserow/values.schema.json @@ -1,1090 +1,2724 @@ { - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "backend": { - "type": "object", - "properties": { - "asgi": { - "type": "object", - "properties": { - "affinity": { - "type": "object" - }, - "autoscaling": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "maxReplicas": { - "type": "integer" - }, - "minReplicas": { - "type": "integer" - }, - "targetCPUUtilizationPercentage": { - "type": "integer" - }, - "targetMemoryUtilizationPercentage": { - "type": "integer" - } - } - }, - "extraEnv": { - "type": "array" - }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "type": "string" - }, - "repository": { - "type": "string" - }, - "tag": { - "type": "string" - } - } - }, - "imagePullSecrets": { - "type": "array" - }, - "livenessProbe": { - "type": "object", - "properties": { - "initialDelaySeconds": { - "type": "integer" - }, - "periodSeconds": { - "type": "integer" - }, - "successThreshold": { - "type": "integer" - }, - "timeoutSeconds": { - "type": "integer" - } - } - }, - "nodeSelector": { - "type": "object" - }, - "podAnnotations": { - "type": "object" - }, - "podSecurityContext": { - "type": "object", - "properties": { - "fsGroup": { - "type": "integer" - }, - "runAsGroup": { - "type": "integer" - }, - "runAsUser": { - "type": "integer" - } - } - }, - "priorityClassName": { - "type": "string" - }, - "readinessProbe": { - "type": "object", - "properties": { - "initialDelaySeconds": { - "type": "integer" - }, - "periodSeconds": { - "type": "integer" - }, - "successThreshold": { - "type": "integer" - }, - "timeoutSeconds": { - "type": "integer" - } - } - }, - "replicaCount": { - "type": "integer" - }, - "resources": { - "type": "object" - }, - "revisionHistoryLimit": { - "type": "integer" - }, - "securityContext": { - "type": "object", - "properties": { - "runAsGroup": { - "type": "integer" - }, - "runAsNonRoot": { - "type": "boolean" - }, - "runAsUser": { - "type": "integer" - } - } - }, - "selectorLabels": { - "type": "object" - }, - "service": { - "type": "object", - "properties": { - "port": { - "type": "integer" - }, - "type": { - "type": "string" - } - } - }, - "serviceAccount": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "create": { - "type": "boolean" - }, - "name": { - "type": "string" - } - } - }, - "tolerations": { - "type": "array" - } - } - }, - "celery": { - "type": "object", - "properties": { - "affinity": { - "type": "object" - }, - "autoscaling": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "maxReplicas": { - "type": "integer" - }, - "minReplicas": { - "type": "integer" - }, - "targetCPUUtilizationPercentage": { - "type": "integer" - }, - "targetMemoryUtilizationPercentage": { - "type": "integer" - } - } - }, - "extraEnv": { - "type": "array" - }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "type": "string" - }, - "repository": { - "type": "string" - }, - "tag": { - "type": "string" - } - } - }, - "imagePullSecrets": { - "type": "array" - }, - "livenessProbe": { - "type": "object", - "properties": { - "initialDelaySeconds": { - "type": "integer" - }, - "periodSeconds": { - "type": "integer" - }, - "timeoutSeconds": { - "type": "integer" - } - } - }, - "nodeSelector": { - "type": "object" - }, - "podAnnotations": { - "type": "object" - }, - "podSecurityContext": { - "type": "object", - "properties": { - "fsGroup": { - "type": "integer" - }, - "runAsGroup": { - "type": "integer" - }, - "runAsUser": { - "type": "integer" - } - } - }, - "priorityClassName": { - "type": "string" - }, - "readinessProbe": { - "type": "object", - "properties": { - "initialDelaySeconds": { - "type": "integer" - }, - "periodSeconds": { - "type": "integer" - }, - "timeoutSeconds": { - "type": "integer" - } - } - }, - "replicaCount": { - "type": "integer" - }, - "resources": { - "type": "object" - }, - "revisionHistoryLimit": { - "type": "integer" - }, - "securityContext": { - "type": "object", - "properties": { - "runAsGroup": { - "type": "integer" - }, - "runAsNonRoot": { - "type": "boolean" - }, - "runAsUser": { - "type": "integer" - } - } - }, - "selectorLabels": { - "type": "object" - }, - "serviceAccount": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "create": { - "type": "boolean" - }, - "name": { - "type": "string" - } - } - }, - "tolerations": { - "type": "array" - } - } - }, - "config": { - "type": "object", - "properties": { - "additionalApps": { - "type": "string" - }, - "airtableImportSoftTimeLimit": { - "type": "string" - }, - "amountOfGunicornWorkers": { - "type": "string" - }, - "aws": { - "type": "object", - "properties": { - "accessKeyId": { - "type": "string" - }, - "bucketName": { - "type": "string" - }, - "existingSecret": { - "type": "string" - }, - "s3CustomDomain": { - "type": "string" - }, - "s3EndpointUrl": { - "type": "string" - }, - "s3RegionName": { - "type": "string" - }, - "secretAccessKey": { - "type": "string" - } - } - }, - "batchRowsSizeLimit": { - "type": "string" - }, - "celery": { - "type": "object", - "properties": { - "amountOfWorkers": { - "type": "string" - }, - "beatDebugLevel": { - "type": "string" - }, - "beatStartupDelay": { - "type": "string" - }, - "runMinimal": { - "type": "string" - } - } - }, - "disableAnonymousPublicViewWsConnections": { - "type": "string" - }, - "disableModelCache": { - "type": "string" - }, - "dontUpdateFormulasAfterMigration": { - "type": "string" - }, - "email": { - "type": "object", - "properties": { - "existingSecret": { - "type": "string" - }, - "fromEmail": { - "type": "string" - }, - "smtp": { - "type": "string" - }, - "smtpHost": { - "type": "string" - }, - "smtpPassword": { - "type": "string" - }, - "smtpPort": { - "type": "string" - }, - "smtpUseTls": { - "type": "string" - }, - "smtpUser": { - "type": "string" - } - } - }, - "enableSecureProxySslHeader": { - "type": "string" - }, - "existingSecret": { - "type": "string" - }, - "fileUploadSizeLimit": { - "type": "string" - }, - "hoursUntilTrashPermanentlyDeleted": { - "type": "string" - }, - "initialCreateSyncTableDataLimit": { - "type": "string" - }, - "initialTableDataLimit": { - "type": "string" - }, - "jobs": { - "type": "object", - "properties": { - "cleanupIntervalMinutes": { - "type": "string" - }, - "expirationTimeLimit": { - "type": "string" - }, - "softTimeLimit": { - "type": "string" - } - } - }, - "jwtSigningKey": { - "type": "string" - }, - "logging": { - "type": "object", - "properties": { - "backendDebug": { - "type": "string" - }, - "backendLogLevel": { - "type": "string" - }, - "databaseLogLevel": { - "type": "string" - } - } - }, - "maxFileImportErrorCount": { - "type": "string" - }, - "maxRowReportErrorCount": { - "type": "string" - }, - "media": { - "type": "object", - "properties": { - "root": { - "type": "string" - }, - "url": { - "type": "string" - } - } - }, - "migrateOnStartup": { - "type": "string" - }, - "minutesUntilActionCleanedUp": { - "type": "string" - }, - "postgresStartupCheckAttempts": { - "type": "string" - }, - "rowPageSizeLimit": { - "type": "string" - }, - "secretKey": { - "type": "string" - }, - "snapshotExpirationTimeDays": { - "type": "string" - }, - "syncTemplatesTimeLimit": { - "type": "string" - }, - "tokens": { - "type": "object", - "properties": { - "accessTokenLifetimeMinutes": { - "type": "string" - }, - "refreshTokenLifetimeHours": { - "type": "string" - } - } - }, - "triggerSyncTemplatesAfterMigration": { - "type": "string" - }, - "waitInsteadOf409ConflictError": { - "type": "string" - }, - "webhook": { - "type": "object", - "properties": { - "allowPrivateAddress": { - "type": "string" - }, - "ipBlacklist": { - "type": "string" - }, - "ipWhitelist": { - "type": "string" - }, - "maxCallLogEntries": { - "type": "string" - }, - "maxConsecutiveTriggerFailures": { - "type": "string" - }, - "maxPerTable": { - "type": "string" - }, - "maxRetriesPerCall": { - "type": "string" - }, - "requestTimeoutSeconds": { - "type": "string" - }, - "urlCheckTimeoutSecs": { - "type": "string" - }, - "urlRegexBlacklist": { - "type": "string" - } - } - } - } - }, - "ingress": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "className": { - "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "hostname": { - "type": "string" - }, - "paths": { - "type": "object", - "properties": { - "asgiPath": { - "type": "string" - }, - "wsgiPath": { - "type": "string" - } - } - }, - "tls": { - "type": "array" - } - } - }, - "persistence": { - "type": "object", - "properties": { - "accessModes": { - "type": "array", - "items": { - "type": "string" - } - }, - "annotations": { - "type": "object" - }, - "enabled": { - "type": "boolean" - }, - "existingClaim": { - "type": "string" - }, - "resources": { - "type": "object" - }, - "storageClassName": { - "type": "string" - } - } - }, - "wsgi": { - "type": "object", - "properties": { - "affinity": { - "type": "object" - }, - "autoscaling": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "maxReplicas": { - "type": "integer" - }, - "minReplicas": { - "type": "integer" - }, - "targetCPUUtilizationPercentage": { - "type": "integer" - }, - "targetMemoryUtilizationPercentage": { - "type": "integer" - } - } - }, - "extraEnv": { - "type": "array" - }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "type": "string" - }, - "repository": { - "type": "string" - }, - "tag": { - "type": "string" - } - } - }, - "imagePullSecrets": { - "type": "array" - }, - "livenessProbe": { - "type": "object", - "properties": { - "initialDelaySeconds": { - "type": "integer" - }, - "periodSeconds": { - "type": "integer" - }, - "successThreshold": { - "type": "integer" - }, - "timeoutSeconds": { - "type": "integer" - } - } - }, - "nodeSelector": { - "type": "object" - }, - "podAnnotations": { - "type": "object" - }, - "podSecurityContext": { - "type": "object", - "properties": { - "fsGroup": { - "type": "integer" - }, - "runAsGroup": { - "type": "integer" - }, - "runAsUser": { - "type": "integer" - } - } - }, - "priorityClassName": { - "type": "string" - }, - "readinessProbe": { - "type": "object", - "properties": { - "initialDelaySeconds": { - "type": "integer" - }, - "periodSeconds": { - "type": "integer" - }, - "successThreshold": { - "type": "integer" - }, - "timeoutSeconds": { - "type": "integer" - } - } - }, - "replicaCount": { - "type": "integer" - }, - "resources": { - "type": "object" - }, - "revisionHistoryLimit": { - "type": "integer" - }, - "securityContext": { - "type": "object", - "properties": { - "runAsGroup": { - "type": "integer" - }, - "runAsNonRoot": { - "type": "boolean" - }, - "runAsUser": { - "type": "integer" - } - } - }, - "selectorLabels": { - "type": "object" - }, - "service": { - "type": "object", - "properties": { - "port": { - "type": "integer" - }, - "type": { - "type": "string" - } - } - }, - "serviceAccount": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "create": { - "type": "boolean" - }, - "name": { - "type": "string" - } - } - }, - "tolerations": { - "type": "array" - } - } + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "backend": { + "additionalProperties": false, + "properties": { + "asgi": { + "additionalProperties": false, + "properties": { + "affinity": { + "additionalProperties": false, + "description": "Affinity settings for pod assignment", + "required": [], + "title": "affinity", + "type": "object" + }, + "autoscaling": { + "additionalProperties": false, + "properties": { + "enabled": { + "default": false, + "description": "Enable Horizontal POD autoscaling", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "maxReplicas": { + "default": 100, + "description": "Maximum number of replicas", + "required": [], + "title": "maxReplicas", + "type": "integer" + }, + "minReplicas": { + "default": 1, + "description": "Minimum number of replicas", + "required": [], + "title": "minReplicas", + "type": "integer" + }, + "targetCPUUtilizationPercentage": { + "default": 80, + "description": "Target CPU utilization percentage", + "required": [], + "title": "targetCPUUtilizationPercentage", + "type": "integer" + }, + "targetMemoryUtilizationPercentage": { + "default": 80, + "description": "Target Memory utilization percentage", + "required": [], + "title": "targetMemoryUtilizationPercentage", + "type": "integer" } - } - }, - "config": { - "type": "object", - "properties": { - "maxImportFileSizeMb": { - "type": "string" + }, + "required": [ + "enabled", + "minReplicas", + "maxReplicas", + "targetCPUUtilizationPercentage", + "targetMemoryUtilizationPercentage" + ], + "title": "autoscaling", + "type": "object" + }, + "extraEnv": { + "description": "additional environment variables to be added to the pods", + "items": { + "required": [] + }, + "required": [], + "title": "extraEnv", + "type": "array" + }, + "image": { + "additionalProperties": false, + "properties": { + "pullPolicy": { + "default": "Always", + "description": "image pull policy", + "required": [], + "title": "pullPolicy", + "type": "string" }, - "maxSnapshotsPerGroup": { - "type": "string" + "repository": { + "default": "baserow/backend", + "description": "image repository", + "required": [], + "title": "repository", + "type": "string" }, - "publicBackendUrl": { - "type": "string" + "tag": { + "default": "1.26.1", + "description": "Overrides the image tag", + "required": [], + "title": "tag", + "type": "string" + } + }, + "required": [ + "repository", + "pullPolicy", + "tag" + ], + "title": "image", + "type": "object" + }, + "imagePullSecrets": { + "description": "If defined, uses a Secret to pull an image from a private Docker registry or repository.", + "items": { + "required": [] + }, + "required": [], + "title": "imagePullSecrets", + "type": "array" + }, + "livenessProbe": { + "additionalProperties": false, + "properties": { + "initialDelaySeconds": { + "default": 5, + "description": "Initial delay seconds for livenessProbe", + "required": [], + "title": "initialDelaySeconds", + "type": "integer" }, - "publicFrontendUrl": { - "type": "string" + "periodSeconds": { + "default": 5, + "description": "Period seconds for livenessProbe", + "required": [], + "title": "periodSeconds", + "type": "integer" + }, + "successThreshold": { + "default": 1, + "description": "Success threshold for livenessProbe", + "required": [], + "title": "successThreshold", + "type": "integer" + }, + "timeoutSeconds": { + "default": 5, + "description": "Timeout seconds for livenessProbe", + "required": [], + "title": "timeoutSeconds", + "type": "integer" } - } - }, - "externalPostgresql": { - "type": "object", - "properties": { - "auth": { - "type": "object", - "properties": { - "database": { - "type": "string" - }, - "existingSecret": { - "type": "string" - }, - "password": { - "type": "string" - }, - "userPasswordKey": { - "type": "string" - }, - "username": { - "type": "string" - } - } - }, - "hostname": { - "type": "string" + }, + "required": [ + "initialDelaySeconds", + "periodSeconds", + "successThreshold", + "timeoutSeconds" + ], + "title": "livenessProbe", + "type": "object" + }, + "nodeSelector": { + "additionalProperties": false, + "description": "Node labels for pod assignment", + "required": [], + "title": "nodeSelector", + "type": "object" + }, + "podAnnotations": { + "additionalProperties": false, + "description": "Annotations to be added to the frontend pods", + "required": [], + "title": "podAnnotations", + "type": "object" + }, + "podSecurityContext": { + "additionalProperties": false, + "description": "pod-level security context", + "properties": { + "fsGroup": { + "default": 9999, + "required": [], + "title": "fsGroup", + "type": "integer" + }, + "runAsGroup": { + "default": 9999, + "required": [], + "title": "runAsGroup", + "type": "integer" + }, + "runAsUser": { + "default": 9999, + "required": [], + "title": "runAsUser", + "type": "integer" + } + }, + "required": [ + "fsGroup", + "runAsGroup", + "runAsUser" + ], + "title": "podSecurityContext", + "type": "object" + }, + "priorityClassName": { + "default": "", + "description": "Pod priority class name", + "required": [], + "title": "priorityClassName", + "type": "string" + }, + "readinessProbe": { + "additionalProperties": false, + "properties": { + "initialDelaySeconds": { + "default": 5, + "description": "Initial delay seconds for readinessProbe", + "required": [], + "title": "initialDelaySeconds", + "type": "integer" + }, + "periodSeconds": { + "default": 5, + "description": "Period seconds for readinessProbe", + "required": [], + "title": "periodSeconds", + "type": "integer" + }, + "successThreshold": { + "default": 1, + "description": "Success threshold for readinessProbe", + "required": [], + "title": "successThreshold", + "type": "integer" }, + "timeoutSeconds": { + "default": 5, + "description": "Timeout seconds for readinessProbe", + "required": [], + "title": "timeoutSeconds", + "type": "integer" + } + }, + "required": [ + "initialDelaySeconds", + "periodSeconds", + "successThreshold", + "timeoutSeconds" + ], + "title": "readinessProbe", + "type": "object" + }, + "replicaCount": { + "default": 1, + "description": "Number of replicas", + "required": [], + "title": "replicaCount", + "type": "integer" + }, + "resources": { + "additionalProperties": false, + "description": "Resource limits and requests for the controller pods.", + "required": [], + "title": "resources", + "type": "object" + }, + "revisionHistoryLimit": { + "default": 10, + "description": "The number of old ReplicaSets to retain", + "required": [], + "title": "revisionHistoryLimit", + "type": "integer" + }, + "securityContext": { + "additionalProperties": false, + "description": "container-level security context", + "properties": { + "runAsGroup": { + "default": 9999, + "required": [], + "title": "runAsGroup", + "type": "integer" + }, + "runAsNonRoot": { + "default": true, + "required": [], + "title": "runAsNonRoot", + "type": "boolean" + }, + "runAsUser": { + "default": 9999, + "required": [], + "title": "runAsUser", + "type": "integer" + } + }, + "required": [ + "runAsGroup", + "runAsNonRoot", + "runAsUser" + ], + "title": "securityContext", + "type": "object" + }, + "selectorLabels": { + "additionalProperties": false, + "description": "Additional labels to add to the pod", + "required": [], + "title": "selectorLabels", + "type": "object" + }, + "service": { + "additionalProperties": false, + "properties": { "port": { - "type": "integer" + "default": 8000, + "description": "Kubernetes port where service is exposed", + "required": [], + "title": "port", + "type": "integer" + }, + "type": { + "default": "ClusterIP", + "description": "Kubernetes service type", + "required": [], + "title": "type", + "type": "string" } + }, + "required": [ + "type", + "port" + ], + "title": "service", + "type": "object" + }, + "serviceAccount": { + "additionalProperties": false, + "properties": { + "annotations": { + "additionalProperties": false, + "description": "Annotations to add to the service account", + "required": [], + "title": "annotations", + "type": "object" + }, + "create": { + "default": true, + "description": "Specifies whether a service account should be created", + "required": [], + "title": "create", + "type": "boolean" + }, + "name": { + "default": "", + "description": "The name of the service account to use.\nIf not set and create is true, a name is generated using the fullname template", + "required": [], + "title": "name", + "type": "string" + } + }, + "required": [ + "create", + "annotations", + "name" + ], + "title": "serviceAccount", + "type": "object" + }, + "tolerations": { + "description": "Toleration labels for pod assignment", + "items": { + "required": [] + }, + "required": [], + "title": "tolerations", + "type": "array" } + }, + "required": [ + "image", + "imagePullSecrets", + "podAnnotations", + "podSecurityContext", + "priorityClassName", + "replicaCount", + "revisionHistoryLimit", + "resources", + "securityContext", + "serviceAccount", + "service", + "autoscaling", + "livenessProbe", + "readinessProbe", + "nodeSelector", + "tolerations", + "affinity", + "selectorLabels", + "extraEnv" + ], + "title": "asgi", + "type": "object" }, - "externalRedis": { - "type": "object", - "properties": { - "auth": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "existingSecret": { - "type": "string" - }, - "password": { - "type": "string" - }, - "userPasswordKey": { - "type": "string" - } - } - }, - "hostname": { - "type": "string" + "celery": { + "additionalProperties": false, + "properties": { + "affinity": { + "additionalProperties": false, + "description": "Affinity settings for pod assignment", + "required": [], + "title": "affinity", + "type": "object" + }, + "autoscaling": { + "additionalProperties": false, + "properties": { + "enabled": { + "default": false, + "description": "Enable Horizontal POD autoscaling", + "required": [], + "title": "enabled", + "type": "boolean" }, - "port": { - "type": "integer" + "maxReplicas": { + "default": 100, + "description": "Maximum number of replicas", + "required": [], + "title": "maxReplicas", + "type": "integer" + }, + "minReplicas": { + "default": 1, + "description": "Minimum number of replicas", + "required": [], + "title": "minReplicas", + "type": "integer" + }, + "targetCPUUtilizationPercentage": { + "default": 80, + "description": "Target CPU utilization percentage", + "required": [], + "title": "targetCPUUtilizationPercentage", + "type": "integer" + }, + "targetMemoryUtilizationPercentage": { + "default": 80, + "description": "Target Memory utilization percentage", + "required": [], + "title": "targetMemoryUtilizationPercentage", + "type": "integer" + } + }, + "required": [ + "enabled", + "minReplicas", + "maxReplicas", + "targetCPUUtilizationPercentage", + "targetMemoryUtilizationPercentage" + ], + "title": "autoscaling", + "type": "object" + }, + "extraEnv": { + "description": "additional environment variables to be added to the pods", + "items": { + "required": [] + }, + "required": [], + "title": "extraEnv", + "type": "array" + }, + "image": { + "additionalProperties": false, + "properties": { + "pullPolicy": { + "default": "Always", + "description": "image pull policy", + "required": [], + "title": "pullPolicy", + "type": "string" + }, + "repository": { + "default": "baserow/backend", + "description": "image repository", + "required": [], + "title": "repository", + "type": "string" + }, + "tag": { + "default": "1.26.1", + "description": "Overrides the image tag", + "required": [], + "title": "tag", + "type": "string" } + }, + "required": [ + "repository", + "pullPolicy", + "tag" + ], + "title": "image", + "type": "object" + }, + "imagePullSecrets": { + "description": "If defined, uses a Secret to pull an image from a private Docker registry or repository.", + "items": { + "required": [] + }, + "required": [], + "title": "imagePullSecrets", + "type": "array" + }, + "livenessProbe": { + "additionalProperties": false, + "properties": { + "initialDelaySeconds": { + "default": 10, + "description": "Initial delay seconds for livenessProbe", + "required": [], + "title": "initialDelaySeconds", + "type": "integer" + }, + "periodSeconds": { + "default": 10, + "description": "Period seconds for livenessProbe", + "required": [], + "title": "periodSeconds", + "type": "integer" + }, + "timeoutSeconds": { + "default": 10, + "description": "Timeout seconds for livenessProbe", + "required": [], + "title": "timeoutSeconds", + "type": "integer" + } + }, + "required": [ + "initialDelaySeconds", + "periodSeconds", + "timeoutSeconds" + ], + "title": "livenessProbe", + "type": "object" + }, + "nodeSelector": { + "additionalProperties": false, + "description": "Node labels for pod assignment", + "required": [], + "title": "nodeSelector", + "type": "object" + }, + "podAnnotations": { + "additionalProperties": false, + "description": "Annotations to be added to the frontend pods", + "required": [], + "title": "podAnnotations", + "type": "object" + }, + "podSecurityContext": { + "additionalProperties": false, + "description": "pod-level security context", + "properties": { + "fsGroup": { + "default": 9999, + "required": [], + "title": "fsGroup", + "type": "integer" + }, + "runAsGroup": { + "default": 9999, + "required": [], + "title": "runAsGroup", + "type": "integer" + }, + "runAsUser": { + "default": 9999, + "required": [], + "title": "runAsUser", + "type": "integer" + } + }, + "required": [ + "fsGroup", + "runAsGroup", + "runAsUser" + ], + "title": "podSecurityContext", + "type": "object" + }, + "priorityClassName": { + "default": "", + "description": "Pod priority class name", + "required": [], + "title": "priorityClassName", + "type": "string" + }, + "readinessProbe": { + "additionalProperties": false, + "properties": { + "initialDelaySeconds": { + "default": 10, + "description": "Initial delay seconds for readinessProbe", + "required": [], + "title": "initialDelaySeconds", + "type": "integer" + }, + "periodSeconds": { + "default": 10, + "description": "Period seconds for readinessProbe", + "required": [], + "title": "periodSeconds", + "type": "integer" + }, + "timeoutSeconds": { + "default": 10, + "description": "Timeout seconds for readinessProbe", + "required": [], + "title": "timeoutSeconds", + "type": "integer" + } + }, + "required": [ + "initialDelaySeconds", + "periodSeconds", + "timeoutSeconds" + ], + "title": "readinessProbe", + "type": "object" + }, + "replicaCount": { + "default": 1, + "description": "Number of replicas", + "required": [], + "title": "replicaCount", + "type": "integer" + }, + "resources": { + "additionalProperties": false, + "description": "Resource limits and requests for the controller pods.", + "required": [], + "title": "resources", + "type": "object" + }, + "revisionHistoryLimit": { + "default": 10, + "description": "The number of old ReplicaSets to retain", + "required": [], + "title": "revisionHistoryLimit", + "type": "integer" + }, + "securityContext": { + "additionalProperties": false, + "description": "container-level security context", + "properties": { + "runAsGroup": { + "default": 9999, + "required": [], + "title": "runAsGroup", + "type": "integer" + }, + "runAsNonRoot": { + "default": true, + "required": [], + "title": "runAsNonRoot", + "type": "boolean" + }, + "runAsUser": { + "default": 9999, + "required": [], + "title": "runAsUser", + "type": "integer" + } + }, + "required": [ + "runAsGroup", + "runAsNonRoot", + "runAsUser" + ], + "title": "securityContext", + "type": "object" + }, + "selectorLabels": { + "additionalProperties": false, + "description": "Additional labels to add to the pod", + "required": [], + "title": "selectorLabels", + "type": "object" + }, + "serviceAccount": { + "additionalProperties": false, + "properties": { + "annotations": { + "additionalProperties": false, + "description": "Annotations to add to the service account", + "required": [], + "title": "annotations", + "type": "object" + }, + "create": { + "default": true, + "description": "Specifies whether a service account should be created", + "required": [], + "title": "create", + "type": "boolean" + }, + "name": { + "default": "", + "description": "The name of the service account to use.\nIf not set and create is true, a name is generated using the fullname template", + "required": [], + "title": "name", + "type": "string" + } + }, + "required": [ + "create", + "annotations", + "name" + ], + "title": "serviceAccount", + "type": "object" + }, + "tolerations": { + "description": "Toleration labels for pod assignment", + "items": { + "required": [] + }, + "required": [], + "title": "tolerations", + "type": "array" } + }, + "required": [ + "image", + "imagePullSecrets", + "podAnnotations", + "podSecurityContext", + "priorityClassName", + "replicaCount", + "revisionHistoryLimit", + "resources", + "securityContext", + "serviceAccount", + "autoscaling", + "livenessProbe", + "readinessProbe", + "nodeSelector", + "tolerations", + "affinity", + "selectorLabels", + "extraEnv" + ], + "title": "celery", + "type": "object" }, - "frontend": { - "type": "object", - "properties": { - "affinity": { - "type": "object" - }, - "autoscaling": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "maxReplicas": { - "type": "integer" - }, - "minReplicas": { - "type": "integer" - }, - "targetCPUUtilizationPercentage": { - "type": "integer" - }, - "targetMemoryUtilizationPercentage": { - "type": "integer" - } - } - }, - "config": { - "type": "object", - "properties": { - "additionalModules": { - "type": "string" - }, - "disableGoogleDocsFilePreview": { - "type": "string" - }, - "disablePublicUrlCheck": { - "type": "string" - }, - "downloadFileViaXhr": { - "type": "string" - } - } - }, - "extraEnv": { - "type": "array" - }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "type": "string" - }, - "repository": { - "type": "string" - }, - "tag": { - "type": "string" - } - } - }, - "imagePullSecrets": { - "type": "array" - }, - "ingress": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "className": { - "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "hostname": { - "type": "string" - }, - "path": { - "type": "string" - }, - "pathType": { - "type": "string" - }, - "tls": { - "type": "array" - } - } - }, - "livenessProbe": { - "type": "object", - "properties": { - "initialDelaySeconds": { - "type": "integer" - }, - "periodSeconds": { - "type": "integer" - }, - "successThreshold": { - "type": "integer" - } - } - }, - "nodeSelector": { - "type": "object" - }, - "podAnnotations": { - "type": "object" - }, - "podSecurityContext": { - "type": "object", - "properties": { - "fsGroup": { - "type": "integer" - }, - "runAsGroup": { - "type": "integer" - }, - "runAsUser": { - "type": "integer" - } - } - }, - "priorityClassName": { - "type": "string" + "config": { + "additionalProperties": false, + "description": "configuration for the backend", + "properties": { + "additionalApps": { + "default": "", + "description": "A comma separated list of additional django applications to add to the INSTALLED_APPS django setting", + "required": [], + "title": "additionalApps", + "type": "string" + }, + "airtableImportSoftTimeLimit": { + "default": "1800", + "description": "The maximum amount of seconds an Airtable migration import job can run.", + "required": [], + "title": "airtableImportSoftTimeLimit", + "type": "string" + }, + "amountOfGunicornWorkers": { + "default": "", + "description": "The number of concurrent worker processes used by the Baserow backend gunicorn server to process incoming requests", + "required": [], + "title": "amountOfGunicornWorkers", + "type": "string" + }, + "aws": { + "additionalProperties": false, + "properties": { + "accessKeyId": { + "default": "", + "description": "The access key for your AWS account. When set to anything other than empty will switch Baserow to use a S3 compatible bucket for storing user file uploads.", + "required": [], + "title": "accessKeyId", + "type": "string" + }, + "bucketName": { + "default": "", + "description": "Your Amazon Web Services storage bucket name.", + "required": [], + "title": "bucketName", + "type": "string" + }, + "existingSecret": { + "default": "", + "description": "Name of existing secret to use for AWS credentials like backend.config.aws.accessKeyId and backend.config.aws.secretAccessKey. Keys in secret should be called `access-key-id` and `secret-access-key`.", + "required": [], + "title": "existingSecret", + "type": "string" + }, + "s3CustomDomain": { + "default": "", + "description": "Your custom domain where the files can be downloaded from.", + "required": [], + "title": "s3CustomDomain", + "type": "string" + }, + "s3EndpointUrl": { + "default": "", + "description": "Custom S3 URL to use when connecting to S3, including scheme.", + "required": [], + "title": "s3EndpointUrl", + "type": "string" + }, + "s3RegionName": { + "default": "", + "description": "Name of the AWS S3 region to use (eg. eu-west-1)", + "required": [], + "title": "s3RegionName", + "type": "string" + }, + "secretAccessKey": { + "default": "", + "description": "The access secret key for your AWS account.", + "required": [], + "title": "secretAccessKey", + "type": "string" + } + }, + "required": [ + "accessKeyId", + "bucketName", + "existingSecret", + "secretAccessKey", + "s3CustomDomain", + "s3EndpointUrl", + "s3RegionName" + ], + "title": "aws", + "type": "object" + }, + "batchRowsSizeLimit": { + "default": "200", + "description": "Controls how many rows can be created, deleted or updated at once using the batch endpoints.", + "required": [], + "title": "batchRowsSizeLimit", + "type": "string" + }, + "celery": { + "additionalProperties": false, + "properties": { + "amountOfWorkers": { + "default": "", + "description": "The number of concurrent celery worker processes used to process asynchronous tasks. If not set will default to the number of available cores. Each celery process uses memory, to reduce Baserow’s memory footprint consider setting and reducing this variable.", + "required": [], + "title": "amountOfWorkers", + "type": "string" + }, + "beatDebugLevel": { + "default": "INFO", + "description": "The logging level for the celery beat service.", + "required": [], + "title": "beatDebugLevel", + "type": "string" + }, + "beatStartupDelay": { + "default": "15", + "description": "The number of seconds the celery beat worker sleeps before starting up.", + "required": [], + "title": "beatStartupDelay", + "type": "string" + }, + "runMinimal": { + "default": "", + "description": "When BASEROW_AMOUNT_OF_WORKERS is 1 and this is set to a non empty value Baserow will not run the export-worker but instead run both the celery export and normal tasks on the normal celery worker. Set this to lower the memory usage of Baserow in expense of performance.", + "required": [], + "title": "runMinimal", + "type": "string" + } + }, + "required": [ + "amountOfWorkers", + "beatDebugLevel", + "beatStartupDelay", + "runMinimal" + ], + "title": "celery", + "type": "object" + }, + "disableAnonymousPublicViewWsConnections": { + "default": "", + "description": "When sharing views publicly a websocket connection is opened to provide realtime updates to viewers of the public link. To disable this set any non empty value. When disabled publicly shared links will need to be refreshed to see any updates to the view.", + "required": [], + "title": "disableAnonymousPublicViewWsConnections", + "type": "string" + }, + "disableModelCache": { + "default": "", + "description": "When set to any non empty value the model cache used to speed up Baserow will be disabled. Useful to enable when debugging Baserow errors if they are possibly caused by the model cache itself.", + "required": [], + "title": "disableModelCache", + "type": "string" + }, + "dontUpdateFormulasAfterMigration": { + "default": "", + "description": "Baserow’s formulas have an internal version number. When upgrading Baserow if the formula language has also changed then after the database migration has run Baserow will also automatically recalculate all formulas if they have a different version. Set this to any non empty value to disable this automatic update if you would prefer to run the update_formulas management command manually yourself. Formulas might break if you forget to do so after an upgrade of Baserow until and so it is recommended to leave this empty.", + "required": [], + "title": "dontUpdateFormulasAfterMigration", + "type": "string" + }, + "email": { + "additionalProperties": false, + "properties": { + "existingSecret": { + "default": "", + "description": "Name of existing secret to use for the email password. Key in secret should be called `email-password`.", + "required": [], + "title": "existingSecret", + "type": "string" + }, + "fromEmail": { + "default": "", + "description": "The email address Baserow will send emails from.", + "required": [], + "title": "fromEmail", + "type": "string" + }, + "smtp": { + "default": "", + "description": "If set to any non empty value then Baserow will start sending emails using the configuration options below. If not set then Baserow will not send emails and just log them to the Celery worker logs instead.", + "required": [], + "title": "smtp", + "type": "string" + }, + "smtpHost": { + "default": "", + "description": "The host of the external SMTP server that Baserow should use to send emails.", + "required": [], + "title": "smtpHost", + "type": "string" + }, + "smtpPassword": { + "default": "", + "description": "The password to authenticate to the smtp host when sending emails.", + "required": [], + "title": "smtpPassword", + "type": "string" + }, + "smtpPort": { + "default": "", + "description": "The port used to connect to the smtp host.", + "required": [], + "title": "smtpPort", + "type": "string" + }, + "smtpUseTls": { + "default": "", + "description": "If set to any non empty value then Baserow will attempt to send emails using TLS.", + "required": [], + "title": "smtpUseTls", + "type": "string" + }, + "smtpUser": { + "default": "", + "description": "The username to authenticate to the smtp host when sending emails.", + "required": [], + "title": "smtpUser", + "type": "string" + } + }, + "required": [ + "existingSecret", + "fromEmail", + "smtp", + "smtpHost", + "smtpPassword", + "smtpPort", + "smtpUser", + "smtpUseTls" + ], + "title": "email", + "type": "object" + }, + "enableSecureProxySslHeader": { + "default": "", + "description": "Set to any non-empty value to ensure Baserow generates https:// next links provided by paginated API endpoints. Baserow will still work correctly if not enabled, this is purely for giving the correct https url for clients of the API.", + "required": [], + "title": "enableSecureProxySslHeader", + "type": "string" + }, + "existingSecret": { + "default": "", + "description": "Name of existing secret to use for secret configuration values like backend.config.jwtSigningKey and backend.config.secretKey. Keys in secret should be called `jwt-signing-key` and `secret-key`.", + "required": [], + "title": "existingSecret", + "type": "string" + }, + "fileUploadSizeLimit": { + "default": "1048576", + "description": "The max file size in MB allowed to be uploaded by users into a Baserow File Field.", + "required": [], + "title": "fileUploadSizeLimit", + "type": "string" + }, + "hoursUntilTrashPermanentlyDeleted": { + "default": "", + "description": "Items from the trash will be permanently deleted after this number of hours.", + "required": [], + "title": "hoursUntilTrashPermanentlyDeleted", + "type": "string" + }, + "initialCreateSyncTableDataLimit": { + "default": "5000", + "description": "The maximum number of rows you can import in a synchronous way", + "required": [], + "title": "initialCreateSyncTableDataLimit", + "type": "string" + }, + "initialTableDataLimit": { + "default": "", + "description": "The amount of rows that can be imported when creating a table. Defaults to empty which means unlimited rows.", + "required": [], + "title": "initialTableDataLimit", + "type": "string" + }, + "jobs": { + "additionalProperties": false, + "properties": { + "cleanupIntervalMinutes": { + "default": "5", + "description": "How often the job cleanup task will run.", + "required": [], + "title": "cleanupIntervalMinutes", + "type": "string" + }, + "expirationTimeLimit": { + "default": "43200", + "description": "How long before a Baserow job will be kept before being cleaned up.", + "required": [], + "title": "expirationTimeLimit", + "type": "string" + }, + "softTimeLimit": { + "default": "1800", + "description": "The number of seconds a Baserow job can run before being terminated.", + "required": [], + "title": "softTimeLimit", + "type": "string" + } + }, + "required": [ + "cleanupIntervalMinutes", + "expirationTimeLimit", + "softTimeLimit" + ], + "title": "jobs", + "type": "object" + }, + "jwtSigningKey": { + "default": "", + "description": "The signing key that is used to sign the content of generated tokens. For HMAC signing, this should be a random string with at least as many bits of data as is required by the signing protocol. See https://django-rest-framework-simplejwt.readthedocs.io/en/latest/settings.html#signing-key for more details.", + "required": [], + "title": "jwtSigningKey", + "type": "string" + }, + "logging": { + "additionalProperties": false, + "properties": { + "backendDebug": { + "default": "off", + "description": "If set to “on” then will enable the non production safe debug mode for the Baserow django backend.", + "required": [], + "title": "backendDebug", + "type": "string" + }, + "backendLogLevel": { + "default": "INFO", + "description": "The default log level used by the backend, supports ERROR, WARNING, INFO, DEBUG, TRACE", + "required": [], + "title": "backendLogLevel", + "type": "string" + }, + "databaseLogLevel": { + "default": "ERROR", + "description": "The default log level used for database related logs in the backend. Supports the same values as the normal log level. If you also enable BASEROW_BACKEND_DEBUG and set this to DEBUG you will be able to see all SQL queries in the backend logs.", + "required": [], + "title": "databaseLogLevel", + "type": "string" + } + }, + "required": [ + "backendDebug", + "backendLogLevel", + "databaseLogLevel" + ], + "title": "logging", + "type": "object" + }, + "maxFileImportErrorCount": { + "default": "30", + "description": "The max number of per row errors than can occur in a file import before an overall failure is declared.", + "required": [], + "title": "maxFileImportErrorCount", + "type": "string" + }, + "maxRowReportErrorCount": { + "default": "30", + "description": "The maximum row error count tolerated before a file import fails. Before this max error count the import will continue and the non failing rows will be imported and after it, no rows are imported at all.", + "required": [], + "title": "maxRowReportErrorCount", + "type": "string" + }, + "media": { + "additionalProperties": false, + "properties": { + "root": { + "default": "/baserow/media", + "description": "The folder in which the backend will store user uploaded files", + "required": [], + "title": "root", + "type": "string" + }, + "url": { + "default": "$PUBLIC_BACKEND_URL/media/", + "description": "The URL at which user uploaded media files will be made available", + "required": [], + "title": "url", + "type": "string" + } + }, + "required": [ + "root", + "url" + ], + "title": "media", + "type": "object" + }, + "migrateOnStartup": { + "default": "true", + "description": "If set to “true” when the Baserow backend service starts up it will automatically apply database migrations. Set to any other value to disable. If you disable this then you must remember to manually apply the database migrations when upgrading Baserow to a new version.", + "required": [], + "title": "migrateOnStartup", + "type": "string" + }, + "minutesUntilActionCleanedUp": { + "default": "120", + "description": "How long before actions are cleaned up, actions are used to let you undo/redo so this is effectively the max length of time you can undo/redo can action.", + "required": [], + "title": "minutesUntilActionCleanedUp", + "type": "string" + }, + "postgresStartupCheckAttempts": { + "default": "5", + "description": "When Baserow’s Backend service starts up it first checks to see if the postgres database is available.", + "required": [], + "title": "postgresStartupCheckAttempts", + "type": "string" + }, + "rowPageSizeLimit": { + "default": "200", + "description": "The maximum number of rows that can be requested at once.", + "required": [], + "title": "rowPageSizeLimit", + "type": "string" + }, + "secretKey": { + "default": "", + "description": "The Secret key used by Django for cryptographic signing such as generating secure password reset links and managing sessions. See https://docs.djangoproject.com/en/3.2/ref/settings/#std:setting-SECRET_KEY for more details.", + "required": [], + "title": "secretKey", + "type": "string" + }, + "snapshotExpirationTimeDays": { + "default": "360", + "description": "Controls when snapshots expire, set in number of days. Expired snapshots will be automatically deleted.", + "required": [], + "title": "snapshotExpirationTimeDays", + "type": "string" + }, + "syncTemplatesTimeLimit": { + "default": "1800", + "description": "The number of seconds before the background sync templates job will timeout if not yet completed.", + "required": [], + "title": "syncTemplatesTimeLimit", + "type": "string" + }, + "tokens": { + "additionalProperties": false, + "properties": { + "accessTokenLifetimeMinutes": { + "default": "10", + "description": "The number of minutes which specifies how long access tokens are valid. This will be converted in a timedelta value and added to the current UTC time during token generation to obtain the token’s default “exp” claim value.", + "required": [], + "title": "accessTokenLifetimeMinutes", + "type": "string" }, - "readinessProbe": { - "type": "object", - "properties": { - "initialDelaySeconds": { - "type": "integer" - }, - "periodSeconds": { - "type": "integer" - }, - "successThreshold": { - "type": "integer" - } - } - }, - "replicaCount": { - "type": "integer" - }, - "resources": { - "type": "object" - }, - "revisionHistoryLimit": { - "type": "integer" - }, - "securityContext": { - "type": "object", - "properties": { - "runAsGroup": { - "type": "integer" - }, - "runAsNonRoot": { - "type": "boolean" - }, - "runAsUser": { - "type": "integer" - } - } - }, - "selectorLabels": { - "type": "object" - }, - "service": { - "type": "object", - "properties": { - "port": { - "type": "integer" - }, - "type": { - "type": "string" - } - } - }, - "serviceAccount": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "create": { - "type": "boolean" - }, - "name": { - "type": "string" - } - } - }, - "tolerations": { - "type": "array" + "refreshTokenLifetimeHours": { + "default": "168", + "description": "The number of hours which specifies how long refresh tokens are valid. This will be converted in a timedelta value and added to the current UTC time during token generation to obtain the token’s default “exp” claim value.", + "required": [], + "title": "refreshTokenLifetimeHours", + "type": "string" } + }, + "required": [ + "accessTokenLifetimeMinutes", + "refreshTokenLifetimeHours" + ], + "title": "tokens", + "type": "object" + }, + "triggerSyncTemplatesAfterMigration": { + "default": "true", + "description": "If set to “true” when after a migration Baserow will automatically sync all builtin Baserow templates in the background. If you are using a postgres database which is constrained to fewer than 10000 rows then we recommend you disable this as the Baserow templates will go over that row limit. To disable this set to any other value than “true”", + "required": [], + "title": "triggerSyncTemplatesAfterMigration", + "type": "string" + }, + "waitInsteadOf409ConflictError": { + "default": "", + "description": "When updating or creating various resources in Baserow if another concurrent operation is ongoing (like a snapshot, duplication, import etc) which would be affected by your modification a 409 HTTP error will be returned. If you instead would prefer Baserow to not return a 409 and just block waiting until the operation finishes and then to perform the requested operation set this flag to any non-empty value.", + "required": [], + "title": "waitInsteadOf409ConflictError", + "type": "string" + }, + "webhook": { + "additionalProperties": false, + "properties": { + "allowPrivateAddress": { + "default": "", + "description": "If set to any non empty value allows webhooks to access all addresses. Enabling this flag is a security risk as it will allow users to send webhook requests to internal addresses on your network. Instead consider using the three variables below first to allow access to only some internal network hostnames or IPs.", + "required": [], + "title": "allowPrivateAddress", + "type": "string" + }, + "ipBlacklist": { + "default": "", + "description": "Disabled if backend.config.webhook.allowPrivateAddress is set. List of comma seperated IP addresses or ranges that webhooks will be denied from using after the URL has been resolved to an IP using DNS.", + "required": [], + "title": "ipBlacklist", + "type": "string" + }, + "ipWhitelist": { + "default": "", + "description": "Disabled if backend.config.webhook.allowPrivateAddress is set. List of comma seperated IP addresses or ranges that webhooks will be allowed to use after the webhook URL has been resolved to an IP using DNS.", + "required": [], + "title": "ipWhitelist", + "type": "string" + }, + "maxCallLogEntries": { + "default": "10", + "description": "The maximum number of call log entries stored per webhook.", + "required": [], + "title": "maxCallLogEntries", + "type": "string" + }, + "maxConsecutiveTriggerFailures": { + "default": "8", + "description": "The number of consecutive trigger failures that can occur before a webhook is disabled.", + "required": [], + "title": "maxConsecutiveTriggerFailures", + "type": "string" + }, + "maxPerTable": { + "default": "20", + "description": "The max number of webhooks per Baserow table.", + "required": [], + "title": "maxPerTable", + "type": "string" + }, + "maxRetriesPerCall": { + "default": "8", + "description": "The max number of retries per webhook call.", + "required": [], + "title": "maxRetriesPerCall", + "type": "string" + }, + "requestTimeoutSeconds": { + "default": "5", + "description": "How long to wait on making the webhook request before timing out.", + "required": [], + "title": "requestTimeoutSeconds", + "type": "string" + }, + "urlCheckTimeoutSecs": { + "default": "10", + "description": "Disabled if backend.config.webhook.allowPrivateAddress is set. How long to wait before timing out and returning an error when checking if an url can be accessed for a webhook.", + "required": [], + "title": "urlCheckTimeoutSecs", + "type": "string" + }, + "urlRegexBlacklist": { + "default": "", + "description": "Disabled if backend.config.webhook.allowPrivateAddress is set. List of comma seperated regexes used to validate user configured webhook URLs, will show the user an error if any regexes match their webhook URL and prevent it from running.", + "required": [], + "title": "urlRegexBlacklist", + "type": "string" + } + }, + "required": [ + "allowPrivateAddress", + "ipBlacklist", + "ipWhitelist", + "maxCallLogEntries", + "maxConsecutiveTriggerFailures", + "maxPerTable", + "maxRetriesPerCall", + "requestTimeoutSeconds", + "urlCheckTimeoutSecs", + "urlRegexBlacklist" + ], + "title": "webhook", + "type": "object" } + }, + "required": [ + "additionalApps", + "airtableImportSoftTimeLimit", + "amountOfGunicornWorkers", + "aws", + "batchRowsSizeLimit", + "celery", + "disableAnonymousPublicViewWsConnections", + "disableModelCache", + "dontUpdateFormulasAfterMigration", + "email", + "enableSecureProxySslHeader", + "existingSecret", + "fileUploadSizeLimit", + "hoursUntilTrashPermanentlyDeleted", + "initialCreateSyncTableDataLimit", + "initialTableDataLimit", + "jobs", + "jwtSigningKey", + "logging", + "maxFileImportErrorCount", + "maxRowReportErrorCount", + "media", + "migrateOnStartup", + "minutesUntilActionCleanedUp", + "postgresStartupCheckAttempts", + "rowPageSizeLimit", + "secretKey", + "snapshotExpirationTimeDays", + "syncTemplatesTimeLimit", + "tokens", + "triggerSyncTemplatesAfterMigration", + "waitInsteadOf409ConflictError", + "webhook" + ], + "title": "config", + "type": "object" }, - "fullnameOverride": { - "type": "string" - }, - "nameOverride": { - "type": "string" - }, - "postgresql": { - "type": "object", - "properties": { - "auth": { - "type": "object", - "properties": { - "database": { - "type": "string" - }, - "existingSecret": { - "type": "string" - }, - "password": { - "type": "string" - }, - "username": { - "type": "string" - } - } + "ingress": { + "additionalProperties": false, + "properties": { + "annotations": { + "additionalProperties": false, + "description": "Additional annotations for the Ingress resource", + "required": [], + "title": "annotations", + "type": "object" + }, + "className": { + "default": "", + "description": "IngressClass that will be be used to implement the Ingress", + "required": [], + "title": "className", + "type": "string" + }, + "enabled": { + "default": false, + "description": "Enable ingress record generation for the backend", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "hostname": { + "default": "", + "description": "cert-manager.io/cluster-issuer: cluster-issuer-name\nkubernetes.io/ingress.class: nginx\nkubernetes.io/tls-acme: \"true\"\nThe publicly reachable hostname for the backend", + "required": [], + "title": "hostname", + "type": "string" + }, + "paths": { + "additionalProperties": false, + "properties": { + "asgiPath": { + "default": "/ws/", + "description": "The path under witch the asgi backend should be reached", + "required": [], + "title": "asgiPath", + "type": "string" }, - "enabled": { - "type": "boolean" + "wsgiPath": { + "default": "/", + "description": "The path under witch the wsgi backend should be reached", + "required": [], + "title": "wsgiPath", + "type": "string" } + }, + "required": [ + "asgiPath", + "wsgiPath" + ], + "title": "paths", + "type": "object" + }, + "tls": { + "description": "An array with the tls configuration", + "items": { + "required": [] + }, + "required": [], + "title": "tls", + "type": "array" } + }, + "required": [ + "enabled", + "className", + "annotations", + "hostname", + "paths", + "tls" + ], + "title": "ingress", + "type": "object" }, - "redis": { - "type": "object", - "properties": { - "architecture": { + "persistence": { + "additionalProperties": false, + "properties": { + "accessModes": { + "description": "the desired access modes the volume should have.", + "items": { + "anyOf": [ + { + "required": [], "type": "string" + } + ], + "required": [] + }, + "required": [], + "title": "accessModes", + "type": "array" + }, + "annotations": { + "additionalProperties": false, + "description": "Annotations to be added to the PersistentVolumeClaim", + "required": [], + "title": "annotations", + "type": "object" + }, + "enabled": { + "default": false, + "description": "use a PVC to persist file uploads", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "existingClaim": { + "default": "", + "description": "provide an existing PersistentVolumeClaim", + "required": [], + "title": "existingClaim", + "type": "string" + }, + "resources": { + "additionalProperties": false, + "description": "represents the minimum and maximum resources the volume should have.", + "required": [], + "title": "resources", + "type": "object" + }, + "storageClassName": { + "default": "", + "description": "Name of the StorageClass required by the claim.", + "required": [], + "title": "storageClassName", + "type": "string" + } + }, + "required": [ + "enabled", + "accessModes", + "annotations", + "existingClaim", + "storageClassName", + "resources" + ], + "title": "persistence", + "type": "object" + }, + "wsgi": { + "additionalProperties": false, + "properties": { + "affinity": { + "additionalProperties": false, + "description": "Affinity settings for pod assignment", + "required": [], + "title": "affinity", + "type": "object" + }, + "autoscaling": { + "additionalProperties": false, + "properties": { + "enabled": { + "default": false, + "description": "Enable Horizontal POD autoscaling", + "required": [], + "title": "enabled", + "type": "boolean" }, - "auth": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "password": { - "type": "string" - } - } + "maxReplicas": { + "default": 100, + "description": "Maximum number of replicas", + "required": [], + "title": "maxReplicas", + "type": "integer" }, - "enabled": { - "type": "boolean" + "minReplicas": { + "default": 1, + "description": "Minimum number of replicas", + "required": [], + "title": "minReplicas", + "type": "integer" + }, + "targetCPUUtilizationPercentage": { + "default": 80, + "description": "Target CPU utilization percentage", + "required": [], + "title": "targetCPUUtilizationPercentage", + "type": "integer" + }, + "targetMemoryUtilizationPercentage": { + "default": 80, + "description": "Target Memory utilization percentage", + "required": [], + "title": "targetMemoryUtilizationPercentage", + "type": "integer" + } + }, + "required": [ + "enabled", + "minReplicas", + "maxReplicas", + "targetCPUUtilizationPercentage", + "targetMemoryUtilizationPercentage" + ], + "title": "autoscaling", + "type": "object" + }, + "extraEnv": { + "description": "additional environment variables to be added to the pods", + "items": { + "required": [] + }, + "required": [], + "title": "extraEnv", + "type": "array" + }, + "image": { + "additionalProperties": false, + "properties": { + "pullPolicy": { + "default": "Always", + "description": "image pull policy", + "required": [], + "title": "pullPolicy", + "type": "string" + }, + "repository": { + "default": "baserow/backend", + "description": "image repository", + "required": [], + "title": "repository", + "type": "string" + }, + "tag": { + "default": "1.26.1", + "description": "Overrides the image tag", + "required": [], + "title": "tag", + "type": "string" + } + }, + "required": [ + "repository", + "pullPolicy", + "tag" + ], + "title": "image", + "type": "object" + }, + "imagePullSecrets": { + "description": "If defined, uses a Secret to pull an image from a private Docker registry or repository.", + "items": { + "required": [] + }, + "required": [], + "title": "imagePullSecrets", + "type": "array" + }, + "livenessProbe": { + "additionalProperties": false, + "properties": { + "initialDelaySeconds": { + "default": 5, + "description": "Initial delay seconds for livenessProbe", + "required": [], + "title": "initialDelaySeconds", + "type": "integer" + }, + "periodSeconds": { + "default": 5, + "description": "Period seconds for livenessProbe", + "required": [], + "title": "periodSeconds", + "type": "integer" + }, + "successThreshold": { + "default": 1, + "description": "Success threshold for livenessProbe", + "required": [], + "title": "successThreshold", + "type": "integer" + }, + "timeoutSeconds": { + "default": 5, + "description": "Timeout seconds for livenessProbe", + "required": [], + "title": "timeoutSeconds", + "type": "integer" + } + }, + "required": [ + "initialDelaySeconds", + "periodSeconds", + "successThreshold", + "timeoutSeconds" + ], + "title": "livenessProbe", + "type": "object" + }, + "nodeSelector": { + "additionalProperties": false, + "description": "Node labels for pod assignment", + "required": [], + "title": "nodeSelector", + "type": "object" + }, + "podAnnotations": { + "additionalProperties": false, + "description": "Annotations to be added to the frontend pods", + "required": [], + "title": "podAnnotations", + "type": "object" + }, + "podSecurityContext": { + "additionalProperties": false, + "description": "pod-level security context", + "properties": { + "fsGroup": { + "default": 9999, + "required": [], + "title": "fsGroup", + "type": "integer" + }, + "runAsGroup": { + "default": 9999, + "required": [], + "title": "runAsGroup", + "type": "integer" + }, + "runAsUser": { + "default": 9999, + "required": [], + "title": "runAsUser", + "type": "integer" + } + }, + "required": [ + "fsGroup", + "runAsGroup", + "runAsUser" + ], + "title": "podSecurityContext", + "type": "object" + }, + "priorityClassName": { + "default": "", + "description": "Pod priority class name", + "required": [], + "title": "priorityClassName", + "type": "string" + }, + "readinessProbe": { + "additionalProperties": false, + "properties": { + "initialDelaySeconds": { + "default": 5, + "description": "Initial delay seconds for readinessProbe", + "required": [], + "title": "initialDelaySeconds", + "type": "integer" + }, + "periodSeconds": { + "default": 5, + "description": "Period seconds for readinessProbe", + "required": [], + "title": "periodSeconds", + "type": "integer" + }, + "successThreshold": { + "default": 1, + "description": "Success threshold for readinessProbe", + "required": [], + "title": "successThreshold", + "type": "integer" + }, + "timeoutSeconds": { + "default": 5, + "description": "Timeout seconds for readinessProbe", + "required": [], + "title": "timeoutSeconds", + "type": "integer" + } + }, + "required": [ + "initialDelaySeconds", + "periodSeconds", + "successThreshold", + "timeoutSeconds" + ], + "title": "readinessProbe", + "type": "object" + }, + "replicaCount": { + "default": 1, + "description": "Number of replicas", + "required": [], + "title": "replicaCount", + "type": "integer" + }, + "resources": { + "additionalProperties": false, + "description": "Resource limits and requests for the controller pods.", + "required": [], + "title": "resources", + "type": "object" + }, + "revisionHistoryLimit": { + "default": 10, + "description": "The number of old ReplicaSets to retain", + "required": [], + "title": "revisionHistoryLimit", + "type": "integer" + }, + "securityContext": { + "additionalProperties": false, + "description": "container-level security context", + "properties": { + "runAsGroup": { + "default": 9999, + "required": [], + "title": "runAsGroup", + "type": "integer" + }, + "runAsNonRoot": { + "default": true, + "required": [], + "title": "runAsNonRoot", + "type": "boolean" + }, + "runAsUser": { + "default": 9999, + "required": [], + "title": "runAsUser", + "type": "integer" + } + }, + "required": [ + "runAsGroup", + "runAsNonRoot", + "runAsUser" + ], + "title": "securityContext", + "type": "object" + }, + "selectorLabels": { + "additionalProperties": false, + "description": "Additional labels to add to the pod", + "required": [], + "title": "selectorLabels", + "type": "object" + }, + "service": { + "additionalProperties": false, + "properties": { + "port": { + "default": 8000, + "description": "Kubernetes port where service is exposed", + "required": [], + "title": "port", + "type": "integer" + }, + "type": { + "default": "ClusterIP", + "description": "Kubernetes service type", + "required": [], + "title": "type", + "type": "string" + } + }, + "required": [ + "type", + "port" + ], + "title": "service", + "type": "object" + }, + "serviceAccount": { + "additionalProperties": false, + "properties": { + "annotations": { + "additionalProperties": false, + "description": "Annotations to add to the service account", + "required": [], + "title": "annotations", + "type": "object" + }, + "create": { + "default": true, + "description": "Specifies whether a service account should be created", + "required": [], + "title": "create", + "type": "boolean" + }, + "name": { + "default": "", + "description": "The name of the service account to use.\nIf not set and create is true, a name is generated using the fullname template", + "required": [], + "title": "name", + "type": "string" } + }, + "required": [ + "create", + "annotations", + "name" + ], + "title": "serviceAccount", + "type": "object" + }, + "tolerations": { + "description": "Toleration labels for pod assignment", + "items": { + "required": [] + }, + "required": [], + "title": "tolerations", + "type": "array" + } + }, + "required": [ + "image", + "imagePullSecrets", + "podAnnotations", + "podSecurityContext", + "priorityClassName", + "replicaCount", + "revisionHistoryLimit", + "resources", + "securityContext", + "serviceAccount", + "service", + "autoscaling", + "livenessProbe", + "readinessProbe", + "nodeSelector", + "tolerations", + "affinity", + "selectorLabels", + "extraEnv" + ], + "title": "wsgi", + "type": "object" + } + }, + "required": [ + "asgi", + "celery", + "config", + "persistence", + "wsgi", + "ingress" + ], + "title": "backend", + "type": "object" + }, + "config": { + "additionalProperties": false, + "description": "General configuration shared between the frontend and backend", + "properties": { + "maxImportFileSizeMb": { + "default": "512", + "description": "The maximum file size in mb you can import to create a new table. Default 512Mb.", + "required": [], + "title": "maxImportFileSizeMb", + "type": "string" + }, + "maxSnapshotsPerGroup": { + "default": "-1", + "description": "Controls how many application snapshots can be created per group.", + "required": [], + "title": "maxSnapshotsPerGroup", + "type": "string" + }, + "publicBackendUrl": { + "default": "http://localhost:8000", + "description": "The publicly accessible URL of the backend. Should include the port if non-standard.", + "required": [], + "title": "publicBackendUrl", + "type": "string" + }, + "publicFrontendUrl": { + "default": "http://localhost:3000", + "description": "The publicly accessible URL of the frontend. Should include the port if non-standard.", + "required": [], + "title": "publicFrontendUrl", + "type": "string" + } + }, + "required": [ + "maxImportFileSizeMb", + "maxSnapshotsPerGroup", + "publicBackendUrl", + "publicFrontendUrl" + ], + "title": "config", + "type": "object" + }, + "externalPostgresql": { + "additionalProperties": false, + "properties": { + "auth": { + "additionalProperties": false, + "properties": { + "database": { + "default": "baserow", + "description": "Name of the database to use", + "required": [], + "title": "database", + "type": "string" + }, + "existingSecret": { + "default": "", + "description": "Name of existing secret to use for PostgreSQL credentials", + "required": [], + "title": "existingSecret", + "type": "string" + }, + "password": { + "default": "baserow", + "description": "Password to use", + "required": [], + "title": "password", + "type": "string" + }, + "userPasswordKey": { + "default": "", + "description": "Key in the secret containing the password", + "required": [], + "title": "userPasswordKey", + "type": "string" + }, + "username": { + "default": "baserow", + "description": "Name of the user to use", + "required": [], + "title": "username", + "type": "string" + } + }, + "required": [ + "database", + "existingSecret", + "password", + "username", + "userPasswordKey" + ], + "title": "auth", + "type": "object" + }, + "hostname": { + "default": "", + "description": "Hostname of the PostgreSQL database", + "required": [], + "title": "hostname", + "type": "string" + }, + "port": { + "default": 5432, + "description": "Port used to connect to PostgreSQL database", + "required": [], + "title": "port", + "type": "integer" + } + }, + "required": [ + "auth", + "hostname", + "port" + ], + "title": "externalPostgresql", + "type": "object" + }, + "externalRedis": { + "additionalProperties": false, + "properties": { + "auth": { + "additionalProperties": false, + "properties": { + "enabled": { + "default": true, + "description": "if authentication should be used with external Redis™", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "existingSecret": { + "default": "", + "description": "Name of existing secret to use for Redis™ credentials", + "required": [], + "title": "existingSecret", + "type": "string" + }, + "password": { + "default": "", + "description": "Password to use", + "required": [], + "title": "password", + "type": "string" + }, + "userPasswordKey": { + "default": "", + "description": "Key in the secret containing the password", + "required": [], + "title": "userPasswordKey", + "type": "string" + } + }, + "required": [ + "enabled", + "existingSecret", + "password", + "userPasswordKey" + ], + "title": "auth", + "type": "object" + }, + "hostname": { + "default": "", + "description": "Hostname of Redis™", + "required": [], + "title": "hostname", + "type": "string" + }, + "port": { + "default": 6379, + "description": "Port used to connect to Redis", + "required": [], + "title": "port", + "type": "integer" + } + }, + "required": [ + "auth", + "hostname", + "port" + ], + "title": "externalRedis", + "type": "object" + }, + "frontend": { + "additionalProperties": false, + "properties": { + "affinity": { + "additionalProperties": false, + "description": "Affinity settings for pod assignment", + "required": [], + "title": "affinity", + "type": "object" + }, + "autoscaling": { + "additionalProperties": false, + "properties": { + "enabled": { + "default": false, + "description": "Enable Horizontal POD autoscaling", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "maxReplicas": { + "default": 100, + "description": "Maximum number of replicas", + "required": [], + "title": "maxReplicas", + "type": "integer" + }, + "minReplicas": { + "default": 1, + "description": "Minimum number of replicas", + "required": [], + "title": "minReplicas", + "type": "integer" + }, + "targetCPUUtilizationPercentage": { + "default": 80, + "description": "Target CPU utilization percentage", + "required": [], + "title": "targetCPUUtilizationPercentage", + "type": "integer" + }, + "targetMemoryUtilizationPercentage": { + "default": 80, + "description": "Target Memory utilization percentage", + "required": [], + "title": "targetMemoryUtilizationPercentage", + "type": "integer" + } + }, + "required": [ + "enabled", + "minReplicas", + "maxReplicas", + "targetCPUUtilizationPercentage", + "targetMemoryUtilizationPercentage" + ], + "title": "autoscaling", + "type": "object" + }, + "config": { + "additionalProperties": false, + "description": "configuration for the frontend", + "properties": { + "additionalModules": { + "default": "", + "description": "A list of file paths to Nuxt module.js files to load as additional Nuxt modules into Baserow on startup.", + "required": [], + "title": "additionalModules", + "type": "string" + }, + "disableGoogleDocsFilePreview": { + "default": "", + "description": "Set to `true` or `1` to disable Google docs file preview.", + "required": [], + "title": "disableGoogleDocsFilePreview", + "type": "string" + }, + "disablePublicUrlCheck": { + "default": "", + "description": "When opening the Baserow login page a check is run to ensure the PUBLIC_BACKEND_URL/BASEROW_PUBLIC_URL variables are set correctly and your browser can correctly connect to the backend. If misconfigured an error is shown. If you wish to disable this check and warning set this to any non empty value.", + "required": [], + "title": "disablePublicUrlCheck", + "type": "string" + }, + "downloadFileViaXhr": { + "default": "0", + "description": "Set to `1` to force download links to download files via XHR query to bypass `Content-Disposition: inline` that can’t be overridden in another way. If your files are stored under another origin, you also must add CORS headers to your server.", + "required": [], + "title": "downloadFileViaXhr", + "type": "string" + } + }, + "required": [ + "additionalModules", + "disablePublicUrlCheck", + "disableGoogleDocsFilePreview", + "downloadFileViaXhr" + ], + "title": "config", + "type": "object" + }, + "extraEnv": { + "description": "additional environment variables to be added to the pods", + "items": { + "required": [] + }, + "required": [], + "title": "extraEnv", + "type": "array" + }, + "image": { + "additionalProperties": false, + "properties": { + "pullPolicy": { + "default": "Always", + "description": "image pull policy", + "required": [], + "title": "pullPolicy", + "type": "string" + }, + "repository": { + "default": "baserow/web-frontend", + "description": "image repository", + "required": [], + "title": "repository", + "type": "string" + }, + "tag": { + "default": "1.26.1", + "description": "Overrides the image tag", + "required": [], + "title": "tag", + "type": "string" + } + }, + "required": [ + "repository", + "pullPolicy", + "tag" + ], + "title": "image", + "type": "object" + }, + "imagePullSecrets": { + "description": "If defined, uses a Secret to pull an image from a private Docker registry or repository.", + "items": { + "required": [] + }, + "required": [], + "title": "imagePullSecrets", + "type": "array" + }, + "ingress": { + "additionalProperties": false, + "properties": { + "annotations": { + "additionalProperties": false, + "description": "Additional annotations for the Ingress resource", + "required": [], + "title": "annotations", + "type": "object" + }, + "className": { + "default": "", + "description": "IngressClass that will be be used to implement the Ingress", + "required": [], + "title": "className", + "type": "string" + }, + "enabled": { + "default": false, + "description": "Enable ingress record generation for the frontend", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "hostname": { + "default": "chart-example.local", + "description": "cert-manager.io/cluster-issuer: cluster-issuer-name\nkubernetes.io/ingress.class: nginx\nkubernetes.io/tls-acme: \"true\"\nThe publicly reachable hostname for the frontend", + "required": [], + "title": "hostname", + "type": "string" + }, + "path": { + "default": "/", + "description": "The path under witch the frontend should be reached", + "required": [], + "title": "path", + "type": "string" + }, + "pathType": { + "default": "Prefix", + "description": "Valid values: ImplementationSpecific, Exact, Prefix", + "required": [], + "title": "pathType", + "type": "string" + }, + "tls": { + "description": "An array with the tls configuration", + "items": { + "required": [] + }, + "required": [], + "title": "tls", + "type": "array" + } + }, + "required": [ + "enabled", + "className", + "annotations", + "hostname", + "path", + "pathType", + "tls" + ], + "title": "ingress", + "type": "object" + }, + "livenessProbe": { + "additionalProperties": false, + "properties": { + "initialDelaySeconds": { + "default": 5, + "description": "Initial delay seconds for livenessProbe", + "required": [], + "title": "initialDelaySeconds", + "type": "integer" + }, + "periodSeconds": { + "default": 5, + "description": "Period seconds for livenessProbe", + "required": [], + "title": "periodSeconds", + "type": "integer" + }, + "successThreshold": { + "default": 1, + "description": "Success threshold for livenessProbe", + "required": [], + "title": "successThreshold", + "type": "integer" + } + }, + "required": [ + "initialDelaySeconds", + "periodSeconds", + "successThreshold" + ], + "title": "livenessProbe", + "type": "object" + }, + "nodeSelector": { + "additionalProperties": false, + "description": "Node labels for pod assignment", + "required": [], + "title": "nodeSelector", + "type": "object" + }, + "podAnnotations": { + "additionalProperties": false, + "description": "Annotations to be added to the frontend pods", + "required": [], + "title": "podAnnotations", + "type": "object" + }, + "podSecurityContext": { + "additionalProperties": false, + "description": "pod-level security context", + "properties": { + "fsGroup": { + "default": 9999, + "required": [], + "title": "fsGroup", + "type": "integer" + }, + "runAsGroup": { + "default": 9999, + "required": [], + "title": "runAsGroup", + "type": "integer" + }, + "runAsUser": { + "default": 9999, + "required": [], + "title": "runAsUser", + "type": "integer" + } + }, + "required": [ + "fsGroup", + "runAsGroup", + "runAsUser" + ], + "title": "podSecurityContext", + "type": "object" + }, + "priorityClassName": { + "default": "", + "description": "Pod priority class name", + "required": [], + "title": "priorityClassName", + "type": "string" + }, + "readinessProbe": { + "additionalProperties": false, + "properties": { + "initialDelaySeconds": { + "default": 5, + "description": "Initial delay seconds for readinessProbe", + "required": [], + "title": "initialDelaySeconds", + "type": "integer" + }, + "periodSeconds": { + "default": 5, + "description": "Period seconds for readinessProbe", + "required": [], + "title": "periodSeconds", + "type": "integer" + }, + "successThreshold": { + "default": 1, + "description": "Success threshold for readinessProbe", + "required": [], + "title": "successThreshold", + "type": "integer" + } + }, + "required": [ + "initialDelaySeconds", + "periodSeconds", + "successThreshold" + ], + "title": "readinessProbe", + "type": "object" + }, + "replicaCount": { + "default": 1, + "description": "Number of replicas", + "required": [], + "title": "replicaCount", + "type": "integer" + }, + "resources": { + "additionalProperties": false, + "description": "Resource limits and requests for the controller pods.", + "required": [], + "title": "resources", + "type": "object" + }, + "revisionHistoryLimit": { + "default": 10, + "description": "The number of old ReplicaSets to retain", + "required": [], + "title": "revisionHistoryLimit", + "type": "integer" + }, + "securityContext": { + "additionalProperties": false, + "description": "container-level security context", + "properties": { + "runAsGroup": { + "default": 9999, + "required": [], + "title": "runAsGroup", + "type": "integer" + }, + "runAsNonRoot": { + "default": true, + "required": [], + "title": "runAsNonRoot", + "type": "boolean" + }, + "runAsUser": { + "default": 9999, + "required": [], + "title": "runAsUser", + "type": "integer" + } + }, + "required": [ + "runAsGroup", + "runAsNonRoot", + "runAsUser" + ], + "title": "securityContext", + "type": "object" + }, + "selectorLabels": { + "additionalProperties": false, + "description": "Additional labels to add to the pod", + "required": [], + "title": "selectorLabels", + "type": "object" + }, + "service": { + "additionalProperties": false, + "properties": { + "port": { + "default": 3000, + "description": "Kubernetes port where service is exposed", + "required": [], + "title": "port", + "type": "integer" + }, + "type": { + "default": "ClusterIP", + "description": "Kubernetes service type", + "required": [], + "title": "type", + "type": "string" + } + }, + "required": [ + "type", + "port" + ], + "title": "service", + "type": "object" + }, + "serviceAccount": { + "additionalProperties": false, + "properties": { + "annotations": { + "additionalProperties": false, + "description": "Annotations to add to the service account", + "required": [], + "title": "annotations", + "type": "object" + }, + "create": { + "default": true, + "description": "Specifies whether a service account should be created", + "required": [], + "title": "create", + "type": "boolean" + }, + "name": { + "default": "", + "description": "The name of the service account to use.\nIf not set and create is true, a name is generated using the fullname template", + "required": [], + "title": "name", + "type": "string" + } + }, + "required": [ + "create", + "annotations", + "name" + ], + "title": "serviceAccount", + "type": "object" + }, + "tolerations": { + "description": "Toleration labels for pod assignment", + "items": { + "required": [] + }, + "required": [], + "title": "tolerations", + "type": "array" + } + }, + "required": [ + "image", + "imagePullSecrets", + "podAnnotations", + "podSecurityContext", + "priorityClassName", + "replicaCount", + "revisionHistoryLimit", + "resources", + "securityContext", + "serviceAccount", + "service", + "ingress", + "autoscaling", + "livenessProbe", + "readinessProbe", + "nodeSelector", + "tolerations", + "affinity", + "selectorLabels", + "extraEnv", + "config" + ], + "title": "frontend", + "type": "object" + }, + "fullnameOverride": { + "default": "", + "description": "String to fully override `\"baserow.fullname\"`", + "required": [], + "title": "fullnameOverride", + "type": "string" + }, + "global": { + "description": "Global values are values that can be accessed from any chart or subchart by exactly the same name.", + "required": [], + "title": "global", + "type": "object" + }, + "nameOverride": { + "default": "", + "description": "Provide a name in place of `baserow`", + "required": [], + "title": "nameOverride", + "type": "string" + }, + "postgresql": { + "additionalProperties": false, + "properties": { + "auth": { + "additionalProperties": false, + "properties": { + "database": { + "default": "baserow", + "description": "Name for a custom database to create", + "required": [], + "title": "database", + "type": "string" + }, + "existingSecret": { + "default": "", + "description": "Name of existing secret to use for PostgreSQL credentials", + "required": [], + "title": "existingSecret", + "type": "string" + }, + "password": { + "default": "baserow", + "description": "Password for the custom user to create. Ignored if postgresql.auth.existingSecret is provided", + "required": [], + "title": "password", + "type": "string" + }, + "username": { + "default": "baserow", + "description": "Name for a custom user to create", + "required": [], + "title": "username", + "type": "string" } + }, + "required": [ + "database", + "existingSecret", + "password", + "username" + ], + "title": "auth", + "type": "object" + }, + "enabled": { + "default": true, + "description": "enable PostgreSQL™ subchart from Bitnami", + "required": [], + "title": "enabled", + "type": "boolean" + } + }, + "required": [ + "enabled", + "auth" + ], + "title": "postgresql", + "type": "object" + }, + "redis": { + "additionalProperties": false, + "properties": { + "architecture": { + "default": "standalone", + "description": "Redis® architecture. Allowed values: standalone or replication", + "required": [], + "title": "architecture", + "type": "string" + }, + "auth": { + "additionalProperties": false, + "properties": { + "enabled": { + "default": true, + "description": "Enable password authentication", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "password": { + "default": "baserow", + "description": "Redis™ password", + "required": [], + "title": "password", + "type": "string" + } + }, + "required": [ + "enabled", + "password" + ], + "title": "auth", + "type": "object" + }, + "enabled": { + "default": true, + "description": "enable Redis™ subchart from Bitnami", + "required": [], + "title": "enabled", + "type": "boolean" } + }, + "required": [ + "enabled", + "architecture", + "auth" + ], + "title": "redis", + "type": "object" } + }, + "required": [ + "nameOverride", + "fullnameOverride", + "frontend", + "backend", + "config", + "postgresql", + "externalPostgresql", + "redis", + "externalRedis" + ], + "type": "object" } diff --git a/charts/cluster-api-visualizer/values.schema.json b/charts/cluster-api-visualizer/values.schema.json index 9bf9041d..15f35502 100644 --- a/charts/cluster-api-visualizer/values.schema.json +++ b/charts/cluster-api-visualizer/values.schema.json @@ -1,146 +1,357 @@ { - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "affinity": { - "type": "object" + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "affinity": { + "description": "Affinity settings for pod assignment", + "required": [], + "title": "affinity", + "type": "object" + }, + "autoscaling": { + "properties": { + "enabled": { + "default": false, + "description": "Enable Horizontal POD autoscaling", + "required": [], + "title": "enabled", + "type": "boolean" }, - "autoscaling": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "maxReplicas": { - "type": "integer" - }, - "minReplicas": { - "type": "integer" - }, - "targetCPUUtilizationPercentage": { - "type": "integer" - } - } + "maxReplicas": { + "default": 100, + "description": "Maximum number of replicas", + "required": [], + "title": "maxReplicas", + "type": "integer" }, - "extraEnv": { - "type": "array" + "minReplicas": { + "default": 1, + "description": "Minimum number of replicas", + "required": [], + "title": "minReplicas", + "type": "integer" }, - "fullnameOverride": { - "type": "string" + "targetCPUUtilizationPercentage": { + "default": 80, + "description": "Target CPU utilization percentage", + "required": [], + "title": "targetCPUUtilizationPercentage", + "type": "integer" + } + }, + "required": [ + "enabled", + "minReplicas", + "maxReplicas", + "targetCPUUtilizationPercentage" + ], + "title": "autoscaling", + "type": "object" + }, + "extraEnv": { + "description": "additional environment variables to be added to the pods", + "items": { + "required": [] + }, + "required": [], + "title": "extraEnv", + "type": "array" + }, + "fullnameOverride": { + "default": "", + "description": "String to fully override `\"cluster-api-visualizer.fullname\"`", + "required": [], + "title": "fullnameOverride", + "type": "string" + }, + "global": { + "description": "Global values are values that can be accessed from any chart or subchart by exactly the same name.", + "required": [], + "title": "global", + "type": "object" + }, + "image": { + "properties": { + "pullPolicy": { + "default": "Always", + "description": "image pull policy", + "required": [], + "title": "pullPolicy", + "type": "string" }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "type": "string" - }, - "registry": { - "type": "string" - }, - "repository": { - "type": "string" - }, - "tag": { - "type": "string" - } - } + "registry": { + "default": "ghcr.io", + "description": "image registry", + "required": [], + "title": "registry", + "type": "string" }, - "imagePullSecrets": { - "type": "array" + "repository": { + "default": "jont828/cluster-api-visualizer", + "description": "image repository", + "required": [], + "title": "repository", + "type": "string" }, - "ingress": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "className": { + "tag": { + "default": "v1.3.1", + "description": "Overrides the image tag", + "required": [], + "title": "tag", + "type": "string" + } + }, + "required": [ + "registry", + "repository", + "pullPolicy", + "tag" + ], + "title": "image", + "type": "object" + }, + "imagePullSecrets": { + "description": "If defined, uses a Secret to pull an image from a private Docker registry or repository.", + "items": { + "required": [] + }, + "required": [], + "title": "imagePullSecrets", + "type": "array" + }, + "ingress": { + "properties": { + "annotations": { + "description": "Additional annotations for the Ingress resource", + "required": [], + "title": "annotations", + "type": "object" + }, + "className": { + "default": "", + "description": "IngressClass that will be be used to implement the Ingress", + "required": [], + "title": "className", + "type": "string" + }, + "enabled": { + "default": false, + "description": "Enable ingress record generation", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "hosts": { + "description": "kubernetes.io/ingress.class: nginx\nkubernetes.io/tls-acme: \"true\"\nAn array with the hosts configuration", + "items": { + "anyOf": [ + { + "properties": { + "host": { + "default": "chart-example.local", + "required": [], + "title": "host", "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "hosts": { - "type": "array", + }, + "paths": { "items": { - "type": "object", - "properties": { - "host": { - "type": "string" + "anyOf": [ + { + "properties": { + "path": { + "default": "/", + "required": [], + "title": "path", + "type": "string" }, - "paths": { - "type": "array", - "items": { - "type": "object", - "properties": { - "path": { - "type": "string" - }, - "pathType": { - "type": "string" - } - } - } + "pathType": { + "default": "ImplementationSpecific", + "required": [], + "title": "pathType", + "type": "string" } + }, + "required": [ + "path", + "pathType" + ], + "type": "object" } - } - }, - "tls": { + ], + "required": [] + }, + "required": [], + "title": "paths", "type": "array" - } - } - }, - "nameOverride": { - "type": "string" - }, - "nodeSelector": { - "type": "object" - }, - "podAnnotations": { - "type": "object" - }, - "podSecurityContext": { - "type": "object" - }, - "replicaCount": { - "type": "integer" - }, - "resources": { - "type": "object" - }, - "revisionHistoryLimit": { - "type": "integer" + } + }, + "required": [ + "host", + "paths" + ], + "type": "object" + } + ], + "required": [] + }, + "required": [], + "title": "hosts", + "type": "array" }, - "securityContext": { - "type": "object" + "tls": { + "description": "An array with the tls configuration", + "items": { + "required": [] + }, + "required": [], + "title": "tls", + "type": "array" + } + }, + "required": [ + "enabled", + "className", + "annotations", + "hosts", + "tls" + ], + "title": "ingress", + "type": "object" + }, + "nameOverride": { + "default": "", + "description": "Provide a name in place of `cluster-api-visualizer`", + "required": [], + "title": "nameOverride", + "type": "string" + }, + "nodeSelector": { + "description": "Node labels for pod assignment", + "required": [], + "title": "nodeSelector", + "type": "object" + }, + "podAnnotations": { + "description": "Annotations to be added to exporter pods", + "required": [], + "title": "podAnnotations", + "type": "object" + }, + "podSecurityContext": { + "description": "pod-level security context", + "required": [], + "title": "podSecurityContext", + "type": "object" + }, + "replicaCount": { + "default": 1, + "description": "Number of replicas", + "required": [], + "title": "replicaCount", + "type": "integer" + }, + "resources": { + "description": "Resource limits and requests for the pods.", + "required": [], + "title": "resources", + "type": "object" + }, + "revisionHistoryLimit": { + "default": 0, + "description": "The number of old ReplicaSets to retain", + "required": [], + "title": "revisionHistoryLimit", + "type": "integer" + }, + "securityContext": { + "description": "container-level security context", + "required": [], + "title": "securityContext", + "type": "object" + }, + "service": { + "properties": { + "port": { + "default": 80, + "description": "Kubernetes port where service is exposed", + "required": [], + "title": "port", + "type": "integer" }, - "service": { - "type": "object", - "properties": { - "port": { - "type": "integer" - }, - "type": { - "type": "string" - } - } + "type": { + "default": "ClusterIP", + "description": "Kubernetes service type", + "required": [], + "title": "type", + "type": "string" + } + }, + "required": [ + "type", + "port" + ], + "title": "service", + "type": "object" + }, + "serviceAccount": { + "properties": { + "annotations": { + "description": "Annotations to add to the service account", + "required": [], + "title": "annotations", + "type": "object" }, - "serviceAccount": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "create": { - "type": "boolean" - }, - "name": { - "type": "string" - } - } + "create": { + "default": true, + "description": "Specifies whether a service account should be created", + "required": [], + "title": "create", + "type": "boolean" }, - "tolerations": { - "type": "array" + "name": { + "default": "", + "description": "The name of the service account to use.\nIf not set and create is true, a name is generated using the fullname template", + "required": [], + "title": "name", + "type": "string" } + }, + "required": [ + "create", + "annotations", + "name" + ], + "title": "serviceAccount", + "type": "object" + }, + "tolerations": { + "description": "Toleration labels for pod assignment", + "items": { + "required": [] + }, + "required": [], + "title": "tolerations", + "type": "array" } + }, + "required": [ + "nameOverride", + "fullnameOverride", + "image", + "imagePullSecrets", + "replicaCount", + "revisionHistoryLimit", + "serviceAccount", + "podAnnotations", + "podSecurityContext", + "securityContext", + "service", + "ingress", + "resources", + "autoscaling", + "nodeSelector", + "tolerations", + "affinity", + "extraEnv" + ], + "type": "object" } diff --git a/charts/etcd-defrag/values.schema.json b/charts/etcd-defrag/values.schema.json index b7d9d7dc..c03cb51b 100644 --- a/charts/etcd-defrag/values.schema.json +++ b/charts/etcd-defrag/values.schema.json @@ -1,220 +1,540 @@ { - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "affinity": { - "type": "object" - }, - "defrag": { - "type": "object", - "properties": { - "config": { - "type": "object", - "properties": { - "auth": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "existingSecret": { - "type": "string" - }, - "password": { - "type": "string" - }, - "user": { - "type": "string" - } - } - }, - "clusterWide": { - "type": "boolean" - }, - "commandTimeout": { - "type": "string" - }, - "debug": { - "type": "boolean" - }, - "dialTimeout": { - "type": "string" - }, - "endpoints": { - "type": "array" - }, - "insecureSkipTlsVerify": { - "type": "boolean" - }, - "insecureTransport": { - "type": "boolean" - }, - "pki": { - "type": "object", - "properties": { - "ca": { - "type": "string" - }, - "cert": { - "type": "string" - }, - "existingSecret": { - "type": "string" - }, - "hostAccess": { - "type": "object", - "properties": { - "caFilePath": { - "type": "string" - }, - "certFilePath": { - "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "keyFilePath": { - "type": "string" - } - } - }, - "key": { - "type": "string" - } - } - }, - "writeOut": { - "type": "string" - } - } - }, - "cronjob": { - "type": "object", - "properties": { - "concurrencyPolicy": { - "type": "string" - }, - "failedJobsHistoryLimit": { - "type": "string" - }, - "schedule": { - "type": "string" - }, - "startingDeadlineSeconds": { - "type": "string" - }, - "successfulJobsHistoryLimit": { - "type": "string" - }, - "suspend": { - "type": "boolean" - } - } - }, + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "affinity": { + "description": "Affinity settings for pod assignment", + "required": [], + "title": "affinity", + "type": "object" + }, + "defrag": { + "properties": { + "config": { + "properties": { + "auth": { + "properties": { "enabled": { - "type": "boolean" + "default": false, + "description": "use username and password for authentication against etcd", + "required": [], + "title": "enabled", + "type": "boolean" }, - "job": { - "type": "object", - "properties": { - "activeDeadlineSeconds": { - "type": "string" - }, - "backoffLimit": { - "type": "string" - }, - "completionMode": { - "type": "string" - }, - "completions": { - "type": "string" - }, - "parallelism": { - "type": "string" - }, - "podFailurePolicy": { - "type": "string" - }, - "suspend": { - "type": "boolean" - }, - "ttlSecondsAfterFinished": { - "type": "string" - } - } + "existingSecret": { + "default": "", + "description": "Name of existing secret to use for authentication credentials. Key needs to be called `etcd-password`.", + "required": [], + "title": "existingSecret", + "type": "string" }, - "pod": { - "type": "object", - "properties": { - "restartPolicy": { - "type": "string" - } - } + "password": { + "default": "", + "description": "password for authentication", + "required": [], + "title": "password", + "type": "string" + }, + "user": { + "default": "", + "description": "username for authentication", + "required": [], + "title": "user", + "type": "string" } - } - }, - "extraEnv": { - "type": "array" - }, - "fullnameOverride": { - "type": "string" - }, - "hostNetwork": { - "type": "boolean" - }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "type": "string" + }, + "required": [ + "enabled", + "existingSecret", + "password", + "user" + ], + "title": "auth", + "type": "object" + }, + "clusterWide": { + "default": true, + "description": "Run defragment operations for all endpoints in the cluster associated with the default endpoint.", + "required": [], + "title": "clusterWide", + "type": "boolean" + }, + "commandTimeout": { + "default": "", + "description": "timeout for short running command (excluding dial timeout)", + "required": [], + "title": "commandTimeout", + "type": "string" + }, + "debug": { + "default": false, + "description": "enable client-side debug logging", + "required": [], + "title": "debug", + "type": "boolean" + }, + "dialTimeout": { + "default": "", + "description": "dial timeout for client connections", + "required": [], + "title": "dialTimeout", + "type": "string" + }, + "endpoints": { + "description": "gRPC endpoints", + "items": { + "required": [] + }, + "required": [], + "title": "endpoints", + "type": "array" + }, + "insecureSkipTlsVerify": { + "default": false, + "description": "skip server certificate verification", + "required": [], + "title": "insecureSkipTlsVerify", + "type": "boolean" + }, + "insecureTransport": { + "default": true, + "description": "disable transport security for client connections", + "required": [], + "title": "insecureTransport", + "type": "boolean" + }, + "pki": { + "properties": { + "ca": { + "default": "", + "description": "certificate authority used for the etcd certificates", + "required": [], + "title": "ca", + "type": "string" }, - "repository": { - "type": "string" + "cert": { + "default": "", + "description": "identify secure client using this TLS certificate", + "required": [], + "title": "cert", + "type": "string" }, - "tag": { - "type": "string" + "existingSecret": { + "default": "", + "description": "Name of existing secret with certificates. Keys needs to be called `ca`, `cert` and `key`.", + "required": [], + "title": "existingSecret", + "type": "string" + }, + "hostAccess": { + "properties": { + "caFilePath": { + "default": "/etc/kubernetes/pki/etcd/ca.crt", + "description": "file on host containing the certificate authority", + "required": [], + "title": "caFilePath", + "type": "string" + }, + "certFilePath": { + "default": "/etc/kubernetes/pki/etcd/server.crt", + "description": "file on host containing the server certificate", + "required": [], + "title": "certFilePath", + "type": "string" + }, + "enabled": { + "default": false, + "description": "get certificates directly from host where the Pod is running", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "keyFilePath": { + "default": "/etc/kubernetes/pki/etcd/server.key", + "description": "file on host containing the server private key", + "required": [], + "title": "keyFilePath", + "type": "string" + } + }, + "required": [ + "enabled", + "caFilePath", + "certFilePath", + "keyFilePath" + ], + "title": "hostAccess", + "type": "object" + }, + "key": { + "default": "", + "description": "identify secure client using this TLS key", + "required": [], + "title": "key", + "type": "string" } + }, + "required": [ + "ca", + "cert", + "existingSecret", + "hostAccess", + "key" + ], + "title": "pki", + "type": "object" + }, + "writeOut": { + "default": "table", + "description": "set the output format: `fields`, `json`, `protobuf`, `simple`, `table`)", + "required": [], + "title": "writeOut", + "type": "string" } + }, + "required": [ + "auth", + "clusterWide", + "commandTimeout", + "debug", + "dialTimeout", + "endpoints", + "insecureSkipTlsVerify", + "insecureTransport", + "pki", + "writeOut" + ], + "title": "config", + "type": "object" }, - "imagePullSecrets": { - "type": "array" + "cronjob": { + "properties": { + "concurrencyPolicy": { + "default": "Forbid", + "description": "Specifies how to treat concurrent executions of a Job. Valid values are: `Allow`, `Forbid` and `Replace`.", + "required": [], + "title": "concurrencyPolicy", + "type": "string" + }, + "failedJobsHistoryLimit": { + "default": "1", + "description": "The number of failed finished jobs to retain.", + "required": [], + "title": "failedJobsHistoryLimit", + "type": "string" + }, + "schedule": { + "default": "0 */1 * * *", + "description": "The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron.", + "required": [], + "title": "schedule", + "type": "string" + }, + "startingDeadlineSeconds": { + "default": "30", + "description": "Optional deadline in seconds for starting the job if it misses scheduled time for any reason. Missed jobs executions will be counted as failed ones.", + "required": [], + "title": "startingDeadlineSeconds", + "type": "string" + }, + "successfulJobsHistoryLimit": { + "default": "3", + "description": "The number of successful finished jobs to retain.", + "required": [], + "title": "successfulJobsHistoryLimit", + "type": "string" + }, + "suspend": { + "default": false, + "description": "This flag tells the controller to suspend subsequent executions, it does not apply to already started executions.", + "required": [], + "title": "suspend", + "type": "boolean" + } + }, + "required": [ + "concurrencyPolicy", + "failedJobsHistoryLimit", + "schedule", + "startingDeadlineSeconds", + "successfulJobsHistoryLimit", + "suspend" + ], + "title": "cronjob", + "type": "object" }, - "nameOverride": { - "type": "string" + "enabled": { + "default": true, + "description": "create a CronJob for defragmentation", + "required": [], + "title": "enabled", + "type": "boolean" }, - "nodeSelector": { - "type": "object", - "properties": { - "node-role.kubernetes.io/control-plane": { - "type": "string" - } + "job": { + "properties": { + "activeDeadlineSeconds": { + "default": "", + "description": "Specifies the duration in seconds relative to the startTime that the job may be continuously active before the system tries to terminate it.", + "required": [], + "title": "activeDeadlineSeconds", + "type": "string" + }, + "backoffLimit": { + "default": "", + "description": "Specifies the number of retries before marking this job failed.", + "required": [], + "title": "backoffLimit", + "type": "string" + }, + "completionMode": { + "default": "", + "description": "CompletionMode specifies how Pod completions are tracked. It can be: `NonIndexed` or `Indexed`.", + "required": [], + "title": "completionMode", + "type": "string" + }, + "completions": { + "default": "", + "description": "Specifies the desired number of successfully finished pods the job should be run with.", + "required": [], + "title": "completions", + "type": "string" + }, + "parallelism": { + "default": "", + "description": "Specifies the maximum desired number of pods the job should run at any given time.", + "required": [], + "title": "parallelism", + "type": "string" + }, + "podFailurePolicy": { + "default": "", + "description": "Specifies the policy of handling failed pods.", + "required": [], + "title": "podFailurePolicy", + "type": "string" + }, + "suspend": { + "default": false, + "description": "Suspend specifies whether the Job controller should create Pods or not.", + "required": [], + "title": "suspend", + "type": "boolean" + }, + "ttlSecondsAfterFinished": { + "default": "", + "description": "limits the lifetime of a Job that has finished execution", + "required": [], + "title": "ttlSecondsAfterFinished", + "type": "string" } + }, + "required": [ + "activeDeadlineSeconds", + "backoffLimit", + "completionMode", + "completions", + "parallelism", + "podFailurePolicy", + "suspend", + "ttlSecondsAfterFinished" + ], + "title": "job", + "type": "object" }, - "podSecurityContext": { - "type": "object" + "pod": { + "properties": { + "restartPolicy": { + "default": "OnFailure", + "description": "Restart policy for all containers within the pod. One of `Always`, `OnFailure`, `Never`.", + "required": [], + "title": "restartPolicy", + "type": "string" + } + }, + "required": [ + "restartPolicy" + ], + "title": "pod", + "type": "object" + } + }, + "required": [ + "enabled", + "config", + "cronjob", + "job", + "pod" + ], + "title": "defrag", + "type": "object" + }, + "extraEnv": { + "description": "additional environment variables to be added to the pods", + "items": { + "required": [] + }, + "required": [], + "title": "extraEnv", + "type": "array" + }, + "fullnameOverride": { + "default": "", + "description": "String to fully override `\"etcd-defrag.fullname\"`", + "required": [], + "title": "fullnameOverride", + "type": "string" + }, + "global": { + "description": "Global values are values that can be accessed from any chart or subchart by exactly the same name.", + "required": [], + "title": "global", + "type": "object" + }, + "hostNetwork": { + "default": false, + "description": "specify if the CronJob should run on the hostNetwork", + "required": [], + "title": "hostNetwork", + "type": "boolean" + }, + "image": { + "properties": { + "pullPolicy": { + "default": "Always", + "description": "image pull policy", + "required": [], + "title": "pullPolicy", + "type": "string" }, - "resources": { - "type": "object" + "repository": { + "default": "bitnami/etcd", + "description": "image repository", + "required": [], + "title": "repository", + "type": "string" }, - "securityContext": { - "type": "object" + "tag": { + "default": "3.5.15", + "description": "Overrides the image tag", + "required": [], + "title": "tag", + "type": "string" + } + }, + "required": [ + "repository", + "pullPolicy", + "tag" + ], + "title": "image", + "type": "object" + }, + "imagePullSecrets": { + "description": "If defined, uses a Secret to pull an image from a private Docker registry or repository.", + "items": { + "required": [] + }, + "required": [], + "title": "imagePullSecrets", + "type": "array" + }, + "nameOverride": { + "default": "", + "description": "Provide a name in place of `etcd-defrag`", + "required": [], + "title": "nameOverride", + "type": "string" + }, + "nodeSelector": { + "description": "Node labels for pod assignment", + "properties": { + "node-role.kubernetes.io/control-plane": { + "default": "", + "required": [], + "title": "node-role.kubernetes.io/control-plane", + "type": "string" + } + }, + "required": [ + "node-role.kubernetes.io/control-plane" + ], + "title": "nodeSelector", + "type": "object" + }, + "podSecurityContext": { + "description": "pod-level security context", + "required": [], + "title": "podSecurityContext", + "type": "object" + }, + "resources": { + "description": "Resource limits and requests for the controller pods.", + "required": [], + "title": "resources", + "type": "object" + }, + "securityContext": { + "description": "container-level security context", + "required": [], + "title": "securityContext", + "type": "object" + }, + "serviceAccount": { + "properties": { + "annotations": { + "description": "Annotations to add to the service account", + "required": [], + "title": "annotations", + "type": "object" }, - "serviceAccount": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "create": { - "type": "boolean" - }, - "name": { - "type": "string" - } - } + "create": { + "default": true, + "description": "Specifies whether a service account should be created", + "required": [], + "title": "create", + "type": "boolean" }, - "tolerations": { - "type": "array" + "name": { + "default": "", + "description": "The name of the service account to use.\nIf not set and create is true, a name is generated using the fullname template", + "required": [], + "title": "name", + "type": "string" } + }, + "required": [ + "create", + "annotations", + "name" + ], + "title": "serviceAccount", + "type": "object" + }, + "tolerations": { + "description": "Toleration labels for pod assignment", + "items": { + "required": [] + }, + "required": [], + "title": "tolerations", + "type": "array" } + }, + "required": [ + "nameOverride", + "fullnameOverride", + "image", + "imagePullSecrets", + "podSecurityContext", + "resources", + "securityContext", + "serviceAccount", + "nodeSelector", + "tolerations", + "affinity", + "extraEnv", + "hostNetwork", + "defrag" + ], + "type": "object" } diff --git a/charts/headwind-mdm/values.schema.json b/charts/headwind-mdm/values.schema.json index c332b58a..e10fc3b9 100644 --- a/charts/headwind-mdm/values.schema.json +++ b/charts/headwind-mdm/values.schema.json @@ -1,251 +1,625 @@ { - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "affinity": { - "type": "object" - }, - "autoscaling": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "maxReplicas": { - "type": "integer" - }, - "minReplicas": { - "type": "integer" - }, - "targetCPUUtilizationPercentage": { - "type": "integer" - } - } + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "affinity": { + "description": "Affinity settings for pod assignment", + "required": [], + "title": "affinity", + "type": "object" + }, + "autoscaling": { + "properties": { + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" }, - "externalPostgresql": { - "type": "object", - "properties": { - "auth": { - "type": "object", - "properties": { - "database": { - "type": "string" - }, - "existingSecret": { - "type": "string" - }, - "password": { - "type": "string" - }, - "userPasswordKey": { - "type": "string" - }, - "username": { - "type": "string" - } - } - }, - "hostname": { - "type": "string" - }, - "port": { - "type": "integer" - } - } + "maxReplicas": { + "default": 100, + "required": [], + "title": "maxReplicas", + "type": "integer" }, - "fullnameOverride": { - "type": "string" + "minReplicas": { + "default": 1, + "required": [], + "title": "minReplicas", + "type": "integer" }, - "headwind": { - "type": "object", - "properties": { - "adminEmail": { - "type": "string" - }, - "baseDomain": { - "type": "string" - }, - "clientVersion": { - "type": "string" - }, - "downloadCredentials": { - "type": "boolean" - }, - "forceReconfigure": { - "type": "boolean" - }, - "hmdmUrl": { - "type": "string" - }, - "hmdmVariant": { - "type": "string" - }, - "installLanguage": { - "type": "string" - } + "targetCPUUtilizationPercentage": { + "default": 80, + "required": [], + "title": "targetCPUUtilizationPercentage", + "type": "integer" + } + }, + "required": [ + "enabled", + "minReplicas", + "maxReplicas", + "targetCPUUtilizationPercentage" + ], + "title": "autoscaling", + "type": "object" + }, + "externalPostgresql": { + "properties": { + "auth": { + "description": "# Authentication parameters", + "properties": { + "database": { + "default": "mychart", + "description": "Name of the database to use", + "required": [], + "title": "database", + "type": "string" + }, + "existingSecret": { + "default": "", + "description": "Name of existing secret to use for PostgreSQL credentials", + "required": [], + "title": "existingSecret", + "type": "string" + }, + "password": { + "default": "mychart", + "description": "Password to use", + "required": [], + "title": "password", + "type": "string" + }, + "userPasswordKey": { + "default": "", + "description": "Key in the secret containing the password", + "required": [], + "title": "userPasswordKey", + "type": "string" + }, + "username": { + "default": "mychart", + "description": "Name of the user to use", + "required": [], + "title": "username", + "type": "string" } + }, + "required": [ + "database", + "existingSecret", + "password", + "username", + "userPasswordKey" + ], + "title": "auth", + "type": "object" }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "type": "string" - }, - "repository": { - "type": "string" - }, - "tag": { - "type": "string" - } + "hostname": { + "default": "", + "description": "Hostname of the PostgreSQL database", + "required": [], + "title": "hostname", + "type": "string" + }, + "port": { + "default": 5432, + "description": "Port used to connect to PostgreSQL database", + "required": [], + "title": "port", + "type": "integer" + } + }, + "required": [ + "auth", + "hostname", + "port" + ], + "title": "externalPostgresql", + "type": "object" + }, + "fullnameOverride": { + "default": "", + "description": "String to fully override `\"headwind-mdm.fullname\"`", + "required": [], + "title": "fullnameOverride", + "type": "string" + }, + "global": { + "description": "Global values are values that can be accessed from any chart or subchart by exactly the same name.", + "required": [], + "title": "global", + "type": "object" + }, + "headwind": { + "properties": { + "adminEmail": { + "default": "", + "description": "Email of admin user", + "required": [], + "title": "adminEmail", + "type": "string" + }, + "baseDomain": { + "default": "", + "description": "URL under which Headwind will be available", + "required": [], + "title": "baseDomain", + "type": "string" + }, + "clientVersion": { + "default": "5.14", + "required": [], + "title": "clientVersion", + "type": "string" + }, + "downloadCredentials": { + "default": false, + "required": [], + "title": "downloadCredentials", + "type": "boolean" + }, + "forceReconfigure": { + "default": false, + "description": "Subsequent starts of the container skip this step, but you can force the renewal of the configuration", + "required": [], + "title": "forceReconfigure", + "type": "boolean" + }, + "hmdmUrl": { + "default": "https://h-mdm.com/files/hmdm-5.12.1-os.war", + "required": [], + "title": "hmdmUrl", + "type": "string" + }, + "hmdmVariant": { + "default": "os", + "required": [], + "title": "hmdmVariant", + "type": "string" + }, + "installLanguage": { + "default": "en", + "description": "Available values: en, ru (en by default)", + "required": [], + "title": "installLanguage", + "type": "string" + }, + "sharedSecret": { + "properties": { + "existingSecret": { + "default": "", + "description": "An existing secret that contains the shared secret for a premium setup. If this is provided `headwind.sharedSecret.secretValue` is ignored. Key needs to be `shared-secret``.", + "required": [], + "title": "existingSecret", + "type": "string" + }, + "secretValue": { + "default": "", + "description": "The shared secret for a premium setup. Ignored if `headwind.sharedSecret.existingSecret` is provided.", + "required": [], + "title": "secretValue", + "type": "string" } + }, + "required": [ + "existingSecret", + "secretValue" + ], + "title": "sharedSecret", + "type": "object" + } + }, + "required": [ + "adminEmail", + "baseDomain", + "clientVersion", + "downloadCredentials", + "forceReconfigure", + "hmdmUrl", + "hmdmVariant", + "installLanguage", + "sharedSecret" + ], + "title": "headwind", + "type": "object" + }, + "image": { + "properties": { + "pullPolicy": { + "default": "Always", + "description": "image pull policy", + "required": [], + "title": "pullPolicy", + "type": "string" }, - "imagePullSecrets": { - "type": "array" + "repository": { + "default": "headwindmdm/hmdm", + "description": "image repository", + "required": [], + "title": "repository", + "type": "string" }, - "ingress": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "className": { + "tag": { + "default": "0.1.4", + "description": "Overrides the image tag", + "required": [], + "title": "tag", + "type": "string" + } + }, + "required": [ + "repository", + "pullPolicy", + "tag" + ], + "title": "image", + "type": "object" + }, + "imagePullSecrets": { + "description": "If defined, uses a Secret to pull an image from a private Docker registry or repository.", + "items": { + "required": [] + }, + "required": [], + "title": "imagePullSecrets", + "type": "array" + }, + "ingress": { + "properties": { + "annotations": { + "required": [], + "title": "annotations", + "type": "object" + }, + "className": { + "default": "", + "required": [], + "title": "className", + "type": "string" + }, + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" + }, + "hosts": { + "description": "kubernetes.io/ingress.class: nginx\nkubernetes.io/tls-acme: \"true\"", + "items": { + "anyOf": [ + { + "properties": { + "host": { + "default": "chart-example.local", + "required": [], + "title": "host", "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "hosts": { - "type": "array", + }, + "paths": { "items": { - "type": "object", - "properties": { - "host": { - "type": "string" + "anyOf": [ + { + "properties": { + "path": { + "default": "/", + "required": [], + "title": "path", + "type": "string" }, - "paths": { - "type": "array", - "items": { - "type": "object", - "properties": { - "path": { - "type": "string" - }, - "pathType": { - "type": "string" - } - } - } + "pathType": { + "default": "ImplementationSpecific", + "required": [], + "title": "pathType", + "type": "string" } + }, + "required": [ + "path", + "pathType" + ], + "type": "object" } - } - }, - "tls": { + ], + "required": [] + }, + "required": [], + "title": "paths", "type": "array" - } - } + } + }, + "required": [ + "host", + "paths" + ], + "type": "object" + } + ], + "required": [] + }, + "required": [], + "title": "hosts", + "type": "array" }, - "nameOverride": { - "type": "string" + "ip": { + "default": "", + "description": "ip to resolve public uri behind reverse proxy", + "required": [], + "title": "ip", + "type": "string" }, - "nodeSelector": { - "type": "object" + "tls": { + "items": { + "required": [] + }, + "required": [], + "title": "tls", + "type": "array" + } + }, + "required": [ + "enabled", + "className", + "annotations", + "hosts", + "ip", + "tls" + ], + "title": "ingress", + "type": "object" + }, + "nameOverride": { + "default": "", + "description": "Provide a name in place of `headwind-mdm`", + "required": [], + "title": "nameOverride", + "type": "string" + }, + "nodeSelector": { + "description": "Node labels for pod assignment", + "required": [], + "title": "nodeSelector", + "type": "object" + }, + "persistence": { + "properties": { + "accessModes": { + "items": { + "anyOf": [ + { + "required": [], + "type": "string" + } + ], + "required": [] + }, + "required": [], + "title": "accessModes", + "type": "array" }, - "persistence": { - "type": "object", - "properties": { - "accessModes": { - "type": "array", - "items": { - "type": "string" - } - }, - "annotations": { - "type": "object" - }, - "enabled": { - "type": "boolean" - }, - "existingClaim": { - "type": "string" - }, - "size": { - "type": "string" - }, - "storageClass": { - "type": "string" - } - } + "annotations": { + "required": [], + "title": "annotations", + "type": "object" }, - "podAnnotations": { - "type": "object" - }, - "podSecurityContext": { - "type": "object" - }, - "postgresql": { - "type": "object", - "properties": { - "auth": { - "type": "object", - "properties": { - "database": { - "type": "string" - }, - "existingSecret": { - "type": "string" - }, - "password": { - "type": "string" - }, - "username": { - "type": "string" - } - } - }, - "enabled": { - "type": "boolean" - } - } + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" }, - "replicaCount": { - "type": "integer" + "existingClaim": { + "default": "", + "required": [], + "title": "existingClaim", + "type": "string" }, - "resources": { - "type": "object" + "size": { + "default": "10Gi", + "required": [], + "title": "size", + "type": "string" }, - "revisionHistoryLimit": { - "type": "integer" + "storageClass": { + "default": "", + "required": [], + "title": "storageClass", + "type": "string" + } + }, + "required": [ + "enabled", + "annotations", + "accessModes", + "existingClaim", + "storageClass", + "size" + ], + "title": "persistence", + "type": "object" + }, + "podAnnotations": { + "description": "Annotations to be added to exporter pods", + "required": [], + "title": "podAnnotations", + "type": "object" + }, + "podSecurityContext": { + "description": "pod-level security context", + "required": [], + "title": "podSecurityContext", + "type": "object" + }, + "postgresql": { + "properties": { + "auth": { + "description": "# Authentication parameters", + "properties": { + "database": { + "default": "mychart", + "description": "Name for a custom database to create", + "required": [], + "title": "database", + "type": "string" + }, + "existingSecret": { + "default": "", + "description": "Name of existing secret to use for PostgreSQL credentials", + "required": [], + "title": "existingSecret", + "type": "string" + }, + "password": { + "default": "mychart", + "description": "Password for the custom user to create. Ignored if postgresql.auth.existingSecret is provided", + "required": [], + "title": "password", + "type": "string" + }, + "username": { + "default": "mychart", + "description": "Name for a custom user to create", + "required": [], + "title": "username", + "type": "string" + } + }, + "required": [ + "database", + "existingSecret", + "password", + "username" + ], + "title": "auth", + "type": "object" }, - "securityContext": { - "type": "object" + "enabled": { + "default": true, + "description": "enable PostgreSQL™ subchart from Bitnami", + "required": [], + "title": "enabled", + "type": "boolean" + } + }, + "required": [ + "enabled", + "auth" + ], + "title": "postgresql", + "type": "object" + }, + "replicaCount": { + "default": 1, + "description": "Number of replicas", + "required": [], + "title": "replicaCount", + "type": "integer" + }, + "resources": { + "description": "Resource limits and requests for the headwind pods.", + "required": [], + "title": "resources", + "type": "object" + }, + "revisionHistoryLimit": { + "default": 10, + "description": "The number of old ReplicaSets to retain", + "required": [], + "title": "revisionHistoryLimit", + "type": "integer" + }, + "securityContext": { + "description": "container-level security context", + "required": [], + "title": "securityContext", + "type": "object" + }, + "service": { + "properties": { + "port": { + "default": 8080, + "description": "Kubernetes port where service is exposed", + "required": [], + "title": "port", + "type": "integer" }, - "service": { - "type": "object", - "properties": { - "port": { - "type": "integer" - }, - "type": { - "type": "string" - } - } + "type": { + "default": "ClusterIP", + "description": "Kubernetes service type", + "required": [], + "title": "type", + "type": "string" + } + }, + "required": [ + "type", + "port" + ], + "title": "service", + "type": "object" + }, + "serviceAccount": { + "properties": { + "annotations": { + "description": "Annotations to add to the service account", + "required": [], + "title": "annotations", + "type": "object" }, - "serviceAccount": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "create": { - "type": "boolean" - }, - "name": { - "type": "string" - } - } + "create": { + "default": true, + "description": "Specifies whether a service account should be created", + "required": [], + "title": "create", + "type": "boolean" }, - "tolerations": { - "type": "array" + "name": { + "default": "", + "description": "The name of the service account to use.\nIf not set and create is true, a name is generated using the fullname template", + "required": [], + "title": "name", + "type": "string" } + }, + "required": [ + "create", + "annotations", + "name" + ], + "title": "serviceAccount", + "type": "object" + }, + "tolerations": { + "description": "Toleration labels for pod assignment", + "items": { + "required": [] + }, + "required": [], + "title": "tolerations", + "type": "array" } + }, + "required": [ + "nameOverride", + "fullnameOverride", + "image", + "imagePullSecrets", + "replicaCount", + "revisionHistoryLimit", + "serviceAccount", + "podAnnotations", + "podSecurityContext", + "securityContext", + "service", + "ingress", + "resources", + "autoscaling", + "nodeSelector", + "tolerations", + "affinity", + "headwind", + "persistence", + "postgresql", + "externalPostgresql" + ], + "type": "object" } diff --git a/charts/kube-ops-view/values.schema.json b/charts/kube-ops-view/values.schema.json index 741c46d4..6948ba4d 100644 --- a/charts/kube-ops-view/values.schema.json +++ b/charts/kube-ops-view/values.schema.json @@ -1,164 +1,387 @@ { - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "affinity": { - "type": "object" + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "affinity": { + "description": "Affinity settings for pod assignment", + "required": [], + "title": "affinity", + "type": "object" + }, + "args": { + "description": "optional arguments to add external links for nodes and pods", + "items": { + "required": [] + }, + "required": [], + "title": "args", + "type": "array" + }, + "fullnameOverride": { + "default": "", + "description": "String to fully override `\"kube-ops-view.fullname\"`", + "required": [], + "title": "fullnameOverride", + "type": "string" + }, + "global": { + "description": "Global values are values that can be accessed from any chart or subchart by exactly the same name.", + "required": [], + "title": "global", + "type": "object" + }, + "image": { + "properties": { + "pullPolicy": { + "default": "Always", + "description": "image pull policy", + "required": [], + "title": "pullPolicy", + "type": "string" }, - "args": { - "type": "array" + "repository": { + "default": "hjacobs/kube-ops-view", + "description": "image repository", + "required": [], + "title": "repository", + "type": "string" }, - "fullnameOverride": { - "type": "string" + "tag": { + "default": "23.5.0", + "description": "Overrides the image tag", + "required": [], + "title": "tag", + "type": "string" + } + }, + "required": [ + "repository", + "pullPolicy", + "tag" + ], + "title": "image", + "type": "object" + }, + "imagePullSecrets": { + "description": "If defined, uses a Secret to pull an image from a private Docker registry or repository.", + "items": { + "required": [] + }, + "required": [], + "title": "imagePullSecrets", + "type": "array" + }, + "ingress": { + "properties": { + "annotations": { + "required": [], + "title": "annotations", + "type": "object" }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "type": "string" - }, - "repository": { - "type": "string" - }, - "tag": { - "type": "string" - } - } + "className": { + "default": "", + "required": [], + "title": "className", + "type": "string" }, - "imagePullSecrets": { - "type": "array" + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" }, - "ingress": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "className": { + "hosts": { + "description": "kubernetes.io/ingress.class: nginx\nkubernetes.io/tls-acme: \"true\"", + "items": { + "anyOf": [ + { + "properties": { + "host": { + "default": "chart-example.local", + "required": [], + "title": "host", "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "hosts": { - "type": "array", + }, + "paths": { "items": { - "type": "object", - "properties": { - "host": { - "type": "string" + "anyOf": [ + { + "properties": { + "path": { + "default": "/", + "required": [], + "title": "path", + "type": "string" }, - "paths": { - "type": "array", - "items": { - "type": "object", - "properties": { - "path": { - "type": "string" - }, - "pathType": { - "type": "string" - } - } - } + "pathType": { + "default": "ImplementationSpecific", + "required": [], + "title": "pathType", + "type": "string" } + }, + "required": [ + "path", + "pathType" + ], + "type": "object" } - } - }, - "tls": { + ], + "required": [] + }, + "required": [], + "title": "paths", "type": "array" - } - } - }, - "nameOverride": { - "type": "string" + } + }, + "required": [ + "host", + "paths" + ], + "type": "object" + } + ], + "required": [] + }, + "required": [], + "title": "hosts", + "type": "array" }, - "nodeSelector": { - "type": "object" + "tls": { + "items": { + "required": [] + }, + "required": [], + "title": "tls", + "type": "array" + } + }, + "required": [ + "enabled", + "className", + "annotations", + "hosts", + "tls" + ], + "title": "ingress", + "type": "object" + }, + "nameOverride": { + "default": "", + "description": "Provide a name in place of `kube-ops-view`", + "required": [], + "title": "nameOverride", + "type": "string" + }, + "nodeSelector": { + "description": "Node labels for pod assignment", + "required": [], + "title": "nodeSelector", + "type": "object" + }, + "podAnnotations": { + "description": "Annotations to be added to exporter pods", + "required": [], + "title": "podAnnotations", + "type": "object" + }, + "redis": { + "properties": { + "architecture": { + "default": "standalone", + "description": "Redis™ architecture. Allowed values: standalone or replication", + "required": [], + "title": "architecture", + "type": "string" }, - "podAnnotations": { - "type": "object" + "auth": { + "properties": { + "enabled": { + "default": false, + "description": "Disable password authentication as the kube-ops-view container has no support for password authentication", + "required": [], + "title": "enabled", + "type": "boolean" + } + }, + "required": [ + "enabled" + ], + "title": "auth", + "type": "object" }, - "redis": { - "type": "object", - "properties": { - "architecture": { + "enabled": { + "default": false, + "description": "enable Redis™ subchart from Bitnami", + "required": [], + "title": "enabled", + "type": "boolean" + } + }, + "required": [ + "architecture", + "auth", + "enabled" + ], + "title": "redis", + "type": "object" + }, + "replicaCount": { + "default": 1, + "description": "Number of replicas", + "required": [], + "title": "replicaCount", + "type": "integer" + }, + "resources": { + "description": "Resource limits and requests for the controller pods.", + "required": [], + "title": "resources", + "type": "object" + }, + "revisionHistoryLimit": { + "default": 10, + "description": "The number of old ReplicaSets to retain", + "required": [], + "title": "revisionHistoryLimit", + "type": "integer" + }, + "securityContext": { + "description": "container-level security context", + "properties": { + "capabilities": { + "properties": { + "drop": { + "items": { + "anyOf": [ + { + "required": [], "type": "string" - }, - "auth": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - } - }, - "enabled": { - "type": "boolean" - } + } + ], + "required": [] + }, + "required": [], + "title": "drop", + "type": "array" } + }, + "required": [ + "drop" + ], + "title": "capabilities", + "type": "object" }, - "replicaCount": { - "type": "integer" - }, - "resources": { - "type": "object" + "readOnlyRootFilesystem": { + "default": true, + "required": [], + "title": "readOnlyRootFilesystem", + "type": "boolean" }, - "revisionHistoryLimit": { - "type": "integer" + "runAsNonRoot": { + "default": true, + "required": [], + "title": "runAsNonRoot", + "type": "boolean" }, - "securityContext": { - "type": "object", - "properties": { - "capabilities": { - "type": "object", - "properties": { - "drop": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "readOnlyRootFilesystem": { - "type": "boolean" - }, - "runAsNonRoot": { - "type": "boolean" - }, - "runAsUser": { - "type": "integer" - } - } + "runAsUser": { + "default": 1000, + "required": [], + "title": "runAsUser", + "type": "integer" + } + }, + "required": [ + "capabilities", + "readOnlyRootFilesystem", + "runAsNonRoot", + "runAsUser" + ], + "title": "securityContext", + "type": "object" + }, + "service": { + "properties": { + "port": { + "default": 80, + "description": "Kubernetes port where service is exposed", + "required": [], + "title": "port", + "type": "integer" }, - "service": { - "type": "object", - "properties": { - "port": { - "type": "integer" - }, - "type": { - "type": "string" - } - } + "type": { + "default": "ClusterIP", + "description": "Kubernetes service type", + "required": [], + "title": "type", + "type": "string" + } + }, + "required": [ + "type", + "port" + ], + "title": "service", + "type": "object" + }, + "serviceAccount": { + "properties": { + "annotations": { + "description": "Annotations to add to the service account", + "required": [], + "title": "annotations", + "type": "object" }, - "serviceAccount": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "create": { - "type": "boolean" - }, - "name": { - "type": "string" - } - } + "create": { + "default": true, + "description": "Specifies whether a service account should be created", + "required": [], + "title": "create", + "type": "boolean" }, - "tolerations": { - "type": "array" + "name": { + "default": "", + "description": "The name of the service account to use.\nIf not set and create is true, a name is generated using the fullname template", + "required": [], + "title": "name", + "type": "string" } + }, + "required": [ + "create", + "annotations", + "name" + ], + "title": "serviceAccount", + "type": "object" + }, + "tolerations": { + "description": "Toleration labels for pod assignment", + "items": { + "required": [] + }, + "required": [], + "title": "tolerations", + "type": "array" } + }, + "required": [ + "nameOverride", + "fullnameOverride", + "image", + "imagePullSecrets", + "args", + "replicaCount", + "revisionHistoryLimit", + "podAnnotations", + "securityContext", + "service", + "resources", + "nodeSelector", + "tolerations", + "affinity", + "serviceAccount", + "ingress", + "redis" + ], + "type": "object" } diff --git a/charts/kubedoom/values.schema.json b/charts/kubedoom/values.schema.json index 42af322c..04b04712 100644 --- a/charts/kubedoom/values.schema.json +++ b/charts/kubedoom/values.schema.json @@ -1,118 +1,290 @@ { - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "affinity": { - "type": "object" + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "affinity": { + "description": "Affinity settings for pod assignment", + "required": [], + "title": "affinity", + "type": "object" + }, + "autoscaling": { + "properties": { + "enabled": { + "default": false, + "description": "Enable Horizontal POD autoscaling", + "required": [], + "title": "enabled", + "type": "boolean" }, - "autoscaling": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "maxReplicas": { - "type": "integer" - }, - "minReplicas": { - "type": "integer" - }, - "targetCPUUtilizationPercentage": { - "type": "integer" - }, - "targetMemoryUtilizationPercentage": { - "type": "integer" - } - } + "maxReplicas": { + "default": 100, + "description": "Maximum number of replicas", + "required": [], + "title": "maxReplicas", + "type": "integer" }, - "extraEnv": { - "type": "array" + "minReplicas": { + "default": 1, + "description": "Minimum number of replicas", + "required": [], + "title": "minReplicas", + "type": "integer" }, - "fullnameOverride": { - "type": "string" + "targetCPUUtilizationPercentage": { + "default": 80, + "description": "Target CPU utilization percentage", + "required": [], + "title": "targetCPUUtilizationPercentage", + "type": "integer" }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "type": "string" - }, - "registry": { - "type": "string" - }, - "repository": { - "type": "string" - }, - "tag": { - "type": "string" - } - } - }, - "imagePullSecrets": { - "type": "array" - }, - "kubedoom": { - "type": "object", - "properties": { - "mode": { - "type": "string" - }, - "namespace": { - "type": "string" - } - } - }, - "nameOverride": { - "type": "string" - }, - "nodeSelector": { - "type": "object" - }, - "podAnnotations": { - "type": "object" - }, - "podSecurityContext": { - "type": "object" + "targetMemoryUtilizationPercentage": { + "default": 80, + "description": "Target Memory utilization percentage", + "required": [], + "title": "targetMemoryUtilizationPercentage", + "type": "integer" + } + }, + "required": [ + "enabled", + "minReplicas", + "maxReplicas", + "targetCPUUtilizationPercentage", + "targetMemoryUtilizationPercentage" + ], + "title": "autoscaling", + "type": "object" + }, + "extraEnv": { + "description": "additional environment variables to be added to the pods", + "items": { + "required": [] + }, + "required": [], + "title": "extraEnv", + "type": "array" + }, + "fullnameOverride": { + "default": "", + "description": "String to fully override `\"kubedoom.fullname\"`", + "required": [], + "title": "fullnameOverride", + "type": "string" + }, + "global": { + "description": "Global values are values that can be accessed from any chart or subchart by exactly the same name.", + "required": [], + "title": "global", + "type": "object" + }, + "image": { + "properties": { + "pullPolicy": { + "default": "Always", + "description": "image pull policy", + "required": [], + "title": "pullPolicy", + "type": "string" }, - "replicaCount": { - "type": "integer" + "registry": { + "default": "ghcr.io", + "description": "image registry", + "required": [], + "title": "registry", + "type": "string" }, - "resources": { - "type": "object" + "repository": { + "default": "storax/kubedoom", + "description": "image repository", + "required": [], + "title": "repository", + "type": "string" }, - "revisionHistoryLimit": { - "type": "integer" + "tag": { + "default": "0.6.0", + "description": "Overrides the image tag", + "required": [], + "title": "tag", + "type": "string" + } + }, + "required": [ + "registry", + "repository", + "pullPolicy", + "tag" + ], + "title": "image", + "type": "object" + }, + "imagePullSecrets": { + "description": "If defined, uses a Secret to pull an image from a private Docker registry or repository.", + "items": { + "required": [] + }, + "required": [], + "title": "imagePullSecrets", + "type": "array" + }, + "kubedoom": { + "properties": { + "mode": { + "default": "pods", + "description": "You can also kill Namespaces instead of Pods. Simply set this to `namespaces`. Allowed values: `pods`, `namespaces`.", + "required": [], + "title": "mode", + "type": "string" }, - "securityContext": { - "type": "object" + "namespace": { + "default": "", + "description": "You can limit Kubedoom to deleting pods in a single namespace", + "required": [], + "title": "namespace", + "type": "string" + } + }, + "required": [ + "mode", + "namespace" + ], + "title": "kubedoom", + "type": "object" + }, + "nameOverride": { + "default": "", + "description": "Provide a name in place of `kubedoom`", + "required": [], + "title": "nameOverride", + "type": "string" + }, + "nodeSelector": { + "description": "Node labels for pod assignment", + "required": [], + "title": "nodeSelector", + "type": "object" + }, + "podAnnotations": { + "description": "Annotations to be added to the pods", + "required": [], + "title": "podAnnotations", + "type": "object" + }, + "podSecurityContext": { + "description": "pod-level security context", + "required": [], + "title": "podSecurityContext", + "type": "object" + }, + "replicaCount": { + "default": 1, + "description": "Number of replicas", + "required": [], + "title": "replicaCount", + "type": "integer" + }, + "resources": { + "description": "Resource limits and requests for the controller pods.", + "required": [], + "title": "resources", + "type": "object" + }, + "revisionHistoryLimit": { + "default": 10, + "description": "The number of old ReplicaSets to retain", + "required": [], + "title": "revisionHistoryLimit", + "type": "integer" + }, + "securityContext": { + "description": "container-level security context", + "required": [], + "title": "securityContext", + "type": "object" + }, + "service": { + "properties": { + "port": { + "default": 5900, + "description": "Kubernetes port where service is exposed", + "required": [], + "title": "port", + "type": "integer" }, - "service": { - "type": "object", - "properties": { - "port": { - "type": "integer" - }, - "type": { - "type": "string" - } - } + "type": { + "default": "ClusterIP", + "description": "Kubernetes service type", + "required": [], + "title": "type", + "type": "string" + } + }, + "required": [ + "type", + "port" + ], + "title": "service", + "type": "object" + }, + "serviceAccount": { + "properties": { + "annotations": { + "description": "Annotations to add to the service account", + "required": [], + "title": "annotations", + "type": "object" }, - "serviceAccount": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "create": { - "type": "boolean" - }, - "name": { - "type": "string" - } - } + "create": { + "default": true, + "description": "Specifies whether a service account should be created", + "required": [], + "title": "create", + "type": "boolean" }, - "tolerations": { - "type": "array" + "name": { + "default": "", + "description": "The name of the service account to use.\nIf not set and create is true, a name is generated using the fullname template", + "required": [], + "title": "name", + "type": "string" } + }, + "required": [ + "create", + "annotations", + "name" + ], + "title": "serviceAccount", + "type": "object" + }, + "tolerations": { + "description": "Toleration labels for pod assignment", + "items": { + "required": [] + }, + "required": [], + "title": "tolerations", + "type": "array" } + }, + "required": [ + "nameOverride", + "fullnameOverride", + "image", + "imagePullSecrets", + "podAnnotations", + "podSecurityContext", + "replicaCount", + "revisionHistoryLimit", + "resources", + "securityContext", + "serviceAccount", + "service", + "autoscaling", + "nodeSelector", + "tolerations", + "affinity", + "extraEnv", + "kubedoom" + ], + "type": "object" } diff --git a/charts/kubenav/values.schema.json b/charts/kubenav/values.schema.json index d87c2c08..2e8cf934 100644 --- a/charts/kubenav/values.schema.json +++ b/charts/kubenav/values.schema.json @@ -1,40 +1,99 @@ { - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "fullnameOverride": { - "type": "string" + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "fullnameOverride": { + "default": "", + "description": "String to fully override `\"kubenav.fullname\"`", + "required": [], + "title": "fullnameOverride", + "type": "string" + }, + "global": { + "description": "Global values are values that can be accessed from any chart or subchart by exactly the same name.", + "required": [], + "title": "global", + "type": "object" + }, + "nameOverride": { + "default": "", + "description": "Provide a name in place of `kubenav`", + "required": [], + "title": "nameOverride", + "type": "string" + }, + "rbac": { + "properties": { + "customPermissions": { + "description": "Define the custom permissions to be granted to kubenav", + "items": { + "required": [] + }, + "required": [], + "title": "customPermissions", + "type": "array" }, - "nameOverride": { - "type": "string" + "mode": { + "default": "readonly", + "description": "Decide which access mode should be granted to kubenav: `readonly`, `cluster-admin` or `custom`.", + "required": [], + "title": "mode", + "type": "string" }, - "rbac": { - "type": "object", - "properties": { - "customPermissions": { - "type": "array" - }, - "mode": { - "type": "string" - }, - "namespaceLimits": { - "type": "array" - } - } + "namespaceLimits": { + "description": "- apiGroups: [\"\"]\n resources: [\"nodes\", \"pods\"]\n verbs:\n - list\nDefine a list of namespaces to limit kubenav to only access these namespaces", + "items": { + "required": [] + }, + "required": [], + "title": "namespaceLimits", + "type": "array" + } + }, + "required": [ + "mode", + "customPermissions", + "namespaceLimits" + ], + "title": "rbac", + "type": "object" + }, + "serviceAccount": { + "properties": { + "annotations": { + "description": "Annotations to add to the service account", + "required": [], + "title": "annotations", + "type": "object" + }, + "create": { + "default": true, + "description": "Specifies whether a service account should be created", + "required": [], + "title": "create", + "type": "boolean" }, - "serviceAccount": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "create": { - "type": "boolean" - }, - "name": { - "type": "string" - } - } + "name": { + "default": "", + "description": "The name of the service account to use.\nIf not set and create is true, a name is generated using the fullname templatev", + "required": [], + "title": "name", + "type": "string" } + }, + "required": [ + "create", + "annotations", + "name" + ], + "title": "serviceAccount", + "type": "object" } + }, + "required": [ + "nameOverride", + "fullnameOverride", + "serviceAccount", + "rbac" + ], + "type": "object" } diff --git a/charts/kubevirt-manager/values.schema.json b/charts/kubevirt-manager/values.schema.json index 44368e96..030a0793 100644 --- a/charts/kubevirt-manager/values.schema.json +++ b/charts/kubevirt-manager/values.schema.json @@ -1,236 +1,568 @@ { - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "affinity": { - "type": "object" - }, - "autoscaling": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "maxReplicas": { - "type": "integer" - }, - "minReplicas": { - "type": "integer" - }, - "targetCPUUtilizationPercentage": { - "type": "integer" - } - } + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "affinity": { + "description": "Affinity settings for pod assignment", + "required": [], + "title": "affinity", + "type": "object" + }, + "autoscaling": { + "properties": { + "enabled": { + "default": false, + "description": "Enable Horizontal POD autoscaling", + "required": [], + "title": "enabled", + "type": "boolean" }, - "extraEnv": { - "type": "array" + "maxReplicas": { + "default": 100, + "description": "Maximum number of replicas", + "required": [], + "title": "maxReplicas", + "type": "integer" }, - "fullnameOverride": { - "type": "string" + "minReplicas": { + "default": 1, + "description": "Minimum number of replicas", + "required": [], + "title": "minReplicas", + "type": "integer" }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "type": "string" - }, - "repository": { - "type": "string" - }, - "tag": { - "type": "string" - } + "targetCPUUtilizationPercentage": { + "default": 80, + "description": "Target CPU utilization percentage", + "required": [], + "title": "targetCPUUtilizationPercentage", + "type": "integer" + } + }, + "required": [ + "enabled", + "minReplicas", + "maxReplicas", + "targetCPUUtilizationPercentage" + ], + "title": "autoscaling", + "type": "object" + }, + "extraEnv": { + "description": "additional environment variables to be added to the pods", + "items": { + "required": [] + }, + "required": [], + "title": "extraEnv", + "type": "array" + }, + "fullnameOverride": { + "default": "", + "description": "String to fully override `\"kubevirt-manager.fullname\"`", + "required": [], + "title": "fullnameOverride", + "type": "string" + }, + "global": { + "description": "Global values are values that can be accessed from any chart or subchart by exactly the same name.", + "required": [], + "title": "global", + "type": "object" + }, + "image": { + "properties": { + "pullPolicy": { + "default": "Always", + "description": "image pull policy", + "required": [], + "title": "pullPolicy", + "type": "string" + }, + "repository": { + "default": "kubevirtmanager/kubevirt-manager", + "description": "image repository", + "required": [], + "title": "repository", + "type": "string" + }, + "tag": { + "default": "1.4.2", + "description": "Overrides the image tag", + "required": [], + "title": "tag", + "type": "string" + } + }, + "required": [ + "repository", + "pullPolicy", + "tag" + ], + "title": "image", + "type": "object" + }, + "imagePullSecrets": { + "description": "If defined, uses a Secret to pull an image from a private Docker registry or repository.", + "items": { + "required": [] + }, + "required": [], + "title": "imagePullSecrets", + "type": "array" + }, + "ingress": { + "properties": { + "annotations": { + "description": "Additional annotations for the Ingress resource", + "required": [], + "title": "annotations", + "type": "object" + }, + "basicAuth": { + "properties": { + "enabled": { + "default": false, + "description": "enable the configuration of basic authentication with nginx", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "existingSecret": { + "default": "", + "description": "An existing Secret containing the username and password for basic authentication. Username and password have to be base64 encoded in the form username:password. The Secret needs to contain a key `.htpasswd` with the base64 encoded authentication information. If set `ingress.basicAuth.username` and `ingress.basicAuth.password` will be ignored.", + "required": [], + "title": "existingSecret", + "type": "string" + }, + "password": { + "default": "password", + "description": "Password for authentication", + "required": [], + "title": "password", + "type": "string" + }, + "username": { + "default": "admin", + "description": "Username for authentication", + "required": [], + "title": "username", + "type": "string" } + }, + "required": [ + "enabled", + "existingSecret", + "username", + "password" + ], + "title": "basicAuth", + "type": "object" }, - "imagePullSecrets": { - "type": "array" + "className": { + "default": "", + "description": "IngressClass that will be be used to implement the Ingress", + "required": [], + "title": "className", + "type": "string" }, - "ingress": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "basicAuth": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "existingSecret": { - "type": "string" - }, - "password": { - "type": "string" - }, - "username": { - "type": "string" - } - } - }, - "className": { + "enabled": { + "default": false, + "description": "Enable ingress record generation", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "hosts": { + "description": "kubernetes.io/ingress.class: nginx\nkubernetes.io/tls-acme: \"true\"\nAn array with the hosts configuration", + "items": { + "anyOf": [ + { + "properties": { + "host": { + "default": "chart-example.local", + "required": [], + "title": "host", "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "hosts": { - "type": "array", + }, + "paths": { "items": { - "type": "object", - "properties": { - "host": { - "type": "string" + "anyOf": [ + { + "properties": { + "path": { + "default": "/", + "required": [], + "title": "path", + "type": "string" }, - "paths": { - "type": "array", - "items": { - "type": "object", - "properties": { - "path": { - "type": "string" - }, - "pathType": { - "type": "string" - } - } - } + "pathType": { + "default": "ImplementationSpecific", + "required": [], + "title": "pathType", + "type": "string" } + }, + "required": [ + "path", + "pathType" + ], + "type": "object" } - } - }, - "tls": { + ], + "required": [] + }, + "required": [], + "title": "paths", "type": "array" - } - } - }, - "nameOverride": { - "type": "string" + } + }, + "required": [ + "host", + "paths" + ], + "type": "object" + } + ], + "required": [] + }, + "required": [], + "title": "hosts", + "type": "array" }, - "nodeSelector": { - "type": "object" + "tls": { + "description": "An array with the tls configuration", + "items": { + "required": [] + }, + "required": [], + "title": "tls", + "type": "array" + } + }, + "required": [ + "enabled", + "basicAuth", + "className", + "annotations", + "hosts", + "tls" + ], + "title": "ingress", + "type": "object" + }, + "nameOverride": { + "default": "", + "description": "Provide a name in place of `kubevirt-manager`", + "required": [], + "title": "nameOverride", + "type": "string" + }, + "nodeSelector": { + "description": "Node labels for pod assignment", + "required": [], + "title": "nodeSelector", + "type": "object" + }, + "podAnnotations": { + "description": "Annotations to be added to exporter pods", + "required": [], + "title": "podAnnotations", + "type": "object" + }, + "podSecurityContext": { + "description": "pod-level security context", + "required": [], + "title": "podSecurityContext", + "type": "object" + }, + "prometheus": { + "properties": { + "additionalLabels": { + "description": "Prometheus ServiceMonitor labels", + "required": [], + "title": "additionalLabels", + "type": "object" }, - "podAnnotations": { - "type": "object" + "enabled": { + "default": false, + "description": "Enable a Prometheus ServiceMonitor", + "required": [], + "title": "enabled", + "type": "boolean" }, - "podSecurityContext": { - "type": "object" + "interval": { + "default": "30s", + "description": "prometheus: kube-prometheus\nPrometheus ServiceMonitor interval", + "required": [], + "title": "interval", + "type": "string" }, - "prometheus": { - "type": "object", - "properties": { - "additionalLabels": { - "type": "object" - }, - "enabled": { - "type": "boolean" - }, - "interval": { - "type": "string" - }, - "metricRelabelings": { - "type": "array" - }, - "namespace": { - "type": "string" - }, - "relabelings": { - "type": "array" - }, - "selector": { - "type": "object" - }, - "service": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "port": { - "type": "string" - } - } - } - } + "metricRelabelings": { + "description": "Prometheus [MetricRelabelConfigs] to apply to samples before ingestion", + "items": { + "required": [] + }, + "required": [], + "title": "metricRelabelings", + "type": "array" }, - "replicaCount": { - "type": "integer" + "namespace": { + "default": "", + "description": "Prometheus ServiceMonitor namespace", + "required": [], + "title": "namespace", + "type": "string" }, - "resources": { - "type": "object" + "relabelings": { + "description": "Prometheus [RelabelConfigs] to apply to samples before scraping", + "items": { + "required": [] + }, + "required": [], + "title": "relabelings", + "type": "array" }, - "revisionHistoryLimit": { - "type": "integer" + "selector": { + "description": "release: prometheus\nPrometheus ServiceMonitor selector", + "required": [], + "title": "selector", + "type": "object" }, - "securityContext": { - "type": "object", - "properties": { - "allowPrivilegeEscalation": { - "type": "boolean" - }, - "capabilities": { - "type": "object", - "properties": { - "drop": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "readOnlyRootFilesystem": { - "type": "boolean" - }, - "runAsGroup": { - "type": "integer" - }, - "runAsNonRoot": { - "type": "boolean" - }, - "runAsUser": { - "type": "integer" - }, - "seccompProfile": { - "type": "object", - "properties": { - "type": { - "type": "string" - } - } - } + "service": { + "properties": { + "name": { + "default": "", + "description": "Name of the Prometheus Service", + "required": [], + "title": "name", + "type": "string" + }, + "namespace": { + "default": "", + "description": "Namespace of the Prometheus Service", + "required": [], + "title": "namespace", + "type": "string" + }, + "port": { + "default": "", + "description": "Port of the Prometheus Service", + "required": [], + "title": "port", + "type": "string" } + }, + "required": [ + "name", + "namespace", + "port" + ], + "title": "service", + "type": "object" + } + }, + "required": [ + "enabled", + "additionalLabels", + "selector", + "interval", + "namespace", + "metricRelabelings", + "relabelings", + "service" + ], + "title": "prometheus", + "type": "object" + }, + "replicaCount": { + "default": 1, + "description": "Number of replicas", + "required": [], + "title": "replicaCount", + "type": "integer" + }, + "resources": { + "description": "Resource limits and requests for the pods.", + "required": [], + "title": "resources", + "type": "object" + }, + "revisionHistoryLimit": { + "default": 0, + "description": "The number of old ReplicaSets to retain", + "required": [], + "title": "revisionHistoryLimit", + "type": "integer" + }, + "securityContext": { + "description": "container-level security context", + "properties": { + "allowPrivilegeEscalation": { + "default": false, + "required": [], + "title": "allowPrivilegeEscalation", + "type": "boolean" }, - "service": { - "type": "object", - "properties": { - "port": { - "type": "integer" - }, - "type": { + "capabilities": { + "properties": { + "drop": { + "items": { + "anyOf": [ + { + "required": [], "type": "string" - } + } + ], + "required": [] + }, + "required": [], + "title": "drop", + "type": "array" } + }, + "required": [ + "drop" + ], + "title": "capabilities", + "type": "object" }, - "serviceAccount": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "create": { - "type": "boolean" - }, - "name": { - "type": "string" - } + "readOnlyRootFilesystem": { + "default": true, + "required": [], + "title": "readOnlyRootFilesystem", + "type": "boolean" + }, + "runAsGroup": { + "default": 30000, + "required": [], + "title": "runAsGroup", + "type": "integer" + }, + "runAsNonRoot": { + "default": true, + "required": [], + "title": "runAsNonRoot", + "type": "boolean" + }, + "runAsUser": { + "default": 10000, + "required": [], + "title": "runAsUser", + "type": "integer" + }, + "seccompProfile": { + "properties": { + "type": { + "default": "RuntimeDefault", + "required": [], + "title": "type", + "type": "string" } + }, + "required": [ + "type" + ], + "title": "seccompProfile", + "type": "object" + } + }, + "required": [ + "allowPrivilegeEscalation", + "capabilities", + "readOnlyRootFilesystem", + "runAsNonRoot", + "runAsUser", + "runAsGroup", + "seccompProfile" + ], + "title": "securityContext", + "type": "object" + }, + "service": { + "properties": { + "port": { + "default": 8080, + "description": "Kubernetes port where service is exposed", + "required": [], + "title": "port", + "type": "integer" + }, + "type": { + "default": "ClusterIP", + "description": "Kubernetes service type", + "required": [], + "title": "type", + "type": "string" + } + }, + "required": [ + "type", + "port" + ], + "title": "service", + "type": "object" + }, + "serviceAccount": { + "properties": { + "annotations": { + "description": "Annotations to add to the service account", + "required": [], + "title": "annotations", + "type": "object" + }, + "create": { + "default": true, + "description": "Specifies whether a service account should be created", + "required": [], + "title": "create", + "type": "boolean" }, - "tolerations": { - "type": "array" + "name": { + "default": "", + "description": "The name of the service account to use.\nIf not set and create is true, a name is generated using the fullname template", + "required": [], + "title": "name", + "type": "string" } + }, + "required": [ + "create", + "annotations", + "name" + ], + "title": "serviceAccount", + "type": "object" + }, + "tolerations": { + "description": "Toleration labels for pod assignment", + "items": { + "required": [] + }, + "required": [], + "title": "tolerations", + "type": "array" } + }, + "required": [ + "nameOverride", + "fullnameOverride", + "image", + "imagePullSecrets", + "replicaCount", + "revisionHistoryLimit", + "serviceAccount", + "podAnnotations", + "podSecurityContext", + "securityContext", + "service", + "ingress", + "resources", + "autoscaling", + "nodeSelector", + "tolerations", + "affinity", + "extraEnv", + "prometheus" + ], + "type": "object" } diff --git a/charts/kutt/values.schema.json b/charts/kutt/values.schema.json index 7d47e101..aec3c522 100644 --- a/charts/kutt/values.schema.json +++ b/charts/kutt/values.schema.json @@ -1,370 +1,885 @@ { - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "affinity": { - "type": "object" + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "affinity": { + "description": "Affinity settings for pod assignment", + "required": [], + "title": "affinity", + "type": "object" + }, + "autoscaling": { + "properties": { + "enabled": { + "default": false, + "description": "Enable Horizontal POD autoscaling", + "required": [], + "title": "enabled", + "type": "boolean" }, - "autoscaling": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "maxReplicas": { - "type": "integer" - }, - "minReplicas": { - "type": "integer" - }, - "targetCPUUtilizationPercentage": { - "type": "integer" - } - } + "maxReplicas": { + "default": 100, + "description": "Maximum number of replicas", + "required": [], + "title": "maxReplicas", + "type": "integer" }, - "externalPostgresql": { - "type": "object", - "properties": { - "auth": { - "type": "object", - "properties": { - "database": { - "type": "string" - }, - "existingSecret": { - "type": "string" - }, - "password": { - "type": "string" - }, - "userPasswordKey": { - "type": "string" - }, - "username": { - "type": "string" - } - } - }, - "hostname": { - "type": "string" - }, - "port": { - "type": "integer" - } + "minReplicas": { + "default": 1, + "description": "Minimum number of replicas", + "required": [], + "title": "minReplicas", + "type": "integer" + }, + "targetCPUUtilizationPercentage": { + "default": 80, + "description": "Target CPU utilization percentage", + "required": [], + "title": "targetCPUUtilizationPercentage", + "type": "integer" + } + }, + "required": [ + "enabled", + "minReplicas", + "maxReplicas", + "targetCPUUtilizationPercentage" + ], + "title": "autoscaling", + "type": "object" + }, + "externalPostgresql": { + "properties": { + "auth": { + "properties": { + "database": { + "default": "kutt", + "description": "Name of the database to use", + "required": [], + "title": "database", + "type": "string" + }, + "existingSecret": { + "default": "", + "description": "Name of existing secret to use for PostgreSQL credentials", + "required": [], + "title": "existingSecret", + "type": "string" + }, + "password": { + "default": "kutt", + "description": "Password to use", + "required": [], + "title": "password", + "type": "string" + }, + "userPasswordKey": { + "default": "", + "description": "Key in the secret containing the password", + "required": [], + "title": "userPasswordKey", + "type": "string" + }, + "username": { + "default": "kutt", + "description": "Name of the user to use", + "required": [], + "title": "username", + "type": "string" } + }, + "required": [ + "database", + "existingSecret", + "password", + "username", + "userPasswordKey" + ], + "title": "auth", + "type": "object" }, - "externalRedis": { - "type": "object", - "properties": { - "auth": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "existingSecret": { - "type": "string" - }, - "password": { - "type": "string" - }, - "userPasswordKey": { - "type": "string" - } - } - }, - "hostname": { - "type": "string" - }, - "port": { - "type": "integer" - } + "hostname": { + "default": "", + "description": "Hostname of the PostgreSQL database", + "required": [], + "title": "hostname", + "type": "string" + }, + "port": { + "default": 5432, + "description": "Port used to connect to PostgreSQL database", + "required": [], + "title": "port", + "type": "integer" + } + }, + "required": [ + "auth", + "hostname", + "port" + ], + "title": "externalPostgresql", + "type": "object" + }, + "externalRedis": { + "properties": { + "auth": { + "properties": { + "enabled": { + "default": true, + "description": "if authentication should be used with external Redis™", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "existingSecret": { + "default": "", + "description": "Name of existing secret to use for Redis™ credentials", + "required": [], + "title": "existingSecret", + "type": "string" + }, + "password": { + "default": "", + "description": "Password to use", + "required": [], + "title": "password", + "type": "string" + }, + "userPasswordKey": { + "default": "", + "description": "Key in the secret containing the password", + "required": [], + "title": "userPasswordKey", + "type": "string" } + }, + "required": [ + "enabled", + "existingSecret", + "password", + "userPasswordKey" + ], + "title": "auth", + "type": "object" }, - "extraEnv": { - "type": "array" + "hostname": { + "default": "", + "description": "Hostname of Redis™", + "required": [], + "title": "hostname", + "type": "string" }, - "fullnameOverride": { - "type": "string" + "port": { + "default": 6379, + "description": "Port used to connect to Redis", + "required": [], + "title": "port", + "type": "integer" + } + }, + "required": [ + "auth", + "hostname", + "port" + ], + "title": "externalRedis", + "type": "object" + }, + "extraEnv": { + "description": "additional environment variables to be added to the pods", + "items": { + "required": [] + }, + "required": [], + "title": "extraEnv", + "type": "array" + }, + "fullnameOverride": { + "default": "", + "description": "String to fully override `\"kutt.fullname\"`", + "required": [], + "title": "fullnameOverride", + "type": "string" + }, + "global": { + "description": "Global values are values that can be accessed from any chart or subchart by exactly the same name.", + "required": [], + "title": "global", + "type": "object" + }, + "image": { + "properties": { + "pullPolicy": { + "default": "Always", + "description": "image pull policy", + "required": [], + "title": "pullPolicy", + "type": "string" }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "type": "string" - }, - "repository": { - "type": "string" - }, - "tag": { - "type": "string" - } - } + "repository": { + "default": "kutt/kutt", + "description": "image repository", + "required": [], + "title": "repository", + "type": "string" }, - "imagePullSecrets": { - "type": "array" + "tag": { + "default": "v2.7.4", + "description": "Overrides the image tag", + "required": [], + "title": "tag", + "type": "string" + } + }, + "required": [ + "repository", + "pullPolicy", + "tag" + ], + "title": "image", + "type": "object" + }, + "imagePullSecrets": { + "description": "If defined, uses a Secret to pull an image from a private Docker registry or repository.", + "items": { + "required": [] + }, + "required": [], + "title": "imagePullSecrets", + "type": "array" + }, + "ingress": { + "properties": { + "annotations": { + "description": "Additional annotations for the Ingress resource", + "required": [], + "title": "annotations", + "type": "object" }, - "ingress": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "className": { + "className": { + "default": "", + "description": "IngressClass that will be be used to implement the Ingress", + "required": [], + "title": "className", + "type": "string" + }, + "enabled": { + "default": false, + "description": "Enable ingress record generation", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "hosts": { + "description": "kubernetes.io/ingress.class: nginx\nkubernetes.io/tls-acme: \"true\"\nAn array with the hosts configuration", + "items": { + "anyOf": [ + { + "properties": { + "host": { + "default": "chart-example.local", + "required": [], + "title": "host", "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "hosts": { - "type": "array", + }, + "paths": { "items": { - "type": "object", - "properties": { - "host": { - "type": "string" + "anyOf": [ + { + "properties": { + "path": { + "default": "/", + "required": [], + "title": "path", + "type": "string" }, - "paths": { - "type": "array", - "items": { - "type": "object", - "properties": { - "path": { - "type": "string" - }, - "pathType": { - "type": "string" - } - } - } + "pathType": { + "default": "ImplementationSpecific", + "required": [], + "title": "pathType", + "type": "string" } + }, + "required": [ + "path", + "pathType" + ], + "type": "object" } - } - }, - "tls": { + ], + "required": [] + }, + "required": [], + "title": "paths", "type": "array" - } - } - }, - "kutt": { - "type": "object", - "properties": { - "admin": { - "type": "object", - "properties": { - "emails": { - "type": "string" - } - } - }, - "config": { - "type": "object", - "properties": { - "defaultMaxStatsPerLink": { - "type": "string" - }, - "disallowAnonymousLinks": { - "type": "boolean" - }, - "disallowRegistration": { - "type": "boolean" - }, - "linkLength": { - "type": "integer" - }, - "nonUserCooldown": { - "type": "integer" - }, - "siteName": { - "type": "string" - }, - "userLimitPerDay": { - "type": "integer" - } - } + } }, - "domain": { - "type": "object", - "properties": { - "customDomainUseHttps": { - "type": "boolean" - }, - "defaultDomain": { - "type": "string" - }, - "useFirstIngressHost": { - "type": "boolean" - } - } - }, - "google": { - "type": "object", - "properties": { - "existingSecret": { - "type": "string" - }, - "safeBrowsingKey": { - "type": "string" - } - } - }, - "jwt": { - "type": "object", - "properties": { - "existingSecret": { - "type": "string" - }, - "key": { - "type": "string" - } - } - }, - "mail": { - "type": "object", - "properties": { - "contactEmail": { - "type": "string" - }, - "existingSecret": { - "type": "string" - }, - "from": { - "type": "string" - }, - "host": { - "type": "string" - }, - "password": { - "type": "string" - }, - "port": { - "type": "integer" - }, - "reportEmail": { - "type": "string" - }, - "secure": { - "type": "boolean" - }, - "username": { - "type": "string" - } - } - }, - "recaptcha": { - "type": "object", - "properties": { - "existingSecret": { - "type": "string" - }, - "secretKey": { - "type": "string" - }, - "siteKey": { - "type": "string" - } - } - } - } + "required": [ + "host", + "paths" + ], + "type": "object" + } + ], + "required": [] + }, + "required": [], + "title": "hosts", + "type": "array" }, - "nameOverride": { - "type": "string" + "tls": { + "description": "An array with the tls configuration", + "items": { + "required": [] + }, + "required": [], + "title": "tls", + "type": "array" + } + }, + "required": [ + "enabled", + "className", + "annotations", + "hosts", + "tls" + ], + "title": "ingress", + "type": "object" + }, + "kutt": { + "properties": { + "admin": { + "properties": { + "emails": { + "default": "", + "description": "Comma seperated list of email addresses that can access admin actions on settings page", + "required": [], + "title": "emails", + "type": "string" + } + }, + "required": [ + "emails" + ], + "title": "admin", + "type": "object" }, - "nodeSelector": { - "type": "object" + "config": { + "properties": { + "defaultMaxStatsPerLink": { + "default": "5000", + "description": "Max number of visits for each link to have detailed stats", + "required": [], + "title": "defaultMaxStatsPerLink", + "type": "string" + }, + "disallowAnonymousLinks": { + "default": false, + "description": "Disable anonymous link creation", + "required": [], + "title": "disallowAnonymousLinks", + "type": "boolean" + }, + "disallowRegistration": { + "default": false, + "description": "Disable registration", + "required": [], + "title": "disallowRegistration", + "type": "boolean" + }, + "linkLength": { + "default": 6, + "description": "Generated link length", + "required": [], + "title": "linkLength", + "type": "integer" + }, + "nonUserCooldown": { + "default": 0, + "description": "Create a cooldown for non-logged in users in minutes. Set 0 to disable.", + "required": [], + "title": "nonUserCooldown", + "type": "integer" + }, + "siteName": { + "default": "Kutt", + "description": "The name of the site where Kutt is hosted", + "required": [], + "title": "siteName", + "type": "string" + }, + "userLimitPerDay": { + "default": 50, + "description": "The daily limit for each user", + "required": [], + "title": "userLimitPerDay", + "type": "integer" + } + }, + "required": [ + "defaultMaxStatsPerLink", + "disallowAnonymousLinks", + "disallowRegistration", + "linkLength", + "nonUserCooldown", + "siteName", + "userLimitPerDay" + ], + "title": "config", + "type": "object" }, - "podAnnotations": { - "type": "object" + "domain": { + "properties": { + "customDomainUseHttps": { + "default": false, + "description": "Use HTTPS for links with custom domain", + "required": [], + "title": "customDomainUseHttps", + "type": "boolean" + }, + "defaultDomain": { + "default": "localhost:3000", + "description": "The domain that this website is on", + "required": [], + "title": "defaultDomain", + "type": "string" + }, + "useFirstIngressHost": { + "default": false, + "description": "If you use an ingress to expose Kutt you can simply set this to true to use the first hostname defined in the ingress.", + "required": [], + "title": "useFirstIngressHost", + "type": "boolean" + } + }, + "required": [ + "customDomainUseHttps", + "defaultDomain", + "useFirstIngressHost" + ], + "title": "domain", + "type": "object" }, - "podSecurityContext": { - "type": "object" + "google": { + "properties": { + "existingSecret": { + "default": "", + "description": "Use existing secret for Google configuration. The secret has to contain the key `GOOGLE_SAFE_BROWSING_KEY`. When it's set the `kutt.google.safeBrowsingKey` is ignored.", + "required": [], + "title": "existingSecret", + "type": "string" + }, + "safeBrowsingKey": { + "default": "", + "description": "Google Cloud API to prevent from users from submitting malware URLs. Get it from https://developers.google.com/safe-browsing/v4/get-started.", + "required": [], + "title": "safeBrowsingKey", + "type": "string" + } + }, + "required": [ + "existingSecret", + "safeBrowsingKey" + ], + "title": "google", + "type": "object" }, - "postgresql": { - "type": "object", - "properties": { - "auth": { - "type": "object", - "properties": { - "database": { - "type": "string" - }, - "existingSecret": { - "type": "string" - }, - "password": { - "type": "string" - }, - "username": { - "type": "string" - } - } - }, - "enabled": { - "type": "boolean" - } + "jwt": { + "properties": { + "existingSecret": { + "default": "", + "description": "Use existing secret for JWT secret key. The secret has to contain the key `JWT_SECRET`. When it's set the kutt.jwt.key is ignored.", + "required": [], + "title": "existingSecret", + "type": "string" + }, + "key": { + "default": "secret-jwt-key", + "description": "make sure to replace with your own secret key", + "required": [], + "title": "key", + "type": "string" } + }, + "required": [ + "existingSecret", + "key" + ], + "title": "jwt", + "type": "object" }, - "redis": { - "type": "object", - "properties": { - "architecture": { - "type": "string" - }, - "auth": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "password": { - "type": "string" - } - } - }, - "enabled": { - "type": "boolean" - } + "mail": { + "properties": { + "contactEmail": { + "default": "", + "description": "Support email to show on the app", + "required": [], + "title": "contactEmail", + "type": "string" + }, + "existingSecret": { + "default": "", + "description": "Use existing secret for password details. The secret has to contain the key `MAIL_PASSWORD`. When it's set the `kutt.mail.password` is ignored.", + "required": [], + "title": "existingSecret", + "type": "string" + }, + "from": { + "default": "", + "description": "The email address Kutt will send emails from.", + "required": [], + "title": "from", + "type": "string" + }, + "host": { + "default": "smtp.example.com", + "description": "The host of the external SMTP server that Kutt should use to send emails.", + "required": [], + "title": "host", + "type": "string" + }, + "password": { + "default": "", + "description": "The password to authenticate to the smtp host when sending emails.", + "required": [], + "title": "password", + "type": "string" + }, + "port": { + "default": 465, + "description": "The port used to connect to the smtp host.", + "required": [], + "title": "port", + "type": "integer" + }, + "reportEmail": { + "default": "", + "description": "The email address that will receive submitted reports.", + "required": [], + "title": "reportEmail", + "type": "string" + }, + "secure": { + "default": false, + "description": "If true the connection will use TLS when connecting to server. If false (the default) then TLS is used if server supports the STARTTLS extension. In most cases set this value to true if you are connecting to port 465. For port 587 or 25 keep it false", + "required": [], + "title": "secure", + "type": "boolean" + }, + "username": { + "default": "user@example.com", + "description": "The username to authenticate to the smtp host when sending emails.", + "required": [], + "title": "username", + "type": "string" } + }, + "required": [ + "contactEmail", + "existingSecret", + "from", + "host", + "password", + "port", + "reportEmail", + "secure", + "username" + ], + "title": "mail", + "type": "object" }, - "replicaCount": { - "type": "integer" + "recaptcha": { + "properties": { + "existingSecret": { + "default": "", + "description": "Use existing secret for ReCaptacha secrets. The secret has to contain the keys `RECAPTCHA_SITE_KEY` and `RECAPTCHA_SECRET_KEY`. When it's set the kutt.recaptcha.siteKey and kutt.recaptcha.secretKey is ignored.", + "required": [], + "title": "existingSecret", + "type": "string" + }, + "secretKey": { + "default": "", + "description": "Invisible reCaptcha secret key. Create one in https://www.google.com/recaptcha/intro/", + "required": [], + "title": "secretKey", + "type": "string" + }, + "siteKey": { + "default": "", + "description": "Invisible reCaptcha site key. Create one in https://www.google.com/recaptcha/intro/", + "required": [], + "title": "siteKey", + "type": "string" + } + }, + "required": [ + "existingSecret", + "siteKey", + "secretKey" + ], + "title": "recaptcha", + "type": "object" + } + }, + "required": [ + "admin", + "config", + "domain", + "google", + "jwt", + "mail", + "recaptcha" + ], + "title": "kutt", + "type": "object" + }, + "nameOverride": { + "default": "", + "description": "Provide a name in place of `kutt`", + "required": [], + "title": "nameOverride", + "type": "string" + }, + "nodeSelector": { + "description": "Node labels for pod assignment", + "required": [], + "title": "nodeSelector", + "type": "object" + }, + "podAnnotations": { + "description": "Annotations to be added to exporter pods", + "required": [], + "title": "podAnnotations", + "type": "object" + }, + "podSecurityContext": { + "description": "pod-level security context", + "required": [], + "title": "podSecurityContext", + "type": "object" + }, + "postgresql": { + "properties": { + "auth": { + "properties": { + "database": { + "default": "kutt", + "description": "Name for a custom database to create", + "required": [], + "title": "database", + "type": "string" + }, + "existingSecret": { + "default": "", + "description": "Name of existing secret to use for PostgreSQL credentials", + "required": [], + "title": "existingSecret", + "type": "string" + }, + "password": { + "default": "kutt", + "description": "Password for the custom user to create. Ignored if postgresql.auth.existingSecret is provided", + "required": [], + "title": "password", + "type": "string" + }, + "username": { + "default": "kutt", + "description": "Name for a custom user to create", + "required": [], + "title": "username", + "type": "string" + } + }, + "required": [ + "database", + "existingSecret", + "password", + "username" + ], + "title": "auth", + "type": "object" }, - "resources": { - "type": "object" + "enabled": { + "default": true, + "description": "enable PostgreSQL™ subchart from Bitnami", + "required": [], + "title": "enabled", + "type": "boolean" + } + }, + "required": [ + "enabled", + "auth" + ], + "title": "postgresql", + "type": "object" + }, + "redis": { + "properties": { + "architecture": { + "default": "standalone", + "description": "Redis® architecture. Allowed values: standalone or replication", + "required": [], + "title": "architecture", + "type": "string" }, - "revisionHistoryLimit": { - "type": "integer" + "auth": { + "properties": { + "enabled": { + "default": true, + "description": "Enable password authentication", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "password": { + "default": "kutt", + "description": "Redis™ password", + "required": [], + "title": "password", + "type": "string" + } + }, + "required": [ + "enabled", + "password" + ], + "title": "auth", + "type": "object" }, - "securityContext": { - "type": "object" + "enabled": { + "default": true, + "description": "enable Redis™ subchart from Bitnami", + "required": [], + "title": "enabled", + "type": "boolean" + } + }, + "required": [ + "enabled", + "architecture", + "auth" + ], + "title": "redis", + "type": "object" + }, + "replicaCount": { + "default": 1, + "description": "Number of replicas", + "required": [], + "title": "replicaCount", + "type": "integer" + }, + "resources": { + "description": "Resource limits and requests for the pods.", + "required": [], + "title": "resources", + "type": "object" + }, + "revisionHistoryLimit": { + "default": 10, + "description": "The number of old ReplicaSets to retain", + "required": [], + "title": "revisionHistoryLimit", + "type": "integer" + }, + "securityContext": { + "description": "container-level security context", + "required": [], + "title": "securityContext", + "type": "object" + }, + "service": { + "properties": { + "port": { + "default": 80, + "description": "Kubernetes port where service is exposed", + "required": [], + "title": "port", + "type": "integer" }, - "service": { - "type": "object", - "properties": { - "port": { - "type": "integer" - }, - "type": { - "type": "string" - } - } + "type": { + "default": "ClusterIP", + "description": "Kubernetes service type", + "required": [], + "title": "type", + "type": "string" + } + }, + "required": [ + "type", + "port" + ], + "title": "service", + "type": "object" + }, + "serviceAccount": { + "properties": { + "annotations": { + "description": "Annotations to add to the service account", + "required": [], + "title": "annotations", + "type": "object" }, - "serviceAccount": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "create": { - "type": "boolean" - }, - "name": { - "type": "string" - } - } + "create": { + "default": true, + "description": "Specifies whether a service account should be created", + "required": [], + "title": "create", + "type": "boolean" }, - "tolerations": { - "type": "array" + "name": { + "default": "", + "description": "The name of the service account to use.\nIf not set and create is true, a name is generated using the fullname template", + "required": [], + "title": "name", + "type": "string" } + }, + "required": [ + "create", + "annotations", + "name" + ], + "title": "serviceAccount", + "type": "object" + }, + "tolerations": { + "description": "Toleration labels for pod assignment", + "items": { + "required": [] + }, + "required": [], + "title": "tolerations", + "type": "array" } + }, + "required": [ + "nameOverride", + "fullnameOverride", + "image", + "imagePullSecrets", + "replicaCount", + "revisionHistoryLimit", + "serviceAccount", + "podAnnotations", + "podSecurityContext", + "securityContext", + "service", + "ingress", + "resources", + "autoscaling", + "nodeSelector", + "tolerations", + "affinity", + "extraEnv", + "kutt", + "postgresql", + "externalPostgresql", + "redis", + "externalRedis" + ], + "type": "object" } diff --git a/charts/maildev/values.schema.json b/charts/maildev/values.schema.json index 7d0fb6a7..d47756ee 100644 --- a/charts/maildev/values.schema.json +++ b/charts/maildev/values.schema.json @@ -1,357 +1,905 @@ { - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "affinity": { - "type": "object" + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "affinity": { + "description": "Affinity settings for pod assignment", + "required": [], + "title": "affinity", + "type": "object" + }, + "autoscaling": { + "properties": { + "enabled": { + "default": false, + "description": "Enable Horizontal POD autoscaling", + "required": [], + "title": "enabled", + "type": "boolean" }, - "autoscaling": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "maxReplicas": { - "type": "integer" - }, - "minReplicas": { - "type": "integer" - }, - "targetCPUUtilizationPercentage": { - "type": "integer" - }, - "targetMemoryUtilizationPercentage": { - "type": "integer" - } - } + "maxReplicas": { + "default": 100, + "description": "Maximum number of replicas", + "required": [], + "title": "maxReplicas", + "type": "integer" }, - "extraEnv": { - "type": "array" + "minReplicas": { + "default": 1, + "description": "Minimum number of replicas", + "required": [], + "title": "minReplicas", + "type": "integer" }, - "fullnameOverride": { - "type": "string" + "targetCPUUtilizationPercentage": { + "default": 80, + "description": "Target CPU utilization percentage", + "required": [], + "title": "targetCPUUtilizationPercentage", + "type": "integer" }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "type": "string" - }, - "registry": { - "type": "string" - }, - "repository": { - "type": "string" - }, - "tag": { - "type": "string" - } - } + "targetMemoryUtilizationPercentage": { + "default": 80, + "description": "Target Memory utilization percentage", + "required": [], + "title": "targetMemoryUtilizationPercentage", + "type": "integer" + } + }, + "required": [ + "enabled", + "minReplicas", + "maxReplicas", + "targetCPUUtilizationPercentage", + "targetMemoryUtilizationPercentage" + ], + "title": "autoscaling", + "type": "object" + }, + "extraEnv": { + "description": "additional environment variables to be added to the pods", + "items": { + "required": [] + }, + "required": [], + "title": "extraEnv", + "type": "array" + }, + "fullnameOverride": { + "default": "", + "description": "String to fully override `\"maildev.fullname\"`", + "required": [], + "title": "fullnameOverride", + "type": "string" + }, + "global": { + "description": "Global values are values that can be accessed from any chart or subchart by exactly the same name.", + "required": [], + "title": "global", + "type": "object" + }, + "image": { + "properties": { + "pullPolicy": { + "default": "Always", + "description": "image pull policy", + "required": [], + "title": "pullPolicy", + "type": "string" }, - "imagePullSecrets": { - "type": "array" + "registry": { + "default": "docker.io", + "description": "image registry", + "required": [], + "title": "registry", + "type": "string" }, - "ingress": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "className": { + "repository": { + "default": "maildev/maildev", + "description": "image repository", + "required": [], + "title": "repository", + "type": "string" + }, + "tag": { + "default": "2.1.0", + "description": "Overrides the image tag", + "required": [], + "title": "tag", + "type": "string" + } + }, + "required": [ + "registry", + "repository", + "pullPolicy", + "tag" + ], + "title": "image", + "type": "object" + }, + "imagePullSecrets": { + "description": "If defined, uses a Secret to pull an image from a private Docker registry or repository.", + "items": { + "required": [] + }, + "required": [], + "title": "imagePullSecrets", + "type": "array" + }, + "ingress": { + "properties": { + "annotations": { + "description": "Additional annotations for the Ingress resource", + "required": [], + "title": "annotations", + "type": "object" + }, + "className": { + "default": "", + "description": "IngressClass that will be be used to implement the Ingress", + "required": [], + "title": "className", + "type": "string" + }, + "enabled": { + "default": false, + "description": "Enable ingress record generation", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "hosts": { + "description": "cert-manager.io/cluster-issuer: cluster-issuer-name\nkubernetes.io/ingress.class: nginx\nkubernetes.io/tls-acme: \"true\"\nAn array with hosts and paths", + "items": { + "anyOf": [ + { + "properties": { + "host": { + "default": "chart-example.local", + "required": [], + "title": "host", "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "hosts": { - "type": "array", + }, + "paths": { "items": { - "type": "object", - "properties": { - "host": { - "type": "string" + "anyOf": [ + { + "properties": { + "path": { + "default": "/", + "required": [], + "title": "path", + "type": "string" }, - "paths": { - "type": "array", - "items": { - "type": "object", - "properties": { - "path": { - "type": "string" - }, - "pathType": { - "type": "string" - } - } - } + "pathType": { + "default": "ImplementationSpecific", + "required": [], + "title": "pathType", + "type": "string" } + }, + "required": [ + "path", + "pathType" + ], + "type": "object" } - } - }, - "tls": { + ], + "required": [] + }, + "required": [], + "title": "paths", "type": "array" - } - } + } + }, + "required": [ + "host", + "paths" + ], + "type": "object" + } + ], + "required": [] + }, + "required": [], + "title": "hosts", + "type": "array" }, - "maildev": { - "type": "object", - "properties": { - "config": { - "type": "object", - "properties": { - "https": { - "type": "object", - "properties": { - "cert": { - "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "key": { - "type": "string" - } - } - }, - "logMailContents": { - "type": "boolean" - }, - "mailDirectory": { - "type": "string" + "tls": { + "description": "An array with the tls configuration", + "items": { + "required": [] + }, + "required": [], + "title": "tls", + "type": "array" + } + }, + "required": [ + "enabled", + "className", + "annotations", + "hosts", + "tls" + ], + "title": "ingress", + "type": "object" + }, + "maildev": { + "properties": { + "config": { + "properties": { + "https": { + "properties": { + "cert": { + "default": "", + "description": "The ssl cert file", + "required": [], + "title": "cert", + "type": "string" + }, + "enabled": { + "default": false, + "description": "Switch from http to https protocol", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "key": { + "default": "", + "description": "The ssl private key", + "required": [], + "title": "key", + "type": "string" + } + }, + "required": [ + "enabled", + "cert", + "key" + ], + "title": "https", + "type": "object" + }, + "logMailContents": { + "default": false, + "description": "Log a JSON representation of each incoming mail", + "required": [], + "title": "logMailContents", + "type": "boolean" + }, + "mailDirectory": { + "default": "/home/node/maildev-data", + "description": "Directory for persisting mail", + "required": [], + "title": "mailDirectory", + "type": "string" + }, + "modes": { + "properties": { + "silent": { + "default": true, + "description": "Run maildev in silent mode to disable the startup messages", + "required": [], + "title": "silent", + "type": "boolean" + }, + "verbose": { + "default": false, + "description": "Run maildev in verbose mode", + "required": [], + "title": "verbose", + "type": "boolean" + } + }, + "required": [ + "silent", + "verbose" + ], + "title": "modes", + "type": "object" + }, + "smtp": { + "properties": { + "hideExtensions": { + "default": "", + "description": "Comma separated list of SMTP extensions to NOT advertise (SMTPUTF8, PIPELINING, 8BITMIME)", + "required": [], + "title": "hideExtensions", + "type": "string" + }, + "incoming": { + "properties": { + "existingSecret": { + "default": "", + "description": "Name of an existing secret containing the password for the incoming SMTP mail. If set `maildev.config.smtp.incoming.password` will be ignored. Key needs to be `smtp-incoming-password`.", + "required": [], + "title": "existingSecret", + "type": "string" + }, + "password": { + "default": "", + "description": "SMTP password for incoming mail", + "required": [], + "title": "password", + "type": "string" + }, + "tls": { + "properties": { + "cert": { + "default": "", + "description": "Cert for incoming SSL", + "required": [], + "title": "cert", + "type": "string" }, - "modes": { - "type": "object", - "properties": { - "silent": { - "type": "boolean" - }, - "verbose": { - "type": "boolean" - } - } + "enabled": { + "default": false, + "description": "Use SMTP SSL for incoming emails", + "required": [], + "title": "enabled", + "type": "boolean" }, - "smtp": { - "type": "object", - "properties": { - "hideExtensions": { - "type": "string" - }, - "incoming": { - "type": "object", - "properties": { - "existingSecret": { - "type": "string" - }, - "password": { - "type": "string" - }, - "username": { - "type": "string" - } - } - }, - "outgoing": { - "type": "object", - "properties": { - "autoRelay": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "mail": { - "type": "string" - }, - "rules": { - "type": "array" - } - } - }, - "existingSecret": { - "type": "string" - }, - "host": { - "type": "string" - }, - "password": { - "type": "string" - }, - "port": { - "type": "integer" - }, - "ssl": { - "type": "boolean" - }, - "username": { - "type": "string" - } - } - } - } + "existingSecret": { + "default": "", + "description": "Name of an existing TLS secret containing the cert and key for the incoming SMTP mail. If set `maildev.config.smtp.incoming.tls.cert` and `maildev.config.smtp.incoming.tls.key` will be ignored. Keys need to be `tls.crt` and `tls.key`.", + "required": [], + "title": "existingSecret", + "type": "string" }, - "web": { - "type": "object", - "properties": { - "disabled": { - "type": "boolean" - }, - "existingSecret": { - "type": "string" - }, - "password": { - "type": "string" - }, - "username": { - "type": "string" - } - } + "key": { + "default": "", + "description": "Key for incoming SSL", + "required": [], + "title": "key", + "type": "string" } + }, + "required": [ + "enabled", + "cert", + "existingSecret", + "key" + ], + "title": "tls", + "type": "object" + }, + "username": { + "default": "", + "description": "SMTP user for incoming mail", + "required": [], + "title": "username", + "type": "string" } + }, + "required": [ + "existingSecret", + "password", + "tls", + "username" + ], + "title": "incoming", + "type": "object" }, - "persistence": { - "type": "object", - "properties": { - "accessModes": { - "type": "array", - "items": { - "type": "string" - } - }, - "annotations": { - "type": "object" - }, - "cron": { - "type": "object", - "properties": { - "config": { - "type": "object", - "properties": { - "daysToKeep": { - "type": "integer" - }, - "schedule": { - "type": "string" - } - } - }, - "enabled": { - "type": "boolean" - }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "type": "string" - }, - "registry": { - "type": "string" - }, - "repository": { - "type": "string" - }, - "tag": { - "type": "string" - } - } - } - } - }, + "outgoing": { + "properties": { + "autoRelay": { + "properties": { "enabled": { - "type": "boolean" + "default": false, + "description": "Enabling the auto relay mode will automatically send each email to it's recipient without the need to click the \"Relay\" button. The outgoing email options are required to enable this feature.", + "required": [], + "title": "enabled", + "type": "boolean" }, - "existingClaim": { - "type": "string" + "mail": { + "default": "", + "description": "Optionally define a single email address which Maildev will forward all emails to instead of the original recipient", + "required": [], + "title": "mail", + "type": "string" }, - "resources": { - "type": "object", - "properties": { - "requests": { - "type": "object", - "properties": { - "storage": { - "type": "string" - } - } - } - } - }, - "storageClassName": { - "type": "string" + "rules": { + "description": "The additional configuration for what email addresses you would like to allow or deny.", + "items": { + "required": [] + }, + "required": [], + "title": "rules", + "type": "array" } + }, + "required": [ + "enabled", + "mail", + "rules" + ], + "title": "autoRelay", + "type": "object" + }, + "existingSecret": { + "default": "", + "description": "Name of an existing secret containing the password for the outgoing SMTP mail. If set `maildev.config.smtp.outgoing.password` will be ignored. Key needs to be `smtp-outgoing-password`.", + "required": [], + "title": "existingSecret", + "type": "string" + }, + "host": { + "default": "", + "description": "SMTP host for outgoing mail", + "required": [], + "title": "host", + "type": "string" + }, + "password": { + "default": "", + "description": "SMTP password for outgoing mail", + "required": [], + "title": "password", + "type": "string" + }, + "port": { + "default": 25, + "description": "SMTP port for outgoing mail", + "required": [], + "title": "port", + "type": "integer" + }, + "ssl": { + "default": false, + "description": "Use SMTP SSL for outgoing mail", + "required": [], + "title": "ssl", + "type": "boolean" + }, + "username": { + "default": "", + "description": "SMTP user for outgoing mail", + "required": [], + "title": "username", + "type": "string" } + }, + "required": [ + "autoRelay", + "existingSecret", + "host", + "password", + "port", + "ssl", + "username" + ], + "title": "outgoing", + "type": "object" } - } - }, - "nameOverride": { - "type": "string" - }, - "nodeSelector": { - "type": "object" - }, - "podAnnotations": { - "type": "object" - }, - "podSecurityContext": { - "type": "object" - }, - "replicaCount": { - "type": "integer" - }, - "resources": { - "type": "object" - }, - "revisionHistoryLimit": { - "type": "integer" - }, - "securityContext": { - "type": "object" - }, - "serviceAccount": { - "type": "object", - "properties": { - "annotations": { - "type": "object" + }, + "required": [ + "hideExtensions", + "incoming", + "outgoing" + ], + "title": "smtp", + "type": "object" + }, + "web": { + "properties": { + "disabled": { + "default": false, + "description": "Disable the use of the web interface. Useful for unit testing", + "required": [], + "title": "disabled", + "type": "boolean" }, - "create": { - "type": "boolean" + "existingSecret": { + "default": "", + "description": "Name of an existing secret containing the password for the GUI. If set `maildev.config.web.password` will be ignored. Key needs to be `web-password`.", + "required": [], + "title": "existingSecret", + "type": "string" }, - "name": { - "type": "string" + "password": { + "default": "", + "description": "Password for the GUI", + "required": [], + "title": "password", + "type": "string" + }, + "username": { + "default": "", + "description": "Username for the GUI", + "required": [], + "title": "username", + "type": "string" } + }, + "required": [ + "disabled", + "existingSecret", + "password", + "username" + ], + "title": "web", + "type": "object" } + }, + "required": [ + "https", + "logMailContents", + "mailDirectory", + "modes", + "smtp", + "web" + ], + "title": "config", + "type": "object" }, - "services": { - "type": "object", - "properties": { - "smtp": { - "type": "object", - "properties": { - "nodePort": { - "type": "null" - }, - "port": { - "type": "integer" - }, - "type": { - "type": "string" - } + "persistence": { + "properties": { + "accessModes": { + "description": "The desired access modes the volume should have.", + "items": { + "anyOf": [ + { + "required": [], + "type": "string" + } + ], + "required": [] + }, + "required": [], + "title": "accessModes", + "type": "array" + }, + "annotations": { + "description": "Annotations to be added to the PersistentVolumeClaim", + "required": [], + "title": "annotations", + "type": "object" + }, + "cron": { + "description": "To clean some old mails when persistence is enabled", + "properties": { + "config": { + "properties": { + "daysToKeep": { + "default": 15, + "description": "How old emails may be before they get deleted", + "required": [], + "title": "daysToKeep", + "type": "integer" + }, + "schedule": { + "default": "0 1 * * *", + "description": "The schedule on which the cronjob should run", + "required": [], + "title": "schedule", + "type": "string" } + }, + "required": [ + "daysToKeep", + "schedule" + ], + "title": "config", + "type": "object" }, - "web": { - "type": "object", - "properties": { - "port": { - "type": "integer" - }, - "type": { - "type": "string" - } + "enabled": { + "default": false, + "description": "Enable the creation of a cronjob to periodically delete old emails", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "image": { + "properties": { + "pullPolicy": { + "default": "Always", + "description": "Image pull policy", + "required": [], + "title": "pullPolicy", + "type": "string" + }, + "registry": { + "default": "docker.io", + "description": "Image registry", + "required": [], + "title": "registry", + "type": "string" + }, + "repository": { + "default": "busybox", + "description": "Image repository", + "required": [], + "title": "repository", + "type": "string" + }, + "tag": { + "default": "latest", + "description": "Overrides the image tag", + "required": [], + "title": "tag", + "type": "string" } + }, + "required": [ + "registry", + "repository", + "pullPolicy", + "tag" + ], + "title": "image", + "type": "object" } + }, + "required": [ + "enabled", + "config", + "image" + ], + "title": "cron", + "type": "object" + }, + "enabled": { + "default": false, + "description": "Use a PVC to persist data", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "existingClaim": { + "default": "", + "description": "Provide an existing PersistentVolumeClaim", + "required": [], + "title": "existingClaim", + "type": "string" + }, + "resources": { + "description": "Represents the minimum and maximum resources the volume should have.", + "properties": { + "requests": { + "properties": { + "storage": { + "default": "2Gi", + "required": [], + "title": "storage", + "type": "string" + } + }, + "required": [ + "storage" + ], + "title": "requests", + "type": "object" + } + }, + "required": [ + "requests" + ], + "title": "resources", + "type": "object" + }, + "storageClassName": { + "default": "", + "description": "Name of the StorageClass required by the claim.", + "required": [], + "title": "storageClassName", + "type": "string" + } + }, + "required": [ + "enabled", + "accessModes", + "annotations", + "cron", + "existingClaim", + "storageClassName", + "resources" + ], + "title": "persistence", + "type": "object" + } + }, + "required": [ + "config", + "persistence" + ], + "title": "maildev", + "type": "object" + }, + "nameOverride": { + "default": "", + "description": "Provide a name in place of `maildev`", + "required": [], + "title": "nameOverride", + "type": "string" + }, + "nodeSelector": { + "description": "Node labels for pod assignment", + "required": [], + "title": "nodeSelector", + "type": "object" + }, + "podAnnotations": { + "description": "Annotations to be added to the pods", + "required": [], + "title": "podAnnotations", + "type": "object" + }, + "podSecurityContext": { + "description": "pod-level security context", + "required": [], + "title": "podSecurityContext", + "type": "object" + }, + "replicaCount": { + "default": 1, + "description": "Number of replicas", + "required": [], + "title": "replicaCount", + "type": "integer" + }, + "resources": { + "description": "Resource limits and requests for the controller pods.", + "required": [], + "title": "resources", + "type": "object" + }, + "revisionHistoryLimit": { + "default": 10, + "description": "The number of old ReplicaSets to retain", + "required": [], + "title": "revisionHistoryLimit", + "type": "integer" + }, + "securityContext": { + "description": "container-level security context", + "required": [], + "title": "securityContext", + "type": "object" + }, + "serviceAccount": { + "properties": { + "annotations": { + "description": "Annotations to add to the service account", + "required": [], + "title": "annotations", + "type": "object" + }, + "create": { + "default": true, + "description": "Specifies whether a service account should be created", + "required": [], + "title": "create", + "type": "boolean" + }, + "name": { + "default": "", + "description": "The name of the service account to use.\nIf not set and create is true, a name is generated using the fullname template", + "required": [], + "title": "name", + "type": "string" + } + }, + "required": [ + "create", + "annotations", + "name" + ], + "title": "serviceAccount", + "type": "object" + }, + "services": { + "properties": { + "smtp": { + "properties": { + "nodePort": { + "default": "", + "description": "You can set the node port for the external SMTP server that should be used or leave it blank to get a random node port. Only active if `services.smtp.type == NodePort`", + "required": [], + "title": "nodePort", + "type": "null" + }, + "podPort": { + "default": 1025, + "description": "Pod port to use for the internal SMTP server", + "required": [], + "title": "podPort", + "type": "integer" + }, + "port": { + "default": 1025, + "description": "Kubernetes service port to use for the internal SMTP server", + "required": [], + "title": "port", + "type": "integer" + }, + "type": { + "default": "ClusterIP", + "description": "Kubernetes service type for the SMTP server", + "required": [], + "title": "type", + "type": "string" } + }, + "required": [ + "type", + "port", + "podPort", + "nodePort" + ], + "title": "smtp", + "type": "object" }, - "tolerations": { - "type": "array" + "web": { + "properties": { + "podPort": { + "default": 1080, + "description": "Pod port to use for the web GUI", + "required": [], + "title": "podPort", + "type": "integer" + }, + "port": { + "default": 1080, + "description": "Kubernetes service port to use for the web GUI", + "required": [], + "title": "port", + "type": "integer" + }, + "type": { + "default": "ClusterIP", + "description": "Kubernetes service type for the web GUI", + "required": [], + "title": "type", + "type": "string" + } + }, + "required": [ + "type", + "port", + "podPort" + ], + "title": "web", + "type": "object" } + }, + "required": [ + "web", + "smtp" + ], + "title": "services", + "type": "object" + }, + "tolerations": { + "description": "Toleration labels for pod assignment", + "items": { + "required": [] + }, + "required": [], + "title": "tolerations", + "type": "array" } + }, + "required": [ + "nameOverride", + "fullnameOverride", + "image", + "imagePullSecrets", + "podAnnotations", + "podSecurityContext", + "replicaCount", + "revisionHistoryLimit", + "resources", + "securityContext", + "serviceAccount", + "services", + "ingress", + "autoscaling", + "nodeSelector", + "tolerations", + "affinity", + "extraEnv", + "maildev" + ], + "type": "object" } diff --git a/charts/netcupscp-exporter/values.schema.json b/charts/netcupscp-exporter/values.schema.json index 3762f468..de5c8813 100644 --- a/charts/netcupscp-exporter/values.schema.json +++ b/charts/netcupscp-exporter/values.schema.json @@ -1,183 +1,436 @@ { - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "affinity": { - "type": "object" - }, - "autoscaling": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "maxReplicas": { - "type": "integer" - }, - "minReplicas": { - "type": "integer" - }, - "targetCPUUtilizationPercentage": { - "type": "integer" - } - } - }, - "env": { - "type": "object", - "properties": { - "existingSecret": { - "type": "string" - }, - "loginName": { - "type": "string" - }, - "password": { - "type": "string" - } - } + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "affinity": { + "description": "Affinity settings for pod assignment", + "required": [], + "title": "affinity", + "type": "object" + }, + "autoscaling": { + "properties": { + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" }, - "fullnameOverride": { - "type": "string" + "maxReplicas": { + "default": 100, + "required": [], + "title": "maxReplicas", + "type": "integer" }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "type": "string" - }, - "registry": { - "type": "string" - }, - "repository": { - "type": "string" - }, - "tag": { - "type": "string" - } - } + "minReplicas": { + "default": 1, + "required": [], + "title": "minReplicas", + "type": "integer" }, - "imagePullSecrets": { - "type": "array" + "targetCPUUtilizationPercentage": { + "default": 80, + "required": [], + "title": "targetCPUUtilizationPercentage", + "type": "integer" + } + }, + "required": [ + "enabled", + "minReplicas", + "maxReplicas", + "targetCPUUtilizationPercentage" + ], + "title": "autoscaling", + "type": "object" + }, + "env": { + "properties": { + "existingSecret": { + "default": "", + "required": [], + "title": "existingSecret", + "type": "string" }, - "ingress": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "className": { + "loginName": { + "default": "admin", + "required": [], + "title": "loginName", + "type": "string" + }, + "password": { + "default": "password", + "required": [], + "title": "password", + "type": "string" + } + }, + "required": [ + "existingSecret", + "loginName", + "password" + ], + "title": "env", + "type": "object" + }, + "fullnameOverride": { + "default": "", + "description": "String to fully override `\"netcupscp-exporter.fullname\"`", + "required": [], + "title": "fullnameOverride", + "type": "string" + }, + "global": { + "description": "Global values are values that can be accessed from any chart or subchart by exactly the same name.", + "required": [], + "title": "global", + "type": "object" + }, + "image": { + "properties": { + "pullPolicy": { + "default": "Always", + "description": "image pull policy", + "required": [], + "title": "pullPolicy", + "type": "string" + }, + "registry": { + "default": "ghcr.io", + "description": "image registry", + "required": [], + "title": "registry", + "type": "string" + }, + "repository": { + "default": "mrueg/netcupscp-exporter", + "description": "image repository", + "required": [], + "title": "repository", + "type": "string" + }, + "tag": { + "default": "v0.3.6", + "description": "Overrides the image tag", + "required": [], + "title": "tag", + "type": "string" + } + }, + "required": [ + "registry", + "repository", + "pullPolicy", + "tag" + ], + "title": "image", + "type": "object" + }, + "imagePullSecrets": { + "description": "If defined, uses a Secret to pull an image from a private Docker registry or repository.", + "items": { + "required": [] + }, + "required": [], + "title": "imagePullSecrets", + "type": "array" + }, + "ingress": { + "properties": { + "annotations": { + "required": [], + "title": "annotations", + "type": "object" + }, + "className": { + "default": "", + "required": [], + "title": "className", + "type": "string" + }, + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" + }, + "hosts": { + "description": "kubernetes.io/ingress.class: nginx\nkubernetes.io/tls-acme: \"true\"", + "items": { + "anyOf": [ + { + "properties": { + "host": { + "default": "chart-example.local", + "required": [], + "title": "host", "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "hosts": { - "type": "array", + }, + "paths": { "items": { - "type": "object", - "properties": { - "host": { - "type": "string" + "anyOf": [ + { + "properties": { + "path": { + "default": "/", + "required": [], + "title": "path", + "type": "string" }, - "paths": { - "type": "array", - "items": { - "type": "object", - "properties": { - "path": { - "type": "string" - }, - "pathType": { - "type": "string" - } - } - } + "pathType": { + "default": "ImplementationSpecific", + "required": [], + "title": "pathType", + "type": "string" } + }, + "required": [ + "path", + "pathType" + ], + "type": "object" } - } - }, - "tls": { + ], + "required": [] + }, + "required": [], + "title": "paths", "type": "array" - } - } + } + }, + "required": [ + "host", + "paths" + ], + "type": "object" + } + ], + "required": [] + }, + "required": [], + "title": "hosts", + "type": "array" }, - "nameOverride": { - "type": "string" + "tls": { + "items": { + "required": [] + }, + "required": [], + "title": "tls", + "type": "array" + } + }, + "required": [ + "enabled", + "className", + "annotations", + "hosts", + "tls" + ], + "title": "ingress", + "type": "object" + }, + "nameOverride": { + "default": "", + "description": "Provide a name in place of `netcupscp-exporter`", + "required": [], + "title": "nameOverride", + "type": "string" + }, + "nodeSelector": { + "description": "Node labels for pod assignment", + "required": [], + "title": "nodeSelector", + "type": "object" + }, + "podAnnotations": { + "description": "Annotations to be added to pods", + "required": [], + "title": "podAnnotations", + "type": "object" + }, + "podSecurityContext": { + "description": "pod-level security context", + "required": [], + "title": "podSecurityContext", + "type": "object" + }, + "replicaCount": { + "default": 1, + "description": "Number of replicas", + "required": [], + "title": "replicaCount", + "type": "integer" + }, + "resources": { + "description": "Resource limits and requests for the headwind pods.", + "required": [], + "title": "resources", + "type": "object" + }, + "revisionHistoryLimit": { + "default": 10, + "description": "The number of old ReplicaSets to retain", + "required": [], + "title": "revisionHistoryLimit", + "type": "integer" + }, + "securityContext": { + "description": "container-level security context", + "required": [], + "title": "securityContext", + "type": "object" + }, + "service": { + "properties": { + "port": { + "default": 80, + "description": "Kubernetes port where service is exposed", + "required": [], + "title": "port", + "type": "integer" }, - "nodeSelector": { - "type": "object" + "type": { + "default": "ClusterIP", + "description": "Kubernetes service type", + "required": [], + "title": "type", + "type": "string" + } + }, + "required": [ + "type", + "port" + ], + "title": "service", + "type": "object" + }, + "serviceAccount": { + "properties": { + "annotations": { + "description": "Annotations to add to the service account", + "required": [], + "title": "annotations", + "type": "object" }, - "podAnnotations": { - "type": "object" + "create": { + "default": true, + "description": "Specifies whether a service account should be created", + "required": [], + "title": "create", + "type": "boolean" }, - "podSecurityContext": { - "type": "object" + "name": { + "default": "", + "description": "The name of the service account to use.\nIf not set and create is true, a name is generated using the fullname template", + "required": [], + "title": "name", + "type": "string" + } + }, + "required": [ + "create", + "annotations", + "name" + ], + "title": "serviceAccount", + "type": "object" + }, + "serviceMonitor": { + "properties": { + "additionalLabels": { + "description": "Prometheus ServiceMonitor labels", + "required": [], + "title": "additionalLabels", + "type": "object" }, - "replicaCount": { - "type": "integer" + "enabled": { + "default": false, + "description": "Enable a prometheus ServiceMonitor", + "required": [], + "title": "enabled", + "type": "boolean" }, - "resources": { - "type": "object" + "interval": { + "default": "30s", + "description": "prometheus: kube-prometheus\nPrometheus ServiceMonitor interval", + "required": [], + "title": "interval", + "type": "string" }, - "revisionHistoryLimit": { - "type": "integer" + "metricRelabelings": { + "description": "Prometheus [MetricRelabelConfigs] to apply to samples before ingestion", + "items": { + "required": [] + }, + "required": [], + "title": "metricRelabelings", + "type": "array" }, - "securityContext": { - "type": "object" + "namespace": { + "default": "", + "description": "Prometheus ServiceMonitor namespace", + "required": [], + "title": "namespace", + "type": "string" }, - "service": { - "type": "object", - "properties": { - "port": { - "type": "integer" - }, - "type": { - "type": "string" - } - } - }, - "serviceAccount": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "create": { - "type": "boolean" - }, - "name": { - "type": "string" - } - } - }, - "serviceMonitor": { - "type": "object", - "properties": { - "additionalLabels": { - "type": "object" - }, - "enabled": { - "type": "boolean" - }, - "interval": { - "type": "string" - }, - "metricRelabelings": { - "type": "array" - }, - "namespace": { - "type": "string" - }, - "relabelings": { - "type": "array" - }, - "selector": { - "type": "object" - } - } + "relabelings": { + "description": "Prometheus [RelabelConfigs] to apply to samples before scraping", + "items": { + "required": [] + }, + "required": [], + "title": "relabelings", + "type": "array" }, - "tolerations": { - "type": "array" + "selector": { + "description": "release: prometheus\nPrometheus ServiceMonitor selector", + "required": [], + "title": "selector", + "type": "object" } + }, + "required": [ + "enabled", + "additionalLabels", + "selector", + "interval", + "namespace", + "metricRelabelings", + "relabelings" + ], + "title": "serviceMonitor", + "type": "object" + }, + "tolerations": { + "description": "Toleration labels for pod assignment", + "items": { + "required": [] + }, + "required": [], + "title": "tolerations", + "type": "array" } + }, + "required": [ + "nameOverride", + "fullnameOverride", + "image", + "imagePullSecrets", + "replicaCount", + "revisionHistoryLimit", + "serviceAccount", + "podAnnotations", + "podSecurityContext", + "securityContext", + "service", + "ingress", + "resources", + "autoscaling", + "nodeSelector", + "tolerations", + "affinity", + "env", + "serviceMonitor" + ], + "type": "object" } diff --git a/charts/node-access/values.schema.json b/charts/node-access/values.schema.json index eea4bccb..0cf87c66 100644 --- a/charts/node-access/values.schema.json +++ b/charts/node-access/values.schema.json @@ -1,144 +1,339 @@ { - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "fullnameOverride": { - "type": "string" + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "fullnameOverride": { + "default": "", + "description": "String to fully override `\"node-access.fullname\"`", + "required": [], + "title": "fullnameOverride", + "type": "string" + }, + "global": { + "description": "Global values are values that can be accessed from any chart or subchart by exactly the same name.", + "required": [], + "title": "global", + "type": "object" + }, + "image": { + "properties": { + "pullPolicy": { + "default": "Always", + "description": "image pull policy", + "required": [], + "title": "pullPolicy", + "type": "string" }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "type": "string" - }, - "repository": { - "type": "string" - }, - "tag": { - "type": "string" - } - } + "repository": { + "default": "busybox", + "description": "image repository", + "required": [], + "title": "repository", + "type": "string" }, - "imagePullSecrets": { - "type": "array" + "tag": { + "default": "1.36.1", + "description": "Overrides the image tag", + "required": [], + "title": "tag", + "type": "string" + } + }, + "required": [ + "repository", + "pullPolicy", + "tag" + ], + "title": "image", + "type": "object" + }, + "imagePullSecrets": { + "description": "If defined, uses a Secret to pull an image from a private Docker registry or repository.", + "items": { + "required": [] + }, + "required": [], + "title": "imagePullSecrets", + "type": "array" + }, + "nameOverride": { + "default": "", + "description": "Provide a name in place of `node-access`", + "required": [], + "title": "nameOverride", + "type": "string" + }, + "nodeAccess": { + "properties": { + "accessMode": { + "default": "deployment", + "description": "How to deploy the Pods to access the host system: daemonset or deployment", + "required": [], + "title": "accessMode", + "type": "string" }, - "nameOverride": { - "type": "string" + "hostPaths": { + "description": "List of additional paths on the host that should be mounted into the container", + "items": { + "required": [] + }, + "required": [], + "title": "hostPaths", + "type": "array" }, - "nodeAccess": { - "type": "object", - "properties": { - "accessMode": { - "type": "string" - }, - "hostPaths": { - "type": "array" - }, - "nodePlacement": { - "type": "object", - "properties": { - "affinity": { - "type": "object" - }, - "nodeName": { - "type": "string" - }, - "nodeSelector": { - "type": "object" - }, - "tolerations": { - "type": "array" - }, - "topologySpreadConstraints": { - "type": "array" - } - } - } + "nodePlacement": { + "description": "- name: dev\n host: /dev\n container: /node-fs/dev", + "properties": { + "affinity": { + "description": "Affinity settings for pod assignment", + "required": [], + "title": "affinity", + "type": "object" + }, + "nodeName": { + "default": "", + "description": "Request to schedule this pod onto a specific node", + "required": [], + "title": "nodeName", + "type": "string" + }, + "nodeSelector": { + "description": "Node labels for pod assignment", + "required": [], + "title": "nodeSelector", + "type": "object" + }, + "tolerations": { + "description": "Toleration labels for pod assignment", + "items": { + "required": [] + }, + "required": [], + "title": "tolerations", + "type": "array" + }, + "topologySpreadConstraints": { + "description": "how a group of pods ought to spread across topology domains", + "items": { + "required": [] + }, + "required": [], + "title": "topologySpreadConstraints", + "type": "array" } + }, + "required": [ + "nodeName", + "affinity", + "nodeSelector", + "tolerations", + "topologySpreadConstraints" + ], + "title": "nodePlacement", + "type": "object" + } + }, + "required": [ + "accessMode", + "hostPaths", + "nodePlacement" + ], + "title": "nodeAccess", + "type": "object" + }, + "podAnnotations": { + "description": "Annotations to be added to the pods", + "required": [], + "title": "podAnnotations", + "type": "object" + }, + "podSecurityContext": { + "description": "pod-level security context", + "properties": { + "runAsGroup": { + "default": 0, + "required": [], + "title": "runAsGroup", + "type": "integer" }, - "podAnnotations": { - "type": "object" + "runAsNonRoot": { + "default": false, + "required": [], + "title": "runAsNonRoot", + "type": "boolean" }, - "podSecurityContext": { - "type": "object", - "properties": { - "runAsGroup": { - "type": "integer" - }, - "runAsNonRoot": { - "type": "boolean" - }, - "runAsUser": { - "type": "integer" - } + "runAsUser": { + "default": 0, + "required": [], + "title": "runAsUser", + "type": "integer" + } + }, + "required": [ + "runAsGroup", + "runAsNonRoot", + "runAsUser" + ], + "title": "podSecurityContext", + "type": "object" + }, + "replicaCount": { + "default": 1, + "description": "Number of replicas. Only used if `accessNode.accessMode` equals `deployment`", + "required": [], + "title": "replicaCount", + "type": "integer" + }, + "resources": { + "description": "Resource limits and requests for the controller pods.", + "properties": { + "limits": { + "properties": { + "cpu": { + "default": "200m", + "required": [], + "title": "cpu", + "type": "string" + }, + "memory": { + "default": "256Mi", + "required": [], + "title": "memory", + "type": "string" } + }, + "required": [ + "cpu", + "memory" + ], + "title": "limits", + "type": "object" }, - "replicaCount": { - "type": "integer" - }, - "resources": { - "type": "object", - "properties": { - "limits": { - "type": "object", - "properties": { - "cpu": { - "type": "string" - }, - "memory": { - "type": "string" - } - } - }, - "requests": { - "type": "object", - "properties": { - "cpu": { - "type": "string" - }, - "memory": { - "type": "string" - } - } - } + "requests": { + "properties": { + "cpu": { + "default": "100m", + "required": [], + "title": "cpu", + "type": "string" + }, + "memory": { + "default": "128Mi", + "required": [], + "title": "memory", + "type": "string" } + }, + "required": [ + "cpu", + "memory" + ], + "title": "requests", + "type": "object" + } + }, + "required": [ + "limits", + "requests" + ], + "title": "resources", + "type": "object" + }, + "revisionHistoryLimit": { + "default": 10, + "description": "The number of old ReplicaSets to retain", + "required": [], + "title": "revisionHistoryLimit", + "type": "integer" + }, + "securityContext": { + "description": "container-level security context", + "properties": { + "privileged": { + "default": true, + "required": [], + "title": "privileged", + "type": "boolean" }, - "revisionHistoryLimit": { - "type": "integer" + "readOnlyRootFilesystem": { + "default": false, + "required": [], + "title": "readOnlyRootFilesystem", + "type": "boolean" }, - "securityContext": { - "type": "object", - "properties": { - "privileged": { - "type": "boolean" - }, - "readOnlyRootFilesystem": { - "type": "boolean" - }, - "runAsGroup": { - "type": "integer" - }, - "runAsNonRoot": { - "type": "boolean" - }, - "runAsUser": { - "type": "integer" - } - } + "runAsGroup": { + "default": 0, + "required": [], + "title": "runAsGroup", + "type": "integer" }, - "serviceAccount": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "create": { - "type": "boolean" - }, - "name": { - "type": "string" - } - } + "runAsNonRoot": { + "default": false, + "required": [], + "title": "runAsNonRoot", + "type": "boolean" + }, + "runAsUser": { + "default": 0, + "required": [], + "title": "runAsUser", + "type": "integer" + } + }, + "required": [ + "privileged", + "readOnlyRootFilesystem", + "runAsGroup", + "runAsNonRoot", + "runAsUser" + ], + "title": "securityContext", + "type": "object" + }, + "serviceAccount": { + "properties": { + "annotations": { + "description": "Annotations to add to the service account", + "required": [], + "title": "annotations", + "type": "object" + }, + "create": { + "default": true, + "description": "Specifies whether a service account should be created", + "required": [], + "title": "create", + "type": "boolean" + }, + "name": { + "default": "", + "description": "The name of the service account to use.\nIf not set and create is true, a name is generated using the fullname template", + "required": [], + "title": "name", + "type": "string" } + }, + "required": [ + "create", + "annotations", + "name" + ], + "title": "serviceAccount", + "type": "object" } + }, + "required": [ + "nameOverride", + "fullnameOverride", + "image", + "imagePullSecrets", + "replicaCount", + "revisionHistoryLimit", + "podAnnotations", + "podSecurityContext", + "resources", + "securityContext", + "serviceAccount", + "nodeAccess" + ], + "type": "object" } diff --git a/charts/passbolt-ha/values.schema.json b/charts/passbolt-ha/values.schema.json index 4d77b7c2..ad060cfe 100644 --- a/charts/passbolt-ha/values.schema.json +++ b/charts/passbolt-ha/values.schema.json @@ -1,392 +1,874 @@ { - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "mysql": { - "type": "object", - "properties": { - "affinity": { - "type": "object" - }, - "architecture": { - "type": "string" - }, - "auth": { - "type": "object", - "properties": { - "database": { - "type": "string" - }, - "password": { - "type": "string" - }, - "rootPassword": { - "type": "string" - }, - "username": { - "type": "string" - } - } - }, + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "global": { + "description": "Global values are values that can be accessed from any chart or subchart by exactly the same name.", + "required": [], + "title": "global", + "type": "object" + }, + "mysql": { + "properties": { + "affinity": { + "required": [], + "title": "affinity", + "type": "object" + }, + "architecture": { + "default": "replication", + "description": "podAntiAffinity:\n requiredDuringSchedulingIgnoredDuringExecution:\n - labelSelector:\n matchExpressions:\n - key: app.kubernetes.io/instance\n operator: In\n values:\n - release-name\n - key: app.kubernetes.io/name\n operator: In\n values:\n - mysql\n topologyKey: \"kubernetes.io/hostname\"", + "required": [], + "title": "architecture", + "type": "string" + }, + "auth": { + "properties": { + "database": { + "default": "passbolt", + "required": [], + "title": "database", + "type": "string" + }, + "password": { + "default": "passbolt", + "required": [], + "title": "password", + "type": "string" + }, + "rootPassword": { + "default": "root", + "required": [], + "title": "rootPassword", + "type": "string" + }, + "username": { + "default": "passbolt", + "required": [], + "title": "username", + "type": "string" + } + }, + "required": [ + "database", + "password", + "rootPassword", + "username" + ], + "title": "auth", + "type": "object" + }, + "enabled": { + "default": true, + "required": [], + "title": "enabled", + "type": "boolean" + }, + "fullnameOverride": { + "default": "passbolt-mysql", + "required": [], + "title": "fullnameOverride", + "type": "string" + }, + "global": { + "properties": { + "storageClass": { + "default": "", + "required": [], + "title": "storageClass", + "type": "string" + } + }, + "required": [ + "storageClass" + ], + "title": "global", + "type": "object" + }, + "image": { + "properties": { + "pullPolicy": { + "default": "Always", + "required": [], + "title": "pullPolicy", + "type": "string" + } + }, + "required": [ + "pullPolicy" + ], + "title": "image", + "type": "object" + }, + "metrics": { + "properties": { + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" + }, + "image": { + "properties": { + "pullPolicy": { + "default": "Always", + "required": [], + "title": "pullPolicy", + "type": "string" + } + }, + "required": [ + "pullPolicy" + ], + "title": "image", + "type": "object" + }, + "serviceMonitor": { + "properties": { "enabled": { - "type": "boolean" - }, - "fullnameOverride": { - "type": "string" - }, - "global": { - "type": "object", - "properties": { - "storageClass": { - "type": "string" - } - } - }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "type": "string" - } - } + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" }, - "metrics": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "type": "string" - } - } - }, - "serviceMonitor": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "labels": { - "type": "object" - } - } - } - } + "labels": { + "required": [], + "title": "labels", + "type": "object" + } + }, + "required": [ + "enabled", + "labels" + ], + "title": "serviceMonitor", + "type": "object" + } + }, + "required": [ + "enabled", + "image", + "serviceMonitor" + ], + "title": "metrics", + "type": "object" + }, + "rbac": { + "properties": { + "create": { + "default": true, + "required": [], + "title": "create", + "type": "boolean" + } + }, + "required": [ + "create" + ], + "title": "rbac", + "type": "object" + }, + "resources": { + "properties": { + "limits": { + "properties": { + "cpu": { + "default": "200m", + "required": [], + "title": "cpu", + "type": "string" }, - "rbac": { - "type": "object", - "properties": { - "create": { - "type": "boolean" - } - } + "memory": { + "default": "1024Mi", + "required": [], + "title": "memory", + "type": "string" + } + }, + "required": [ + "cpu", + "memory" + ], + "title": "limits", + "type": "object" + }, + "requests": { + "properties": { + "cpu": { + "default": "10m", + "required": [], + "title": "cpu", + "type": "string" }, - "resources": { - "type": "object", + "memory": { + "default": "256Mi", + "required": [], + "title": "memory", + "type": "string" + } + }, + "required": [ + "cpu", + "memory" + ], + "title": "requests", + "type": "object" + } + }, + "required": [ + "limits", + "requests" + ], + "title": "resources", + "type": "object" + }, + "secondary": { + "properties": { + "replicaCount": { + "default": 2, + "required": [], + "title": "replicaCount", + "type": "integer" + } + }, + "required": [ + "replicaCount" + ], + "title": "secondary", + "type": "object" + }, + "volumePermissions": { + "properties": { + "enabled": { + "default": true, + "required": [], + "title": "enabled", + "type": "boolean" + }, + "image": { + "properties": { + "pullPolicy": { + "default": "Always", + "required": [], + "title": "pullPolicy", + "type": "string" + } + }, + "required": [ + "pullPolicy" + ], + "title": "image", + "type": "object" + } + }, + "required": [ + "enabled", + "image" + ], + "title": "volumePermissions", + "type": "object" + } + }, + "required": [ + "affinity", + "architecture", + "auth", + "enabled", + "fullnameOverride", + "global", + "image", + "metrics", + "rbac", + "resources", + "secondary", + "volumePermissions" + ], + "title": "mysql", + "type": "object" + }, + "passbolt": { + "properties": { + "db": { + "properties": { + "host": { + "default": "passbolt-proxysql", + "required": [], + "title": "host", + "type": "string" + }, + "name": { + "default": "passbolt", + "required": [], + "title": "name", + "type": "string" + }, + "password": { + "default": "passbolt", + "required": [], + "title": "password", + "type": "string" + }, + "username": { + "default": "passbolt", + "required": [], + "title": "username", + "type": "string" + } + }, + "required": [ + "host", + "name", + "username", + "password" + ], + "title": "db", + "type": "object" + }, + "fullnameOverride": { + "default": "passbolt", + "required": [], + "title": "fullnameOverride", + "type": "string" + }, + "image": { + "properties": { + "pullPolicy": { + "default": "Always", + "required": [], + "title": "pullPolicy", + "type": "string" + } + }, + "required": [ + "pullPolicy" + ], + "title": "image", + "type": "object" + }, + "ingress": { + "properties": { + "annotations": { + "required": [], + "title": "annotations", + "type": "object" + }, + "className": { + "default": "", + "required": [], + "title": "className", + "type": "string" + }, + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" + }, + "hosts": { + "description": "kubernetes.io/ingress.class: nginx\nkubernetes.io/tls-acme: \"true\"", + "items": { + "anyOf": [ + { "properties": { - "limits": { - "type": "object", - "properties": { - "cpu": { - "type": "string" + "host": { + "default": "chart-example.local", + "required": [], + "title": "host", + "type": "string" + }, + "paths": { + "items": { + "anyOf": [ + { + "properties": { + "path": { + "default": "/", + "required": [], + "title": "path", + "type": "string" }, - "memory": { - "type": "string" + "pathType": { + "default": "ImplementationSpecific", + "required": [], + "title": "pathType", + "type": "string" } + }, + "required": [ + "path", + "pathType" + ], + "type": "object" } + ], + "required": [] }, - "requests": { - "type": "object", - "properties": { - "cpu": { - "type": "string" - }, - "memory": { - "type": "string" - } - } - } - } + "required": [], + "title": "paths", + "type": "array" + } + }, + "required": [ + "host", + "paths" + ], + "type": "object" + } + ], + "required": [] + }, + "required": [], + "title": "hosts", + "type": "array" + }, + "tls": { + "items": { + "required": [] + }, + "required": [], + "title": "tls", + "type": "array" + } + }, + "required": [ + "enabled", + "className", + "annotations", + "hosts", + "tls" + ], + "title": "ingress", + "type": "object" + }, + "mariadb": { + "properties": { + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" + } + }, + "required": [ + "enabled" + ], + "title": "mariadb", + "type": "object" + }, + "passbolt": { + "properties": { + "baseUrl": { + "default": "", + "required": [], + "title": "baseUrl", + "type": "string" + } + }, + "required": [ + "baseUrl" + ], + "title": "passbolt", + "type": "object" + }, + "persistence": { + "properties": { + "accessMode": { + "default": "ReadWriteOnce", + "required": [], + "title": "accessMode", + "type": "string" + }, + "enabled": { + "default": true, + "required": [], + "title": "enabled", + "type": "boolean" + }, + "size": { + "default": "512Mi", + "required": [], + "title": "size", + "type": "string" + } + }, + "required": [ + "enabled", + "accessMode", + "size" + ], + "title": "persistence", + "type": "object" + }, + "resources": { + "properties": { + "limits": { + "properties": { + "cpu": { + "default": "100m", + "required": [], + "title": "cpu", + "type": "string" }, - "secondary": { - "type": "object", - "properties": { - "replicaCount": { - "type": "integer" - } - } + "memory": { + "default": "512Mi", + "required": [], + "title": "memory", + "type": "string" + } + }, + "required": [ + "cpu", + "memory" + ], + "title": "limits", + "type": "object" + }, + "requests": { + "properties": { + "cpu": { + "default": "50m", + "required": [], + "title": "cpu", + "type": "string" }, - "volumePermissions": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "type": "string" - } - } - } - } + "memory": { + "default": "256Mi", + "required": [], + "title": "memory", + "type": "string" } + }, + "required": [ + "cpu", + "memory" + ], + "title": "requests", + "type": "object" } + }, + "required": [ + "limits", + "requests" + ], + "title": "resources", + "type": "object" + } + }, + "required": [ + "db", + "fullnameOverride", + "image", + "ingress", + "mariadb", + "passbolt", + "persistence", + "resources" + ], + "title": "passbolt", + "type": "object" + }, + "proxysql": { + "properties": { + "affinity": { + "required": [], + "title": "affinity", + "type": "object" }, - "passbolt": { - "type": "object", - "properties": { - "db": { - "type": "object", - "properties": { - "host": { - "type": "string" - }, - "name": { - "type": "string" - }, - "password": { - "type": "string" - }, - "username": { - "type": "string" - } - } - }, - "fullnameOverride": { - "type": "string" + "enabled": { + "default": true, + "description": "podAntiAffinity:\n requiredDuringSchedulingIgnoredDuringExecution:\n - labelSelector:\n matchExpressions:\n - key: app.kubernetes.io/instance\n operator: In\n values:\n - release-name\n - key: app.kubernetes.io/name\n operator: In\n values:\n - proxysql\n topologyKey: \"kubernetes.io/hostname\"", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "fullnameOverride": { + "default": "passbolt-proxysql", + "required": [], + "title": "fullnameOverride", + "type": "string" + }, + "image": { + "properties": { + "pullPolicy": { + "default": "Always", + "required": [], + "title": "pullPolicy", + "type": "string" + } + }, + "required": [ + "pullPolicy" + ], + "title": "image", + "type": "object" + }, + "proxysql": { + "properties": { + "admin": { + "properties": { + "password": { + "default": "admin", + "required": [], + "title": "password", + "type": "string" }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { + "user": { + "default": "admin", + "required": [], + "title": "user", + "type": "string" + } + }, + "required": [ + "password", + "user" + ], + "title": "admin", + "type": "object" + }, + "mysql": { + "properties": { + "servers": { + "items": { + "anyOf": [ + { + "properties": { + "hostname": { + "default": "passbolt-mysql-primary", + "required": [], + "title": "hostname", "type": "string" - } - } - }, - "ingress": { - "type": "object", - "properties": { - "annotations": { - "type": "object" + }, + "isWriter": { + "default": true, + "required": [], + "title": "isWriter", + "type": "boolean" + }, + "port": { + "default": 3306, + "required": [], + "title": "port", + "type": "integer" + } }, - "className": { + "required": [ + "isWriter", + "hostname", + "port" + ], + "type": "object" + }, + { + "properties": { + "hostname": { + "default": "passbolt-mysql-secondary", + "required": [], + "title": "hostname", "type": "string" - }, - "enabled": { + }, + "isWriter": { + "default": false, + "required": [], + "title": "isWriter", "type": "boolean" + }, + "port": { + "default": 3306, + "required": [], + "title": "port", + "type": "integer" + } }, - "hosts": { - "type": "array", - "items": { - "type": "object", - "properties": { - "host": { - "type": "string" - }, - "paths": { - "type": "array", - "items": { - "type": "object", - "properties": { - "path": { - "type": "string" - }, - "pathType": { - "type": "string" - } - } - } - } - } - } - }, - "tls": { - "type": "array" - } - } - }, - "mariadb": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - } + "required": [ + "isWriter", + "hostname", + "port" + ], + "type": "object" + } + ], + "required": [] + }, + "required": [], + "title": "servers", + "type": "array" }, - "passbolt": { - "type": "object", - "properties": { - "baseUrl": { + "users": { + "items": { + "anyOf": [ + { + "properties": { + "password": { + "default": "root", + "required": [], + "title": "password", "type": "string" - } - } - }, - "persistence": { - "type": "object", - "properties": { - "accessMode": { + }, + "username": { + "default": "root", + "required": [], + "title": "username", "type": "string" + } }, - "enabled": { - "type": "boolean" - }, - "size": { + "required": [ + "username", + "password" + ], + "type": "object" + }, + { + "properties": { + "password": { + "default": "passbolt", + "required": [], + "title": "password", "type": "string" - } - } - }, - "resources": { - "type": "object", - "properties": { - "limits": { - "type": "object", - "properties": { - "cpu": { - "type": "string" - }, - "memory": { - "type": "string" - } - } + }, + "username": { + "default": "passbolt", + "required": [], + "title": "username", + "type": "string" + } }, - "requests": { - "type": "object", - "properties": { - "cpu": { - "type": "string" - }, - "memory": { - "type": "string" - } - } - } - } + "required": [ + "username", + "password" + ], + "type": "object" + } + ], + "required": [] + }, + "required": [], + "title": "users", + "type": "array" + }, + "version": { + "default": "8.0.29", + "required": [], + "title": "version", + "type": "string" + } + }, + "required": [ + "version", + "servers", + "users" + ], + "title": "mysql", + "type": "object" + }, + "web": { + "properties": { + "password": { + "default": "admin", + "required": [], + "title": "password", + "type": "string" + }, + "user": { + "default": "admin", + "required": [], + "title": "user", + "type": "string" } + }, + "required": [ + "password", + "user" + ], + "title": "web", + "type": "object" } + }, + "required": [ + "admin", + "mysql", + "web" + ], + "title": "proxysql", + "type": "object" }, - "proxysql": { - "type": "object", - "properties": { - "affinity": { - "type": "object" - }, - "enabled": { - "type": "boolean" - }, - "fullnameOverride": { - "type": "string" - }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "type": "string" - } - } - }, - "proxysql": { - "type": "object", - "properties": { - "admin": { - "type": "object", - "properties": { - "password": { - "type": "string" - }, - "user": { - "type": "string" - } - } - }, - "mysql": { - "type": "object", - "properties": { - "servers": { - "type": "array", - "items": { - "type": "object", - "properties": { - "hostname": { - "type": "string" - }, - "isWriter": { - "type": "boolean" - }, - "port": { - "type": "integer" - } - } - } - }, - "users": { - "type": "array", - "items": { - "type": "object", - "properties": { - "password": { - "type": "string" - }, - "username": { - "type": "string" - } - } - } - }, - "version": { - "type": "string" - } - } - }, - "web": { - "type": "object", - "properties": { - "password": { - "type": "string" - }, - "user": { - "type": "string" - } - } - } - } + "replicaCount": { + "default": 3, + "required": [], + "title": "replicaCount", + "type": "integer" + }, + "resources": { + "properties": { + "limits": { + "properties": { + "cpu": { + "default": "200m", + "required": [], + "title": "cpu", + "type": "string" }, - "replicaCount": { - "type": "integer" + "memory": { + "default": "512Mi", + "required": [], + "title": "memory", + "type": "string" + } + }, + "required": [ + "cpu", + "memory" + ], + "title": "limits", + "type": "object" + }, + "requests": { + "properties": { + "cpu": { + "default": "100m", + "required": [], + "title": "cpu", + "type": "string" }, - "resources": { - "type": "object", - "properties": { - "limits": { - "type": "object", - "properties": { - "cpu": { - "type": "string" - }, - "memory": { - "type": "string" - } - } - }, - "requests": { - "type": "object", - "properties": { - "cpu": { - "type": "string" - }, - "memory": { - "type": "string" - } - } - } - } + "memory": { + "default": "128Mi", + "required": [], + "title": "memory", + "type": "string" } + }, + "required": [ + "cpu", + "memory" + ], + "title": "requests", + "type": "object" } + }, + "required": [ + "limits", + "requests" + ], + "title": "resources", + "type": "object" } + }, + "required": [ + "affinity", + "enabled", + "fullnameOverride", + "image", + "proxysql", + "replicaCount", + "resources" + ], + "title": "proxysql", + "type": "object" } + }, + "required": [ + "mysql", + "passbolt", + "proxysql" + ], + "type": "object" } diff --git a/charts/polr/values.schema.json b/charts/polr/values.schema.json index 7353f790..4fc01c39 100644 --- a/charts/polr/values.schema.json +++ b/charts/polr/values.schema.json @@ -1,248 +1,597 @@ { - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "admin": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "existingSecret": { - "type": "string" - }, - "password": { - "type": "string" - }, - "username": { - "type": "string" - } - } + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "admin": { + "properties": { + "email": { + "default": "", + "required": [], + "title": "email", + "type": "string" }, - "affinity": { - "type": "object" + "existingSecret": { + "default": "", + "description": "expected key is ADMIN_PASSWORD", + "required": [], + "title": "existingSecret", + "type": "string" }, - "autoscaling": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "maxReplicas": { - "type": "integer" - }, - "minReplicas": { - "type": "integer" - }, - "targetCPUUtilizationPercentage": { - "type": "integer" - } - } + "password": { + "default": "admin", + "required": [], + "title": "password", + "type": "string" }, - "env": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - } - } - } + "username": { + "default": "admin", + "required": [], + "title": "username", + "type": "string" + } + }, + "required": [ + "password", + "username", + "email", + "existingSecret" + ], + "title": "admin", + "type": "object" + }, + "affinity": { + "description": "Affinity settings for pod assignment", + "required": [], + "title": "affinity", + "type": "object" + }, + "autoscaling": { + "properties": { + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" }, - "externalDatabase": { - "type": "object", - "properties": { - "database": { - "type": "string" - }, - "existingSecret": { - "type": "string" - }, - "host": { - "type": "string" - }, - "password": { - "type": "string" - }, - "port": { - "type": "string" - }, - "username": { - "type": "string" - } - } + "maxReplicas": { + "default": 100, + "required": [], + "title": "maxReplicas", + "type": "integer" }, - "fullnameOverride": { - "type": "string" + "minReplicas": { + "default": 1, + "required": [], + "title": "minReplicas", + "type": "integer" }, - "image": { - "type": "object", + "targetCPUUtilizationPercentage": { + "default": 80, + "required": [], + "title": "targetCPUUtilizationPercentage", + "type": "integer" + } + }, + "required": [ + "enabled", + "minReplicas", + "maxReplicas", + "targetCPUUtilizationPercentage" + ], + "title": "autoscaling", + "type": "object" + }, + "env": { + "description": "Please see https://github.com/ajanvier/docker-polr#environment-variables for complete list of environment variables.\nAdmin account and mail settings are provided through their own values.", + "items": { + "anyOf": [ + { "properties": { - "pullPolicy": { - "type": "string" - }, - "repository": { - "type": "string" - }, - "tag": { - "type": "string" - } - } + "name": { + "default": "APP_ADDRESS", + "required": [], + "title": "name", + "type": "string" + }, + "value": { + "default": "polr.local", + "required": [], + "title": "value", + "type": "string" + } + }, + "required": [ + "name", + "value" + ], + "type": "object" + }, + { + "properties": { + "name": { + "default": "APP_NAME", + "required": [], + "title": "name", + "type": "string" + }, + "value": { + "default": "Polr", + "required": [], + "title": "value", + "type": "string" + } + }, + "required": [ + "name", + "value" + ], + "type": "object" + } + ], + "required": [] + }, + "required": [], + "title": "env", + "type": "array" + }, + "externalDatabase": { + "description": "will be used if mysql.enabled is false", + "properties": { + "database": { + "default": "polr", + "required": [], + "title": "database", + "type": "string" }, - "imagePullSecrets": { - "type": "array" + "existingSecret": { + "default": "", + "description": "#\n# NOTE: When it's set the externalDatabase.password is ignored.", + "required": [], + "title": "existingSecret", + "type": "string" }, - "ingress": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "className": { + "host": { + "default": "polr-mysql", + "required": [], + "title": "host", + "type": "string" + }, + "password": { + "default": "polr", + "required": [], + "title": "password", + "type": "string" + }, + "port": { + "default": "3306", + "required": [], + "title": "port", + "type": "string" + }, + "username": { + "default": "polr", + "required": [], + "title": "username", + "type": "string" + } + }, + "required": [ + "host", + "port", + "database", + "username", + "password", + "existingSecret" + ], + "title": "externalDatabase", + "type": "object" + }, + "fullnameOverride": { + "default": "", + "description": "String to fully override `\"polr.fullname\"`", + "required": [], + "title": "fullnameOverride", + "type": "string" + }, + "global": { + "description": "Global values are values that can be accessed from any chart or subchart by exactly the same name.", + "required": [], + "title": "global", + "type": "object" + }, + "image": { + "properties": { + "pullPolicy": { + "default": "Always", + "description": "image pull policy", + "required": [], + "title": "pullPolicy", + "type": "string" + }, + "repository": { + "default": "ajanvier/polr", + "description": "image repository", + "required": [], + "title": "repository", + "type": "string" + }, + "tag": { + "default": "2.3.0", + "description": "Overrides the image tag", + "required": [], + "title": "tag", + "type": "string" + } + }, + "required": [ + "repository", + "pullPolicy", + "tag" + ], + "title": "image", + "type": "object" + }, + "imagePullSecrets": { + "description": "If defined, uses a Secret to pull an image from a private Docker registry or repository.", + "items": { + "required": [] + }, + "required": [], + "title": "imagePullSecrets", + "type": "array" + }, + "ingress": { + "properties": { + "annotations": { + "required": [], + "title": "annotations", + "type": "object" + }, + "className": { + "default": "", + "required": [], + "title": "className", + "type": "string" + }, + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" + }, + "hosts": { + "description": "kubernetes.io/ingress.class: nginx\nkubernetes.io/tls-acme: \"true\"", + "items": { + "anyOf": [ + { + "properties": { + "host": { + "default": "chart-example.local", + "required": [], + "title": "host", "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "hosts": { - "type": "array", + }, + "paths": { "items": { - "type": "object", - "properties": { - "host": { - "type": "string" + "anyOf": [ + { + "properties": { + "path": { + "default": "/", + "required": [], + "title": "path", + "type": "string" }, - "paths": { - "type": "array", - "items": { - "type": "object", - "properties": { - "path": { - "type": "string" - }, - "pathType": { - "type": "string" - } - } - } + "pathType": { + "default": "ImplementationSpecific", + "required": [], + "title": "pathType", + "type": "string" } + }, + "required": [ + "path", + "pathType" + ], + "type": "object" } - } - }, - "tls": { + ], + "required": [] + }, + "required": [], + "title": "paths", "type": "array" - } - } - }, - "mail": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" + } }, - "existingSecret": { - "type": "string" - }, - "fromAddress": { - "type": "string" - }, - "fromName": { - "type": "string" - }, - "host": { - "type": "string" - }, - "password": { - "type": "string" - }, - "port": { - "type": "string" - }, - "username": { - "type": "string" - } - } + "required": [ + "host", + "paths" + ], + "type": "object" + } + ], + "required": [] + }, + "required": [], + "title": "hosts", + "type": "array" }, - "mysql": { - "type": "object", - "properties": { - "auth": { - "type": "object", - "properties": { - "database": { - "type": "string" - }, - "existingSecret": { - "type": "string" - }, - "password": { - "type": "string" - }, - "username": { - "type": "string" - } - } - }, - "enabled": { - "type": "boolean" - } - } + "tls": { + "items": { + "required": [] + }, + "required": [], + "title": "tls", + "type": "array" + } + }, + "required": [ + "enabled", + "className", + "annotations", + "hosts", + "tls" + ], + "title": "ingress", + "type": "object" + }, + "mail": { + "properties": { + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" }, - "nameOverride": { - "type": "string" + "existingSecret": { + "default": "", + "description": "#\n# NOTE: When it's set the mail.password is ignored.", + "required": [], + "title": "existingSecret", + "type": "string" }, - "nodeSelector": { - "type": "object" + "fromAddress": { + "default": "", + "required": [], + "title": "fromAddress", + "type": "string" }, - "podAnnotations": { - "type": "object" + "fromName": { + "default": "", + "required": [], + "title": "fromName", + "type": "string" }, - "podSecurityContext": { - "type": "object" + "host": { + "default": "", + "required": [], + "title": "host", + "type": "string" }, - "replicaCount": { - "type": "integer" + "password": { + "default": "", + "required": [], + "title": "password", + "type": "string" }, - "resources": { - "type": "object" + "port": { + "default": "", + "required": [], + "title": "port", + "type": "string" }, - "revisionHistoryLimit": { - "type": "integer" + "username": { + "default": "", + "required": [], + "title": "username", + "type": "string" + } + }, + "required": [ + "enabled", + "host", + "port", + "username", + "password", + "fromAddress", + "fromName", + "existingSecret" + ], + "title": "mail", + "type": "object" + }, + "mysql": { + "properties": { + "auth": { + "properties": { + "database": { + "default": "polr", + "required": [], + "title": "database", + "type": "string" + }, + "existingSecret": { + "default": "", + "description": "#\n# NOTE: When it's set the mysql.auth.rootPassword, mysql.auth.password, mysql.auth.replicationPassword are ignored.", + "required": [], + "title": "existingSecret", + "type": "string" + }, + "password": { + "default": "polr", + "required": [], + "title": "password", + "type": "string" + }, + "username": { + "default": "polr", + "required": [], + "title": "username", + "type": "string" + } + }, + "required": [ + "database", + "password", + "username", + "existingSecret" + ], + "title": "auth", + "type": "object" }, - "securityContext": { - "type": "object" + "enabled": { + "default": true, + "description": "if disabled please provide db-attributes via externalDatabase attributes", + "required": [], + "title": "enabled", + "type": "boolean" + } + }, + "required": [ + "enabled", + "auth" + ], + "title": "mysql", + "type": "object" + }, + "nameOverride": { + "default": "", + "description": "Provide a name in place of `polr`", + "required": [], + "title": "nameOverride", + "type": "string" + }, + "nodeSelector": { + "description": "Node labels for pod assignment", + "required": [], + "title": "nodeSelector", + "type": "object" + }, + "podAnnotations": { + "description": "Annotations to be added to pods", + "required": [], + "title": "podAnnotations", + "type": "object" + }, + "podSecurityContext": { + "description": "pod-level security context", + "required": [], + "title": "podSecurityContext", + "type": "object" + }, + "replicaCount": { + "default": 1, + "description": "Number of replicas", + "required": [], + "title": "replicaCount", + "type": "integer" + }, + "resources": { + "description": "Resource limits and requests for the headwind pods.", + "required": [], + "title": "resources", + "type": "object" + }, + "revisionHistoryLimit": { + "default": 10, + "description": "The number of old ReplicaSets to retain", + "required": [], + "title": "revisionHistoryLimit", + "type": "integer" + }, + "securityContext": { + "description": "container-level security context", + "required": [], + "title": "securityContext", + "type": "object" + }, + "service": { + "properties": { + "port": { + "default": 80, + "description": "Kubernetes port where service is exposed", + "required": [], + "title": "port", + "type": "integer" }, - "service": { - "type": "object", - "properties": { - "port": { - "type": "integer" - }, - "type": { - "type": "string" - } - } + "type": { + "default": "ClusterIP", + "description": "Kubernetes service type", + "required": [], + "title": "type", + "type": "string" + } + }, + "required": [ + "type", + "port" + ], + "title": "service", + "type": "object" + }, + "serviceAccount": { + "properties": { + "annotations": { + "description": "Annotations to add to the service account", + "required": [], + "title": "annotations", + "type": "object" }, - "serviceAccount": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "create": { - "type": "boolean" - }, - "name": { - "type": "string" - } - } + "create": { + "default": true, + "description": "Specifies whether a service account should be created", + "required": [], + "title": "create", + "type": "boolean" }, - "tolerations": { - "type": "array" + "name": { + "default": "", + "description": "The name of the service account to use.\nIf not set and create is true, a name is generated using the fullname template", + "required": [], + "title": "name", + "type": "string" } + }, + "required": [ + "create", + "annotations", + "name" + ], + "title": "serviceAccount", + "type": "object" + }, + "tolerations": { + "description": "Toleration labels for pod assignment", + "items": { + "required": [] + }, + "required": [], + "title": "tolerations", + "type": "array" } + }, + "required": [ + "nameOverride", + "fullnameOverride", + "image", + "imagePullSecrets", + "replicaCount", + "revisionHistoryLimit", + "serviceAccount", + "podAnnotations", + "podSecurityContext", + "securityContext", + "service", + "ingress", + "resources", + "autoscaling", + "nodeSelector", + "tolerations", + "affinity", + "env", + "admin", + "externalDatabase", + "mail", + "mysql" + ], + "type": "object" } diff --git a/charts/popeye/values.schema.json b/charts/popeye/values.schema.json index 023e4423..67af00f0 100644 --- a/charts/popeye/values.schema.json +++ b/charts/popeye/values.schema.json @@ -1,144 +1,333 @@ { - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "affinity": { - "type": "object" + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "affinity": { + "description": "Affinity settings for pod assignment", + "required": [], + "title": "affinity", + "type": "object" + }, + "cronJob": { + "properties": { + "clusterName": { + "default": "", + "required": [], + "title": "clusterName", + "type": "string" }, - "cronJob": { - "type": "object", - "properties": { - "clusterName": { - "type": "string" - }, - "history": { - "type": "object", - "properties": { - "failedJobsHistoryLimit": { - "type": "integer" - }, - "successfulJobsHistoryLimit": { - "type": "integer" - } - } - }, - "outputFormat": { - "type": "string" - }, - "prometheus": { - "type": "object", - "properties": { - "basicAuth": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "existingSecret": { - "type": "string" - }, - "password": { - "type": "string" - }, - "user": { - "type": "string" - } - } - }, - "pushgatewayAddress": { - "type": "string" - } - } - }, - "s3": { - "type": "object", - "properties": { - "bucket": { - "type": "string" - }, - "endpoint": { - "type": "string" - }, - "region": { - "type": "string" - } - } - }, - "schedule": { - "type": "string" - }, - "spinachConfiguration": { - "type": "object" - } + "history": { + "properties": { + "failedJobsHistoryLimit": { + "default": 1, + "required": [], + "title": "failedJobsHistoryLimit", + "type": "integer" + }, + "successfulJobsHistoryLimit": { + "default": 1, + "required": [], + "title": "successfulJobsHistoryLimit", + "type": "integer" } + }, + "required": [ + "failedJobsHistoryLimit", + "successfulJobsHistoryLimit" + ], + "title": "history", + "type": "object" }, - "fullnameOverride": { - "type": "string" + "outputFormat": { + "default": "standard", + "description": "Popeye can generate sanitizer reports in a variety of formats: standard, jurassic, yaml, html, json, junit, prometheus, score", + "required": [], + "title": "outputFormat", + "type": "string" }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "type": "string" + "prometheus": { + "properties": { + "basicAuth": { + "properties": { + "enabled": { + "default": false, + "description": "Use authentication against Prometheus Pushgateway", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "existingSecret": { + "default": "", + "description": "Name of existing secret to use for authentication against Prometheus Pushgateway, needs to contain the key pushgateway-password", + "required": [], + "title": "existingSecret", + "type": "string" }, - "repository": { - "type": "string" + "password": { + "default": "", + "description": "Password for authentication against Prometheus Pushgateway", + "required": [], + "title": "password", + "type": "string" }, - "tag": { - "type": "string" + "user": { + "default": "", + "description": "Username for authentication against Prometheus Pushgateway", + "required": [], + "title": "user", + "type": "string" } + }, + "required": [ + "enabled", + "existingSecret", + "password", + "user" + ], + "title": "basicAuth", + "type": "object" + }, + "pushgatewayAddress": { + "default": "", + "required": [], + "title": "pushgatewayAddress", + "type": "string" } + }, + "required": [ + "basicAuth", + "pushgatewayAddress" + ], + "title": "prometheus", + "type": "object" }, - "imagePullSecrets": { - "type": "array" - }, - "nameOverride": { - "type": "string" + "s3": { + "properties": { + "bucket": { + "default": "", + "description": "bucket name can be the URI and the bucket name path s3://example-bucket", + "required": [], + "title": "bucket", + "type": "string" + }, + "endpoint": { + "default": "", + "description": "example endpoint: \"https://s3.us-east-1.amazonaws.com\"", + "required": [], + "title": "endpoint", + "type": "string" + }, + "region": { + "default": "", + "description": "example region: \"us-east-1\"", + "required": [], + "title": "region", + "type": "string" + } + }, + "required": [ + "bucket", + "endpoint", + "region" + ], + "title": "s3", + "type": "object" }, - "nodeSelector": { - "type": "object" + "schedule": { + "default": "* */1 * * *", + "required": [], + "title": "schedule", + "type": "string" }, - "podAnnotations": { - "type": "object" + "spinachConfiguration": { + "required": [], + "title": "spinachConfiguration", + "type": "object" + } + }, + "required": [ + "clusterName", + "history", + "outputFormat", + "prometheus", + "s3", + "schedule", + "spinachConfiguration" + ], + "title": "cronJob", + "type": "object" + }, + "fullnameOverride": { + "default": "", + "description": "String to fully override `\"popeye.fullname\"`", + "required": [], + "title": "fullnameOverride", + "type": "string" + }, + "global": { + "description": "Global values are values that can be accessed from any chart or subchart by exactly the same name.", + "required": [], + "title": "global", + "type": "object" + }, + "image": { + "properties": { + "pullPolicy": { + "default": "Always", + "description": "image pull policy", + "required": [], + "title": "pullPolicy", + "type": "string" }, - "podSecurityContext": { - "type": "object" + "repository": { + "default": "derailed/popeye", + "description": "image repository", + "required": [], + "title": "repository", + "type": "string" }, - "resources": { - "type": "object", - "properties": { - "limits": { - "type": "object", - "properties": { - "cpu": { - "type": "string" - }, - "memory": { - "type": "string" - } - } - } + "tag": { + "default": "v0.21.3", + "description": "Overrides the image tag", + "required": [], + "title": "tag", + "type": "string" + } + }, + "required": [ + "repository", + "pullPolicy", + "tag" + ], + "title": "image", + "type": "object" + }, + "imagePullSecrets": { + "description": "If defined, uses a Secret to pull an image from a private Docker registry or repository.", + "items": { + "required": [] + }, + "required": [], + "title": "imagePullSecrets", + "type": "array" + }, + "nameOverride": { + "default": "", + "description": "Provide a name in place of `popeye`", + "required": [], + "title": "nameOverride", + "type": "string" + }, + "nodeSelector": { + "description": "Node labels for pod assignment", + "required": [], + "title": "nodeSelector", + "type": "object" + }, + "podAnnotations": { + "description": "Annotations to be added to exporter pods", + "required": [], + "title": "podAnnotations", + "type": "object" + }, + "podSecurityContext": { + "description": "pod-level security context", + "required": [], + "title": "podSecurityContext", + "type": "object" + }, + "resources": { + "description": "Resource limits and requests for the headwind pods.", + "properties": { + "limits": { + "properties": { + "cpu": { + "default": "1000m", + "required": [], + "title": "cpu", + "type": "string" + }, + "memory": { + "default": "1000Mi", + "required": [], + "title": "memory", + "type": "string" } + }, + "required": [ + "cpu", + "memory" + ], + "title": "limits", + "type": "object" + } + }, + "required": [ + "limits" + ], + "title": "resources", + "type": "object" + }, + "securityContext": { + "description": "container-level security context", + "required": [], + "title": "securityContext", + "type": "object" + }, + "serviceAccount": { + "properties": { + "annotations": { + "description": "Annotations to add to the service account", + "required": [], + "title": "annotations", + "type": "object" }, - "securityContext": { - "type": "object" - }, - "serviceAccount": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "create": { - "type": "boolean" - }, - "name": { - "type": "string" - } - } + "create": { + "default": true, + "description": "Specifies whether a service account should be created", + "required": [], + "title": "create", + "type": "boolean" }, - "tolerations": { - "type": "array" + "name": { + "default": "", + "description": "The name of the service account to use.\nIf not set and create is true, a name is generated using the fullname template", + "required": [], + "title": "name", + "type": "string" } + }, + "required": [ + "create", + "annotations", + "name" + ], + "title": "serviceAccount", + "type": "object" + }, + "tolerations": { + "description": "Toleration labels for pod assignment", + "items": { + "required": [] + }, + "required": [], + "title": "tolerations", + "type": "array" } + }, + "required": [ + "nameOverride", + "fullnameOverride", + "image", + "imagePullSecrets", + "serviceAccount", + "podAnnotations", + "podSecurityContext", + "securityContext", + "resources", + "nodeSelector", + "tolerations", + "affinity", + "cronJob" + ], + "type": "object" } diff --git a/charts/priority-classes/values.schema.json b/charts/priority-classes/values.schema.json index 203b565c..092bf157 100644 --- a/charts/priority-classes/values.schema.json +++ b/charts/priority-classes/values.schema.json @@ -1,35 +1,210 @@ { - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "fullnameOverride": { - "type": "string" - }, - "nameOverride": { - "type": "string" - }, - "priorityClasses": { - "type": "array", - "items": { - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "globalDefault": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "preemptionPolicy": { - "type": "string" - }, - "value": { - "type": "integer" - } - } - } - } + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "fullnameOverride": { + "default": "", + "description": "String to fully override `\"priority-classes.fullname\"`", + "required": [], + "title": "fullnameOverride", + "type": "string" + }, + "global": { + "description": "Global values are values that can be accessed from any chart or subchart by exactly the same name.", + "required": [], + "title": "global", + "type": "object" + }, + "nameOverride": { + "default": "", + "description": "Provide a name in place of `priority-classes`", + "required": [], + "title": "nameOverride", + "type": "string" + }, + "priorityClasses": { + "description": "List of Priority Classes to be created", + "items": { + "anyOf": [ + { + "properties": { + "description": { + "default": "Mission critical Pods. Does preempt lower priority Pods.", + "required": [], + "title": "description", + "type": "string" + }, + "globalDefault": { + "default": false, + "required": [], + "title": "globalDefault", + "type": "boolean" + }, + "name": { + "default": "critical", + "required": [], + "title": "name", + "type": "string" + }, + "preemptionPolicy": { + "default": "PreemptLowerPriority", + "required": [], + "title": "preemptionPolicy", + "type": "string" + }, + "value": { + "default": 1000000, + "required": [], + "title": "value", + "type": "integer" + } + }, + "required": [ + "name", + "description", + "globalDefault", + "preemptionPolicy", + "value" + ], + "type": "object" + }, + { + "properties": { + "description": { + "default": "High priority Pods. Does preempt lower priority Pods.", + "required": [], + "title": "description", + "type": "string" + }, + "globalDefault": { + "default": false, + "required": [], + "title": "globalDefault", + "type": "boolean" + }, + "name": { + "default": "high", + "required": [], + "title": "name", + "type": "string" + }, + "preemptionPolicy": { + "default": "PreemptLowerPriority", + "required": [], + "title": "preemptionPolicy", + "type": "string" + }, + "value": { + "default": 900000, + "required": [], + "title": "value", + "type": "integer" + } + }, + "required": [ + "name", + "description", + "globalDefault", + "preemptionPolicy", + "value" + ], + "type": "object" + }, + { + "properties": { + "description": { + "default": "Default priority class for all Pods. Does preempt lower priority Pods.", + "required": [], + "title": "description", + "type": "string" + }, + "globalDefault": { + "default": true, + "required": [], + "title": "globalDefault", + "type": "boolean" + }, + "name": { + "default": "medium", + "required": [], + "title": "name", + "type": "string" + }, + "preemptionPolicy": { + "default": "PreemptLowerPriority", + "required": [], + "title": "preemptionPolicy", + "type": "string" + }, + "value": { + "default": 500000, + "required": [], + "title": "value", + "type": "integer" + } + }, + "required": [ + "name", + "description", + "globalDefault", + "preemptionPolicy", + "value" + ], + "type": "object" + }, + { + "properties": { + "description": { + "default": "Low priority Pods.", + "required": [], + "title": "description", + "type": "string" + }, + "globalDefault": { + "default": false, + "required": [], + "title": "globalDefault", + "type": "boolean" + }, + "name": { + "default": "low", + "required": [], + "title": "name", + "type": "string" + }, + "preemptionPolicy": { + "default": "Never", + "required": [], + "title": "preemptionPolicy", + "type": "string" + }, + "value": { + "default": 100000, + "required": [], + "title": "value", + "type": "integer" + } + }, + "required": [ + "name", + "description", + "globalDefault", + "preemptionPolicy", + "value" + ], + "type": "object" + } + ], + "required": [] + }, + "required": [], + "title": "priorityClasses", + "type": "array" } + }, + "required": [ + "nameOverride", + "fullnameOverride", + "priorityClasses" + ], + "type": "object" } diff --git a/charts/prometheus-pve-exporter/values.schema.json b/charts/prometheus-pve-exporter/values.schema.json index 9875cc10..789aebf3 100644 --- a/charts/prometheus-pve-exporter/values.schema.json +++ b/charts/prometheus-pve-exporter/values.schema.json @@ -1,178 +1,431 @@ { - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "affinity": { - "type": "object" - }, - "args": { - "type": "array" - }, - "autoscaling": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "maxReplicas": { - "type": "integer" - }, - "minReplicas": { - "type": "integer" - }, - "targetCPUUtilizationPercentage": { - "type": "integer" - } - } + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "affinity": { + "description": "Affinity settings for pod assignment", + "required": [], + "title": "affinity", + "type": "object" + }, + "args": { + "description": "optional arguments to disable collectors of the exporter. By default all collectors are enabled.", + "items": { + "required": [] + }, + "required": [], + "title": "args", + "type": "array" + }, + "autoscaling": { + "properties": { + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" }, - "env": { - "type": "object", - "properties": { - "pveAuthType": { - "type": "string" - }, - "pveExistingSecretName": { - "type": "string" - }, - "pvePassword": { - "type": "string" - }, - "pveTokenName": { - "type": "string" - }, - "pveTokenValue": { - "type": "string" - }, - "pveUser": { - "type": "string" - }, - "pveVerifySsl": { - "type": "boolean" - } - } + "maxReplicas": { + "default": 100, + "required": [], + "title": "maxReplicas", + "type": "integer" }, - "fullnameOverride": { - "type": "string" + "minReplicas": { + "default": 1, + "required": [], + "title": "minReplicas", + "type": "integer" }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "type": "string" - }, - "repository": { - "type": "string" - }, - "tag": { - "type": "string" - } - } + "targetCPUUtilizationPercentage": { + "default": 80, + "required": [], + "title": "targetCPUUtilizationPercentage", + "type": "integer" + } + }, + "required": [ + "enabled", + "minReplicas", + "maxReplicas", + "targetCPUUtilizationPercentage" + ], + "title": "autoscaling", + "type": "object" + }, + "env": { + "properties": { + "pveAuthType": { + "default": "token", + "description": "define how to authenticate against pve instances: password, token", + "required": [], + "title": "pveAuthType", + "type": "string" }, - "imagePullSecrets": { - "type": "array" - }, - "nameOverride": { - "type": "string" - }, - "nodeSelector": { - "type": "object" - }, - "podAnnotations": { - "type": "object" - }, - "podSecurityContext": { - "type": "object" - }, - "replicaCount": { - "type": "integer" - }, - "resources": { - "type": "object" - }, - "revisionHistoryLimit": { - "type": "integer" - }, - "securityContext": { - "type": "object", - "properties": { - "capabilities": { - "type": "object", - "properties": { - "drop": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "readOnlyRootFilesystem": { - "type": "boolean" - }, - "runAsNonRoot": { - "type": "boolean" - }, - "runAsUser": { - "type": "integer" - } - } + "pveExistingSecretName": { + "default": "", + "description": "if you provide an existing secret, no additional secret will be created. Depending on the setting in pveAuthType the secret needs to have password OR tokenName and tokenValue fields.", + "required": [], + "title": "pveExistingSecretName", + "type": "string" }, - "service": { - "type": "object", - "properties": { - "port": { - "type": "integer" - }, - "type": { - "type": "string" - } - } + "pvePassword": { + "default": "password", + "required": [], + "title": "pvePassword", + "type": "string" }, - "serviceAccount": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "create": { - "type": "boolean" - }, - "name": { - "type": "string" - } - } + "pveTokenName": { + "default": "tokenName", + "required": [], + "title": "pveTokenName", + "type": "string" }, - "serviceMonitor": { - "type": "object", - "properties": { - "additionalLabels": { - "type": "object" - }, - "enabled": { - "type": "boolean" - }, - "interval": { - "type": "string" - }, - "metricRelabelings": { - "type": "array" - }, - "namespace": { + "pveTokenValue": { + "default": "tokenValue", + "required": [], + "title": "pveTokenValue", + "type": "string" + }, + "pveUser": { + "default": "user", + "required": [], + "title": "pveUser", + "type": "string" + }, + "pveVerifySsl": { + "default": false, + "description": "Optional: set to false to skip SSL/TLS verification", + "required": [], + "title": "pveVerifySsl", + "type": "boolean" + } + }, + "required": [ + "pveAuthType", + "pveUser", + "pvePassword", + "pveTokenName", + "pveTokenValue", + "pveExistingSecretName", + "pveVerifySsl" + ], + "title": "env", + "type": "object" + }, + "fullnameOverride": { + "default": "", + "description": "String to fully override `\"prometheus-pve-exporter.fullname\"`", + "required": [], + "title": "fullnameOverride", + "type": "string" + }, + "global": { + "description": "Global values are values that can be accessed from any chart or subchart by exactly the same name.", + "required": [], + "title": "global", + "type": "object" + }, + "image": { + "properties": { + "pullPolicy": { + "default": "Always", + "description": "image pull policy", + "required": [], + "title": "pullPolicy", + "type": "string" + }, + "repository": { + "default": "prompve/prometheus-pve-exporter", + "description": "image repository", + "required": [], + "title": "repository", + "type": "string" + }, + "tag": { + "default": "2.3.1", + "description": "Overrides the image tag", + "required": [], + "title": "tag", + "type": "string" + } + }, + "required": [ + "repository", + "pullPolicy", + "tag" + ], + "title": "image", + "type": "object" + }, + "imagePullSecrets": { + "description": "If defined, uses a Secret to pull an image from a private Docker registry or repository.", + "items": { + "required": [] + }, + "required": [], + "title": "imagePullSecrets", + "type": "array" + }, + "nameOverride": { + "default": "", + "description": "Provide a name in place of `prometheus-pve-exporter`", + "required": [], + "title": "nameOverride", + "type": "string" + }, + "nodeSelector": { + "description": "Node labels for pod assignment", + "required": [], + "title": "nodeSelector", + "type": "object" + }, + "podAnnotations": { + "description": "Annotations to be added to exporter pods", + "required": [], + "title": "podAnnotations", + "type": "object" + }, + "podSecurityContext": { + "description": "pod-level security context", + "required": [], + "title": "podSecurityContext", + "type": "object" + }, + "replicaCount": { + "default": 1, + "description": "Number of replicas", + "required": [], + "title": "replicaCount", + "type": "integer" + }, + "resources": { + "description": "Resource limits and requests for the controller pods.", + "required": [], + "title": "resources", + "type": "object" + }, + "revisionHistoryLimit": { + "default": 10, + "description": "The number of old ReplicaSets to retain", + "required": [], + "title": "revisionHistoryLimit", + "type": "integer" + }, + "securityContext": { + "description": "container-level security context", + "properties": { + "capabilities": { + "properties": { + "drop": { + "items": { + "anyOf": [ + { + "required": [], "type": "string" - }, - "pveTargets": { - "type": "array" - }, - "relabelings": { - "type": "array" - }, - "selector": { - "type": "object" - } + } + ], + "required": [] + }, + "required": [], + "title": "drop", + "type": "array" } + }, + "required": [ + "drop" + ], + "title": "capabilities", + "type": "object" + }, + "readOnlyRootFilesystem": { + "default": true, + "required": [], + "title": "readOnlyRootFilesystem", + "type": "boolean" + }, + "runAsNonRoot": { + "default": true, + "required": [], + "title": "runAsNonRoot", + "type": "boolean" + }, + "runAsUser": { + "default": 65534, + "required": [], + "title": "runAsUser", + "type": "integer" + } + }, + "required": [ + "capabilities", + "readOnlyRootFilesystem", + "runAsNonRoot", + "runAsUser" + ], + "title": "securityContext", + "type": "object" + }, + "service": { + "properties": { + "port": { + "default": 80, + "description": "Kubernetes port where service is exposed", + "required": [], + "title": "port", + "type": "integer" + }, + "type": { + "default": "ClusterIP", + "description": "Kubernetes service type", + "required": [], + "title": "type", + "type": "string" + } + }, + "required": [ + "type", + "port" + ], + "title": "service", + "type": "object" + }, + "serviceAccount": { + "properties": { + "annotations": { + "description": "Annotations to add to the service account", + "required": [], + "title": "annotations", + "type": "object" + }, + "create": { + "default": true, + "description": "Specifies whether a service account should be created", + "required": [], + "title": "create", + "type": "boolean" + }, + "name": { + "default": "", + "description": "The name of the service account to use.\nIf not set and create is true, a name is generated using the fullname template", + "required": [], + "title": "name", + "type": "string" + } + }, + "required": [ + "create", + "annotations", + "name" + ], + "title": "serviceAccount", + "type": "object" + }, + "serviceMonitor": { + "properties": { + "additionalLabels": { + "description": "Prometheus ServiceMonitor labels", + "required": [], + "title": "additionalLabels", + "type": "object" + }, + "enabled": { + "default": false, + "description": "Enable a prometheus ServiceMonitor", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "interval": { + "default": "30s", + "description": "prometheus: kube-prometheus\nPrometheus ServiceMonitor interval", + "required": [], + "title": "interval", + "type": "string" + }, + "metricRelabelings": { + "description": "Prometheus [MetricRelabelConfigs] to apply to samples before ingestion", + "items": { + "required": [] + }, + "required": [], + "title": "metricRelabelings", + "type": "array" + }, + "namespace": { + "default": "", + "description": "Prometheus ServiceMonitor namespace", + "required": [], + "title": "namespace", + "type": "string" + }, + "pveTargets": { + "description": "- source_labels: [__address__]\n target_label: __param_target\n- source_labels: [__param_target]\n target_label: instance\n- target_label: __address__\n replacement: prometheus-pve-exporter:9221 # PVE exporter service.\nPrometheus", + "items": { + "required": [] + }, + "required": [], + "title": "pveTargets", + "type": "array" + }, + "relabelings": { + "description": "Prometheus [RelabelConfigs] to apply to samples before scraping", + "items": { + "required": [] + }, + "required": [], + "title": "relabelings", + "type": "array" }, - "tolerations": { - "type": "array" + "selector": { + "description": "release: prometheus\nPrometheus ServiceMonitor selector", + "required": [], + "title": "selector", + "type": "object" } + }, + "required": [ + "enabled", + "additionalLabels", + "selector", + "interval", + "namespace", + "metricRelabelings", + "relabelings", + "pveTargets" + ], + "title": "serviceMonitor", + "type": "object" + }, + "tolerations": { + "description": "Toleration labels for pod assignment", + "items": { + "required": [] + }, + "required": [], + "title": "tolerations", + "type": "array" } + }, + "required": [ + "nameOverride", + "fullnameOverride", + "image", + "imagePullSecrets", + "replicaCount", + "revisionHistoryLimit", + "serviceAccount", + "podAnnotations", + "podSecurityContext", + "securityContext", + "service", + "resources", + "autoscaling", + "nodeSelector", + "tolerations", + "affinity", + "args", + "env", + "serviceMonitor" + ], + "type": "object" } diff --git a/charts/promlens/values.schema.json b/charts/promlens/values.schema.json index 573cb07f..c5114568 100644 --- a/charts/promlens/values.schema.json +++ b/charts/promlens/values.schema.json @@ -1,235 +1,557 @@ { - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "affinity": { - "type": "object" + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "affinity": { + "description": "Affinity settings for pod assignment", + "required": [], + "title": "affinity", + "type": "object" + }, + "autoscaling": { + "properties": { + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" }, - "autoscaling": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "maxReplicas": { - "type": "integer" - }, - "minReplicas": { - "type": "integer" - }, - "targetCPUUtilizationPercentage": { - "type": "integer" - } - } + "maxReplicas": { + "default": 100, + "required": [], + "title": "maxReplicas", + "type": "integer" }, - "config": { - "type": "object", - "properties": { - "grafana": { - "type": "object", - "properties": { - "apiToken": { - "type": "string" - }, - "defaultDatasourceId": { - "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "existingSecret": { - "type": "string" - }, - "url": { - "type": "string" - } - } - }, - "log": { - "type": "object", - "properties": { - "format": { - "type": "string" - }, - "level": { - "type": "string" - } - } - }, - "sharedLinks": { - "type": "object", - "properties": { - "gcs": { - "type": "object", - "properties": { - "bucket": { - "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "existingSecret": { - "type": "string" - }, - "storageAccount": { - "type": "string" - } - } - }, - "sql": { - "type": "object", - "properties": { - "createTables": { - "type": "boolean" - }, - "driver": { - "type": "string" - }, - "dsn": { - "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "existingSecret": { - "type": "string" - }, - "retention": { - "type": "string" - } - } - } - } - }, - "web": { - "type": "object", - "properties": { - "defaultPrometheusUrl": { - "type": "string" - }, - "externalUrl": { - "type": "string" - }, - "routePrefix": { - "type": "string" - } - } - } + "minReplicas": { + "default": 1, + "required": [], + "title": "minReplicas", + "type": "integer" + }, + "targetCPUUtilizationPercentage": { + "default": 80, + "required": [], + "title": "targetCPUUtilizationPercentage", + "type": "integer" + } + }, + "required": [ + "enabled", + "minReplicas", + "maxReplicas", + "targetCPUUtilizationPercentage" + ], + "title": "autoscaling", + "type": "object" + }, + "config": { + "properties": { + "grafana": { + "properties": { + "apiToken": { + "default": "", + "description": "The auth token to pass to the Grafana API, see https://grafana.com/docs/grafana/latest/http_api/auth/", + "required": [], + "title": "apiToken", + "type": "string" + }, + "defaultDatasourceId": { + "default": "", + "description": "The default Grafana datasource ID to use (overrides Grafana's own default).", + "required": [], + "title": "defaultDatasourceId", + "type": "string" + }, + "enabled": { + "default": false, + "description": "Enable integration with Grafana", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "existingSecret": { + "default": "", + "description": "An existing secret containing the auth token, key needs to be api-token", + "required": [], + "title": "existingSecret", + "type": "string" + }, + "url": { + "default": "", + "description": "The URL of your Grafana installation", + "required": [], + "title": "url", + "type": "string" } + }, + "required": [ + "enabled", + "apiToken", + "defaultDatasourceId", + "existingSecret", + "url" + ], + "title": "grafana", + "type": "object" }, - "fullnameOverride": { - "type": "string" + "log": { + "properties": { + "format": { + "default": "json", + "description": "Output format of log messages. One of: [logfmt, json]", + "required": [], + "title": "format", + "type": "string" + }, + "level": { + "default": "info", + "description": "Only log messages with the given severity or above. One of: [debug, info, warn, error]", + "required": [], + "title": "level", + "type": "string" + } + }, + "required": [ + "format", + "level" + ], + "title": "log", + "type": "object" }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "type": "string" + "sharedLinks": { + "properties": { + "gcs": { + "properties": { + "bucket": { + "default": "", + "description": "Name of the GCS bucket for storing shared links", + "required": [], + "title": "bucket", + "type": "string" }, - "repository": { - "type": "string" + "enabled": { + "default": false, + "description": "Enable Link Sharing via Google Storage Bucket", + "required": [], + "title": "enabled", + "type": "boolean" }, - "tag": { - "type": "string" + "existingSecret": { + "default": "", + "description": "An existing secret containing the credentials for the storage-account as json, key needs to be gcs-cred.json", + "required": [], + "title": "existingSecret", + "type": "string" + }, + "storageAccount": { + "default": "", + "description": "Google Cloud Storage Account key", + "required": [], + "title": "storageAccount", + "type": "string" } - } - }, - "imagePullSecrets": { - "type": "array" - }, - "ingress": { - "type": "object", - "properties": { - "annotations": { - "type": "object" + }, + "required": [ + "enabled", + "bucket", + "existingSecret", + "storageAccount" + ], + "title": "gcs", + "type": "object" + }, + "sql": { + "properties": { + "createTables": { + "default": true, + "description": "Whether to automatically create the required tables when using a SQL database for shared links.", + "required": [], + "title": "createTables", + "type": "boolean" }, - "className": { - "type": "string" + "driver": { + "default": "sqlite", + "description": "The SQL driver to use for storing shared links in a SQL database. Supported values: [mysql, sqlite].", + "required": [], + "title": "driver", + "type": "string" + }, + "dsn": { + "default": "/tmp/promlens-links.db", + "description": "SQL Data Source Name when using a SQL database to shared links (see https://github.com/go-sql-driver/mysql#dsn-data-source-name) for MySQL, https://github.com/glebarez/go-sqlite#example for SQLite)", + "required": [], + "title": "dsn", + "type": "string" }, "enabled": { - "type": "boolean" + "default": false, + "description": "Enable Link Sharing via SQL database", + "required": [], + "title": "enabled", + "type": "boolean" }, - "hosts": { - "type": "array", - "items": { - "type": "object", - "properties": { - "host": { - "type": "string" - }, - "paths": { - "type": "array", - "items": { - "type": "object", - "properties": { - "path": { - "type": "string" - }, - "pathType": { - "type": "string" - } - } - } - } - } - } + "existingSecret": { + "default": "", + "description": "An existing secret containing the dsn for the link storage backend, key needs to be dsn", + "required": [], + "title": "existingSecret", + "type": "string" }, - "tls": { - "type": "array" + "retention": { + "default": "0", + "description": "The maximum retention time for shared links when using a SQL database (e.g. '10m', '12h'). Set to 0 for infinite retention.", + "required": [], + "title": "retention", + "type": "string" } + }, + "required": [ + "enabled", + "createTables", + "driver", + "dsn", + "existingSecret", + "retention" + ], + "title": "sql", + "type": "object" } + }, + "required": [ + "gcs", + "sql" + ], + "title": "sharedLinks", + "type": "object" }, - "nameOverride": { - "type": "string" - }, - "nodeSelector": { - "type": "object" + "web": { + "properties": { + "defaultPrometheusUrl": { + "default": "", + "description": "The default Prometheus URL to load PromLens with.", + "required": [], + "title": "defaultPrometheusUrl", + "type": "string" + }, + "externalUrl": { + "default": "", + "description": "The URL under which PromLens is externally reachable (for example, if PromLens is served via a reverse proxy). Used for generating relative and absolute links back to PromLens itself. If the URL has a path portion, it will be used to prefix all HTTP endpoints served by PromLens. If omitted, relevant URL components will be derived automatically.", + "required": [], + "title": "externalUrl", + "type": "string" + }, + "routePrefix": { + "default": "", + "description": "Prefix for the internal routes of web endpoints. Defaults to path of --web.external-url.", + "required": [], + "title": "routePrefix", + "type": "string" + } + }, + "required": [ + "defaultPrometheusUrl", + "externalUrl", + "routePrefix" + ], + "title": "web", + "type": "object" + } + }, + "required": [ + "grafana", + "log", + "sharedLinks", + "web" + ], + "title": "config", + "type": "object" + }, + "fullnameOverride": { + "default": "", + "description": "String to fully override `\"promlens.fullname\"`", + "required": [], + "title": "fullnameOverride", + "type": "string" + }, + "global": { + "description": "Global values are values that can be accessed from any chart or subchart by exactly the same name.", + "required": [], + "title": "global", + "type": "object" + }, + "image": { + "properties": { + "pullPolicy": { + "default": "Always", + "description": "image pull policy", + "required": [], + "title": "pullPolicy", + "type": "string" }, - "podAnnotations": { - "type": "object" + "repository": { + "default": "prom/promlens", + "description": "image repository", + "required": [], + "title": "repository", + "type": "string" }, - "podSecurityContext": { - "type": "object" + "tag": { + "default": "v0.3.0", + "description": "Overrides the image tag", + "required": [], + "title": "tag", + "type": "string" + } + }, + "required": [ + "repository", + "pullPolicy", + "tag" + ], + "title": "image", + "type": "object" + }, + "imagePullSecrets": { + "description": "If defined, uses a Secret to pull an image from a private Docker registry or repository.", + "items": { + "required": [] + }, + "required": [], + "title": "imagePullSecrets", + "type": "array" + }, + "ingress": { + "properties": { + "annotations": { + "description": "Annotations to add to the ingress", + "required": [], + "title": "annotations", + "type": "object" }, - "replicaCount": { - "type": "integer" + "className": { + "default": "", + "description": "Ingress class name", + "required": [], + "title": "className", + "type": "string" }, - "resources": { - "type": "object" + "enabled": { + "default": false, + "description": "Enable ingress", + "required": [], + "title": "enabled", + "type": "boolean" }, - "revisionHistoryLimit": { - "type": "integer" + "hosts": { + "description": "kubernetes.io/ingress.class: nginx\nkubernetes.io/tls-acme: \"true\"", + "items": { + "anyOf": [ + { + "properties": { + "host": { + "default": "chart-example.local", + "required": [], + "title": "host", + "type": "string" + }, + "paths": { + "items": { + "anyOf": [ + { + "properties": { + "path": { + "default": "/", + "required": [], + "title": "path", + "type": "string" + }, + "pathType": { + "default": "ImplementationSpecific", + "required": [], + "title": "pathType", + "type": "string" + } + }, + "required": [ + "path", + "pathType" + ], + "type": "object" + } + ], + "required": [] + }, + "required": [], + "title": "paths", + "type": "array" + } + }, + "required": [ + "host", + "paths" + ], + "type": "object" + } + ], + "required": [] + }, + "required": [], + "title": "hosts", + "type": "array" }, - "securityContext": { - "type": "object" + "tls": { + "items": { + "required": [] + }, + "required": [], + "title": "tls", + "type": "array" + } + }, + "required": [ + "enabled", + "className", + "annotations", + "hosts", + "tls" + ], + "title": "ingress", + "type": "object" + }, + "nameOverride": { + "default": "", + "description": "Provide a name in place of `promlens`", + "required": [], + "title": "nameOverride", + "type": "string" + }, + "nodeSelector": { + "description": "Node labels for pod assignment", + "required": [], + "title": "nodeSelector", + "type": "object" + }, + "podAnnotations": { + "description": "Annotations to be added to exporter pods", + "required": [], + "title": "podAnnotations", + "type": "object" + }, + "podSecurityContext": { + "description": "Pod-level security context", + "required": [], + "title": "podSecurityContext", + "type": "object" + }, + "replicaCount": { + "default": 1, + "description": "Number of replicas", + "required": [], + "title": "replicaCount", + "type": "integer" + }, + "resources": { + "description": "Resource limits and requests for the pods.", + "required": [], + "title": "resources", + "type": "object" + }, + "revisionHistoryLimit": { + "default": 10, + "description": "The number of old ReplicaSets to retain", + "required": [], + "title": "revisionHistoryLimit", + "type": "integer" + }, + "securityContext": { + "description": "container-level security context", + "required": [], + "title": "securityContext", + "type": "object" + }, + "service": { + "properties": { + "port": { + "default": 8080, + "description": "Kubernetes port where service is exposed", + "required": [], + "title": "port", + "type": "integer" }, - "service": { - "type": "object", - "properties": { - "port": { - "type": "integer" - }, - "type": { - "type": "string" - } - } + "type": { + "default": "ClusterIP", + "description": "Kubernetes service type", + "required": [], + "title": "type", + "type": "string" + } + }, + "required": [ + "type", + "port" + ], + "title": "service", + "type": "object" + }, + "serviceAccount": { + "properties": { + "annotations": { + "description": "Annotations to add to the service account", + "required": [], + "title": "annotations", + "type": "object" }, - "serviceAccount": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "create": { - "type": "boolean" - }, - "name": { - "type": "string" - } - } + "create": { + "default": true, + "description": "Specifies whether a service account should be created", + "required": [], + "title": "create", + "type": "boolean" }, - "tolerations": { - "type": "array" + "name": { + "default": "", + "description": "The name of the service account to use.\nIf not set and create is true, a name is generated using the fullname template", + "required": [], + "title": "name", + "type": "string" } + }, + "required": [ + "create", + "annotations", + "name" + ], + "title": "serviceAccount", + "type": "object" + }, + "tolerations": { + "description": "Toleration labels for pod assignment", + "items": { + "required": [] + }, + "required": [], + "title": "tolerations", + "type": "array" } + }, + "required": [ + "nameOverride", + "fullnameOverride", + "image", + "imagePullSecrets", + "replicaCount", + "revisionHistoryLimit", + "serviceAccount", + "podAnnotations", + "podSecurityContext", + "securityContext", + "service", + "ingress", + "resources", + "autoscaling", + "nodeSelector", + "tolerations", + "affinity", + "config" + ], + "type": "object" } diff --git a/charts/proxysql/values.schema.json b/charts/proxysql/values.schema.json index a7220e7c..f0c4105f 100644 --- a/charts/proxysql/values.schema.json +++ b/charts/proxysql/values.schema.json @@ -1,325 +1,735 @@ { - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "affinity": { - "type": "object" + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "affinity": { + "description": "Affinity settings for pod assignment", + "required": [], + "title": "affinity", + "type": "object" + }, + "autoscaling": { + "properties": { + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" }, - "autoscaling": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "maxReplicas": { - "type": "integer" - }, - "minReplicas": { - "type": "integer" - }, - "targetCPUUtilizationPercentage": { - "type": "integer" - } - } + "maxReplicas": { + "default": 100, + "required": [], + "title": "maxReplicas", + "type": "integer" }, - "fullnameOverride": { - "type": "string" + "minReplicas": { + "default": 1, + "required": [], + "title": "minReplicas", + "type": "integer" }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "type": "string" - }, - "repository": { - "type": "string" - }, - "tag": { - "type": "string" - } + "targetCPUUtilizationPercentage": { + "default": 80, + "required": [], + "title": "targetCPUUtilizationPercentage", + "type": "integer" + } + }, + "required": [ + "enabled", + "minReplicas", + "maxReplicas", + "targetCPUUtilizationPercentage" + ], + "title": "autoscaling", + "type": "object" + }, + "fullnameOverride": { + "default": "", + "description": "String to fully override `\"proxysql.fullname\"`", + "required": [], + "title": "fullnameOverride", + "type": "string" + }, + "global": { + "description": "Global values are values that can be accessed from any chart or subchart by exactly the same name.", + "required": [], + "title": "global", + "type": "object" + }, + "image": { + "properties": { + "pullPolicy": { + "default": "Always", + "description": "image pull policy", + "required": [], + "title": "pullPolicy", + "type": "string" + }, + "repository": { + "default": "proxysql/proxysql", + "description": "image repository", + "required": [], + "title": "repository", + "type": "string" + }, + "tag": { + "default": "2.7.1", + "description": "Overrides the image tag", + "required": [], + "title": "tag", + "type": "string" + } + }, + "required": [ + "repository", + "pullPolicy", + "tag" + ], + "title": "image", + "type": "object" + }, + "imagePullSecrets": { + "description": "If defined, uses a Secret to pull an image from a private Docker registry or repository.", + "items": { + "required": [] + }, + "required": [], + "title": "imagePullSecrets", + "type": "array" + }, + "ingress": { + "properties": { + "annotations": { + "properties": { + "nginx.ingress.kubernetes.io/backend-protocol": { + "default": "HTTPS", + "required": [], + "title": "nginx.ingress.kubernetes.io/backend-protocol", + "type": "string" } + }, + "required": [ + "nginx.ingress.kubernetes.io/backend-protocol" + ], + "title": "annotations", + "type": "object" }, - "imagePullSecrets": { - "type": "array" + "className": { + "default": "", + "required": [], + "title": "className", + "type": "string" }, - "ingress": { - "type": "object", - "properties": { - "annotations": { - "type": "object", - "properties": { - "nginx.ingress.kubernetes.io/backend-protocol": { - "type": "string" - } - } - }, - "className": { + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" + }, + "hosts": { + "items": { + "anyOf": [ + { + "properties": { + "host": { + "default": "chart-example.local", + "required": [], + "title": "host", "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "hosts": { - "type": "array", + }, + "paths": { "items": { - "type": "object", - "properties": { - "host": { - "type": "string" + "anyOf": [ + { + "properties": { + "path": { + "default": "/", + "required": [], + "title": "path", + "type": "string" }, - "paths": { - "type": "array", - "items": { - "type": "object", - "properties": { - "path": { - "type": "string" - }, - "pathType": { - "type": "string" - } - } - } + "pathType": { + "default": "ImplementationSpecific", + "required": [], + "title": "pathType", + "type": "string" } + }, + "required": [ + "path", + "pathType" + ], + "type": "object" } - } - }, - "tls": { + ], + "required": [] + }, + "required": [], + "title": "paths", "type": "array" - } - } - }, - "metrics": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" + } }, - "serviceMonitor": { - "type": "object", - "properties": { - "additionalLabels": { - "type": "object" - }, - "enabled": { - "type": "boolean" - } - } - } + "required": [ + "host", + "paths" + ], + "type": "object" + } + ], + "required": [] + }, + "required": [], + "title": "hosts", + "type": "array" + }, + "tls": { + "items": { + "required": [] + }, + "required": [], + "title": "tls", + "type": "array" + } + }, + "required": [ + "enabled", + "className", + "annotations", + "hosts", + "tls" + ], + "title": "ingress", + "type": "object" + }, + "metrics": { + "properties": { + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" + }, + "serviceMonitor": { + "properties": { + "additionalLabels": { + "required": [], + "title": "additionalLabels", + "type": "object" + }, + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" } + }, + "required": [ + "enabled", + "additionalLabels" + ], + "title": "serviceMonitor", + "type": "object" + } + }, + "required": [ + "enabled", + "serviceMonitor" + ], + "title": "metrics", + "type": "object" + }, + "nameOverride": { + "default": "", + "description": "Provide a name in place of `proxysql`", + "required": [], + "title": "nameOverride", + "type": "string" + }, + "nodeSelector": { + "description": "Node labels for pod assignment", + "required": [], + "title": "nodeSelector", + "type": "object" + }, + "podAnnotations": { + "description": "Annotations to be added to pods", + "required": [], + "title": "podAnnotations", + "type": "object" + }, + "podSecurityContext": { + "description": "pod-level security context", + "properties": { + "fsGroup": { + "default": 999, + "required": [], + "title": "fsGroup", + "type": "integer" }, - "nameOverride": { - "type": "string" + "runAsGroup": { + "default": 999, + "required": [], + "title": "runAsGroup", + "type": "integer" }, - "nodeSelector": { - "type": "object" + "runAsNonRoot": { + "default": true, + "required": [], + "title": "runAsNonRoot", + "type": "boolean" }, - "podAnnotations": { - "type": "object" + "runAsUser": { + "default": 999, + "required": [], + "title": "runAsUser", + "type": "integer" + } + }, + "required": [ + "runAsNonRoot", + "fsGroup", + "runAsUser", + "runAsGroup" + ], + "title": "podSecurityContext", + "type": "object" + }, + "proxysql": { + "properties": { + "admin": { + "properties": { + "password": { + "default": "admin", + "required": [], + "title": "password", + "type": "string" + }, + "user": { + "default": "admin", + "required": [], + "title": "user", + "type": "string" + } + }, + "required": [ + "user", + "password" + ], + "title": "admin", + "type": "object" }, - "podSecurityContext": { - "type": "object", - "properties": { - "fsGroup": { - "type": "integer" + "cluster": { + "properties": { + "claim": { + "properties": { + "accessModes": { + "items": { + "anyOf": [ + { + "required": [], + "type": "string" + } + ], + "required": [] + }, + "required": [], + "title": "accessModes", + "type": "array" }, - "runAsGroup": { - "type": "integer" + "enabled": { + "default": true, + "required": [], + "title": "enabled", + "type": "boolean" }, - "runAsNonRoot": { - "type": "boolean" + "size": { + "default": "1Gi", + "required": [], + "title": "size", + "type": "string" }, - "runAsUser": { - "type": "integer" + "storageClassName": { + "default": "default", + "required": [], + "title": "storageClassName", + "type": "string" } + }, + "required": [ + "enabled", + "accessModes", + "storageClassName", + "size" + ], + "title": "claim", + "type": "object" + }, + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" + }, + "password": { + "default": "cluster", + "required": [], + "title": "password", + "type": "string" + }, + "user": { + "default": "cluster", + "required": [], + "title": "user", + "type": "string" } + }, + "required": [ + "user", + "password", + "enabled", + "claim" + ], + "title": "cluster", + "type": "object" }, - "proxysql": { - "type": "object", - "properties": { - "admin": { - "type": "object", - "properties": { - "password": { - "type": "string" - }, - "user": { - "type": "string" - } - } - }, - "cluster": { - "type": "object", - "properties": { - "claim": { - "type": "object", - "properties": { - "accessModes": { - "type": "array", - "items": { - "type": "string" - } - }, - "enabled": { - "type": "boolean" - }, - "size": { - "type": "string" - }, - "storageClassName": { - "type": "string" - } - } - }, - "enabled": { - "type": "boolean" - }, - "password": { - "type": "string" - }, - "user": { - "type": "string" - } - } - }, - "monitor": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "replicationLagInterval": { - "type": "integer" - }, - "replicationLagTimeout": { - "type": "integer" - }, - "slaveLagWhenNull": { - "type": "integer" - }, - "writerAsReader": { - "type": "boolean" - } - } + "monitor": { + "properties": { + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" + }, + "replicationLagInterval": { + "default": 10000, + "required": [], + "title": "replicationLagInterval", + "type": "integer" + }, + "replicationLagTimeout": { + "default": 1500, + "required": [], + "title": "replicationLagTimeout", + "type": "integer" + }, + "slaveLagWhenNull": { + "default": 60, + "required": [], + "title": "slaveLagWhenNull", + "type": "integer" + }, + "writerAsReader": { + "default": true, + "required": [], + "title": "writerAsReader", + "type": "boolean" + } + }, + "required": [ + "enabled", + "writerAsReader", + "replicationLagInterval", + "replicationLagTimeout", + "slaveLagWhenNull" + ], + "title": "monitor", + "type": "object" + }, + "mysql": { + "properties": { + "connectionMaxAgeMS": { + "default": 0, + "required": [], + "title": "connectionMaxAgeMS", + "type": "integer" + }, + "galera": { + "properties": { + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" }, - "mysql": { - "type": "object", - "properties": { - "connectionMaxAgeMS": { - "type": "integer" - }, - "galera": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "maxWriters": { - "type": "integer" - }, - "writerAsReader": { - "type": "boolean" - } - } - }, - "maxConnections": { - "type": "integer" - }, - "port": { - "type": "integer" - }, - "queryRetriesOnFailure": { - "type": "integer" - }, - "queyCacheSizeMB": { - "type": "integer" - }, - "readWriteSplit": { - "type": "boolean" - }, - "servers": { - "type": "array" - }, - "slave": { - "type": "object", - "properties": { - "checkType": { - "type": "string" - }, - "enabled": { - "type": "boolean" - } - } - }, - "users": { - "type": "array" - }, - "version": { - "type": "string" - }, - "waitTimeout": { - "type": "integer" - } - } + "maxWriters": { + "default": 1, + "required": [], + "title": "maxWriters", + "type": "integer" }, - "port": { - "type": "integer" + "writerAsReader": { + "default": true, + "required": [], + "title": "writerAsReader", + "type": "boolean" + } + }, + "required": [ + "enabled", + "maxWriters", + "writerAsReader" + ], + "title": "galera", + "type": "object" + }, + "maxConnections": { + "default": 2048, + "required": [], + "title": "maxConnections", + "type": "integer" + }, + "port": { + "default": 3306, + "required": [], + "title": "port", + "type": "integer" + }, + "queryRetriesOnFailure": { + "default": 2, + "required": [], + "title": "queryRetriesOnFailure", + "type": "integer" + }, + "queyCacheSizeMB": { + "default": 256, + "required": [], + "title": "queyCacheSizeMB", + "type": "integer" + }, + "readWriteSplit": { + "default": true, + "required": [], + "title": "readWriteSplit", + "type": "boolean" + }, + "servers": { + "items": { + "required": [] + }, + "required": [], + "title": "servers", + "type": "array" + }, + "slave": { + "description": "- username: name\n password: pwd\n maxConnections: 10000\n readOnly: false", + "properties": { + "checkType": { + "default": "read_only", + "required": [], + "title": "checkType", + "type": "string" }, - "web": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "password": { - "type": "string" - }, - "port": { - "type": "integer" - }, - "user": { - "type": "string" - } - } + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" } + }, + "required": [ + "enabled", + "checkType" + ], + "title": "slave", + "type": "object" + }, + "users": { + "description": "- isWriter: true\n hostname: example.mysql.org\n port: 3306\n maxConnections: 1000\n compression: false\n weight: 1000", + "items": { + "required": [] + }, + "required": [], + "title": "users", + "type": "array" + }, + "version": { + "default": "5.7.34", + "required": [], + "title": "version", + "type": "string" + }, + "waitTimeout": { + "default": 28800000, + "required": [], + "title": "waitTimeout", + "type": "integer" } + }, + "required": [ + "version", + "port", + "maxConnections", + "connectionMaxAgeMS", + "queyCacheSizeMB", + "queryRetriesOnFailure", + "waitTimeout", + "readWriteSplit", + "servers", + "users", + "slave", + "galera" + ], + "title": "mysql", + "type": "object" }, - "replicaCount": { - "type": "integer" - }, - "resources": { - "type": "object" + "port": { + "default": 6032, + "required": [], + "title": "port", + "type": "integer" }, - "revisionHistoryLimit": { - "type": "integer" - }, - "securityContext": { - "type": "object" - }, - "service": { - "type": "object", - "properties": { - "type": { - "type": "string" - } + "web": { + "description": "configmap: proxysql-configmap-name", + "properties": { + "enabled": { + "default": true, + "required": [], + "title": "enabled", + "type": "boolean" + }, + "password": { + "default": "sadmin", + "required": [], + "title": "password", + "type": "string" + }, + "port": { + "default": 443, + "required": [], + "title": "port", + "type": "integer" + }, + "user": { + "default": "sadmin", + "required": [], + "title": "user", + "type": "string" } + }, + "required": [ + "enabled", + "port", + "user", + "password" + ], + "title": "web", + "type": "object" + } + }, + "required": [ + "web", + "admin", + "port", + "cluster", + "mysql", + "monitor" + ], + "title": "proxysql", + "type": "object" + }, + "replicaCount": { + "default": 1, + "description": "Number of replicas", + "required": [], + "title": "replicaCount", + "type": "integer" + }, + "resources": { + "description": "Resource limits and requests for the headwind pods.", + "required": [], + "title": "resources", + "type": "object" + }, + "revisionHistoryLimit": { + "default": 10, + "description": "The number of old ReplicaSets to retain", + "required": [], + "title": "revisionHistoryLimit", + "type": "integer" + }, + "securityContext": { + "description": "container-level security context", + "required": [], + "title": "securityContext", + "type": "object" + }, + "service": { + "properties": { + "type": { + "default": "ClusterIP", + "description": "Kubernetes service type", + "required": [], + "title": "type", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "service", + "type": "object" + }, + "serviceAccount": { + "properties": { + "annotations": { + "description": "Annotations to add to the service account", + "required": [], + "title": "annotations", + "type": "object" }, - "serviceAccount": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "create": { - "type": "boolean" - }, - "name": { - "type": "string" - } - } + "create": { + "default": true, + "description": "Specifies whether a service account should be created", + "required": [], + "title": "create", + "type": "boolean" }, - "tolerations": { - "type": "array" + "name": { + "default": "", + "description": "The name of the service account to use.\nIf not set and create is true, a name is generated using the fullname template", + "required": [], + "title": "name", + "type": "string" } + }, + "required": [ + "create", + "annotations", + "name" + ], + "title": "serviceAccount", + "type": "object" + }, + "tolerations": { + "description": "Toleration labels for pod assignment", + "items": { + "required": [] + }, + "required": [], + "title": "tolerations", + "type": "array" } + }, + "required": [ + "nameOverride", + "fullnameOverride", + "image", + "imagePullSecrets", + "replicaCount", + "revisionHistoryLimit", + "serviceAccount", + "podAnnotations", + "podSecurityContext", + "securityContext", + "service", + "ingress", + "resources", + "autoscaling", + "nodeSelector", + "tolerations", + "affinity", + "proxysql", + "metrics" + ], + "type": "object" } diff --git a/charts/proxyweb/values.schema.json b/charts/proxyweb/values.schema.json index 0958906a..28240a7b 100644 --- a/charts/proxyweb/values.schema.json +++ b/charts/proxyweb/values.schema.json @@ -1,247 +1,728 @@ { - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "affinity": { - "type": "object" + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "affinity": { + "description": "Affinity settings for pod assignment", + "required": [], + "title": "affinity", + "type": "object" + }, + "autoscaling": { + "properties": { + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" }, - "autoscaling": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" + "maxReplicas": { + "default": 100, + "required": [], + "title": "maxReplicas", + "type": "integer" + }, + "minReplicas": { + "default": 1, + "required": [], + "title": "minReplicas", + "type": "integer" + }, + "targetCPUUtilizationPercentage": { + "default": 80, + "required": [], + "title": "targetCPUUtilizationPercentage", + "type": "integer" + } + }, + "required": [ + "enabled", + "minReplicas", + "maxReplicas", + "targetCPUUtilizationPercentage" + ], + "title": "autoscaling", + "type": "object" + }, + "configuration": { + "properties": { + "config": { + "properties": { + "flask": { + "properties": { + "SECRET_KEY": { + "default": "kaNGSGSLrEzaplUL", + "required": [], + "title": "SECRET_KEY", + "type": "string" }, - "maxReplicas": { - "type": "integer" + "SEND_FILE_MAX_AGE_DEFAULT": { + "default": 0, + "required": [], + "title": "SEND_FILE_MAX_AGE_DEFAULT", + "type": "integer" + }, + "TEMPLATES_AUTO_RELOAD": { + "default": "True", + "required": [], + "title": "TEMPLATES_AUTO_RELOAD", + "type": "string" + } + }, + "required": [ + "SECRET_KEY", + "SEND_FILE_MAX_AGE_DEFAULT", + "TEMPLATES_AUTO_RELOAD" + ], + "title": "flask", + "type": "object" + }, + "global": { + "properties": { + "default_server": { + "default": "proxysql", + "required": [], + "title": "default_server", + "type": "string" }, - "minReplicas": { - "type": "integer" + "hide_tables": { + "items": { + "anyOf": [ + { + "required": [], + "type": "string" + } + ], + "required": [] + }, + "required": [], + "title": "hide_tables", + "type": "array" }, - "targetCPUUtilizationPercentage": { - "type": "integer" + "read_only": { + "default": false, + "required": [], + "title": "read_only", + "type": "boolean" } - } - }, - "configuration": { - "type": "object", - "properties": { - "config": { - "type": "object", - "properties": { - "flask": { - "type": "object", - "properties": { - "SECRET_KEY": { - "type": "string" - }, - "SEND_FILE_MAX_AGE_DEFAULT": { - "type": "integer" - }, - "TEMPLATES_AUTO_RELOAD": { - "type": "string" - } - } + }, + "required": [ + "hide_tables", + "default_server", + "read_only" + ], + "title": "global", + "type": "object" + }, + "misc": { + "properties": { + "adhoc_report": { + "description": "List of reports that should be displayed", + "items": { + "anyOf": [ + { + "properties": { + "info": { + "default": "Examining queries with big sum_time(number of execution * time to run) is a good place to start when optimizing queries.", + "required": [], + "title": "info", + "type": "string" + }, + "sql": { + "default": "SELECT digest,username,schemaname, SUBSTR(digest_text,0,80),count_star,sum_time/1000/1000 as sum_time_sec FROM stats_mysql_query_digest WHERE digest_text LIKE 'SELECT%' ORDER BY sum_time DESC LIMIT 10;", + "required": [], + "title": "sql", + "type": "string" + }, + "title": { + "default": "Top 10 SELECTs by sum_time", + "required": [], + "title": "title", + "type": "string" + } }, - "global": { - "type": "object", - "properties": { - "default_server": { - "type": "string" - }, - "hide_tables": { - "type": "array", - "items": { - "type": "string" - } - }, - "read_only": { - "type": "boolean" - } - } + "required": [ + "title", + "info", + "sql" + ], + "type": "object" + }, + { + "properties": { + "info": { + "default": "Caching/rewriting/even removing frequently running queries can improve the overall performance significantly. ProxySQL support all the mentioned methods. Example: it's a good idea to cache queries often issued by connectors like `^SELECT @@max_allowed_packet`", + "required": [], + "title": "info", + "type": "string" + }, + "sql": { + "default": "SELECT digest,username,schemaname, SUBSTR(digest_text,0,80),count_star,sum_time FROM stats_mysql_query_digest WHERE digest_text LIKE 'SELECT%' ORDER BY count_star DESC LIMIT 10;", + "required": [], + "title": "sql", + "type": "string" + }, + "title": { + "default": "Top 10 SELECTs by count_star", + "required": [], + "title": "title", + "type": "string" + } }, - "misc": { - "type": "object", - "properties": { - "adhoc_report": { - "type": "array", - "items": { - "type": "object", - "properties": { - "info": { - "type": "string" - }, - "sql": { - "type": "string" - }, - "title": { - "type": "string" - } - } - } - } - } + "required": [ + "title", + "info", + "sql" + ], + "type": "object" + }, + { + "properties": { + "info": { + "default": "Caching/rewriting/even removing frequently running queries can improve the overall performance significantly. ProxySQL support all the mentioned methods. Example: it's a good idea to cache queries often issued by connectors like `^SELECT @@max_allowed_packet`", + "required": [], + "title": "info", + "type": "string" + }, + "sql": { + "default": "SELECT digest,username,schemaname, SUBSTR(digest_text,0,80),count_star,sum_time, (sum_time/count_star)/1000 as avg_time_ms FROM stats_mysql_query_digest WHERE digest_text LIKE 'SELECT%' ORDER BY avg_time_ms DESC LIMIT 10;", + "required": [], + "title": "sql", + "type": "string" + }, + "title": { + "default": "Top 10 SELECTs by avg_time", + "required": [], + "title": "title", + "type": "string" + } + }, + "required": [ + "title", + "info", + "sql" + ], + "type": "object" + }, + { + "properties": { + "info": { + "default": "This helps identify the most frequently running writes", + "required": [], + "title": "info", + "type": "string" + }, + "sql": { + "default": "SELECT digest,username,schemaname, SUBSTR(digest_text,0,80),count_star,sum_time FROM stats_mysql_query_digest where digest_text LIKE 'INSERT%' or digest_text like 'DELETE%' or digest_text like 'UPDATE%' order by count_star DESC LIMIT 10;", + "required": [], + "title": "sql", + "type": "string" + }, + "title": { + "default": "Top 10 writes", + "required": [], + "title": "title", + "type": "string" + } + }, + "required": [ + "title", + "info", + "sql" + ], + "type": "object" + }, + { + "properties": { + "info": { + "default": "This helps identify the schemas getting the most writes", + "required": [], + "title": "info", + "type": "string" + }, + "sql": { + "default": "SELECT schemaname, sum(sum_time) as time_spent, sum(count_star) as sum_count_star FROM stats_mysql_query_digest where digest_text LIKE 'INSERT%' or digest_text like 'DELETE%' or digest_text like 'UPDATE%' group by schemaname order by time_spent desc;", + "required": [], + "title": "sql", + "type": "string" + }, + "title": { + "default": "Schemas with the most DMLs", + "required": [], + "title": "title", + "type": "string" + } }, - "servers": { - "type": "object", + "required": [ + "title", + "info", + "sql" + ], + "type": "object" + }, + { + "properties": { + "info": { + "default": "List of the schemas with the highest overall sum_time", + "required": [], + "title": "info", + "type": "string" + }, + "sql": { + "default": "SELECT schemaname, sum(sum_time) as time_spent FROM stats_mysql_query_digest group by schemaname order by time_spent desc limit 5;", + "required": [], + "title": "sql", + "type": "string" + }, + "title": { + "default": "Top 5 schemas by sum_time", + "required": [], + "title": "title", + "type": "string" + } + }, + "required": [ + "title", + "info", + "sql" + ], + "type": "object" + }, + { + "properties": { + "info": { + "default": "Don't send selects to the readers without checking the impact first as the app might read back the data immediately after writing it.", + "required": [], + "title": "info", + "type": "string" + }, + "sql": { + "default": "select \"replace into mysql_query_rules (username,schemaname,destination_hostgroup,active,apply,digest) values('\" || st.username || \"','\" || st.schemaname || \"',12,1,1,'\" || st.digest || \"');\" from stats_mysql_query_digest st left join runtime_mysql_query_rules qr on st.digest = qr.digest where qr.rule_id is null and digest_text LIKE 'SELECT%' ORDER BY count_star desc limit 5;", + "required": [], + "title": "sql", + "type": "string" + }, + "title": { + "default": "Send the top 5 SELECTS to the readers", + "required": [], + "title": "title", + "type": "string" + } + }, + "required": [ + "title", + "info", + "sql" + ], + "type": "object" + } + ], + "required": [] + }, + "required": [], + "title": "adhoc_report", + "type": "array" + } + }, + "required": [ + "adhoc_report" + ], + "title": "misc", + "type": "object" + }, + "servers": { + "properties": { + "proxysql": { + "properties": { + "dsn": { + "items": { + "anyOf": [ + { "properties": { - "proxysql": { - "type": "object", - "properties": { - "dsn": { - "type": "array", - "items": { - "type": "object", - "properties": { - "db": { - "type": "string" - }, - "host": { - "type": "string" - }, - "passwd": { - "type": "string" - }, - "port": { - "type": "string" - }, - "user": { - "type": "string" - } - } - } - } - } - } - } - } + "db": { + "default": "main", + "required": [], + "title": "db", + "type": "string" + }, + "host": { + "default": "127.0.0.1", + "required": [], + "title": "host", + "type": "string" + }, + "passwd": { + "default": "sadmin", + "required": [], + "title": "passwd", + "type": "string" + }, + "port": { + "default": "6032", + "required": [], + "title": "port", + "type": "string" + }, + "user": { + "default": "sadmin", + "required": [], + "title": "user", + "type": "string" + } + }, + "required": [ + "host", + "user", + "passwd", + "port", + "db" + ], + "type": "object" + } + ], + "required": [] + }, + "required": [], + "title": "dsn", + "type": "array" } - }, - "existingSecret": { - "type": "string" + }, + "required": [ + "dsn" + ], + "title": "proxysql", + "type": "object" } + }, + "required": [ + "proxysql" + ], + "title": "servers", + "type": "object" } + }, + "required": [ + "flask", + "global", + "misc", + "servers" + ], + "title": "config", + "type": "object" }, - "fullnameOverride": { - "type": "string" + "existingSecret": { + "default": "", + "required": [], + "title": "existingSecret", + "type": "string" + } + }, + "required": [ + "existingSecret", + "config" + ], + "title": "configuration", + "type": "object" + }, + "fullnameOverride": { + "default": "", + "description": "String to fully override `\"proxyweb.fullname\"`", + "required": [], + "title": "fullnameOverride", + "type": "string" + }, + "global": { + "description": "Global values are values that can be accessed from any chart or subchart by exactly the same name.", + "required": [], + "title": "global", + "type": "object" + }, + "image": { + "properties": { + "pullPolicy": { + "default": "Always", + "description": "image pull policy", + "required": [], + "title": "pullPolicy", + "type": "string" }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "type": "string" - }, - "repository": { - "type": "string" - }, - "tag": { - "type": "string" - } - } + "repository": { + "default": "proxyweb/proxyweb", + "description": "image repository", + "required": [], + "title": "repository", + "type": "string" + }, + "tag": { + "default": "latest", + "description": "Overrides the image tag", + "required": [], + "title": "tag", + "type": "string" + } + }, + "required": [ + "repository", + "pullPolicy", + "tag" + ], + "title": "image", + "type": "object" + }, + "imagePullSecrets": { + "description": "If defined, uses a Secret to pull an image from a private Docker registry or repository.", + "items": { + "required": [] + }, + "required": [], + "title": "imagePullSecrets", + "type": "array" + }, + "ingress": { + "properties": { + "annotations": { + "required": [], + "title": "annotations", + "type": "object" }, - "imagePullSecrets": { - "type": "array" + "className": { + "default": "", + "required": [], + "title": "className", + "type": "string" }, - "ingress": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "className": { + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" + }, + "hosts": { + "description": "kubernetes.io/ingress.class: nginx\nkubernetes.io/tls-acme: \"true\"", + "items": { + "anyOf": [ + { + "properties": { + "host": { + "default": "chart-example.local", + "required": [], + "title": "host", "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "hosts": { - "type": "array", + }, + "paths": { "items": { - "type": "object", - "properties": { - "host": { - "type": "string" + "anyOf": [ + { + "properties": { + "path": { + "default": "/", + "required": [], + "title": "path", + "type": "string" }, - "paths": { - "type": "array", - "items": { - "type": "object", - "properties": { - "path": { - "type": "string" - }, - "pathType": { - "type": "string" - } - } - } + "pathType": { + "default": "ImplementationSpecific", + "required": [], + "title": "pathType", + "type": "string" } + }, + "required": [ + "path", + "pathType" + ], + "type": "object" } - } - }, - "tls": { + ], + "required": [] + }, + "required": [], + "title": "paths", "type": "array" - } - } - }, - "nameOverride": { - "type": "string" - }, - "nodeSelector": { - "type": "object" - }, - "podAnnotations": { - "type": "object" - }, - "podSecurityContext": { - "type": "object" - }, - "psp": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - } - }, - "replicaCount": { - "type": "integer" - }, - "resources": { - "type": "object" - }, - "revisionHistoryLimit": { - "type": "integer" + } + }, + "required": [ + "host", + "paths" + ], + "type": "object" + } + ], + "required": [] + }, + "required": [], + "title": "hosts", + "type": "array" }, - "securityContext": { - "type": "object" + "tls": { + "items": { + "required": [] + }, + "required": [], + "title": "tls", + "type": "array" + } + }, + "required": [ + "enabled", + "className", + "annotations", + "hosts", + "tls" + ], + "title": "ingress", + "type": "object" + }, + "nameOverride": { + "default": "", + "description": "Provide a name in place of `proxyweb`", + "required": [], + "title": "nameOverride", + "type": "string" + }, + "nodeSelector": { + "description": "Node labels for pod assignment", + "required": [], + "title": "nodeSelector", + "type": "object" + }, + "podAnnotations": { + "description": "Annotations to be added to pods", + "required": [], + "title": "podAnnotations", + "type": "object" + }, + "podSecurityContext": { + "description": "pod-level security context", + "required": [], + "title": "podSecurityContext", + "type": "object" + }, + "psp": { + "properties": { + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" + } + }, + "required": [ + "enabled" + ], + "title": "psp", + "type": "object" + }, + "replicaCount": { + "default": 1, + "description": "Number of replicas", + "required": [], + "title": "replicaCount", + "type": "integer" + }, + "resources": { + "description": "Resource limits and requests for the headwind pods.", + "required": [], + "title": "resources", + "type": "object" + }, + "revisionHistoryLimit": { + "default": 10, + "description": "The number of old ReplicaSets to retain", + "required": [], + "title": "revisionHistoryLimit", + "type": "integer" + }, + "securityContext": { + "description": "container-level security context", + "required": [], + "title": "securityContext", + "type": "object" + }, + "service": { + "properties": { + "port": { + "default": 80, + "description": "Kubernetes port where service is exposed", + "required": [], + "title": "port", + "type": "integer" }, - "service": { - "type": "object", - "properties": { - "port": { - "type": "integer" - }, - "type": { - "type": "string" - } - } + "type": { + "default": "ClusterIP", + "description": "Kubernetes service type", + "required": [], + "title": "type", + "type": "string" + } + }, + "required": [ + "type", + "port" + ], + "title": "service", + "type": "object" + }, + "serviceAccount": { + "properties": { + "annotations": { + "description": "Annotations to add to the service account", + "required": [], + "title": "annotations", + "type": "object" }, - "serviceAccount": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "create": { - "type": "boolean" - }, - "name": { - "type": "string" - } - } + "create": { + "default": true, + "description": "Specifies whether a service account should be created", + "required": [], + "title": "create", + "type": "boolean" }, - "tolerations": { - "type": "array" + "name": { + "default": "", + "description": "The name of the service account to use.\nIf not set and create is true, a name is generated using the fullname template", + "required": [], + "title": "name", + "type": "string" } + }, + "required": [ + "create", + "annotations", + "name" + ], + "title": "serviceAccount", + "type": "object" + }, + "tolerations": { + "description": "Toleration labels for pod assignment", + "items": { + "required": [] + }, + "required": [], + "title": "tolerations", + "type": "array" } + }, + "required": [ + "nameOverride", + "fullnameOverride", + "image", + "imagePullSecrets", + "replicaCount", + "revisionHistoryLimit", + "serviceAccount", + "podAnnotations", + "podSecurityContext", + "securityContext", + "service", + "ingress", + "resources", + "autoscaling", + "nodeSelector", + "tolerations", + "affinity", + "psp", + "configuration" + ], + "type": "object" } diff --git a/charts/shlink-backend/values.schema.json b/charts/shlink-backend/values.schema.json index 71b2b86c..f33f13af 100644 --- a/charts/shlink-backend/values.schema.json +++ b/charts/shlink-backend/values.schema.json @@ -1,247 +1,578 @@ { - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "affinity": { - "type": "object" + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "affinity": { + "description": "Affinity settings for pod assignment", + "required": [], + "title": "affinity", + "type": "object" + }, + "autoscaling": { + "properties": { + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" + }, + "maxReplicas": { + "default": 100, + "required": [], + "title": "maxReplicas", + "type": "integer" + }, + "minReplicas": { + "default": 1, + "required": [], + "title": "minReplicas", + "type": "integer" }, - "autoscaling": { - "type": "object", + "targetCPUUtilizationPercentage": { + "default": 80, + "required": [], + "title": "targetCPUUtilizationPercentage", + "type": "integer" + } + }, + "required": [ + "enabled", + "minReplicas", + "maxReplicas", + "targetCPUUtilizationPercentage" + ], + "title": "autoscaling", + "type": "object" + }, + "env": { + "description": "see https://shlink.io/documentation/environment-variables/ for a complete list", + "items": { + "anyOf": [ + { "properties": { - "enabled": { - "type": "boolean" - }, - "maxReplicas": { - "type": "integer" - }, - "minReplicas": { - "type": "integer" - }, - "targetCPUUtilizationPercentage": { - "type": "integer" - } - } + "name": { + "default": "DEFAULT_DOMAIN", + "required": [], + "title": "name", + "type": "string" + }, + "value": { + "default": "doma.in", + "required": [], + "title": "value", + "type": "string" + } + }, + "required": [ + "name", + "value" + ], + "type": "object" + }, + { + "properties": { + "name": { + "default": "IS_HTTPS_ENABLED", + "required": [], + "title": "name", + "type": "string" + }, + "value": { + "default": "false", + "required": [], + "title": "value", + "type": "string" + } + }, + "required": [ + "name", + "value" + ], + "type": "object" + } + ], + "required": [] + }, + "required": [], + "title": "env", + "type": "array" + }, + "fullnameOverride": { + "default": "", + "description": "String to fully override `\"shlink-backend.fullname\"`", + "required": [], + "title": "fullnameOverride", + "type": "string" + }, + "global": { + "description": "Global values are values that can be accessed from any chart or subchart by exactly the same name.", + "required": [], + "title": "global", + "type": "object" + }, + "image": { + "properties": { + "pullPolicy": { + "default": "Always", + "description": "image pull policy", + "required": [], + "title": "pullPolicy", + "type": "string" }, - "env": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - } - } - } + "repository": { + "default": "shlinkio/shlink", + "description": "image repository", + "required": [], + "title": "repository", + "type": "string" }, - "fullnameOverride": { - "type": "string" + "tag": { + "default": "3.7.4", + "description": "Overrides the image tag", + "required": [], + "title": "tag", + "type": "string" + } + }, + "required": [ + "repository", + "pullPolicy", + "tag" + ], + "title": "image", + "type": "object" + }, + "imagePullSecrets": { + "description": "If defined, uses a Secret to pull an image from a private Docker registry or repository.", + "items": { + "required": [] + }, + "required": [], + "title": "imagePullSecrets", + "type": "array" + }, + "ingress": { + "properties": { + "annotations": { + "required": [], + "title": "annotations", + "type": "object" }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "type": "string" - }, - "repository": { - "type": "string" - }, - "tag": { - "type": "string" - } - } + "className": { + "default": "", + "required": [], + "title": "className", + "type": "string" }, - "imagePullSecrets": { - "type": "array" + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" }, - "ingress": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "className": { + "hosts": { + "description": "kubernetes.io/ingress.class: nginx\nkubernetes.io/tls-acme: \"true\"", + "items": { + "anyOf": [ + { + "properties": { + "host": { + "default": "chart-example.local", + "required": [], + "title": "host", "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "hosts": { - "type": "array", + }, + "paths": { "items": { - "type": "object", - "properties": { - "host": { - "type": "string" + "anyOf": [ + { + "properties": { + "path": { + "default": "/", + "required": [], + "title": "path", + "type": "string" }, - "paths": { - "type": "array", - "items": { - "type": "object", - "properties": { - "path": { - "type": "string" - }, - "pathType": { - "type": "string" - } - } - } + "pathType": { + "default": "ImplementationSpecific", + "required": [], + "title": "pathType", + "type": "string" } + }, + "required": [ + "path", + "pathType" + ], + "type": "object" } - } - }, - "tls": { + ], + "required": [] + }, + "required": [], + "title": "paths", "type": "array" - } - } - }, - "mariadb": { - "type": "object", - "properties": { - "auth": { - "type": "object", - "properties": { - "database": { - "type": "string" - }, - "password": { - "type": "string" - }, - "username": { - "type": "string" - } - } + } }, - "enabled": { - "type": "boolean" - } - } + "required": [ + "host", + "paths" + ], + "type": "object" + } + ], + "required": [] + }, + "required": [], + "title": "hosts", + "type": "array" }, - "mysql": { - "type": "object", - "properties": { - "auth": { - "type": "object", - "properties": { - "database": { - "type": "string" - }, - "password": { - "type": "string" - }, - "username": { - "type": "string" - } - } - }, - "enabled": { - "type": "boolean" - } + "tls": { + "items": { + "required": [] + }, + "required": [], + "title": "tls", + "type": "array" + } + }, + "required": [ + "enabled", + "className", + "annotations", + "hosts", + "tls" + ], + "title": "ingress", + "type": "object" + }, + "mariadb": { + "properties": { + "auth": { + "properties": { + "database": { + "default": "shlink", + "required": [], + "title": "database", + "type": "string" + }, + "password": { + "default": "shlink", + "required": [], + "title": "password", + "type": "string" + }, + "username": { + "default": "shlink", + "required": [], + "title": "username", + "type": "string" } + }, + "required": [ + "database", + "password", + "username" + ], + "title": "auth", + "type": "object" }, - "nameOverride": { - "type": "string" - }, - "nodeSelector": { - "type": "object" - }, - "podAnnotations": { - "type": "object" - }, - "podLabels": { - "type": "object" - }, - "podSecurityContext": { - "type": "object" - }, - "postgresql": { - "type": "object", - "properties": { - "auth": { - "type": "object", - "properties": { - "database": { - "type": "string" - }, - "password": { - "type": "string" - }, - "username": { - "type": "string" - } - } - }, - "enabled": { - "type": "boolean" - } + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" + } + }, + "required": [ + "enabled", + "auth" + ], + "title": "mariadb", + "type": "object" + }, + "mysql": { + "properties": { + "auth": { + "properties": { + "database": { + "default": "shlink", + "required": [], + "title": "database", + "type": "string" + }, + "password": { + "default": "shlink", + "required": [], + "title": "password", + "type": "string" + }, + "username": { + "default": "shlink", + "required": [], + "title": "username", + "type": "string" } + }, + "required": [ + "database", + "password", + "username" + ], + "title": "auth", + "type": "object" }, - "rabbitmq": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" + } + }, + "required": [ + "enabled", + "auth" + ], + "title": "mysql", + "type": "object" + }, + "nameOverride": { + "default": "", + "description": "Provide a name in place of `shlink-backend`", + "required": [], + "title": "nameOverride", + "type": "string" + }, + "nodeSelector": { + "description": "Node labels for pod assignment", + "required": [], + "title": "nodeSelector", + "type": "object" + }, + "podAnnotations": { + "description": "Annotations to be added to pods", + "required": [], + "title": "podAnnotations", + "type": "object" + }, + "podLabels": { + "description": "Labels to be added to pods", + "required": [], + "title": "podLabels", + "type": "object" + }, + "podSecurityContext": { + "description": "pod-level security context", + "required": [], + "title": "podSecurityContext", + "type": "object" + }, + "postgresql": { + "properties": { + "auth": { + "properties": { + "database": { + "default": "shlink", + "required": [], + "title": "database", + "type": "string" + }, + "password": { + "default": "shlink", + "required": [], + "title": "password", + "type": "string" + }, + "username": { + "default": "shlink", + "required": [], + "title": "username", + "type": "string" } + }, + "required": [ + "database", + "password", + "username" + ], + "title": "auth", + "type": "object" }, - "redis": { - "type": "object", - "properties": { - "auth": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - } - }, - "enabled": { - "type": "boolean" - } + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" + } + }, + "required": [ + "enabled", + "auth" + ], + "title": "postgresql", + "type": "object" + }, + "rabbitmq": { + "properties": { + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" + } + }, + "required": [ + "enabled" + ], + "title": "rabbitmq", + "type": "object" + }, + "redis": { + "properties": { + "auth": { + "properties": { + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" } + }, + "required": [ + "enabled" + ], + "title": "auth", + "type": "object" }, - "replicaCount": { - "type": "integer" - }, - "resources": { - "type": "object" - }, - "revisionHistoryLimit": { - "type": "integer" - }, - "securityContext": { - "type": "object" + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" + } + }, + "required": [ + "enabled", + "auth" + ], + "title": "redis", + "type": "object" + }, + "replicaCount": { + "default": 1, + "description": "Number of replicas", + "required": [], + "title": "replicaCount", + "type": "integer" + }, + "resources": { + "description": "Resource limits and requests for the headwind pods.", + "required": [], + "title": "resources", + "type": "object" + }, + "revisionHistoryLimit": { + "default": 10, + "description": "The number of old ReplicaSets to retain", + "required": [], + "title": "revisionHistoryLimit", + "type": "integer" + }, + "securityContext": { + "description": "container-level security context", + "required": [], + "title": "securityContext", + "type": "object" + }, + "service": { + "properties": { + "port": { + "default": 80, + "description": "Kubernetes port where service is exposed", + "required": [], + "title": "port", + "type": "integer" }, - "service": { - "type": "object", - "properties": { - "port": { - "type": "integer" - }, - "type": { - "type": "string" - } - } + "type": { + "default": "ClusterIP", + "description": "Kubernetes service type", + "required": [], + "title": "type", + "type": "string" + } + }, + "required": [ + "type", + "port" + ], + "title": "service", + "type": "object" + }, + "serviceAccount": { + "properties": { + "annotations": { + "description": "Annotations to add to the service account", + "required": [], + "title": "annotations", + "type": "object" }, - "serviceAccount": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "create": { - "type": "boolean" - }, - "name": { - "type": "string" - } - } + "create": { + "default": true, + "description": "Specifies whether a service account should be created", + "required": [], + "title": "create", + "type": "boolean" }, - "tolerations": { - "type": "array" + "name": { + "default": "", + "description": "The name of the service account to use.\nIf not set and create is true, a name is generated using the fullname template", + "required": [], + "title": "name", + "type": "string" } + }, + "required": [ + "create", + "annotations", + "name" + ], + "title": "serviceAccount", + "type": "object" + }, + "tolerations": { + "description": "Toleration labels for pod assignment", + "items": { + "required": [] + }, + "required": [], + "title": "tolerations", + "type": "array" } + }, + "required": [ + "nameOverride", + "fullnameOverride", + "image", + "imagePullSecrets", + "replicaCount", + "revisionHistoryLimit", + "serviceAccount", + "podAnnotations", + "podLabels", + "podSecurityContext", + "securityContext", + "service", + "ingress", + "resources", + "autoscaling", + "nodeSelector", + "tolerations", + "affinity", + "env", + "mariadb", + "mysql", + "postgresql", + "rabbitmq", + "redis" + ], + "type": "object" } diff --git a/charts/shlink-web/values.schema.json b/charts/shlink-web/values.schema.json index 92d182fa..a3d79d0f 100644 --- a/charts/shlink-web/values.schema.json +++ b/charts/shlink-web/values.schema.json @@ -1,143 +1,347 @@ { - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "affinity": { - "type": "object" + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "affinity": { + "description": "Affinity settings for pod assignment", + "required": [], + "title": "affinity", + "type": "object" + }, + "autoscaling": { + "properties": { + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" }, - "autoscaling": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "maxReplicas": { - "type": "integer" - }, - "minReplicas": { - "type": "integer" - }, - "targetCPUUtilizationPercentage": { - "type": "integer" - } - } + "maxReplicas": { + "default": 100, + "required": [], + "title": "maxReplicas", + "type": "integer" }, - "configuration": { - "type": "array" + "minReplicas": { + "default": 1, + "required": [], + "title": "minReplicas", + "type": "integer" }, - "fullnameOverride": { - "type": "string" + "targetCPUUtilizationPercentage": { + "default": 80, + "required": [], + "title": "targetCPUUtilizationPercentage", + "type": "integer" + } + }, + "required": [ + "enabled", + "minReplicas", + "maxReplicas", + "targetCPUUtilizationPercentage" + ], + "title": "autoscaling", + "type": "object" + }, + "configuration": { + "items": { + "required": [] + }, + "required": [], + "title": "configuration", + "type": "array" + }, + "fullnameOverride": { + "default": "", + "description": "String to fully override `\"shlink-web.fullname\"`", + "required": [], + "title": "fullnameOverride", + "type": "string" + }, + "global": { + "description": "Global values are values that can be accessed from any chart or subchart by exactly the same name.", + "required": [], + "title": "global", + "type": "object" + }, + "image": { + "properties": { + "pullPolicy": { + "default": "Always", + "description": "image pull policy", + "required": [], + "title": "pullPolicy", + "type": "string" }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "type": "string" - }, - "repository": { - "type": "string" - }, - "tag": { - "type": "string" - } - } + "repository": { + "default": "shlinkio/shlink-web-client", + "description": "image repository", + "required": [], + "title": "repository", + "type": "string" + }, + "tag": { + "default": "4.2.2", + "description": "Overrides the image tag", + "required": [], + "title": "tag", + "type": "string" + } + }, + "required": [ + "repository", + "pullPolicy", + "tag" + ], + "title": "image", + "type": "object" + }, + "imagePullSecrets": { + "description": "If defined, uses a Secret to pull an image from a private Docker registry or repository.", + "items": { + "required": [] + }, + "required": [], + "title": "imagePullSecrets", + "type": "array" + }, + "ingress": { + "properties": { + "annotations": { + "required": [], + "title": "annotations", + "type": "object" }, - "imagePullSecrets": { - "type": "array" + "className": { + "default": "", + "required": [], + "title": "className", + "type": "string" }, - "ingress": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "className": { + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" + }, + "hosts": { + "description": "kubernetes.io/ingress.class: nginx\nkubernetes.io/tls-acme: \"true\"", + "items": { + "anyOf": [ + { + "properties": { + "host": { + "default": "chart-example.local", + "required": [], + "title": "host", "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "hosts": { - "type": "array", + }, + "paths": { "items": { - "type": "object", - "properties": { - "host": { - "type": "string" + "anyOf": [ + { + "properties": { + "path": { + "default": "/", + "required": [], + "title": "path", + "type": "string" }, - "paths": { - "type": "array", - "items": { - "type": "object", - "properties": { - "path": { - "type": "string" - }, - "pathType": { - "type": "string" - } - } - } + "pathType": { + "default": "ImplementationSpecific", + "required": [], + "title": "pathType", + "type": "string" } + }, + "required": [ + "path", + "pathType" + ], + "type": "object" } - } - }, - "tls": { + ], + "required": [] + }, + "required": [], + "title": "paths", "type": "array" - } - } - }, - "nameOverride": { - "type": "string" - }, - "nodeSelector": { - "type": "object" - }, - "podAnnotations": { - "type": "object" - }, - "podSecurityContext": { - "type": "object" - }, - "replicaCount": { - "type": "integer" - }, - "resources": { - "type": "object" - }, - "revisionHistoryLimit": { - "type": "integer" + } + }, + "required": [ + "host", + "paths" + ], + "type": "object" + } + ], + "required": [] + }, + "required": [], + "title": "hosts", + "type": "array" }, - "securityContext": { - "type": "object" + "tls": { + "items": { + "required": [] + }, + "required": [], + "title": "tls", + "type": "array" + } + }, + "required": [ + "enabled", + "className", + "annotations", + "hosts", + "tls" + ], + "title": "ingress", + "type": "object" + }, + "nameOverride": { + "default": "", + "description": "Provide a name in place of `shlink-web`", + "required": [], + "title": "nameOverride", + "type": "string" + }, + "nodeSelector": { + "description": "Node labels for pod assignment", + "required": [], + "title": "nodeSelector", + "type": "object" + }, + "podAnnotations": { + "description": "Annotations to be added to pods", + "required": [], + "title": "podAnnotations", + "type": "object" + }, + "podLabels": { + "description": "Labels to be added to pods", + "required": [], + "title": "podLabels", + "type": "object" + }, + "podSecurityContext": { + "description": "pod-level security context", + "required": [], + "title": "podSecurityContext", + "type": "object" + }, + "replicaCount": { + "default": 1, + "description": "Number of replicas", + "required": [], + "title": "replicaCount", + "type": "integer" + }, + "resources": { + "description": "Resource limits and requests for the headwind pods.", + "required": [], + "title": "resources", + "type": "object" + }, + "revisionHistoryLimit": { + "default": 10, + "description": "The number of old ReplicaSets to retain", + "required": [], + "title": "revisionHistoryLimit", + "type": "integer" + }, + "securityContext": { + "description": "container-level security context", + "required": [], + "title": "securityContext", + "type": "object" + }, + "service": { + "properties": { + "port": { + "default": 80, + "description": "Kubernetes port where service is exposed", + "required": [], + "title": "port", + "type": "integer" }, - "service": { - "type": "object", - "properties": { - "port": { - "type": "integer" - }, - "type": { - "type": "string" - } - } + "type": { + "default": "ClusterIP", + "description": "Kubernetes service type", + "required": [], + "title": "type", + "type": "string" + } + }, + "required": [ + "type", + "port" + ], + "title": "service", + "type": "object" + }, + "serviceAccount": { + "properties": { + "annotations": { + "description": "Annotations to add to the service account", + "required": [], + "title": "annotations", + "type": "object" }, - "serviceAccount": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "create": { - "type": "boolean" - }, - "name": { - "type": "string" - } - } + "create": { + "default": true, + "description": "Specifies whether a service account should be created", + "required": [], + "title": "create", + "type": "boolean" }, - "tolerations": { - "type": "array" + "name": { + "default": "", + "description": "The name of the service account to use.\nIf not set and create is true, a name is generated using the fullname template", + "required": [], + "title": "name", + "type": "string" } + }, + "required": [ + "create", + "annotations", + "name" + ], + "title": "serviceAccount", + "type": "object" + }, + "tolerations": { + "description": "Toleration labels for pod assignment", + "items": { + "required": [] + }, + "required": [], + "title": "tolerations", + "type": "array" } + }, + "required": [ + "nameOverride", + "fullnameOverride", + "image", + "imagePullSecrets", + "replicaCount", + "revisionHistoryLimit", + "serviceAccount", + "podAnnotations", + "podLabels", + "podSecurityContext", + "securityContext", + "service", + "ingress", + "resources", + "autoscaling", + "nodeSelector", + "tolerations", + "affinity", + "configuration" + ], + "type": "object" } diff --git a/charts/skooner/values.schema.json b/charts/skooner/values.schema.json index b2a4241f..d588902f 100644 --- a/charts/skooner/values.schema.json +++ b/charts/skooner/values.schema.json @@ -1,211 +1,491 @@ { - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "affinity": { - "type": "object" + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "affinity": { + "description": "Affinity settings for pod assignment", + "required": [], + "title": "affinity", + "type": "object" + }, + "autoscaling": { + "properties": { + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" }, - "autoscaling": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "maxReplicas": { - "type": "integer" - }, - "minReplicas": { - "type": "integer" - }, - "targetCPUUtilizationPercentage": { - "type": "integer" - } - } + "maxReplicas": { + "default": 100, + "required": [], + "title": "maxReplicas", + "type": "integer" }, - "clusterRoleBinding": { - "type": "object", - "properties": { - "clusterRole": { - "type": "string" - } - } + "minReplicas": { + "default": 1, + "required": [], + "title": "minReplicas", + "type": "integer" }, - "fullnameOverride": { - "type": "string" + "targetCPUUtilizationPercentage": { + "default": 80, + "required": [], + "title": "targetCPUUtilizationPercentage", + "type": "integer" + } + }, + "required": [ + "enabled", + "minReplicas", + "maxReplicas", + "targetCPUUtilizationPercentage" + ], + "title": "autoscaling", + "type": "object" + }, + "clusterRoleBinding": { + "properties": { + "clusterRole": { + "default": "edit", + "description": "Define which ClusterRole to bind to: cluster-admin, edit, view", + "required": [], + "title": "clusterRole", + "type": "string" + } + }, + "required": [ + "clusterRole" + ], + "title": "clusterRoleBinding", + "type": "object" + }, + "fullnameOverride": { + "default": "", + "description": "String to fully override `\"skooner.fullname\"`", + "required": [], + "title": "fullnameOverride", + "type": "string" + }, + "global": { + "description": "Global values are values that can be accessed from any chart or subchart by exactly the same name.", + "required": [], + "title": "global", + "type": "object" + }, + "image": { + "properties": { + "pullPolicy": { + "default": "Always", + "description": "image pull policy", + "required": [], + "title": "pullPolicy", + "type": "string" }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "type": "string" - }, - "repository": { - "type": "string" - }, - "tag": { - "type": "string" - } - } + "repository": { + "default": "ghcr.io/skooner-k8s/skooner", + "description": "image repository", + "required": [], + "title": "repository", + "type": "string" }, - "imagePullSecrets": { - "type": "array" + "tag": { + "default": "stable", + "description": "Overrides the image tag", + "required": [], + "title": "tag", + "type": "string" + } + }, + "required": [ + "repository", + "pullPolicy", + "tag" + ], + "title": "image", + "type": "object" + }, + "imagePullSecrets": { + "description": "If defined, uses a Secret to pull an image from a private Docker registry or repository.", + "items": { + "required": [] + }, + "required": [], + "title": "imagePullSecrets", + "type": "array" + }, + "ingress": { + "properties": { + "annotations": { + "required": [], + "title": "annotations", + "type": "object" }, - "ingress": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "className": { + "className": { + "default": "", + "required": [], + "title": "className", + "type": "string" + }, + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" + }, + "hosts": { + "description": "kubernetes.io/ingress.class: nginx\nkubernetes.io/tls-acme: \"true\"", + "items": { + "anyOf": [ + { + "properties": { + "host": { + "default": "chart-example.local", + "required": [], + "title": "host", "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "hosts": { - "type": "array", + }, + "paths": { "items": { - "type": "object", - "properties": { - "host": { - "type": "string" + "anyOf": [ + { + "properties": { + "path": { + "default": "/", + "required": [], + "title": "path", + "type": "string" }, - "paths": { - "type": "array", - "items": { - "type": "object", - "properties": { - "path": { - "type": "string" - }, - "pathType": { - "type": "string" - } - } - } + "pathType": { + "default": "ImplementationSpecific", + "required": [], + "title": "pathType", + "type": "string" } + }, + "required": [ + "path", + "pathType" + ], + "type": "object" } - } - }, - "tls": { + ], + "required": [] + }, + "required": [], + "title": "paths", "type": "array" - } - } - }, - "nameOverride": { - "type": "string" - }, - "nodeSelector": { - "type": "object", - "properties": { - "kubernetes.io/os": { - "type": "string" - } - } - }, - "oidc": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "provider": { - "type": "object", - "properties": { - "oidcMetadata": { - "type": "string" - }, - "oidcScopes": { - "type": "string" - }, - "oidcUrl": { - "type": "string" - } - } + } }, - "secret": { - "type": "object", - "properties": { - "clientId": { - "type": "string" - }, - "clientSecret": { - "type": "string" - }, - "name": { - "type": "string" - }, - "useExistingSecret": { - "type": "boolean" - } - } - } - } + "required": [ + "host", + "paths" + ], + "type": "object" + } + ], + "required": [] + }, + "required": [], + "title": "hosts", + "type": "array" }, - "podAnnotations": { - "type": "object" - }, - "podSecurityContext": { - "type": "object", - "properties": { - "fsGroup": { - "type": "integer" - } - } - }, - "replicaCount": { - "type": "integer" - }, - "resources": { - "type": "object" - }, - "revisionHistoryLimit": { - "type": "integer" + "tls": { + "items": { + "required": [] + }, + "required": [], + "title": "tls", + "type": "array" + } + }, + "required": [ + "enabled", + "className", + "annotations", + "hosts", + "tls" + ], + "title": "ingress", + "type": "object" + }, + "nameOverride": { + "default": "", + "description": "Provide a name in place of `skooner`", + "required": [], + "title": "nameOverride", + "type": "string" + }, + "nodeSelector": { + "description": "Node labels for pod assignment", + "properties": { + "kubernetes.io/os": { + "default": "linux", + "required": [], + "title": "kubernetes.io/os", + "type": "string" + } + }, + "required": [ + "kubernetes.io/os" + ], + "title": "nodeSelector", + "type": "object" + }, + "oidc": { + "properties": { + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" }, - "securityContext": { - "type": "object", - "properties": { - "runAsNonRoot": { - "type": "boolean" - }, - "runAsUser": { - "type": "integer" - } + "provider": { + "properties": { + "oidcMetadata": { + "default": "", + "required": [], + "title": "oidcMetadata", + "type": "string" + }, + "oidcScopes": { + "default": "openid email", + "required": [], + "title": "oidcScopes", + "type": "string" + }, + "oidcUrl": { + "default": "", + "description": "The URL of the OIDC endpoint.", + "required": [], + "title": "oidcUrl", + "type": "string" } + }, + "required": [ + "oidcUrl", + "oidcScopes", + "oidcMetadata" + ], + "title": "provider", + "type": "object" }, - "service": { - "type": "object", - "properties": { - "port": { - "type": "integer" - }, - "type": { - "type": "string" - } + "secret": { + "properties": { + "clientId": { + "default": "", + "required": [], + "title": "clientId", + "type": "string" + }, + "clientSecret": { + "default": "", + "required": [], + "title": "clientSecret", + "type": "string" + }, + "name": { + "default": "", + "description": "The name of the secret that contains the client credentials. Uses fullname if none given.", + "required": [], + "title": "name", + "type": "string" + }, + "useExistingSecret": { + "default": false, + "description": "Secret must provide the following variables: OIDC_CLIENT_ID and OIDC_SECRET.", + "required": [], + "title": "useExistingSecret", + "type": "boolean" } + }, + "required": [ + "clientId", + "clientSecret", + "name", + "useExistingSecret" + ], + "title": "secret", + "type": "object" + } + }, + "required": [ + "enabled", + "provider", + "secret" + ], + "title": "oidc", + "type": "object" + }, + "podAnnotations": { + "description": "Annotations to be added to exporter pods", + "required": [], + "title": "podAnnotations", + "type": "object" + }, + "podSecurityContext": { + "description": "pod-level security context", + "properties": { + "fsGroup": { + "default": 1000, + "required": [], + "title": "fsGroup", + "type": "integer" + } + }, + "required": [ + "fsGroup" + ], + "title": "podSecurityContext", + "type": "object" + }, + "replicaCount": { + "default": 1, + "description": "Number of replicas", + "required": [], + "title": "replicaCount", + "type": "integer" + }, + "resources": { + "description": "Resource limits and requests for the headwind pods.", + "required": [], + "title": "resources", + "type": "object" + }, + "revisionHistoryLimit": { + "default": 10, + "description": "The number of old ReplicaSets to retain", + "required": [], + "title": "revisionHistoryLimit", + "type": "integer" + }, + "securityContext": { + "description": "container-level security context", + "properties": { + "runAsNonRoot": { + "default": true, + "required": [], + "title": "runAsNonRoot", + "type": "boolean" }, - "serviceAccount": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "create": { - "type": "boolean" - }, - "name": { - "type": "string" - } - } + "runAsUser": { + "default": 1000, + "required": [], + "title": "runAsUser", + "type": "integer" + } + }, + "required": [ + "runAsNonRoot", + "runAsUser" + ], + "title": "securityContext", + "type": "object" + }, + "service": { + "properties": { + "port": { + "default": 80, + "description": "Kubernetes port where service is exposed", + "required": [], + "title": "port", + "type": "integer" }, - "tolerations": { - "type": "array" + "type": { + "default": "ClusterIP", + "description": "Kubernetes service type", + "required": [], + "title": "type", + "type": "string" + } + }, + "required": [ + "type", + "port" + ], + "title": "service", + "type": "object" + }, + "serviceAccount": { + "properties": { + "annotations": { + "description": "Annotations to add to the service account", + "required": [], + "title": "annotations", + "type": "object" }, - "volumeMounts": { - "type": "array" + "create": { + "default": true, + "description": "Specifies whether a service account should be created", + "required": [], + "title": "create", + "type": "boolean" }, - "volumes": { - "type": "array" + "name": { + "default": "", + "description": "The name of the service account to use.\nIf not set and create is true, a name is generated using the fullname template", + "required": [], + "title": "name", + "type": "string" } + }, + "required": [ + "create", + "annotations", + "name" + ], + "title": "serviceAccount", + "type": "object" + }, + "tolerations": { + "description": "Toleration labels for pod assignment", + "items": { + "required": [] + }, + "required": [], + "title": "tolerations", + "type": "array" + }, + "volumeMounts": { + "description": "Container's volume mounts", + "items": { + "required": [] + }, + "required": [], + "title": "volumeMounts", + "type": "array" + }, + "volumes": { + "description": "Pod's volumes", + "items": { + "required": [] + }, + "required": [], + "title": "volumes", + "type": "array" } + }, + "required": [ + "nameOverride", + "fullnameOverride", + "image", + "imagePullSecrets", + "replicaCount", + "revisionHistoryLimit", + "serviceAccount", + "podAnnotations", + "podSecurityContext", + "securityContext", + "service", + "ingress", + "resources", + "autoscaling", + "nodeSelector", + "tolerations", + "affinity", + "oidc", + "clusterRoleBinding", + "volumeMounts", + "volumes" + ], + "type": "object" } diff --git a/charts/sloop/values.schema.json b/charts/sloop/values.schema.json index 75ca01d5..c6dca5fb 100644 --- a/charts/sloop/values.schema.json +++ b/charts/sloop/values.schema.json @@ -1,185 +1,434 @@ { - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "affinity": { - "type": "object" - }, - "autoscaling": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "maxReplicas": { - "type": "integer" - }, - "minReplicas": { - "type": "integer" - }, - "targetCPUUtilizationPercentage": { - "type": "integer" - } - } - }, - "clusterRole": { - "type": "object", - "properties": { - "additionalApiGroups": { - "type": "array" - }, - "additionalPermissions": { - "type": "array" - } - } + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "affinity": { + "description": "Affinity settings for pod assignment", + "required": [], + "title": "affinity", + "type": "object" + }, + "autoscaling": { + "properties": { + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" }, - "fullnameOverride": { - "type": "string" + "maxReplicas": { + "default": 100, + "required": [], + "title": "maxReplicas", + "type": "integer" }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "type": "string" - }, - "repository": { - "type": "string" - }, - "tag": { - "type": "string" - } - } + "minReplicas": { + "default": 1, + "required": [], + "title": "minReplicas", + "type": "integer" }, - "imagePullSecrets": { - "type": "array" + "targetCPUUtilizationPercentage": { + "default": 80, + "required": [], + "title": "targetCPUUtilizationPercentage", + "type": "integer" + } + }, + "required": [ + "enabled", + "minReplicas", + "maxReplicas", + "targetCPUUtilizationPercentage" + ], + "title": "autoscaling", + "type": "object" + }, + "clusterRole": { + "properties": { + "additionalApiGroups": { + "description": "List CRD apiGroups that you want to watch here\nWill be added with all resource types and the verbs \"list\" and \"watch\"\nIstio is just here as an example. Alternatively if you want to get all CRDs its possible to add '*'\nto apiGroups, but that would give Sloop permissions to read secrets which may not be desirable", + "items": { + "required": [] + }, + "required": [], + "title": "additionalApiGroups", + "type": "array" }, - "ingress": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "className": { + "additionalPermissions": { + "description": "- awx.ansible.com\n- authentication.istio.io\n- config.istio.io\n- networking.istio.io\n- rbac.istio.io\n- security.istio.io\nList CRD API groups, resource types and verbs you want to visualize in Sloop\nGiven example adds all API groups and resource types, which also includes Secrets, be aware of this", + "items": { + "required": [] + }, + "required": [], + "title": "additionalPermissions", + "type": "array" + } + }, + "required": [ + "additionalApiGroups", + "additionalPermissions" + ], + "title": "clusterRole", + "type": "object" + }, + "fullnameOverride": { + "default": "", + "description": "String to fully override `\"sloop.fullname\"`", + "required": [], + "title": "fullnameOverride", + "type": "string" + }, + "global": { + "description": "Global values are values that can be accessed from any chart or subchart by exactly the same name.", + "required": [], + "title": "global", + "type": "object" + }, + "image": { + "properties": { + "pullPolicy": { + "default": "Always", + "description": "image pull policy", + "required": [], + "title": "pullPolicy", + "type": "string" + }, + "repository": { + "default": "ghcr.io/salesforce/sloop", + "description": "image repository", + "required": [], + "title": "repository", + "type": "string" + }, + "tag": { + "default": "sha-2ce8bbe", + "description": "Overrides the image tag", + "required": [], + "title": "tag", + "type": "string" + } + }, + "required": [ + "repository", + "pullPolicy", + "tag" + ], + "title": "image", + "type": "object" + }, + "imagePullSecrets": { + "description": "If defined, uses a Secret to pull an image from a private Docker registry or repository.", + "items": { + "required": [] + }, + "required": [], + "title": "imagePullSecrets", + "type": "array" + }, + "ingress": { + "properties": { + "annotations": { + "required": [], + "title": "annotations", + "type": "object" + }, + "className": { + "default": "", + "required": [], + "title": "className", + "type": "string" + }, + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" + }, + "hosts": { + "description": "kubernetes.io/ingress.class: nginx\nkubernetes.io/tls-acme: \"true\"", + "items": { + "anyOf": [ + { + "properties": { + "host": { + "default": "chart-example.local", + "required": [], + "title": "host", "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "hosts": { - "type": "array", + }, + "paths": { "items": { - "type": "object", - "properties": { - "host": { - "type": "string" + "anyOf": [ + { + "properties": { + "path": { + "default": "/", + "required": [], + "title": "path", + "type": "string" }, - "paths": { - "type": "array", - "items": { - "type": "object", - "properties": { - "path": { - "type": "string" - }, - "pathType": { - "type": "string" - } - } - } + "pathType": { + "default": "ImplementationSpecific", + "required": [], + "title": "pathType", + "type": "string" } + }, + "required": [ + "path", + "pathType" + ], + "type": "object" } - } - }, - "tls": { + ], + "required": [] + }, + "required": [], + "title": "paths", "type": "array" - } - } - }, - "nameOverride": { - "type": "string" - }, - "nodeSelector": { - "type": "object" - }, - "persistence": { - "type": "object", - "properties": { - "accessModes": { - "type": "array", - "items": { - "type": "string" - } - }, - "annotations": { - "type": "object" - }, - "enabled": { - "type": "boolean" - }, - "existingClaim": { - "type": "string" - }, - "size": { - "type": "string" + } }, - "storageClass": { - "type": "string" - } - } + "required": [ + "host", + "paths" + ], + "type": "object" + } + ], + "required": [] + }, + "required": [], + "title": "hosts", + "type": "array" }, - "podAnnotations": { - "type": "object" + "tls": { + "items": { + "required": [] + }, + "required": [], + "title": "tls", + "type": "array" + } + }, + "required": [ + "enabled", + "className", + "annotations", + "hosts", + "tls" + ], + "title": "ingress", + "type": "object" + }, + "nameOverride": { + "default": "", + "description": "Provide a name in place of `sloop`", + "required": [], + "title": "nameOverride", + "type": "string" + }, + "nodeSelector": { + "description": "Node labels for pod assignment", + "required": [], + "title": "nodeSelector", + "type": "object" + }, + "persistence": { + "properties": { + "accessModes": { + "items": { + "anyOf": [ + { + "required": [], + "type": "string" + } + ], + "required": [] + }, + "required": [], + "title": "accessModes", + "type": "array" }, - "podSecurityContext": { - "type": "object" + "annotations": { + "required": [], + "title": "annotations", + "type": "object" }, - "replicaCount": { - "type": "integer" + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" }, - "resources": { - "type": "object" + "existingClaim": { + "default": "", + "required": [], + "title": "existingClaim", + "type": "string" }, - "revisionHistoryLimit": { - "type": "integer" + "size": { + "default": "10Gi", + "required": [], + "title": "size", + "type": "string" }, - "securityContext": { - "type": "object" + "storageClass": { + "default": "", + "required": [], + "title": "storageClass", + "type": "string" + } + }, + "required": [ + "enabled", + "annotations", + "accessModes", + "existingClaim", + "storageClass", + "size" + ], + "title": "persistence", + "type": "object" + }, + "podAnnotations": { + "description": "Annotations to be added to exporter pods", + "required": [], + "title": "podAnnotations", + "type": "object" + }, + "podSecurityContext": { + "description": "pod-level security context", + "required": [], + "title": "podSecurityContext", + "type": "object" + }, + "replicaCount": { + "default": 1, + "description": "Number of replicas", + "required": [], + "title": "replicaCount", + "type": "integer" + }, + "resources": { + "description": "Resource limits and requests for the pods.", + "required": [], + "title": "resources", + "type": "object" + }, + "revisionHistoryLimit": { + "default": 10, + "description": "The number of old ReplicaSets to retain", + "required": [], + "title": "revisionHistoryLimit", + "type": "integer" + }, + "securityContext": { + "description": "container-level security context", + "required": [], + "title": "securityContext", + "type": "object" + }, + "service": { + "properties": { + "port": { + "default": 80, + "description": "Kubernetes port where service is exposed", + "required": [], + "title": "port", + "type": "integer" }, - "service": { - "type": "object", - "properties": { - "port": { - "type": "integer" - }, - "type": { - "type": "string" - } - } - }, - "serviceAccount": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "create": { - "type": "boolean" - }, - "name": { - "type": "string" - } - } + "type": { + "default": "ClusterIP", + "description": "Kubernetes service type", + "required": [], + "title": "type", + "type": "string" + } + }, + "required": [ + "type", + "port" + ], + "title": "service", + "type": "object" + }, + "serviceAccount": { + "properties": { + "annotations": { + "description": "Annotations to add to the service account", + "required": [], + "title": "annotations", + "type": "object" }, - "sloop": { - "type": "object", - "properties": { - "config": { - "type": "string" - } - } + "create": { + "default": true, + "description": "Specifies whether a service account should be created", + "required": [], + "title": "create", + "type": "boolean" }, - "tolerations": { - "type": "array" + "name": { + "default": "", + "description": "The name of the service account to use.\nIf not set and create is true, a name is generated using the fullname template", + "required": [], + "title": "name", + "type": "string" + } + }, + "required": [ + "create", + "annotations", + "name" + ], + "title": "serviceAccount", + "type": "object" + }, + "sloop": { + "properties": { + "config": { + "default": "{\n \"displayContext\": \"cluster\",\n \"defaultNamespace\": \"default\",\n \"defaultKind\": \"Pod\",\n \"defaultLookback\": \"1h\",\n \"leftBarLinks\": [\n ],\n \"resourceLinks\": [\n ]\n}\n", + "required": [], + "title": "config", + "type": "string" } + }, + "required": [ + "config" + ], + "title": "sloop", + "type": "object" + }, + "tolerations": { + "description": "Toleration labels for pod assignment", + "items": { + "required": [] + }, + "required": [], + "title": "tolerations", + "type": "array" } + }, + "required": [ + "nameOverride", + "fullnameOverride", + "image", + "imagePullSecrets", + "replicaCount", + "revisionHistoryLimit", + "serviceAccount", + "podAnnotations", + "podSecurityContext", + "securityContext", + "service", + "ingress", + "resources", + "autoscaling", + "nodeSelector", + "tolerations", + "affinity", + "sloop", + "persistence", + "clusterRole" + ], + "type": "object" } diff --git a/charts/syncserver/values.schema.json b/charts/syncserver/values.schema.json index 2c4af56c..236278ac 100644 --- a/charts/syncserver/values.schema.json +++ b/charts/syncserver/values.schema.json @@ -1,203 +1,480 @@ { - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "affinity": { - "type": "object" + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "affinity": { + "description": "Affinity settings for pod assignment", + "required": [], + "title": "affinity", + "type": "object" + }, + "autoscaling": { + "properties": { + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" }, - "autoscaling": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "maxReplicas": { - "type": "integer" - }, - "minReplicas": { - "type": "integer" - }, - "targetCPUUtilizationPercentage": { - "type": "integer" - } - } + "maxReplicas": { + "default": 100, + "required": [], + "title": "maxReplicas", + "type": "integer" }, - "fullnameOverride": { - "type": "string" + "minReplicas": { + "default": 1, + "required": [], + "title": "minReplicas", + "type": "integer" }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "type": "string" - }, - "repository": { - "type": "string" - }, - "tag": { - "type": "string" - } - } + "targetCPUUtilizationPercentage": { + "default": 80, + "required": [], + "title": "targetCPUUtilizationPercentage", + "type": "integer" + } + }, + "required": [ + "enabled", + "minReplicas", + "maxReplicas", + "targetCPUUtilizationPercentage" + ], + "title": "autoscaling", + "type": "object" + }, + "fullnameOverride": { + "default": "", + "description": "String to fully override `\"syncserver.fullname\"`", + "required": [], + "title": "fullnameOverride", + "type": "string" + }, + "global": { + "description": "Global values are values that can be accessed from any chart or subchart by exactly the same name.", + "required": [], + "title": "global", + "type": "object" + }, + "image": { + "properties": { + "pullPolicy": { + "default": "Always", + "description": "image pull policy", + "required": [], + "title": "pullPolicy", + "type": "string" }, - "imagePullSecrets": { - "type": "array" + "repository": { + "default": "mozilla/syncserver", + "description": "image repository", + "required": [], + "title": "repository", + "type": "string" }, - "ingress": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "className": { + "tag": { + "default": "latest", + "description": "Overrides the image tag", + "required": [], + "title": "tag", + "type": "string" + } + }, + "required": [ + "repository", + "pullPolicy", + "tag" + ], + "title": "image", + "type": "object" + }, + "imagePullSecrets": { + "description": "If defined, uses a Secret to pull an image from a private Docker registry or repository.", + "items": { + "required": [] + }, + "required": [], + "title": "imagePullSecrets", + "type": "array" + }, + "ingress": { + "properties": { + "annotations": { + "required": [], + "title": "annotations", + "type": "object" + }, + "className": { + "default": "", + "required": [], + "title": "className", + "type": "string" + }, + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" + }, + "hosts": { + "description": "kubernetes.io/ingress.class: nginx\nkubernetes.io/tls-acme: \"true\"", + "items": { + "anyOf": [ + { + "properties": { + "host": { + "default": "chart-example.local", + "required": [], + "title": "host", "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "hosts": { - "type": "array", + }, + "paths": { "items": { - "type": "object", - "properties": { - "host": { - "type": "string" + "anyOf": [ + { + "properties": { + "path": { + "default": "/", + "required": [], + "title": "path", + "type": "string" }, - "paths": { - "type": "array", - "items": { - "type": "object", - "properties": { - "path": { - "type": "string" - }, - "pathType": { - "type": "string" - } - } - } + "pathType": { + "default": "ImplementationSpecific", + "required": [], + "title": "pathType", + "type": "string" } + }, + "required": [ + "path", + "pathType" + ], + "type": "object" } - } - }, - "tls": { + ], + "required": [] + }, + "required": [], + "title": "paths", "type": "array" - } - } - }, - "nameOverride": { - "type": "string" - }, - "nodeSelector": { - "type": "object" - }, - "podAnnotations": { - "type": "object" - }, - "podSecurityContext": { - "type": "object" - }, - "replicaCount": { - "type": "integer" + } + }, + "required": [ + "host", + "paths" + ], + "type": "object" + } + ], + "required": [] + }, + "required": [], + "title": "hosts", + "type": "array" }, - "resources": { - "type": "object" + "tls": { + "items": { + "required": [] + }, + "required": [], + "title": "tls", + "type": "array" + } + }, + "required": [ + "enabled", + "className", + "annotations", + "hosts", + "tls" + ], + "title": "ingress", + "type": "object" + }, + "nameOverride": { + "default": "", + "description": "Provide a name in place of `syncserver`", + "required": [], + "title": "nameOverride", + "type": "string" + }, + "nodeSelector": { + "description": "Node labels for pod assignment", + "required": [], + "title": "nodeSelector", + "type": "object" + }, + "podAnnotations": { + "description": "Annotations to be added to exporter pods", + "required": [], + "title": "podAnnotations", + "type": "object" + }, + "podSecurityContext": { + "description": "pod-level security context", + "required": [], + "title": "podSecurityContext", + "type": "object" + }, + "replicaCount": { + "default": 1, + "description": "Number of replicas", + "required": [], + "title": "replicaCount", + "type": "integer" + }, + "resources": { + "description": "Resource limits and requests for the controller pods.", + "required": [], + "title": "resources", + "type": "object" + }, + "revisionHistoryLimit": { + "default": 10, + "description": "The number of old ReplicaSets to retain", + "required": [], + "title": "revisionHistoryLimit", + "type": "integer" + }, + "securityContext": { + "description": "container-level security context", + "required": [], + "title": "securityContext", + "type": "object" + }, + "service": { + "properties": { + "port": { + "default": 5000, + "description": "Kubernetes port where service is exposed", + "required": [], + "title": "port", + "type": "integer" }, - "revisionHistoryLimit": { - "type": "integer" + "type": { + "default": "ClusterIP", + "description": "Kubernetes service type", + "required": [], + "title": "type", + "type": "string" + } + }, + "required": [ + "type", + "port" + ], + "title": "service", + "type": "object" + }, + "serviceAccount": { + "properties": { + "annotations": { + "description": "Annotations to add to the service account", + "required": [], + "title": "annotations", + "type": "object" }, - "securityContext": { - "type": "object" + "create": { + "default": true, + "description": "Specifies whether a service account should be created", + "required": [], + "title": "create", + "type": "boolean" }, - "service": { - "type": "object", - "properties": { - "port": { - "type": "integer" - }, - "type": { - "type": "string" - } + "name": { + "default": "", + "description": "The name of the service account to use.\nIf not set and create is true, a name is generated using the fullname template", + "required": [], + "title": "name", + "type": "string" + } + }, + "required": [ + "create", + "annotations", + "name" + ], + "title": "serviceAccount", + "type": "object" + }, + "syncserver": { + "properties": { + "config": { + "properties": { + "allowNewUser": { + "default": false, + "description": "controls whether the server will accept requests from previously-unseen users", + "required": [], + "title": "allowNewUser", + "type": "boolean" + }, + "batchUploadEnabled": { + "default": true, + "required": [], + "title": "batchUploadEnabled", + "type": "boolean" + }, + "debugEnabled": { + "default": false, + "required": [], + "title": "debugEnabled", + "type": "boolean" + }, + "existingSecret": { + "default": "", + "description": "Name of an existing secret containing the syncserver secret under the key syncserver-secret", + "required": [], + "title": "existingSecret", + "type": "string" + }, + "forceWsgiEnviron": { + "default": true, + "required": [], + "title": "forceWsgiEnviron", + "type": "boolean" + }, + "publicUrl": { + "default": "http://localhost:5000", + "required": [], + "title": "publicUrl", + "type": "string" + }, + "secret": { + "default": "super-strong-secret", + "description": "Secret to secure the syncserver", + "required": [], + "title": "secret", + "type": "string" + }, + "sqlUri": { + "default": "sqlite:////data/syncserver.db", + "required": [], + "title": "sqlUri", + "type": "string" } + }, + "required": [ + "allowNewUser", + "batchUploadEnabled", + "debugEnabled", + "existingSecret", + "forceWsgiEnviron", + "publicUrl", + "secret", + "sqlUri" + ], + "title": "config", + "type": "object" }, - "serviceAccount": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "create": { - "type": "boolean" - }, - "name": { - "type": "string" - } - } + "extraEnv": { + "description": "additional environment variables to be added to the syncserver pods", + "items": { + "required": [] + }, + "required": [], + "title": "extraEnv", + "type": "array" }, - "syncserver": { - "type": "object", - "properties": { - "config": { - "type": "object", - "properties": { - "allowNewUser": { - "type": "boolean" - }, - "batchUploadEnabled": { - "type": "boolean" - }, - "debugEnabled": { - "type": "boolean" - }, - "existingSecret": { - "type": "string" - }, - "forceWsgiEnviron": { - "type": "boolean" - }, - "publicUrl": { - "type": "string" - }, - "secret": { - "type": "string" - }, - "sqlUri": { - "type": "string" - } - } - }, - "extraEnv": { - "type": "array" - }, - "persistence": { - "type": "object", - "properties": { - "accessModes": { - "type": "array", - "items": { - "type": "string" - } - }, - "annotations": { - "type": "object" - }, - "enabled": { - "type": "boolean" - }, - "existingClaim": { - "type": "string" - }, - "resources": { - "type": "object" - }, - "storageClassName": { - "type": "string" - } - } - } + "persistence": { + "properties": { + "accessModes": { + "description": "the desired access modes the volume should have.", + "items": { + "anyOf": [ + { + "required": [], + "type": "string" + } + ], + "required": [] + }, + "required": [], + "title": "accessModes", + "type": "array" + }, + "annotations": { + "required": [], + "title": "annotations", + "type": "object" + }, + "enabled": { + "default": false, + "description": "use a PVC to persist data", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "existingClaim": { + "default": "", + "description": "provide an existing PersistentVolumeClaim", + "required": [], + "title": "existingClaim", + "type": "string" + }, + "resources": { + "description": "represents the minimum and maximum resources the volume should have.", + "required": [], + "title": "resources", + "type": "object" + }, + "storageClassName": { + "default": "", + "description": "Name of the StorageClass required by the claim.", + "required": [], + "title": "storageClassName", + "type": "string" } - }, - "tolerations": { - "type": "array" + }, + "required": [ + "enabled", + "accessModes", + "annotations", + "existingClaim", + "storageClassName", + "resources" + ], + "title": "persistence", + "type": "object" } + }, + "required": [ + "config", + "extraEnv", + "persistence" + ], + "title": "syncserver", + "type": "object" + }, + "tolerations": { + "description": "Toleration labels for pod assignment", + "items": { + "required": [] + }, + "required": [], + "title": "tolerations", + "type": "array" } + }, + "required": [ + "nameOverride", + "fullnameOverride", + "replicaCount", + "revisionHistoryLimit", + "image", + "imagePullSecrets", + "serviceAccount", + "podAnnotations", + "podSecurityContext", + "securityContext", + "service", + "ingress", + "resources", + "autoscaling", + "nodeSelector", + "tolerations", + "affinity", + "syncserver" + ], + "type": "object" } diff --git a/charts/tenant-namespace/values.schema.json b/charts/tenant-namespace/values.schema.json index e895c98e..569449aa 100644 --- a/charts/tenant-namespace/values.schema.json +++ b/charts/tenant-namespace/values.schema.json @@ -1,265 +1,586 @@ { - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "fullnameOverride": { - "type": "string" + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "fullnameOverride": { + "default": "", + "description": "String to fully override `\"tenant-namespace.fullname\"`", + "required": [], + "title": "fullnameOverride", + "type": "string" + }, + "global": { + "description": "Global values are values that can be accessed from any chart or subchart by exactly the same name.", + "required": [], + "title": "global", + "type": "object" + }, + "limitRange": { + "properties": { + "additionalAnnotations": { + "description": "Annotations to be added to the LimitRange", + "required": [], + "title": "additionalAnnotations", + "type": "object" }, - "limitRange": { - "type": "object", - "properties": { - "additionalAnnotations": { - "type": "object" + "additionalLabels": { + "description": "Labels to be added to the LimitRange", + "required": [], + "title": "additionalLabels", + "type": "object" + }, + "enabled": { + "default": false, + "description": "- create a LimitRange resource", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "limits": { + "description": "define the list of limits", + "items": { + "required": [] + }, + "required": [], + "title": "limits", + "type": "array" + }, + "name": { + "default": "", + "description": "- default:\n cpu: 500m\n defaultRequest:\n cpu: 500m\n max:\n cpu: \"1\"\n min:\n cpu: 100m\n type: Container\nThe name of the LimitRange to be created. If left empty will simply use the Release name.", + "required": [], + "title": "name", + "type": "string" + } + }, + "required": [ + "enabled", + "additionalAnnotations", + "additionalLabels", + "limits", + "name" + ], + "title": "limitRange", + "type": "object" + }, + "nameOverride": { + "default": "", + "description": "Provide a name in place of `tenant-namespace`", + "required": [], + "title": "nameOverride", + "type": "string" + }, + "namespace": { + "properties": { + "annotations": { + "properties": { + "additionalAnnotations": { + "description": "Annotations to be added to the Namespace", + "required": [], + "title": "additionalAnnotations", + "type": "object" + }, + "openShift": { + "properties": { + "description": { + "default": "", + "description": "The optional description can be a more detailed description of the project and is visible in the web console.", + "required": [], + "title": "description", + "type": "string" }, - "additionalLabels": { - "type": "object" + "displayName": { + "default": "", + "description": "The optional displayName is how the project is displayed in the web console (defaults to name).", + "required": [], + "title": "displayName", + "type": "string" }, - "enabled": { - "type": "boolean" + "requester": { + "default": "", + "description": "The optional requesting user.", + "required": [], + "title": "requester", + "type": "string" + } + }, + "required": [ + "description", + "displayName", + "requester" + ], + "title": "openShift", + "type": "object" + }, + "scheduler": { + "properties": { + "defaultTolerations": { + "description": "This annotation requires the PodTolerationRestriction admission controller to be enabled. This annotation key allows assigning tolerations to a namespace and any new pods created in this namespace would get these tolerations added.", + "items": { + "required": [] + }, + "required": [], + "title": "defaultTolerations", + "type": "array" }, - "limits": { - "type": "array" + "nodeSelector": { + "default": "", + "description": "- operator: Equal\n value: value1\n effect: NoSchedule\n key: dedicated-node\nThe PodNodeSelector uses this annotation key to assign node selectors to pods in namespaces.", + "required": [], + "title": "nodeSelector", + "type": "string" }, - "name": { - "type": "string" + "tolerationsWhitelist": { + "description": "This annotation requires the PodTolerationRestriction admission controller to be enabled. The annotation value is a JSON document that defines a list of allowed tolerations for the namespace it annotates. When you create a Pod or modify its tolerations, the API server checks the tolerations to see if they are mentioned in the allow list. The pod is admitted only if the check succeeds.", + "items": { + "required": [] + }, + "required": [], + "title": "tolerationsWhitelist", + "type": "array" } + }, + "required": [ + "defaultTolerations", + "nodeSelector", + "tolerationsWhitelist" + ], + "title": "scheduler", + "type": "object" } + }, + "required": [ + "additionalAnnotations", + "openShift", + "scheduler" + ], + "title": "annotations", + "type": "object" }, - "nameOverride": { - "type": "string" + "enabled": { + "default": false, + "description": "- create a Namespace resource", + "required": [], + "title": "enabled", + "type": "boolean" }, - "namespace": { - "type": "object", - "properties": { - "annotations": { - "type": "object", - "properties": { - "additionalAnnotations": { - "type": "object" - }, - "openShift": { - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "displayName": { - "type": "string" - }, - "requester": { - "type": "string" - } - } - }, - "scheduler": { - "type": "object", - "properties": { - "defaultTolerations": { - "type": "array" - }, - "nodeSelector": { - "type": "string" - }, - "tolerationsWhitelist": { - "type": "array" - } - } - } + "labels": { + "properties": { + "additionalLabels": { + "description": "Labels to be added to the Namespace", + "required": [], + "title": "additionalLabels", + "type": "object" + }, + "podSecurityAdmission": { + "properties": { + "audit": { + "properties": { + "standard": { + "default": "", + "description": "Value must be one of privileged, baseline, or restricted which correspond to Pod Security Standard levels.", + "required": [], + "title": "standard", + "type": "string" + }, + "version": { + "default": "", + "description": "Version label that can be used to pin the policy to the version that shipped with a given Kubernetes minor version (for example v1.27).", + "required": [], + "title": "version", + "type": "string" } + }, + "required": [ + "standard", + "version" + ], + "title": "audit", + "type": "object" }, - "enabled": { - "type": "boolean" - }, - "labels": { - "type": "object", - "properties": { - "additionalLabels": { - "type": "object" - }, - "podSecurityAdmission": { - "type": "object", - "properties": { - "audit": { - "type": "object", - "properties": { - "standard": { - "type": "string" - }, - "version": { - "type": "string" - } - } - }, - "enforce": { - "type": "object", - "properties": { - "standard": { - "type": "string" - }, - "version": { - "type": "string" - } - } - }, - "warning": { - "type": "object", - "properties": { - "standard": { - "type": "string" - }, - "version": { - "type": "string" - } - } - } - } - } + "enforce": { + "properties": { + "standard": { + "default": "", + "description": "Value must be one of privileged, baseline, or restricted which correspond to Pod Security Standard levels.", + "required": [], + "title": "standard", + "type": "string" + }, + "version": { + "default": "", + "description": "Version label that can be used to pin the policy to the version that shipped with a given Kubernetes minor version (for example v1.27).", + "required": [], + "title": "version", + "type": "string" } + }, + "required": [ + "standard", + "version" + ], + "title": "enforce", + "type": "object" }, - "name": { - "type": "string" + "warning": { + "properties": { + "standard": { + "default": "", + "description": "Value must be one of privileged, baseline, or restricted which correspond to Pod Security Standard levels.", + "required": [], + "title": "standard", + "type": "string" + }, + "version": { + "default": "", + "description": "Version label that can be used to pin the policy to the version that shipped with a given Kubernetes minor version (for example v1.27).", + "required": [], + "title": "version", + "type": "string" + } + }, + "required": [ + "standard", + "version" + ], + "title": "warning", + "type": "object" } + }, + "required": [ + "audit", + "enforce", + "warning" + ], + "title": "podSecurityAdmission", + "type": "object" } + }, + "required": [ + "additionalLabels", + "podSecurityAdmission" + ], + "title": "labels", + "type": "object" }, - "networkPolicies": { - "type": "object", - "properties": { - "additionalAnnotations": { - "type": "object" - }, - "additionalLabels": { - "type": "object" - }, - "egress": { - "type": "object", - "properties": { - "allow": { - "type": "object", - "properties": { - "dns": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "namespace": { - "type": "string" - }, - "podLabels": { - "type": "object", - "properties": { - "k8s-app": { - "type": "string" - } - } - }, - "podSelector": { - "type": "object" - } - } - } - } - }, - "deny": { - "type": "object", - "properties": { - "all": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "podSelector": { - "type": "object" - } - } - } - } + "name": { + "default": "", + "description": "The Name of the newly created namespace. Uses the Release name be default.", + "required": [], + "title": "name", + "type": "string" + } + }, + "required": [ + "enabled", + "annotations", + "labels", + "name" + ], + "title": "namespace", + "type": "object" + }, + "networkPolicies": { + "properties": { + "additionalAnnotations": { + "description": "Annotations to be added to the NetworkPolicies", + "required": [], + "title": "additionalAnnotations", + "type": "object" + }, + "additionalLabels": { + "description": "Labels to be added to the NetworkPolicies", + "required": [], + "title": "additionalLabels", + "type": "object" + }, + "egress": { + "properties": { + "allow": { + "properties": { + "dns": { + "properties": { + "enabled": { + "default": true, + "description": "create a NetworkPolicy that allows outgoing traffic to the Kubernetes DNS", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "namespace": { + "default": "kube-system", + "description": "The namespace where the Kubneretes DNS is running", + "required": [], + "title": "namespace", + "type": "string" + }, + "podLabels": { + "description": "The labels of the Kubernetes DNS", + "properties": { + "k8s-app": { + "default": "kube-dns", + "required": [], + "title": "k8s-app", + "type": "string" } + }, + "required": [ + "k8s-app" + ], + "title": "podLabels", + "type": "object" + }, + "podSelector": { + "description": "define a PodSelector that should be used. Uses all Pods by default", + "required": [], + "title": "podSelector", + "type": "object" } - }, - "enabled": { - "type": "boolean" - }, - "ingress": { - "type": "object", - "properties": { - "allow": { - "type": "object", - "properties": { - "openShift": { - "type": "object", - "properties": { - "ingressController": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "podSelector": { - "type": "object" - } - } - }, - "monitoring": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "podSelector": { - "type": "object" - } - } - } - } - } - } - }, - "deny": { - "type": "object", - "properties": { - "all": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "podSelector": { - "type": "object" - } - } - } - } - } + }, + "required": [ + "enabled", + "namespace", + "podLabels", + "podSelector" + ], + "title": "dns", + "type": "object" + } + }, + "required": [ + "dns" + ], + "title": "allow", + "type": "object" + }, + "deny": { + "properties": { + "all": { + "properties": { + "enabled": { + "default": true, + "description": "create a NetworkPolicy that denies all outgoing traffic", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "podSelector": { + "description": "define a PodSelector that should be used. Uses all Pods by default", + "required": [], + "title": "podSelector", + "type": "object" } - }, + }, + "required": [ + "enabled", + "podSelector" + ], + "title": "all", + "type": "object" + } + }, + "required": [ + "all" + ], + "title": "deny", + "type": "object" + } + }, + "required": [ + "deny", + "allow" + ], + "title": "egress", + "type": "object" + }, + "enabled": { + "default": false, + "description": "- create NetworkPolicy resources to limit the allowed traffic", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "ingress": { + "properties": { + "allow": { + "properties": { "openShift": { - "type": "object", - "properties": { + "properties": { + "ingressController": { + "properties": { "enabled": { - "type": "boolean" + "default": true, + "description": "create a NetworkPolicy that allows incoming traffic from the OpenShift Ingress Controller", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "podSelector": { + "description": "define a PodSelector that should be used. Uses all Pods by default", + "required": [], + "title": "podSelector", + "type": "object" + } + }, + "required": [ + "enabled", + "podSelector" + ], + "title": "ingressController", + "type": "object" + }, + "monitoring": { + "properties": { + "enabled": { + "default": true, + "description": "create a NetworkPolicy that allows incoming traffic from the OpenShift Monitoring", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "podSelector": { + "description": "define a PodSelector that should be used. Uses all Pods by default", + "required": [], + "title": "podSelector", + "type": "object" } + }, + "required": [ + "enabled", + "podSelector" + ], + "title": "monitoring", + "type": "object" } + }, + "required": [ + "ingressController", + "monitoring" + ], + "title": "openShift", + "type": "object" } + }, + "required": [ + "openShift" + ], + "title": "allow", + "type": "object" + }, + "deny": { + "properties": { + "all": { + "properties": { + "enabled": { + "default": true, + "description": "create a NetworkPolicy that denies all incoming traffic", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "podSelector": { + "description": "define a PodSelector that should be used. Uses all Pods by default", + "required": [], + "title": "podSelector", + "type": "object" + } + }, + "required": [ + "enabled", + "podSelector" + ], + "title": "all", + "type": "object" + } + }, + "required": [ + "all" + ], + "title": "deny", + "type": "object" } + }, + "required": [ + "deny", + "allow" + ], + "title": "ingress", + "type": "object" }, - "resourceQuotas": { - "type": "object", - "properties": { - "additionalAnnotations": { - "type": "object" - }, - "additionalLabels": { - "type": "object" - }, - "enabled": { - "type": "boolean" - }, - "quotas": { - "type": "array" - } + "openShift": { + "properties": { + "enabled": { + "default": false, + "description": "enabled the creation of NetworkPolicies for OpenShift like Ingress and Monitoring", + "required": [], + "title": "enabled", + "type": "boolean" } + }, + "required": [ + "enabled" + ], + "title": "openShift", + "type": "object" + } + }, + "required": [ + "enabled", + "additionalAnnotations", + "additionalLabels", + "egress", + "ingress", + "openShift" + ], + "title": "networkPolicies", + "type": "object" + }, + "resourceQuotas": { + "description": "define a list of ResourceQuotas that should be created", + "properties": { + "additionalAnnotations": { + "description": "Annotations to be added to the LimitRange", + "required": [], + "title": "additionalAnnotations", + "type": "object" + }, + "additionalLabels": { + "description": "Labels to be added to the LimitRange", + "required": [], + "title": "additionalLabels", + "type": "object" + }, + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" + }, + "quotas": { + "items": { + "required": [] + }, + "required": [], + "title": "quotas", + "type": "array" } + }, + "required": [ + "enabled", + "additionalAnnotations", + "additionalLabels", + "quotas" + ], + "title": "resourceQuotas", + "type": "object" } + }, + "required": [ + "nameOverride", + "fullnameOverride", + "limitRange", + "namespace", + "resourceQuotas", + "networkPolicies" + ], + "type": "object" } diff --git a/charts/typo3/values.schema.json b/charts/typo3/values.schema.json index ba6cbaba..02a82301 100644 --- a/charts/typo3/values.schema.json +++ b/charts/typo3/values.schema.json @@ -1,328 +1,770 @@ { - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "affinity": { - "type": "object" + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "affinity": { + "description": "Affinity settings for pod assignment", + "required": [], + "title": "affinity", + "type": "object" + }, + "autoscaling": { + "properties": { + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" }, - "autoscaling": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "maxReplicas": { - "type": "integer" - }, - "minReplicas": { - "type": "integer" - }, - "targetCPUUtilizationPercentage": { - "type": "integer" - } - } + "maxReplicas": { + "default": 100, + "required": [], + "title": "maxReplicas", + "type": "integer" }, - "externalDatabase": { - "type": "object", - "properties": { - "auth": { - "type": "object", - "properties": { - "database": { - "type": "string" - }, - "existingSecret": { - "type": "string" - }, - "password": { - "type": "string" - }, - "userPasswordKey": { - "type": "string" - }, - "username": { - "type": "string" - } - } - }, - "hostname": { - "type": "string" - }, - "port": { - "type": "integer" - }, - "type": { - "type": "string" - } + "minReplicas": { + "default": 1, + "required": [], + "title": "minReplicas", + "type": "integer" + }, + "targetCPUUtilizationPercentage": { + "default": 80, + "required": [], + "title": "targetCPUUtilizationPercentage", + "type": "integer" + } + }, + "required": [ + "enabled", + "minReplicas", + "maxReplicas", + "targetCPUUtilizationPercentage" + ], + "title": "autoscaling", + "type": "object" + }, + "externalDatabase": { + "properties": { + "auth": { + "properties": { + "database": { + "default": "typo3", + "description": "Name of the database to use", + "required": [], + "title": "database", + "type": "string" + }, + "existingSecret": { + "default": "", + "description": "Name of existing secret to use for database credentials", + "required": [], + "title": "existingSecret", + "type": "string" + }, + "password": { + "default": "typo3", + "description": "Password to use", + "required": [], + "title": "password", + "type": "string" + }, + "userPasswordKey": { + "default": "", + "description": "Key in the secret containing the password", + "required": [], + "title": "userPasswordKey", + "type": "string" + }, + "username": { + "default": "typo3", + "description": "Name of the user to use", + "required": [], + "title": "username", + "type": "string" } + }, + "required": [ + "database", + "existingSecret", + "password", + "username", + "userPasswordKey" + ], + "title": "auth", + "type": "object" }, - "fullnameOverride": { - "type": "string" + "hostname": { + "default": "", + "description": "Hostname of the database", + "required": [], + "title": "hostname", + "type": "string" }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "type": "string" - }, - "repository": { - "type": "string" - }, - "tag": { - "type": "string" - } - } + "port": { + "default": 3306, + "description": "Port used to connect to database", + "required": [], + "title": "port", + "type": "integer" }, - "imagePullSecrets": { - "type": "array" + "type": { + "default": "mysql", + "description": "Type of database", + "required": [], + "title": "type", + "type": "string" + } + }, + "required": [ + "auth", + "hostname", + "port", + "type" + ], + "title": "externalDatabase", + "type": "object" + }, + "fullnameOverride": { + "default": "", + "description": "String to fully override `\"typo3.fullname\"`", + "required": [], + "title": "fullnameOverride", + "type": "string" + }, + "global": { + "description": "Global values are values that can be accessed from any chart or subchart by exactly the same name.", + "required": [], + "title": "global", + "type": "object" + }, + "image": { + "properties": { + "pullPolicy": { + "default": "Always", + "description": "image pull policy", + "required": [], + "title": "pullPolicy", + "type": "string" }, - "ingress": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "className": { + "repository": { + "default": "martinhelmich/typo3", + "description": "image repository", + "required": [], + "title": "repository", + "type": "string" + }, + "tag": { + "default": "12.4", + "description": "Overrides the image tag", + "required": [], + "title": "tag", + "type": "string" + } + }, + "required": [ + "repository", + "pullPolicy", + "tag" + ], + "title": "image", + "type": "object" + }, + "imagePullSecrets": { + "description": "If defined, uses a Secret to pull an image from a private Docker registry or repository.", + "items": { + "required": [] + }, + "required": [], + "title": "imagePullSecrets", + "type": "array" + }, + "ingress": { + "properties": { + "annotations": { + "required": [], + "title": "annotations", + "type": "object" + }, + "className": { + "default": "", + "required": [], + "title": "className", + "type": "string" + }, + "enabled": { + "default": false, + "required": [], + "title": "enabled", + "type": "boolean" + }, + "hosts": { + "description": "kubernetes.io/ingress.class: nginx\nkubernetes.io/tls-acme: \"true\"", + "items": { + "anyOf": [ + { + "properties": { + "host": { + "default": "chart-example.local", + "required": [], + "title": "host", "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "hosts": { - "type": "array", + }, + "paths": { "items": { - "type": "object", - "properties": { - "host": { - "type": "string" + "anyOf": [ + { + "properties": { + "path": { + "default": "/", + "required": [], + "title": "path", + "type": "string" }, - "paths": { - "type": "array", - "items": { - "type": "object", - "properties": { - "path": { - "type": "string" - }, - "pathType": { - "type": "string" - } - } - } + "pathType": { + "default": "ImplementationSpecific", + "required": [], + "title": "pathType", + "type": "string" } + }, + "required": [ + "path", + "pathType" + ], + "type": "object" } - } - }, - "tls": { + ], + "required": [] + }, + "required": [], + "title": "paths", "type": "array" - } - } - }, - "mariadb": { - "type": "object", - "properties": { - "auth": { - "type": "object", - "properties": { - "database": { - "type": "string" - }, - "existingSecret": { - "type": "string" - }, - "password": { - "type": "string" - }, - "username": { - "type": "string" - } - } + } }, - "enabled": { - "type": "boolean" - } - } + "required": [ + "host", + "paths" + ], + "type": "object" + } + ], + "required": [] + }, + "required": [], + "title": "hosts", + "type": "array" }, - "mysql": { - "type": "object", - "properties": { - "auth": { - "type": "object", - "properties": { - "database": { - "type": "string" - }, - "existingSecret": { - "type": "string" - }, - "password": { - "type": "string" - }, - "username": { - "type": "string" - } - } - }, - "enabled": { - "type": "boolean" - }, - "primary": { - "type": "object", - "properties": { - "configuration": { - "type": "string" - }, - "extraEnvVars": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - } - } - } - } - } - } + "tls": { + "items": { + "required": [] + }, + "required": [], + "title": "tls", + "type": "array" + } + }, + "required": [ + "enabled", + "className", + "annotations", + "hosts", + "tls" + ], + "title": "ingress", + "type": "object" + }, + "mariadb": { + "properties": { + "auth": { + "properties": { + "database": { + "default": "typo3", + "description": "Name for a custom database to create", + "required": [], + "title": "database", + "type": "string" + }, + "existingSecret": { + "default": "", + "description": "Name of existing secret to use for MariaDB credentials", + "required": [], + "title": "existingSecret", + "type": "string" + }, + "password": { + "default": "typo3", + "description": "Password for the custom user to create. Ignored if mariadb.auth.existingSecret is provided", + "required": [], + "title": "password", + "type": "string" + }, + "username": { + "default": "typo3", + "description": "Name for a custom user to create", + "required": [], + "title": "username", + "type": "string" } + }, + "required": [ + "database", + "existingSecret", + "password", + "username" + ], + "title": "auth", + "type": "object" }, - "nameOverride": { - "type": "string" - }, - "nodeSelector": { - "type": "object" - }, - "persistence": { - "type": "object", - "properties": { - "fileadmin": { - "type": "object", - "properties": { - "accessModes": { - "type": "array", - "items": { - "type": "string" - } - }, - "annotations": { - "type": "object" - }, - "enabled": { - "type": "boolean" - }, - "existingClaim": { - "type": "string" - }, - "resources": { - "type": "object" - }, - "storageClassName": { - "type": "string" - } - } - }, - "typo3conf": { - "type": "object", - "properties": { - "accessModes": { - "type": "array", - "items": { - "type": "string" - } - }, - "annotations": { - "type": "object" - }, - "enabled": { - "type": "boolean" - }, - "existingClaim": { - "type": "string" - }, - "resources": { - "type": "object" - }, - "storageClassName": { - "type": "string" - } - } - } + "enabled": { + "default": false, + "description": "enable MariaDB™ subchart from Bitnami", + "required": [], + "title": "enabled", + "type": "boolean" + } + }, + "required": [ + "enabled", + "auth" + ], + "title": "mariadb", + "type": "object" + }, + "mysql": { + "properties": { + "auth": { + "properties": { + "database": { + "default": "typo3", + "description": "Name for a custom database to create", + "required": [], + "title": "database", + "type": "string" + }, + "existingSecret": { + "default": "", + "description": "Name of existing secret to use for MySQL credentials", + "required": [], + "title": "existingSecret", + "type": "string" + }, + "password": { + "default": "typo3", + "description": "Password for the custom user to create. Ignored if mysql.auth.existingSecret is provided", + "required": [], + "title": "password", + "type": "string" + }, + "username": { + "default": "typo3", + "description": "Name for a custom user to create", + "required": [], + "title": "username", + "type": "string" } + }, + "required": [ + "database", + "existingSecret", + "password", + "username" + ], + "title": "auth", + "type": "object" }, - "podAnnotations": { - "type": "object" - }, - "podSecurityContext": { - "type": "object" + "enabled": { + "default": true, + "description": "enable MySQL™ subchart from Bitnami", + "required": [], + "title": "enabled", + "type": "boolean" }, - "postgresql": { - "type": "object", - "properties": { - "auth": { - "type": "object", + "primary": { + "properties": { + "configuration": { + "default": "[mysqld]\ndefault_authentication_plugin=mysql_native_password\nskip-name-resolve\nexplicit_defaults_for_timestamp\nbasedir=/opt/bitnami/mysql\nplugin_dir=/opt/bitnami/mysql/lib/plugin\nport=3306\nsocket=/opt/bitnami/mysql/tmp/mysql.sock\ndatadir=/bitnami/mysql/data\ntmpdir=/opt/bitnami/mysql/tmp\nmax_allowed_packet=16M\nbind-address=0.0.0.0\npid-file=/opt/bitnami/mysql/tmp/mysqld.pid\nlog-error=/opt/bitnami/mysql/logs/mysqld.log\ncharacter-set-server=utf8mb4\ncollation-server=utf8mb4_unicode_ci\nslow_query_log=0\nslow_query_log_file=/opt/bitnami/mysql/logs/mysqld.log\nlong_query_time=10.0\n\n[client]\nport=3306\nsocket=/opt/bitnami/mysql/tmp/mysql.sock\ndefault-character-set=utf8mb4\nplugin_dir=/opt/bitnami/mysql/lib/plugin\n\n[manager]\nport=3306\nsocket=/opt/bitnami/mysql/tmp/mysql.sock\npid-file=/opt/bitnami/mysql/tmp/mysqld.pid", + "required": [], + "title": "configuration", + "type": "string" + }, + "extraEnvVars": { + "items": { + "anyOf": [ + { "properties": { - "database": { - "type": "string" - }, - "existingSecret": { - "type": "string" - }, - "password": { - "type": "string" - }, - "username": { - "type": "string" - } - } - }, - "enabled": { - "type": "boolean" - } + "name": { + "default": "TZ", + "required": [], + "title": "name", + "type": "string" + }, + "value": { + "default": "Europe/Berlin", + "required": [], + "title": "value", + "type": "string" + } + }, + "required": [ + "name", + "value" + ], + "type": "object" + } + ], + "required": [] + }, + "required": [], + "title": "extraEnvVars", + "type": "array" } - }, - "replicaCount": { - "type": "integer" - }, - "resources": { - "type": "object" - }, - "revisionHistoryLimit": { - "type": "integer" - }, - "securityContext": { - "type": "object" - }, - "service": { - "type": "object", - "properties": { - "port": { - "type": "integer" - }, - "type": { + }, + "required": [ + "configuration", + "extraEnvVars" + ], + "title": "primary", + "type": "object" + } + }, + "required": [ + "enabled", + "auth", + "primary" + ], + "title": "mysql", + "type": "object" + }, + "nameOverride": { + "default": "", + "description": "Provide a name in place of `typo3`", + "required": [], + "title": "nameOverride", + "type": "string" + }, + "nodeSelector": { + "description": "Node labels for pod assignment", + "required": [], + "title": "nodeSelector", + "type": "object" + }, + "persistence": { + "properties": { + "fileadmin": { + "properties": { + "accessModes": { + "description": "the desired access modes the volume should have.", + "items": { + "anyOf": [ + { + "required": [], "type": "string" - } + } + ], + "required": [] + }, + "required": [], + "title": "accessModes", + "type": "array" + }, + "annotations": { + "description": "Annotations to be added to the PersistentVolumeClaim", + "required": [], + "title": "annotations", + "type": "object" + }, + "enabled": { + "default": false, + "description": "use a PVC to persist fileadmin data", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "existingClaim": { + "default": "", + "description": "provide an existing PersistentVolumeClaim", + "required": [], + "title": "existingClaim", + "type": "string" + }, + "resources": { + "description": "represents the minimum and maximum resources the volume should have.", + "required": [], + "title": "resources", + "type": "object" + }, + "storageClassName": { + "default": "", + "description": "Name of the StorageClass required by the claim.", + "required": [], + "title": "storageClassName", + "type": "string" } + }, + "required": [ + "enabled", + "accessModes", + "annotations", + "existingClaim", + "storageClassName", + "resources" + ], + "title": "fileadmin", + "type": "object" }, - "serviceAccount": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "create": { - "type": "boolean" - }, - "name": { + "typo3conf": { + "properties": { + "accessModes": { + "description": "the desired access modes the volume should have.", + "items": { + "anyOf": [ + { + "required": [], "type": "string" - } + } + ], + "required": [] + }, + "required": [], + "title": "accessModes", + "type": "array" + }, + "annotations": { + "description": "Annotations to be added to the PersistentVolumeClaim", + "required": [], + "title": "annotations", + "type": "object" + }, + "enabled": { + "default": false, + "description": "use a PVC to persist typo3conf data", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "existingClaim": { + "default": "", + "description": "provide an existing PersistentVolumeClaim", + "required": [], + "title": "existingClaim", + "type": "string" + }, + "resources": { + "description": "represents the minimum and maximum resources the volume should have.", + "required": [], + "title": "resources", + "type": "object" + }, + "storageClassName": { + "default": "", + "description": "Name of the StorageClass required by the claim.", + "required": [], + "title": "storageClassName", + "type": "string" } + }, + "required": [ + "enabled", + "accessModes", + "annotations", + "existingClaim", + "storageClassName", + "resources" + ], + "title": "typo3conf", + "type": "object" + } + }, + "required": [ + "fileadmin", + "typo3conf" + ], + "title": "persistence", + "type": "object" + }, + "podAnnotations": { + "description": "Annotations to be added to exporter pods", + "required": [], + "title": "podAnnotations", + "type": "object" + }, + "podSecurityContext": { + "description": "pod-level security context", + "required": [], + "title": "podSecurityContext", + "type": "object" + }, + "postgresql": { + "properties": { + "auth": { + "properties": { + "database": { + "default": "typo3", + "description": "Name for a custom database to create", + "required": [], + "title": "database", + "type": "string" + }, + "existingSecret": { + "default": "", + "description": "Name of existing secret to use for PostgreSQL credentials", + "required": [], + "title": "existingSecret", + "type": "string" + }, + "password": { + "default": "typo3", + "description": "Password for the custom user to create. Ignored if postgresql.auth.existingSecret is provided", + "required": [], + "title": "password", + "type": "string" + }, + "username": { + "default": "typo3", + "description": "Name for a custom user to create", + "required": [], + "title": "username", + "type": "string" + } + }, + "required": [ + "database", + "existingSecret", + "password", + "username" + ], + "title": "auth", + "type": "object" + }, + "enabled": { + "default": false, + "description": "enable PostgreSQL™ subchart from Bitnami", + "required": [], + "title": "enabled", + "type": "boolean" + } + }, + "required": [ + "enabled", + "auth" + ], + "title": "postgresql", + "type": "object" + }, + "replicaCount": { + "default": 1, + "description": "Number of replicas", + "required": [], + "title": "replicaCount", + "type": "integer" + }, + "resources": { + "description": "Resource limits and requests for the headwind pods.", + "required": [], + "title": "resources", + "type": "object" + }, + "revisionHistoryLimit": { + "default": 10, + "description": "The number of old ReplicaSets to retain", + "required": [], + "title": "revisionHistoryLimit", + "type": "integer" + }, + "securityContext": { + "description": "container-level security context", + "required": [], + "title": "securityContext", + "type": "object" + }, + "service": { + "properties": { + "port": { + "default": 8080, + "description": "Kubernetes port where service is exposed", + "required": [], + "title": "port", + "type": "integer" + }, + "type": { + "default": "ClusterIP", + "description": "Kubernetes service type", + "required": [], + "title": "type", + "type": "string" + } + }, + "required": [ + "type", + "port" + ], + "title": "service", + "type": "object" + }, + "serviceAccount": { + "properties": { + "annotations": { + "description": "Annotations to add to the service account", + "required": [], + "title": "annotations", + "type": "object" + }, + "create": { + "default": true, + "description": "Specifies whether a service account should be created", + "required": [], + "title": "create", + "type": "boolean" }, - "tolerations": { - "type": "array" + "name": { + "default": "", + "description": "The name of the service account to use.\nIf not set and create is true, a name is generated using the fullname template", + "required": [], + "title": "name", + "type": "string" } + }, + "required": [ + "create", + "annotations", + "name" + ], + "title": "serviceAccount", + "type": "object" + }, + "tolerations": { + "description": "Toleration labels for pod assignment", + "items": { + "required": [] + }, + "required": [], + "title": "tolerations", + "type": "array" } + }, + "required": [ + "nameOverride", + "fullnameOverride", + "image", + "imagePullSecrets", + "replicaCount", + "revisionHistoryLimit", + "serviceAccount", + "podAnnotations", + "podSecurityContext", + "securityContext", + "service", + "ingress", + "resources", + "autoscaling", + "nodeSelector", + "tolerations", + "affinity", + "persistence", + "mysql", + "mariadb", + "postgresql", + "externalDatabase" + ], + "type": "object" } diff --git a/charts/umami/values.schema.json b/charts/umami/values.schema.json index 5f9bbcf0..2e8c3afa 100644 --- a/charts/umami/values.schema.json +++ b/charts/umami/values.schema.json @@ -1,326 +1,791 @@ { - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "affinity": { - "type": "object" - }, - "autoscaling": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "maxReplicas": { - "type": "integer" - }, - "minReplicas": { - "type": "integer" - }, - "targetCPUUtilizationPercentage": { - "type": "integer" - }, - "targetMemoryUtilizationPercentage": { - "type": "integer" - } - } + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "affinity": { + "description": "Affinity settings for pod assignment", + "required": [], + "title": "affinity", + "type": "object" + }, + "autoscaling": { + "properties": { + "enabled": { + "default": false, + "description": "Enable Horizontal POD autoscaling", + "required": [], + "title": "enabled", + "type": "boolean" }, - "database": { - "type": "object", - "properties": { - "databaseUrlKey": { - "type": "string" - }, - "existingSecret": { - "type": "string" - } - } + "maxReplicas": { + "default": 100, + "description": "Maximum number of replicas", + "required": [], + "title": "maxReplicas", + "type": "integer" }, - "externalDatabase": { - "type": "object", - "properties": { - "auth": { - "type": "object", - "properties": { - "database": { - "type": "string" - }, - "password": { - "type": "string" - }, - "username": { - "type": "string" - } - } - }, - "hostname": { - "type": "string" - }, - "port": { - "type": "integer" - }, - "type": { - "type": "string" - } - } + "minReplicas": { + "default": 1, + "description": "Minimum number of replicas", + "required": [], + "title": "minReplicas", + "type": "integer" }, - "extraEnv": { - "type": "array" + "targetCPUUtilizationPercentage": { + "default": 80, + "description": "Target CPU utilization percentage", + "required": [], + "title": "targetCPUUtilizationPercentage", + "type": "integer" }, - "fullnameOverride": { - "type": "string" + "targetMemoryUtilizationPercentage": { + "default": 80, + "description": "Target Memory utilization percentage", + "required": [], + "title": "targetMemoryUtilizationPercentage", + "type": "integer" + } + }, + "required": [ + "enabled", + "minReplicas", + "maxReplicas", + "targetCPUUtilizationPercentage", + "targetMemoryUtilizationPercentage" + ], + "title": "autoscaling", + "type": "object" + }, + "database": { + "properties": { + "databaseUrlKey": { + "default": "", + "description": "Key in the existing secret containing the database url", + "required": [], + "title": "databaseUrlKey", + "type": "string" }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "type": "string" - }, - "registry": { - "type": "string" - }, - "repository": { - "type": "string" - }, - "tag": { - "type": "string" - } + "existingSecret": { + "default": "", + "description": "use an existing secret containing the database url. If none given, we will generate the database url by using the other values. The password for the database has to be set using `.Values.postgresql.auth.password`, `.Values.mysql.auth.password` or `.Values.externalDatabase.auth.password`.", + "required": [], + "title": "existingSecret", + "type": "string" + } + }, + "required": [ + "databaseUrlKey", + "existingSecret" + ], + "title": "database", + "type": "object" + }, + "externalDatabase": { + "properties": { + "auth": { + "properties": { + "database": { + "default": "mychart", + "description": "Name of the database to use", + "required": [], + "title": "database", + "type": "string" + }, + "password": { + "default": "mychart", + "description": "Password to use", + "required": [], + "title": "password", + "type": "string" + }, + "username": { + "default": "mychart", + "description": "Name of the user to use", + "required": [], + "title": "username", + "type": "string" } + }, + "required": [ + "database", + "password", + "username" + ], + "title": "auth", + "type": "object" }, - "imagePullSecrets": { - "type": "array" + "hostname": { + "default": "", + "description": "Hostname of the database", + "required": [], + "title": "hostname", + "type": "string" }, - "ingress": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "className": { + "port": { + "default": 5432, + "description": "Port used to connect to database", + "required": [], + "title": "port", + "type": "integer" + }, + "type": { + "default": "postgresql", + "description": "Type of database", + "required": [], + "title": "type", + "type": "string" + } + }, + "required": [ + "auth", + "hostname", + "port", + "type" + ], + "title": "externalDatabase", + "type": "object" + }, + "extraEnv": { + "description": "additional environment variables to be added to the pods. See https://umami.is/docs/environment-variables for a complete list of available variables. Most variables can be set under umami as well.", + "items": { + "required": [] + }, + "required": [], + "title": "extraEnv", + "type": "array" + }, + "fullnameOverride": { + "default": "", + "description": "String to fully override `\"umami.fullname\"`", + "required": [], + "title": "fullnameOverride", + "type": "string" + }, + "global": { + "description": "Global values are values that can be accessed from any chart or subchart by exactly the same name.", + "required": [], + "title": "global", + "type": "object" + }, + "image": { + "properties": { + "pullPolicy": { + "default": "Always", + "description": "image pull policy", + "required": [], + "title": "pullPolicy", + "type": "string" + }, + "registry": { + "default": "ghcr.io", + "description": "image registry", + "required": [], + "title": "registry", + "type": "string" + }, + "repository": { + "default": "umami-software/umami", + "description": "image repository", + "required": [], + "title": "repository", + "type": "string" + }, + "tag": { + "default": "postgresql-v2.9.0", + "description": "Overrides the image tag", + "required": [], + "title": "tag", + "type": "string" + } + }, + "required": [ + "registry", + "repository", + "pullPolicy", + "tag" + ], + "title": "image", + "type": "object" + }, + "imagePullSecrets": { + "description": "If defined, uses a Secret to pull an image from a private Docker registry or repository.", + "items": { + "required": [] + }, + "required": [], + "title": "imagePullSecrets", + "type": "array" + }, + "ingress": { + "properties": { + "annotations": { + "description": "Additional annotations for the Ingress resource", + "required": [], + "title": "annotations", + "type": "object" + }, + "className": { + "default": "", + "description": "IngressClass that will be be used to implement the Ingress", + "required": [], + "title": "className", + "type": "string" + }, + "enabled": { + "default": false, + "description": "Enable ingress record generation", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "hosts": { + "description": "cert-manager.io/cluster-issuer: cluster-issuer-name\nkubernetes.io/ingress.class: nginx\nkubernetes.io/tls-acme: \"true\"\nAn array with hosts and paths", + "items": { + "anyOf": [ + { + "properties": { + "host": { + "default": "chart-example.local", + "required": [], + "title": "host", "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "hosts": { - "type": "array", + }, + "paths": { "items": { - "type": "object", - "properties": { - "host": { - "type": "string" + "anyOf": [ + { + "properties": { + "path": { + "default": "/", + "required": [], + "title": "path", + "type": "string" }, - "paths": { - "type": "array", - "items": { - "type": "object", - "properties": { - "path": { - "type": "string" - }, - "pathType": { - "type": "string" - } - } - } + "pathType": { + "default": "ImplementationSpecific", + "required": [], + "title": "pathType", + "type": "string" } + }, + "required": [ + "path", + "pathType" + ], + "type": "object" } - } - }, - "tls": { + ], + "required": [] + }, + "required": [], + "title": "paths", "type": "array" - } - } + } + }, + "required": [ + "host", + "paths" + ], + "type": "object" + } + ], + "required": [] + }, + "required": [], + "title": "hosts", + "type": "array" }, - "mysql": { - "type": "object", - "properties": { - "auth": { - "type": "object", - "properties": { - "database": { - "type": "string" - }, - "password": { - "type": "string" - }, - "username": { - "type": "string" - } - } - }, - "enabled": { - "type": "boolean" - } + "tls": { + "description": "An array with the tls configuration", + "items": { + "required": [] + }, + "required": [], + "title": "tls", + "type": "array" + } + }, + "required": [ + "enabled", + "className", + "annotations", + "hosts", + "tls" + ], + "title": "ingress", + "type": "object" + }, + "mysql": { + "properties": { + "auth": { + "properties": { + "database": { + "default": "mychart", + "description": "Name for a custom database to create", + "required": [], + "title": "database", + "type": "string" + }, + "password": { + "default": "mychart", + "description": "Password for the custom user to create", + "required": [], + "title": "password", + "type": "string" + }, + "username": { + "default": "mychart", + "description": "Name for a custom user to create", + "required": [], + "title": "username", + "type": "string" } + }, + "required": [ + "database", + "password", + "username" + ], + "title": "auth", + "type": "object" }, - "nameOverride": { - "type": "string" - }, - "nodeSelector": { - "type": "object" - }, - "podAnnotations": { - "type": "object" - }, - "podSecurityContext": { - "type": "object" - }, - "postgresql": { - "type": "object", - "properties": { - "auth": { - "type": "object", - "properties": { - "database": { - "type": "string" - }, - "password": { - "type": "string" - }, - "username": { - "type": "string" - } - } - }, - "enabled": { - "type": "boolean" - } + "enabled": { + "default": false, + "description": "enable MySQL™ subchart from Bitnami", + "required": [], + "title": "enabled", + "type": "boolean" + } + }, + "required": [ + "enabled", + "auth" + ], + "title": "mysql", + "type": "object" + }, + "nameOverride": { + "default": "", + "description": "Provide a name in place of `umami`", + "required": [], + "title": "nameOverride", + "type": "string" + }, + "nodeSelector": { + "description": "Node labels for pod assignment", + "required": [], + "title": "nodeSelector", + "type": "object" + }, + "podAnnotations": { + "description": "Annotations to be added to pods", + "required": [], + "title": "podAnnotations", + "type": "object" + }, + "podLabels": { + "description": "Labels to be added to pods", + "required": [], + "title": "podLabels", + "type": "object" + }, + "podSecurityContext": { + "description": "pod-level security context", + "required": [], + "title": "podSecurityContext", + "type": "object" + }, + "postgresql": { + "properties": { + "auth": { + "properties": { + "database": { + "default": "mychart", + "description": "Name for a custom database to create", + "required": [], + "title": "database", + "type": "string" + }, + "password": { + "default": "mychart", + "description": "Password for the custom user to create", + "required": [], + "title": "password", + "type": "string" + }, + "username": { + "default": "mychart", + "description": "Name for a custom user to create", + "required": [], + "title": "username", + "type": "string" } + }, + "required": [ + "database", + "password", + "username" + ], + "title": "auth", + "type": "object" }, - "replicaCount": { - "type": "integer" + "enabled": { + "default": true, + "description": "enable PostgreSQL™ subchart from Bitnami", + "required": [], + "title": "enabled", + "type": "boolean" + } + }, + "required": [ + "enabled", + "auth" + ], + "title": "postgresql", + "type": "object" + }, + "replicaCount": { + "default": 1, + "description": "Number of replicas", + "required": [], + "title": "replicaCount", + "type": "integer" + }, + "resources": { + "description": "Resource limits and requests for the controller pods.", + "required": [], + "title": "resources", + "type": "object" + }, + "revisionHistoryLimit": { + "default": 10, + "description": "The number of old ReplicaSets to retain", + "required": [], + "title": "revisionHistoryLimit", + "type": "integer" + }, + "securityContext": { + "description": "container-level security context", + "properties": { + "runAsGroup": { + "default": 65533, + "required": [], + "title": "runAsGroup", + "type": "integer" }, - "resources": { - "type": "object" + "runAsNonRoot": { + "default": true, + "required": [], + "title": "runAsNonRoot", + "type": "boolean" }, - "revisionHistoryLimit": { - "type": "integer" + "runAsUser": { + "default": 1001, + "required": [], + "title": "runAsUser", + "type": "integer" + } + }, + "required": [ + "runAsGroup", + "runAsNonRoot", + "runAsUser" + ], + "title": "securityContext", + "type": "object" + }, + "service": { + "properties": { + "port": { + "default": 3000, + "description": "Kubernetes port where service is exposed", + "required": [], + "title": "port", + "type": "integer" }, - "securityContext": { - "type": "object", - "properties": { - "runAsGroup": { - "type": "integer" - }, - "runAsNonRoot": { - "type": "boolean" - }, - "runAsUser": { - "type": "integer" - } - } + "type": { + "default": "ClusterIP", + "description": "Kubernetes service type", + "required": [], + "title": "type", + "type": "string" + } + }, + "required": [ + "type", + "port" + ], + "title": "service", + "type": "object" + }, + "serviceAccount": { + "properties": { + "annotations": { + "description": "Annotations to add to the service account", + "required": [], + "title": "annotations", + "type": "object" }, - "service": { - "type": "object", - "properties": { - "port": { - "type": "integer" - }, - "type": { - "type": "string" - } - } + "create": { + "default": true, + "description": "Specifies whether a service account should be created", + "required": [], + "title": "create", + "type": "boolean" }, - "serviceAccount": { - "type": "object", - "properties": { - "annotations": { - "type": "object" - }, - "create": { - "type": "boolean" - }, - "name": { - "type": "string" - } + "name": { + "default": "", + "description": "The name of the service account to use.\nIf not set and create is true, a name is generated using the fullname template", + "required": [], + "title": "name", + "type": "string" + } + }, + "required": [ + "create", + "annotations", + "name" + ], + "title": "serviceAccount", + "type": "object" + }, + "tolerations": { + "description": "Toleration labels for pod assignment", + "items": { + "required": [] + }, + "required": [], + "title": "tolerations", + "type": "array" + }, + "umami": { + "properties": { + "appSecret": { + "properties": { + "existingSecret": { + "default": "", + "description": "Name of an existing secret containing the app secret under the key app-secret.", + "required": [], + "title": "existingSecret", + "type": "string" + }, + "secret": { + "default": "", + "description": "A random string used to generate unique values.", + "required": [], + "title": "secret", + "type": "string" } + }, + "required": [ + "existingSecret", + "secret" + ], + "title": "appSecret", + "type": "object" }, - "tolerations": { - "type": "array" - }, - "umami": { - "type": "object", - "properties": { - "appSecret": { - "type": "object", - "properties": { - "existingSecret": { - "type": "string" - }, - "secret": { - "type": "string" - } - } - }, - "clientIpHeader": { - "type": "string" - }, - "cloudMode": { - "type": "string" - }, - "collectApiEndpoint": { - "type": "string" - }, - "corsMaxAge": { - "type": "string" - }, - "debug": { - "type": "string" - }, - "disableBotCheck": { - "type": "string" - }, - "disableLogin": { - "type": "string" - }, - "disableTelemetry": { - "type": "string" - }, - "disableUpdates": { - "type": "string" - }, - "enableTestConsole": { - "type": "string" - }, - "forceSSL": { - "type": "string" - }, - "hostname": { - "type": "string" - }, - "ignoreHostname": { - "type": "string" - }, - "ignoredIpAddresses": { - "type": "string" - }, - "logQuery": { - "type": "string" - }, - "migration": { - "type": "object", - "properties": { - "v1v2": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - } - } - } - }, - "removeDisableLoginEnv": { - "type": "boolean" - }, - "removeTrailingSlash": { - "type": "string" - }, - "trackerScriptName": { - "type": "string" + "clientIpHeader": { + "default": "", + "description": "HTTP header to check for the client's IP address. This is useful when you're behind a proxy that uses non-standard headers.", + "required": [], + "title": "clientIpHeader", + "type": "string" + }, + "cloudMode": { + "default": "1", + "description": "Disables users, teams, and websites settings page.", + "required": [], + "title": "cloudMode", + "type": "string" + }, + "collectApiEndpoint": { + "default": "", + "description": "Allows you to send metrics to a location different than the default `/api/send`. This is to help you avoid some ad-blockers.", + "required": [], + "title": "collectApiEndpoint", + "type": "string" + }, + "corsMaxAge": { + "default": "86400", + "description": "How many seconds a CORS preflight should last. Default is 24 hours.", + "required": [], + "title": "corsMaxAge", + "type": "string" + }, + "debug": { + "default": "", + "description": "Console logging for specific areas of the application. Values include `umami:auth`, `umami:clickhouse`, `umami:kafka`, `umami:middleware`, and `umami:prisma`.", + "required": [], + "title": "debug", + "type": "string" + }, + "disableBotCheck": { + "default": "1", + "description": "By default bots are excluded from statistics. This disables checking for bots.", + "required": [], + "title": "disableBotCheck", + "type": "string" + }, + "disableLogin": { + "default": "1", + "description": "Disables the login page for the application", + "required": [], + "title": "disableLogin", + "type": "string" + }, + "disableTelemetry": { + "default": "1", + "description": "Umami collects completely anonymous telemetry data in order help improve the application. You can choose to disable this if you don't want to participate.", + "required": [], + "title": "disableTelemetry", + "type": "string" + }, + "disableUpdates": { + "default": "1", + "description": "Disables the check for new versions of Umami", + "required": [], + "title": "disableUpdates", + "type": "string" + }, + "enableTestConsole": { + "default": "1", + "description": "Enables the internal test page, {host}/console. Admin access is required. Users can manually fire pageviews and events to their websites.", + "required": [], + "title": "enableTestConsole", + "type": "string" + }, + "forceSSL": { + "default": "1", + "description": "This will redirect all requests from http to https in the Umami application. Note, this does not apply to the tracking script.", + "required": [], + "title": "forceSSL", + "type": "string" + }, + "hostname": { + "default": "0.0.0.0", + "description": "hostname under which Umami will be reached", + "required": [], + "title": "hostname", + "type": "string" + }, + "ignoreHostname": { + "default": "", + "description": "This will do a DNS lookup on a hostname and the resulting IP address will be ignored. This can be a comma delimited list of hostnames.", + "required": [], + "title": "ignoreHostname", + "type": "string" + }, + "ignoredIpAddresses": { + "default": "", + "description": "You can provide a comma-delimited list of IP address to exclude from data collection.", + "required": [], + "title": "ignoredIpAddresses", + "type": "string" + }, + "logQuery": { + "default": "1", + "description": "If you are running in development mode, this will log database queries to the console for debugging.", + "required": [], + "title": "logQuery", + "type": "string" + }, + "migration": { + "properties": { + "v1v2": { + "properties": { + "enabled": { + "default": false, + "description": "enable a job that migrates database structure from v1 to v2", + "required": [], + "title": "enabled", + "type": "boolean" } + }, + "required": [ + "enabled" + ], + "title": "v1v2", + "type": "object" } + }, + "required": [ + "v1v2" + ], + "title": "migration", + "type": "object" + }, + "removeDisableLoginEnv": { + "default": true, + "description": "setting this to true removes the environment variable DISABLE_LOGIN defined in `umami.disableLogin` from the deployment as this caused errors in some setups", + "required": [], + "title": "removeDisableLoginEnv", + "type": "boolean" + }, + "removeTrailingSlash": { + "default": "1", + "description": "Removes the trailing slash from all incoming urls.", + "required": [], + "title": "removeTrailingSlash", + "type": "string" + }, + "trackerScriptName": { + "default": "umami", + "description": "Allows you to assign a custom name to the tracker script different from the default umami. This is to help you avoid some ad-blockers.", + "required": [], + "title": "trackerScriptName", + "type": "string" } + }, + "required": [ + "appSecret", + "clientIpHeader", + "cloudMode", + "collectApiEndpoint", + "corsMaxAge", + "debug", + "disableBotCheck", + "disableLogin", + "disableTelemetry", + "disableUpdates", + "enableTestConsole", + "forceSSL", + "hostname", + "ignoreHostname", + "ignoredIpAddresses", + "logQuery", + "migration", + "removeDisableLoginEnv", + "removeTrailingSlash", + "trackerScriptName" + ], + "title": "umami", + "type": "object" } + }, + "required": [ + "nameOverride", + "fullnameOverride", + "image", + "imagePullSecrets", + "podAnnotations", + "podLabels", + "podSecurityContext", + "replicaCount", + "revisionHistoryLimit", + "resources", + "securityContext", + "serviceAccount", + "service", + "ingress", + "autoscaling", + "nodeSelector", + "tolerations", + "affinity", + "extraEnv", + "umami", + "postgresql", + "mysql", + "externalDatabase", + "database" + ], + "type": "object" }