From f864b40a85100b70c93d30eb523280d0887585b4 Mon Sep 17 00:00:00 2001 From: Nick Volynkin Date: Mon, 4 Aug 2025 21:37:04 +0300 Subject: [PATCH] [apps] Use new OpenAPI schema and README generator for packages/apps - clickhouse - ferretdb - http-cache - kafka - kubernetes - mysql - nats - rabbitmq - redis - tcp-balancer - vm-disk - vm-instance - vpn Signed-off-by: Nick Volynkin Signed-off-by: Andrei Kvapil --- .github/workflows/pre-commit.yml | 3 +- hack/e2e-apps/run-kubernetes.sh | 3 - hack/e2e-apps/vminstance.bats | 3 - packages/apps/bucket/Makefile | 3 +- packages/apps/bucket/values.schema.json | 8 +- packages/apps/clickhouse/Makefile | 5 +- packages/apps/clickhouse/README.md | 70 +- packages/apps/clickhouse/values.schema.json | 349 ++++++--- packages/apps/clickhouse/values.yaml | 55 +- packages/apps/ferretdb/Makefile | 4 +- packages/apps/ferretdb/README.md | 64 +- packages/apps/ferretdb/values.schema.json | 304 +++++--- packages/apps/ferretdb/values.yaml | 64 +- packages/apps/http-cache/Makefile | 5 +- packages/apps/http-cache/README.md | 46 +- packages/apps/http-cache/values.schema.json | 253 +++++-- packages/apps/http-cache/values.yaml | 30 +- packages/apps/kafka/Makefile | 4 +- packages/apps/kafka/README.md | 54 +- packages/apps/kafka/values.schema.json | 313 +++++--- packages/apps/kafka/values.yaml | 40 +- packages/apps/kubernetes/Makefile | 8 +- packages/apps/kubernetes/README.md | 114 ++- packages/apps/kubernetes/values.schema.json | 708 ++++++++++++++---- packages/apps/kubernetes/values.yaml | 105 +-- packages/apps/mysql/Makefile | 4 +- packages/apps/mysql/README.md | 55 +- packages/apps/mysql/values.schema.json | 271 +++++-- packages/apps/mysql/values.yaml | 42 +- packages/apps/nats/Makefile | 4 +- packages/apps/nats/README.md | 35 +- packages/apps/nats/values.schema.json | 198 +++-- packages/apps/nats/values.yaml | 30 +- packages/apps/postgres/README.md | 20 +- packages/apps/postgres/values.schema.json | 9 - packages/apps/postgres/values.yaml | 14 +- packages/apps/rabbitmq/Makefile | 4 +- packages/apps/rabbitmq/README.md | 36 +- packages/apps/rabbitmq/values.schema.json | 203 +++-- packages/apps/rabbitmq/values.yaml | 31 +- packages/apps/redis/Makefile | 4 +- packages/apps/redis/README.md | 26 +- packages/apps/redis/values.schema.json | 132 ++-- packages/apps/redis/values.yaml | 16 +- packages/apps/tcp-balancer/Makefile | 6 +- packages/apps/tcp-balancer/README.md | 34 +- packages/apps/tcp-balancer/values.schema.json | 115 ++- packages/apps/tcp-balancer/values.yaml | 26 +- packages/apps/virtual-machine/README.md | 2 +- packages/apps/virtual-machine/values.yaml | 8 +- packages/apps/vm-disk/Makefile | 2 +- packages/apps/vm-disk/README.md | 18 +- packages/apps/vm-disk/values.schema.json | 87 ++- packages/apps/vm-disk/values.yaml | 13 +- packages/apps/vm-instance/Makefile | 6 +- packages/apps/vm-instance/README.md | 37 +- packages/apps/vm-instance/values.schema.json | 126 +++- packages/apps/vm-instance/values.yaml | 43 +- packages/apps/vpn/Makefile | 4 +- packages/apps/vpn/README.md | 27 +- packages/apps/vpn/values.schema.json | 131 ++-- packages/apps/vpn/values.yaml | 17 +- packages/extra/etcd/README.md | 14 +- packages/extra/etcd/values.yaml | 4 +- packages/extra/info/Makefile | 3 +- packages/extra/info/values.schema.json | 8 +- packages/library/cozy-lib/Makefile | 2 +- 67 files changed, 2998 insertions(+), 1484 deletions(-) diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 68a03630..d8cd38db 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -28,8 +28,7 @@ jobs: - name: Install generate run: | - curl -sSL https://github.com/cozystack/readme-generator-for-helm/releases/download/v1.0.0/readme-generator-for-helm-linux-amd64.tar.gz | tar -xzvf- -C /usr/local/bin/ readme-generator-for-helm - curl -sSL https://github.com/cozystack/cozyvalues-gen/releases/download/v0.8.1/cozyvalues-gen-linux-amd64.tar.gz | tar -xzvf- -C /usr/local/bin/ cozyvalues-gen + curl -sSL https://github.com/cozystack/cozyvalues-gen/releases/download/v0.8.5/cozyvalues-gen-linux-amd64.tar.gz | tar -xzvf- -C /usr/local/bin/ cozyvalues-gen - name: Run pre-commit hooks run: | diff --git a/hack/e2e-apps/run-kubernetes.sh b/hack/e2e-apps/run-kubernetes.sh index be8a4eba..3988a264 100644 --- a/hack/e2e-apps/run-kubernetes.sh +++ b/hack/e2e-apps/run-kubernetes.sh @@ -57,9 +57,6 @@ spec: instanceType: u1.medium maxReplicas: 10 minReplicas: 0 - resources: - cpu: "" - memory: "" roles: - ingress-nginx storageClass: replicated diff --git a/hack/e2e-apps/vminstance.bats b/hack/e2e-apps/vminstance.bats index 59fe6c22..eb5996bf 100644 --- a/hack/e2e-apps/vminstance.bats +++ b/hack/e2e-apps/vminstance.bats @@ -42,9 +42,6 @@ spec: disks: - name: $diskName gpus: [] - resources: - cpu: "" - memory: "" sshKeys: - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPht0dPk5qQ+54g1hSX7A6AUxXJW5T6n/3d7Ga2F8gTF test@test diff --git a/packages/apps/bucket/Makefile b/packages/apps/bucket/Makefile index 6bb0835c..f242b9ea 100644 --- a/packages/apps/bucket/Makefile +++ b/packages/apps/bucket/Makefile @@ -1,4 +1,5 @@ include ../../../scripts/package.mk generate: - readme-generator-for-helm -v values.yaml -s values.schema.json -r README.md + cozyvalues-gen -v values.yaml -s values.schema.json -r README.md + yq -o json -i '.properties = {}' values.schema.json \ No newline at end of file diff --git a/packages/apps/bucket/values.schema.json b/packages/apps/bucket/values.schema.json index 9282941e..167bc53e 100644 --- a/packages/apps/bucket/values.schema.json +++ b/packages/apps/bucket/values.schema.json @@ -1,5 +1,5 @@ { - "properties": {}, - "title": "Chart Values", - "type": "object" -} \ No newline at end of file + "title": "Chart Values", + "type": "object", + "properties": {} +} diff --git a/packages/apps/clickhouse/Makefile b/packages/apps/clickhouse/Makefile index b46aa5b8..0724f170 100644 --- a/packages/apps/clickhouse/Makefile +++ b/packages/apps/clickhouse/Makefile @@ -1,13 +1,10 @@ CLICKHOUSE_BACKUP_TAG = $(shell awk '$$0 ~ /^version:/ {print $$2}' Chart.yaml) -PRESET_ENUM := ["nano","micro","small","medium","large","xlarge","2xlarge"] include ../../../scripts/common-envs.mk include ../../../scripts/package.mk generate: - readme-generator-for-helm -v values.yaml -s values.schema.json -r README.md - yq -i -o json --indent 4 '.properties.resourcesPreset.enum = $(PRESET_ENUM)' values.schema.json - yq -i -o json --indent 4 '.properties.clickhouseKeeper.resourcesPreset.enum = $(PRESET_ENUM)' values.schema.json + cozyvalues-gen -v values.yaml -s values.schema.json -r README.md image: docker buildx build images/clickhouse-backup \ diff --git a/packages/apps/clickhouse/README.md b/packages/apps/clickhouse/README.md index 692a58a7..af76f6fe 100644 --- a/packages/apps/clickhouse/README.md +++ b/packages/apps/clickhouse/README.md @@ -23,44 +23,54 @@ For more details, read [Restic: Effective Backup from Stdin](https://blog.aenix. ### Common parameters -| Name | Description | Value | -| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------- | ------- | -| `replicas` | Number of Clickhouse replicas | `2` | -| `shards` | Number of Clickhouse shards | `1` | -| `resources` | Explicit CPU and memory configuration for each ClickHouse replica. When left empty, the preset defined in `resourcesPreset` is applied. | `{}` | -| `resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. | `small` | -| `size` | Persistent Volume Claim size, available for application data | `10Gi` | -| `storageClass` | StorageClass used to store the application data | `""` | +| Name | Description | Type | Value | +| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ------- | +| `replicas` | Number of Clickhouse replicas | `int` | `2` | +| `shards` | Number of Clickhouse shards | `int` | `1` | +| `resources` | Explicit CPU and memory configuration for each Clickhouse replica. When left empty, the preset defined in `resourcesPreset` is applied. | `*object` | `{}` | +| `resources.cpu` | CPU | `*quantity` | `null` | +| `resources.memory` | Memory | `*quantity` | `null` | +| `resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`. | `string` | `small` | +| `size` | Persistent Volume Claim size, available for application data | `quantity` | `10Gi` | +| `storageClass` | StorageClass used to store the data | `string` | `""` | + ### Application-specific parameters -| Name | Description | Value | -| ---------------- | -------------------------------------------------------- | ----- | -| `logStorageSize` | Size of Persistent Volume for logs | `2Gi` | -| `logTTL` | TTL (expiration time) for query_log and query_thread_log | `15` | -| `users` | Users configuration | `{}` | +| Name | Description | Type | Value | +| ---------------------- | ------------------------------------------------------------ | ------------------- | ------- | +| `logStorageSize` | Size of Persistent Volume for logs | `quantity` | `2Gi` | +| `logTTL` | TTL (expiration time) for `query_log` and `query_thread_log` | `int` | `15` | +| `users` | Users configuration | `map[string]object` | `{...}` | +| `users[name].password` | Password for the user | `*string` | `null` | +| `users[name].readonly` | User is `readonly`, default is `false`. | `*bool` | `null` | + ### Backup parameters -| Name | Description | Value | -| ------------------------ | ---------------------------------------------- | ------------------------------------------------------ | -| `backup.enabled` | Enable periodic backups | `false` | -| `backup.s3Region` | AWS S3 region where backups are stored | `us-east-1` | -| `backup.s3Bucket` | S3 bucket used for storing backups | `s3.example.org/clickhouse-backups` | -| `backup.schedule` | Cron schedule for automated backups | `0 2 * * *` | -| `backup.cleanupStrategy` | Retention strategy for cleaning up old backups | `--keep-last=3 --keep-daily=3 --keep-within-weekly=1m` | -| `backup.s3AccessKey` | Access key for S3, used for authentication | `oobaiRus9pah8PhohL1ThaeTa4UVa7gu` | -| `backup.s3SecretKey` | Secret key for S3, used for authentication | `ju3eum4dekeich9ahM1te8waeGai0oog` | -| `backup.resticPassword` | Password for Restic backup encryption | `ChaXoveekoh6eigh4siesheeda2quai0` | +| Name | Description | Type | Value | +| ------------------------ | ---------------------------------------------- | -------- | ------------------------------------------------------ | +| `backup` | Backup configuration | `object` | `{}` | +| `backup.enabled` | Enable regular backups, default is `false` | `bool` | `false` | +| `backup.s3Region` | AWS S3 region where backups are stored | `string` | `us-east-1` | +| `backup.s3Bucket` | S3 bucket used for storing backups | `string` | `s3.example.org/clickhouse-backups` | +| `backup.schedule` | Cron schedule for automated backups | `string` | `0 2 * * *` | +| `backup.cleanupStrategy` | Retention strategy for cleaning up old backups | `string` | `--keep-last=3 --keep-daily=3 --keep-within-weekly=1m` | +| `backup.s3AccessKey` | Access key for S3, used for authentication | `string` | `oobaiRus9pah8PhohL1ThaeTa4UVa7gu` | +| `backup.s3SecretKey` | Secret key for S3, used for authentication | `string` | `ju3eum4dekeich9ahM1te8waeGai0oog` | +| `backup.resticPassword` | Password for Restic backup encryption | `string` | `ChaXoveekoh6eigh4siesheeda2quai0` | -### clickhouseKeeper parameters -| Name | Description | Value | -| ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | ------- | -| `clickhouseKeeper.enabled` | Deploy ClickHouse Keeper for cluster coordination | `true` | -| `clickhouseKeeper.size` | Persistent Volume Claim size, available for application data | `1Gi` | -| `clickhouseKeeper.resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. | `micro` | -| `clickhouseKeeper.replicas` | Number of keeper replicas | `3` | +### Clickhouse Keeper parameters + +| Name | Description | Type | Value | +| ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | ----------- | ------- | +| `clickhouseKeeper` | Clickhouse Keeper configuration | `*object` | `{}` | +| `clickhouseKeeper.enabled` | Deploy ClickHouse Keeper for cluster coordination | `*bool` | `true` | +| `clickhouseKeeper.size` | Persistent Volume Claim size, available for application data | `*quantity` | `1Gi` | +| `clickhouseKeeper.resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. | `string` | `micro` | +| `clickhouseKeeper.replicas` | Number of keeper replicas | `*int` | `3` | + ## Parameter examples and reference diff --git a/packages/apps/clickhouse/values.schema.json b/packages/apps/clickhouse/values.schema.json index b8134e6d..535fdabd 100644 --- a/packages/apps/clickhouse/values.schema.json +++ b/packages/apps/clickhouse/values.schema.json @@ -1,136 +1,237 @@ { - "properties": { - "backup": { - "properties": { - "cleanupStrategy": { - "default": "--keep-last=3 --keep-daily=3 --keep-within-weekly=1m", - "description": "Retention strategy for cleaning up old backups", - "type": "string" - }, - "enabled": { - "default": false, - "description": "Enable periodic backups", - "type": "boolean" - }, - "resticPassword": { - "default": "ChaXoveekoh6eigh4siesheeda2quai0", - "description": "Password for Restic backup encryption", - "type": "string" - }, - "s3AccessKey": { - "default": "oobaiRus9pah8PhohL1ThaeTa4UVa7gu", - "description": "Access key for S3, used for authentication", - "type": "string" - }, - "s3Bucket": { - "default": "s3.example.org/clickhouse-backups", - "description": "S3 bucket used for storing backups", - "type": "string" - }, - "s3Region": { - "default": "us-east-1", - "description": "AWS S3 region where backups are stored", - "type": "string" - }, - "s3SecretKey": { - "default": "ju3eum4dekeich9ahM1te8waeGai0oog", - "description": "Secret key for S3, used for authentication", - "type": "string" - }, - "schedule": { - "default": "0 2 * * *", - "description": "Cron schedule for automated backups", - "type": "string" - } - }, - "type": "object" + "title": "Chart Values", + "type": "object", + "properties": { + "backup": { + "description": "Backup configuration", + "type": "object", + "default": { + "cleanupStrategy": "--keep-last=3 --keep-daily=3 --keep-within-weekly=1m", + "enabled": false, + "resticPassword": "ChaXoveekoh6eigh4siesheeda2quai0", + "s3AccessKey": "oobaiRus9pah8PhohL1ThaeTa4UVa7gu", + "s3Bucket": "s3.example.org/clickhouse-backups", + "s3Region": "us-east-1", + "s3SecretKey": "ju3eum4dekeich9ahM1te8waeGai0oog", + "schedule": "0 2 * * *" + }, + "required": [ + "cleanupStrategy", + "enabled", + "resticPassword", + "s3AccessKey", + "s3Bucket", + "s3Region", + "s3SecretKey", + "schedule" + ], + "properties": { + "cleanupStrategy": { + "description": "Retention strategy for cleaning up old backups", + "type": "string", + "default": "--keep-last=3 --keep-daily=3 --keep-within-weekly=1m" }, - "clickhouseKeeper": { - "properties": { - "enabled": { - "default": true, - "description": "Deploy ClickHouse Keeper for cluster coordination ", - "type": "boolean" - }, - "replicas": { - "default": 3, - "description": "Number of keeper replicas", - "type": "number" - }, - "resourcesPreset": { - "default": "micro", - "description": "Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge.", - "type": "string" - }, - "size": { - "default": "1Gi", - "description": "Persistent Volume Claim size, available for application data", - "type": "string" - } - }, - "type": "object", - "resourcesPreset": { - "enum": [ - "nano", - "micro", - "small", - "medium", - "large", - "xlarge", - "2xlarge" - ] - } + "enabled": { + "description": "Enable regular backups, default is `false`", + "type": "boolean", + "default": false }, - "logStorageSize": { - "default": "2Gi", - "description": "Size of Persistent Volume for logs", - "type": "string" + "resticPassword": { + "description": "Password for Restic backup encryption", + "type": "string", + "default": "ChaXoveekoh6eigh4siesheeda2quai0" }, - "logTTL": { - "default": 15, - "description": "TTL (expiration time) for query_log and query_thread_log", - "type": "number" + "s3AccessKey": { + "description": "Access key for S3, used for authentication", + "type": "string", + "default": "oobaiRus9pah8PhohL1ThaeTa4UVa7gu" + }, + "s3Bucket": { + "description": "S3 bucket used for storing backups", + "type": "string", + "default": "s3.example.org/clickhouse-backups" + }, + "s3Region": { + "description": "AWS S3 region where backups are stored", + "type": "string", + "default": "us-east-1" + }, + "s3SecretKey": { + "description": "Secret key for S3, used for authentication", + "type": "string", + "default": "ju3eum4dekeich9ahM1te8waeGai0oog" + }, + "schedule": { + "description": "Cron schedule for automated backups", + "type": "string", + "default": "0 2 * * *" + } + } + }, + "clickhouseKeeper": { + "description": "Clickhouse Keeper configuration", + "type": "object", + "default": { + "enabled": true, + "replicas": 3, + "resourcesPreset": "micro", + "size": "1Gi" + }, + "required": [ + "resourcesPreset" + ], + "properties": { + "enabled": { + "description": "Deploy ClickHouse Keeper for cluster coordination", + "type": "boolean", + "default": true }, "replicas": { - "default": 2, - "description": "Number of Clickhouse replicas", - "type": "number" - }, - "resources": { - "default": {}, - "description": "Explicit CPU and memory configuration for each ClickHouse replica. When left empty, the preset defined in `resourcesPreset` is applied.", - "type": "object" + "description": "Number of keeper replicas", + "type": "integer", + "default": 3 }, "resourcesPreset": { - "default": "small", - "description": "Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge.", - "type": "string", - "enum": [ - "nano", - "micro", - "small", - "medium", - "large", - "xlarge", - "2xlarge" - ] - }, - "shards": { - "default": 1, - "description": "Number of Clickhouse shards", - "type": "number" + "description": "Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge.", + "type": "string", + "default": "micro", + "enum": [ + "nano", + "micro", + "small", + "medium", + "large", + "xlarge", + "2xlarge" + ] }, "size": { - "default": "10Gi", - "description": "Persistent Volume Claim size, available for application data", - "type": "string" - }, - "storageClass": { - "default": "", - "description": "StorageClass used to store the application data", - "type": "string" + "description": "Persistent Volume Claim size, available for application data", + "default": "1Gi", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true } + } }, - "title": "Chart Values", - "type": "object" -} + "logStorageSize": { + "description": "Size of Persistent Volume for logs", + "default": "2Gi", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + }, + "logTTL": { + "description": "TTL (expiration time) for `query_log` and `query_thread_log`", + "type": "integer", + "default": 15 + }, + "replicas": { + "description": "Number of Clickhouse replicas", + "type": "integer", + "default": 2 + }, + "resources": { + "description": "Explicit CPU and memory configuration for each Clickhouse replica. When left empty, the preset defined in `resourcesPreset` is applied.", + "type": "object", + "default": {}, + "properties": { + "cpu": { + "description": "CPU", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + }, + "memory": { + "description": "Memory", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + } + } + }, + "resourcesPreset": { + "description": "Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`.", + "type": "string", + "default": "small", + "enum": [ + "nano", + "micro", + "small", + "medium", + "large", + "xlarge", + "2xlarge" + ] + }, + "shards": { + "description": "Number of Clickhouse shards", + "type": "integer", + "default": 1 + }, + "size": { + "description": "Persistent Volume Claim size, available for application data", + "default": "10Gi", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + }, + "storageClass": { + "description": "StorageClass used to store the data", + "type": "string" + }, + "users": { + "description": "Users configuration", + "type": "object", + "default": {}, + "additionalProperties": { + "type": "object", + "properties": { + "password": { + "description": "Password for the user", + "type": "string" + }, + "readonly": { + "description": "User is `readonly`, default is `false`.", + "type": "boolean" + } + } + } + } + } +} \ No newline at end of file diff --git a/packages/apps/clickhouse/values.yaml b/packages/apps/clickhouse/values.yaml index c919d8ad..41424165 100644 --- a/packages/apps/clickhouse/values.yaml +++ b/packages/apps/clickhouse/values.yaml @@ -1,30 +1,36 @@ ## @section Common parameters ## -## @param replicas Number of Clickhouse replicas +## @param replicas {int} Number of Clickhouse replicas replicas: 2 -## @param shards Number of Clickhouse shards +## @param shards {int} Number of Clickhouse shards shards: 1 -## @param resources Explicit CPU and memory configuration for each ClickHouse replica. When left empty, the preset defined in `resourcesPreset` is applied. -resources: {} +## @param resources {*resources} Explicit CPU and memory configuration for each Clickhouse replica. When left empty, the preset defined in `resourcesPreset` is applied. +## @field resources.cpu {*quantity} CPU +## @field resources.memory {*quantity} Memory # resources: # cpu: 4000m # memory: 4Gi +resources: {} -## @param resourcesPreset Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. + + +## @param resourcesPreset {string enum:"nano,micro,small,medium,large,xlarge,2xlarge"} Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`. resourcesPreset: "small" -## @param size Persistent Volume Claim size, available for application data +## @param size {quantity} Persistent Volume Claim size, available for application data size: 10Gi -## @param storageClass StorageClass used to store the application data +## @param storageClass {string} StorageClass used to store the data storageClass: "" ## @section Application-specific parameters ## -## @param logStorageSize Size of Persistent Volume for logs +## @param logStorageSize {quantity} Size of Persistent Volume for logs logStorageSize: 2Gi -## @param logTTL TTL (expiration time) for query_log and query_thread_log +## @param logTTL {int} TTL (expiration time) for `query_log` and `query_thread_log` logTTL: 15 -## @param users [object] Users configuration +## @param users {map[string]user} Users configuration +## @field user.password {*string} Password for the user +## @field user.readonly {*bool} User is `readonly`, default is `false`. ## Example: ## users: ## user1: @@ -38,14 +44,15 @@ users: {} ## @section Backup parameters -## @param backup.enabled Enable periodic backups -## @param backup.s3Region AWS S3 region where backups are stored -## @param backup.s3Bucket S3 bucket used for storing backups -## @param backup.schedule Cron schedule for automated backups -## @param backup.cleanupStrategy Retention strategy for cleaning up old backups -## @param backup.s3AccessKey Access key for S3, used for authentication -## @param backup.s3SecretKey Secret key for S3, used for authentication -## @param backup.resticPassword Password for Restic backup encryption +## @param backup {backup} Backup configuration +## @field backup.enabled {bool} Enable regular backups, default is `false` +## @field backup.s3Region {string} AWS S3 region where backups are stored +## @field backup.s3Bucket {string} S3 bucket used for storing backups +## @field backup.schedule {string} Cron schedule for automated backups +## @field backup.cleanupStrategy {string} Retention strategy for cleaning up old backups +## @field backup.s3AccessKey {string} Access key for S3, used for authentication +## @field backup.s3SecretKey {string} Secret key for S3, used for authentication +## @field backup.resticPassword {string} Password for Restic backup encryption backup: enabled: false s3Region: us-east-1 @@ -56,11 +63,13 @@ backup: s3SecretKey: ju3eum4dekeich9ahM1te8waeGai0oog resticPassword: ChaXoveekoh6eigh4siesheeda2quai0 -## @section clickhouseKeeper parameters -## @param clickhouseKeeper.enabled Deploy ClickHouse Keeper for cluster coordination -## @param clickhouseKeeper.size Persistent Volume Claim size, available for application data -## @param clickhouseKeeper.resourcesPreset Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. -## @param clickhouseKeeper.replicas Number of keeper replicas + +## @section Clickhouse Keeper parameters +## @param clickhouseKeeper {*clickhouseKeeper} Clickhouse Keeper configuration +## @field clickhouseKeeper.enabled {*bool} Deploy ClickHouse Keeper for cluster coordination +## @field clickhouseKeeper.size {*quantity} Persistent Volume Claim size, available for application data +## @field clickhouseKeeper.resourcesPreset {string enum:"nano,micro,small,medium,large,xlarge,2xlarge"} Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. +## @field clickhouseKeeper.replicas {*int} Number of keeper replicas clickhouseKeeper: enabled: true size: 1Gi diff --git a/packages/apps/ferretdb/Makefile b/packages/apps/ferretdb/Makefile index b56dfd93..55dd28d9 100644 --- a/packages/apps/ferretdb/Makefile +++ b/packages/apps/ferretdb/Makefile @@ -1,9 +1,7 @@ include ../../../scripts/package.mk -PRESET_ENUM := ["nano","micro","small","medium","large","xlarge","2xlarge"] generate: - readme-generator-for-helm -v values.yaml -s values.schema.json -r README.md - yq -i -o json --indent 4 '.properties.resourcesPreset.enum = $(PRESET_ENUM)' values.schema.json + cozyvalues-gen -v values.yaml -s values.schema.json -r README.md update: tag=$$(git ls-remote --tags --sort="v:refname" https://github.com/FerretDB/FerretDB | awk -F'[/^]' '{sub("^v", "", $$3)} END{print $$3}') && \ diff --git a/packages/apps/ferretdb/README.md b/packages/apps/ferretdb/README.md index cf86212a..18d1b9b7 100644 --- a/packages/apps/ferretdb/README.md +++ b/packages/apps/ferretdb/README.md @@ -8,42 +8,52 @@ Internally, FerretDB service is backed by Postgres. ### Common parameters -| Name | Description | Value | -| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ------- | -| `replicas` | Number of replicas | `2` | -| `resources` | Explicit CPU and memory configuration for each FerretDB replica. When left empty, the preset defined in `resourcesPreset` is applied. | `{}` | -| `resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: none, nano, micro, small, medium, large, xlarge, 2xlarge. | `micro` | -| `size` | Persistent Volume size | `10Gi` | -| `storageClass` | StorageClass used to store the data | `""` | -| `external` | Enable external access from outside the cluster | `false` | +| Name | Description | Type | Value | +| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ------- | +| `replicas` | Number of replicas | `int` | `2` | +| `resources` | Explicit CPU and memory configuration for each FerretDB replica. When left empty, the preset defined in `resourcesPreset` is applied. | `*object` | `{}` | +| `resources.cpu` | CPU | `*quantity` | `null` | +| `resources.memory` | Memory | `*quantity` | `null` | +| `resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`. | `string` | `micro` | +| `size` | Persistent Volume Claim size, available for application data | `quantity` | `10Gi` | +| `storageClass` | StorageClass used to store the data | `string` | `""` | +| `external` | Enable external access from outside the cluster | `bool` | `false` | + ### Application-specific parameters -| Name | Description | Value | -| ------------------------ | --------------------------------------------------------------------------------------------------------------------------- | ----- | -| `quorum.minSyncReplicas` | Minimum number of synchronous replicas that must acknowledge a transaction before it is considered committed | `0` | -| `quorum.maxSyncReplicas` | Maximum number of synchronous replicas that can acknowledge a transaction (must be lower than the total number of replicas) | `0` | -| `users` | Users configuration | `{}` | +| Name | Description | Type | Value | +| ------------------------ | --------------------------------------------------------------------------------------------------------------------------- | ------------------- | ------- | +| `quorum` | Configuration for the quorum-based synchronous replication | `object` | `{}` | +| `quorum.minSyncReplicas` | Minimum number of synchronous replicas that must acknowledge a transaction before it is considered committed | `int` | `0` | +| `quorum.maxSyncReplicas` | Maximum number of synchronous replicas that can acknowledge a transaction (must be lower than the total number of replicas) | `int` | `0` | +| `users` | Users configuration | `map[string]object` | `{...}` | +| `users[name].password` | Password for the user | `*string` | `null` | + ### Backup parameters -| Name | Description | Value | -| ------------------------ | ---------------------------------------------------------- | ----------------------------------- | -| `backup.enabled` | Enable regular backups | `false` | -| `backup.schedule` | Cron schedule for automated backups | `0 2 * * * *` | -| `backup.retentionPolicy` | Retention policy | `30d` | -| `backup.destinationPath` | Path to store the backup (i.e. s3://bucket/path/to/folder) | `s3://bucket/path/to/folder/` | -| `backup.endpointURL` | S3 Endpoint used to upload data to the cloud | `http://minio-gateway-service:9000` | -| `backup.s3AccessKey` | Access key for S3, used for authentication | `oobaiRus9pah8PhohL1ThaeTa4UVa7gu` | -| `backup.s3SecretKey` | Secret key for S3, used for authentication | `ju3eum4dekeich9ahM1te8waeGai0oog` | +| Name | Description | Type | Value | +| ------------------------ | ---------------------------------------------------------- | -------- | ----------------------------------- | +| `backup` | Backup configuration | `object` | `{}` | +| `backup.enabled` | Enable regular backups, default is `false`. | `bool` | `false` | +| `backup.schedule` | Cron schedule for automated backups | `string` | `0 2 * * * *` | +| `backup.retentionPolicy` | Retention policy | `string` | `30d` | +| `backup.endpointURL` | S3 Endpoint used to upload data to the cloud | `string` | `http://minio-gateway-service:9000` | +| `backup.destinationPath` | Path to store the backup (i.e. s3://bucket/path/to/folder) | `string` | `s3://bucket/path/to/folder/` | +| `backup.s3AccessKey` | Access key for S3, used for authentication | `string` | `oobaiRus9pah8PhohL1ThaeTa4UVa7gu` | +| `backup.s3SecretKey` | Secret key for S3, used for authentication | `string` | `ju3eum4dekeich9ahM1te8waeGai0oog` | + ### Bootstrap (recovery) parameters -| Name | Description | Value | -| ------------------------ | -------------------------------------------------------------------------------------------------------------------- | ------- | -| `bootstrap.enabled` | Restore database cluster from a backup | `false` | -| `bootstrap.recoveryTime` | Timestamp (PITR) up to which recovery will proceed, expressed in RFC 3339 format. If left empty, will restore latest | `""` | -| `bootstrap.oldName` | Name of database cluster before deleting | `""` | +| Name | Description | Type | Value | +| ------------------------ | --------------------------------------------------------------------------------------------------------------------- | --------- | ------- | +| `bootstrap` | Bootstrap (recovery) configuration | `object` | `{}` | +| `bootstrap.enabled` | Restore database cluster from a backup | `*bool` | `false` | +| `bootstrap.recoveryTime` | Timestamp (PITR) up to which recovery will proceed, expressed in RFC 3339 format. If left empty, will restore latest. | `*string` | `""` | +| `bootstrap.oldName` | Name of database cluster before deleting | `*string` | `""` | + ## Parameter examples and reference diff --git a/packages/apps/ferretdb/values.schema.json b/packages/apps/ferretdb/values.schema.json index d0800af3..d75c55f6 100644 --- a/packages/apps/ferretdb/values.schema.json +++ b/packages/apps/ferretdb/values.schema.json @@ -1,120 +1,202 @@ { - "properties": { - "backup": { - "properties": { - "destinationPath": { - "default": "s3://bucket/path/to/folder/", - "description": "Path to store the backup (i.e. s3://bucket/path/to/folder)", - "type": "string" - }, - "enabled": { - "default": false, - "description": "Enable regular backups", - "type": "boolean" - }, - "endpointURL": { - "default": "http://minio-gateway-service:9000", - "description": "S3 Endpoint used to upload data to the cloud", - "type": "string" - }, - "retentionPolicy": { - "default": "30d", - "description": "Retention policy", - "type": "string" - }, - "s3AccessKey": { - "default": "oobaiRus9pah8PhohL1ThaeTa4UVa7gu", - "description": "Access key for S3, used for authentication", - "type": "string" - }, - "s3SecretKey": { - "default": "ju3eum4dekeich9ahM1te8waeGai0oog", - "description": "Secret key for S3, used for authentication", - "type": "string" - }, - "schedule": { - "default": "0 2 * * * *", - "description": "Cron schedule for automated backups", - "type": "string" - } - }, - "type": "object" + "title": "Chart Values", + "type": "object", + "properties": { + "backup": { + "description": "Backup configuration", + "type": "object", + "default": { + "destinationPath": "s3://bucket/path/to/folder/", + "enabled": false, + "endpointURL": "http://minio-gateway-service:9000", + "retentionPolicy": "30d", + "s3AccessKey": "oobaiRus9pah8PhohL1ThaeTa4UVa7gu", + "s3SecretKey": "ju3eum4dekeich9ahM1te8waeGai0oog", + "schedule": "0 2 * * * *" + }, + "required": [ + "destinationPath", + "enabled", + "endpointURL", + "retentionPolicy", + "s3AccessKey", + "s3SecretKey", + "schedule" + ], + "properties": { + "destinationPath": { + "description": "Path to store the backup (i.e. s3://bucket/path/to/folder)", + "type": "string", + "default": "s3://bucket/path/to/folder/" }, - "bootstrap": { - "properties": { - "enabled": { - "default": false, - "description": "Restore database cluster from a backup", - "type": "boolean" - }, - "oldName": { - "default": "", - "description": "Name of database cluster before deleting", - "type": "string" - }, - "recoveryTime": { - "default": "", - "description": "Timestamp (PITR) up to which recovery will proceed, expressed in RFC 3339 format. If left empty, will restore latest", - "type": "string" - } - }, - "type": "object" + "enabled": { + "description": "Enable regular backups, default is `false`.", + "type": "boolean", + "default": false }, - "external": { - "default": false, - "description": "Enable external access from outside the cluster", - "type": "boolean" + "endpointURL": { + "description": "S3 Endpoint used to upload data to the cloud", + "type": "string", + "default": "http://minio-gateway-service:9000" }, - "quorum": { - "properties": { - "maxSyncReplicas": { - "default": 0, - "description": "Maximum number of synchronous replicas that can acknowledge a transaction (must be lower than the total number of replicas)", - "type": "number" - }, - "minSyncReplicas": { - "default": 0, - "description": "Minimum number of synchronous replicas that must acknowledge a transaction before it is considered committed", - "type": "number" - } - }, - "type": "object" + "retentionPolicy": { + "description": "Retention policy", + "type": "string", + "default": "30d" }, - "replicas": { - "default": 2, - "description": "Number of replicas", - "type": "number" + "s3AccessKey": { + "description": "Access key for S3, used for authentication", + "type": "string", + "default": "oobaiRus9pah8PhohL1ThaeTa4UVa7gu" }, - "resources": { - "default": {}, - "description": "Explicit CPU and memory configuration for each FerretDB replica. When left empty, the preset defined in `resourcesPreset` is applied.", - "type": "object" + "s3SecretKey": { + "description": "Secret key for S3, used for authentication", + "type": "string", + "default": "ju3eum4dekeich9ahM1te8waeGai0oog" }, - "resourcesPreset": { - "default": "micro", - "description": "Default sizing preset used when `resources` is omitted. Allowed values: none, nano, micro, small, medium, large, xlarge, 2xlarge.", - "type": "string", - "enum": [ - "nano", - "micro", - "small", - "medium", - "large", - "xlarge", - "2xlarge" - ] - }, - "size": { - "default": "10Gi", - "description": "Persistent Volume size", - "type": "string" - }, - "storageClass": { - "default": "", - "description": "StorageClass used to store the data", - "type": "string" + "schedule": { + "description": "Cron schedule for automated backups", + "type": "string", + "default": "0 2 * * * *" } + } }, - "title": "Chart Values", - "type": "object" -} + "bootstrap": { + "description": "Bootstrap (recovery) configuration", + "type": "object", + "default": { + "enabled": false, + "oldName": "", + "recoveryTime": "" + }, + "properties": { + "enabled": { + "description": "Restore database cluster from a backup", + "type": "boolean", + "default": false + }, + "oldName": { + "description": "Name of database cluster before deleting", + "type": "string" + }, + "recoveryTime": { + "description": "Timestamp (PITR) up to which recovery will proceed, expressed in RFC 3339 format. If left empty, will restore latest.", + "type": "string" + } + } + }, + "external": { + "description": "Enable external access from outside the cluster", + "type": "boolean", + "default": false + }, + "quorum": { + "description": "Configuration for the quorum-based synchronous replication", + "type": "object", + "default": { + "maxSyncReplicas": 0, + "minSyncReplicas": 0 + }, + "required": [ + "maxSyncReplicas", + "minSyncReplicas" + ], + "properties": { + "maxSyncReplicas": { + "description": "Maximum number of synchronous replicas that can acknowledge a transaction (must be lower than the total number of replicas)", + "type": "integer", + "default": 0 + }, + "minSyncReplicas": { + "description": "Minimum number of synchronous replicas that must acknowledge a transaction before it is considered committed", + "type": "integer", + "default": 0 + } + } + }, + "replicas": { + "description": "Number of replicas", + "type": "integer", + "default": 2 + }, + "resources": { + "description": "Explicit CPU and memory configuration for each FerretDB replica. When left empty, the preset defined in `resourcesPreset` is applied.", + "type": "object", + "default": {}, + "properties": { + "cpu": { + "description": "CPU", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + }, + "memory": { + "description": "Memory", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + } + } + }, + "resourcesPreset": { + "description": "Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`.", + "type": "string", + "default": "micro", + "enum": [ + "nano", + "micro", + "small", + "medium", + "large", + "xlarge", + "2xlarge" + ] + }, + "size": { + "description": "Persistent Volume Claim size, available for application data", + "default": "10Gi", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + }, + "storageClass": { + "description": "StorageClass used to store the data", + "type": "string" + }, + "users": { + "description": "Users configuration", + "type": "object", + "default": {}, + "additionalProperties": { + "type": "object", + "properties": { + "password": { + "description": "Password for the user", + "type": "string" + } + } + } + } + } +} \ No newline at end of file diff --git a/packages/apps/ferretdb/values.yaml b/packages/apps/ferretdb/values.yaml index 7250ea57..18ba15ba 100644 --- a/packages/apps/ferretdb/values.yaml +++ b/packages/apps/ferretdb/values.yaml @@ -1,31 +1,35 @@ ## @section Common parameters ## -## @param replicas Number of replicas +## @param replicas {int} Number of replicas replicas: 2 -## @param resources Explicit CPU and memory configuration for each FerretDB replica. When left empty, the preset defined in `resourcesPreset` is applied. -resources: {} +## @param resources {*resources} Explicit CPU and memory configuration for each FerretDB replica. When left empty, the preset defined in `resourcesPreset` is applied. +## @field resources.cpu {*quantity} CPU +## @field resources.memory {*quantity} Memory # resources: # cpu: 4000m # memory: 4Gi -## @param resourcesPreset Default sizing preset used when `resources` is omitted. Allowed values: none, nano, micro, small, medium, large, xlarge, 2xlarge. -resourcesPreset: "micro" -## @param size Persistent Volume size -size: 10Gi -## @param storageClass StorageClass used to store the data -storageClass: "" -## @param external Enable external access from outside the cluster -external: false +resources: {} +## @param resourcesPreset {string enum:"nano,micro,small,medium,large,xlarge,2xlarge"} Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`. +resourcesPreset: "micro" +## @param size {quantity} Persistent Volume Claim size, available for application data +size: 10Gi +## @param storageClass {string} StorageClass used to store the data +storageClass: "" +## @param external {bool} Enable external access from outside the cluster +external: false ## @section Application-specific parameters ## -## Configuration for the quorum-based synchronous replication -## @param quorum.minSyncReplicas Minimum number of synchronous replicas that must acknowledge a transaction before it is considered committed -## @param quorum.maxSyncReplicas Maximum number of synchronous replicas that can acknowledge a transaction (must be lower than the total number of replicas) +## @param quorum {quorum} Configuration for the quorum-based synchronous replication +## @field quorum.minSyncReplicas {int} Minimum number of synchronous replicas that must acknowledge a transaction before it is considered committed +## @field quorum.maxSyncReplicas {int} Maximum number of synchronous replicas that can acknowledge a transaction (must be lower than the total number of replicas) quorum: minSyncReplicas: 0 maxSyncReplicas: 0 -## @param users [object] Users configuration + +## @param users {map[string]user} Users configuration +## @field user.password {*string} Password for the user ## Example: ## users: ## user1: @@ -36,30 +40,34 @@ quorum: users: {} + ## @section Backup parameters ## -## @param backup.enabled Enable regular backups -## @param backup.schedule Cron schedule for automated backups -## @param backup.retentionPolicy Retention policy -## @param backup.destinationPath Path to store the backup (i.e. s3://bucket/path/to/folder) -## @param backup.endpointURL S3 Endpoint used to upload data to the cloud -## @param backup.s3AccessKey Access key for S3, used for authentication -## @param backup.s3SecretKey Secret key for S3, used for authentication + +## @param backup {backup} Backup configuration +## @field backup.enabled {bool} Enable regular backups, default is `false`. +## @field backup.schedule {string} Cron schedule for automated backups +## @field backup.retentionPolicy {string} Retention policy +## @field backup.endpointURL {string} S3 Endpoint used to upload data to the cloud +## @field backup.destinationPath {string} Path to store the backup (i.e. s3://bucket/path/to/folder) +## @field backup.s3AccessKey {string} Access key for S3, used for authentication +## @field backup.s3SecretKey {string} Secret key for S3, used for authentication backup: enabled: false - retentionPolicy: 30d - destinationPath: s3://bucket/path/to/folder/ - endpointURL: http://minio-gateway-service:9000 schedule: "0 2 * * * *" + retentionPolicy: 30d + endpointURL: http://minio-gateway-service:9000 + destinationPath: s3://bucket/path/to/folder/ s3AccessKey: oobaiRus9pah8PhohL1ThaeTa4UVa7gu s3SecretKey: ju3eum4dekeich9ahM1te8waeGai0oog ## @section Bootstrap (recovery) parameters ## -## @param bootstrap.enabled Restore database cluster from a backup -## @param bootstrap.recoveryTime Timestamp (PITR) up to which recovery will proceed, expressed in RFC 3339 format. If left empty, will restore latest -## @param bootstrap.oldName Name of database cluster before deleting +## @param bootstrap {bootstrap} Bootstrap (recovery) configuration +## @field bootstrap.enabled {*bool} Restore database cluster from a backup +## @field bootstrap.recoveryTime {*string} Timestamp (PITR) up to which recovery will proceed, expressed in RFC 3339 format. If left empty, will restore latest. +## @field bootstrap.oldName {*string} Name of database cluster before deleting ## bootstrap: enabled: false diff --git a/packages/apps/http-cache/Makefile b/packages/apps/http-cache/Makefile index bb50be5b..802df1f2 100644 --- a/packages/apps/http-cache/Makefile +++ b/packages/apps/http-cache/Makefile @@ -1,5 +1,4 @@ NGINX_CACHE_TAG = $(shell awk '$$1 == "version:" {print $$2}' Chart.yaml) -PRESET_ENUM := ["nano","micro","small","medium","large","xlarge","2xlarge"] include ../../../scripts/common-envs.mk include ../../../scripts/package.mk @@ -23,9 +22,7 @@ image-nginx: rm -f images/nginx-cache.json generate: - readme-generator-for-helm -v values.yaml -s values.schema.json -r README.md - yq -i -o json --indent 4 '.properties.haproxy.properties.resourcesPreset.enum = $(PRESET_ENUM)' values.schema.json - yq -i -o json --indent 4 '.properties.nginx.properties.resourcesPreset.enum = $(PRESET_ENUM)' values.schema.json + cozyvalues-gen -v values.yaml -s values.schema.json -r README.md update: tag=$$(git ls-remote --tags --sort="v:refname" https://github.com/chrislim2888/IP2Location-C-Library | awk -F'[/^]' 'END{print $$3}') && \ diff --git a/packages/apps/http-cache/README.md b/packages/apps/http-cache/README.md index b20dedf0..c3d504df 100644 --- a/packages/apps/http-cache/README.md +++ b/packages/apps/http-cache/README.md @@ -60,33 +60,43 @@ The deployment architecture is illustrated in the diagram below: ### Common parameters -| Name | Description | Value | -| -------------- | ----------------------------------------------- | ------- | -| `size` | Persistent Volume size | `10Gi` | -| `storageClass` | StorageClass used to store the data | `""` | -| `external` | Enable external access from outside the cluster | `false` | +| Name | Description | Type | Value | +| -------------- | ------------------------------------------------------------ | ---------- | ------- | +| `size` | Persistent Volume Claim size, available for application data | `quantity` | `10Gi` | +| `storageClass` | StorageClass used to store the data | `string` | `""` | +| `external` | Enable external access from outside the cluster | `bool` | `false` | + ### Application-specific parameters -| Name | Description | Value | -| ----------- | ----------------------- | ----- | -| `endpoints` | Endpoints configuration | `[]` | +| Name | Description | Type | Value | +| ----------- | ----------------------------------------------- | ---------- | ----- | +| `endpoints` | Endpoints configuration, as a list of | `[]string` | `[]` | + ### HAProxy parameters -| Name | Description | Value | -| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | ------ | -| `haproxy.replicas` | Number of HAProxy replicas | `2` | -| `haproxy.resources` | Explicit CPU and memory configuration for each HAProxy replica. When left empty, the preset defined in `resourcesPreset` is applied. | `{}` | -| `haproxy.resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. | `nano` | +| Name | Description | Type | Value | +| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ------ | +| `haproxy` | HAProxy configuration | `object` | `{}` | +| `haproxy.replicas` | Number of HAProxy replicas | `int` | `2` | +| `haproxy.resources` | Explicit CPU and memory configuration for each replica. When left empty, the preset defined in `resourcesPreset` is applied. | `object` | `{}` | +| `haproxy.resources.cpu` | CPU | `*quantity` | `null` | +| `haproxy.resources.memory` | Memory | `*quantity` | `null` | +| `haproxy.resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`. | `string` | `nano` | + ### Nginx parameters -| Name | Description | Value | -| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------ | -| `nginx.replicas` | Number of Nginx replicas | `2` | -| `nginx.resources` | Explicit CPU and memory configuration for each nginx replica. When left empty, the preset defined in `resourcesPreset` is applied. | `{}` | -| `nginx.resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. | `nano` | +| Name | Description | Type | Value | +| ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ------ | +| `nginx` | Nginx configuration | `object` | `{}` | +| `nginx.replicas` | Number of Nginx replicas | `int` | `2` | +| `nginx.resources` | Explicit CPU and memory configuration for each replica. When left empty, the preset defined in `resourcesPreset` is applied. | `*object` | `null` | +| `nginx.resources.cpu` | CPU | `*quantity` | `null` | +| `nginx.resources.memory` | Memory | `*quantity` | `null` | +| `nginx.resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`. | `string` | `nano` | + ## Parameter examples and reference diff --git a/packages/apps/http-cache/values.schema.json b/packages/apps/http-cache/values.schema.json index d93b6f5d..97597ff8 100644 --- a/packages/apps/http-cache/values.schema.json +++ b/packages/apps/http-cache/values.schema.json @@ -1,85 +1,172 @@ { - "properties": { - "endpoints": { - "default": [], - "description": "Endpoints configuration", - "items": {}, - "type": "array" - }, - "external": { - "default": false, - "description": "Enable external access from outside the cluster", - "type": "boolean" - }, - "haproxy": { - "properties": { - "replicas": { - "default": 2, - "description": "Number of HAProxy replicas", - "type": "number" - }, - "resources": { - "default": {}, - "description": "Explicit CPU and memory configuration for each HAProxy replica. When left empty, the preset defined in `resourcesPreset` is applied.", - "type": "object" - }, - "resourcesPreset": { - "default": "nano", - "description": "Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge.", - "type": "string", - "enum": [ - "nano", - "micro", - "small", - "medium", - "large", - "xlarge", - "2xlarge" - ] - } - }, - "type": "object" - }, - "nginx": { - "properties": { - "replicas": { - "default": 2, - "description": "Number of Nginx replicas", - "type": "number" - }, - "resources": { - "default": {}, - "description": "Explicit CPU and memory configuration for each nginx replica. When left empty, the preset defined in `resourcesPreset` is applied.", - "type": "object" - }, - "resourcesPreset": { - "default": "nano", - "description": "Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge.", - "type": "string", - "enum": [ - "nano", - "micro", - "small", - "medium", - "large", - "xlarge", - "2xlarge" - ] - } - }, - "type": "object" - }, - "size": { - "default": "10Gi", - "description": "Persistent Volume size", - "type": "string" - }, - "storageClass": { - "default": "", - "description": "StorageClass used to store the data", - "type": "string" - } + "title": "Chart Values", + "type": "object", + "properties": { + "endpoints": { + "description": "Endpoints configuration, as a list of \u003cip:port\u003e", + "type": "array", + "default": [], + "items": { + "type": "string" + } }, - "title": "Chart Values", - "type": "object" -} + "external": { + "description": "Enable external access from outside the cluster", + "type": "boolean", + "default": false + }, + "haproxy": { + "description": "HAProxy configuration", + "type": "object", + "default": { + "replicas": 2, + "resources": {}, + "resourcesPreset": "nano" + }, + "required": [ + "replicas", + "resources", + "resourcesPreset" + ], + "properties": { + "replicas": { + "description": "Number of HAProxy replicas", + "type": "integer", + "default": 2 + }, + "resources": { + "description": "Explicit CPU and memory configuration for each replica. When left empty, the preset defined in `resourcesPreset` is applied.", + "type": "object", + "default": {}, + "properties": { + "cpu": { + "description": "CPU", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + }, + "memory": { + "description": "Memory", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + } + } + }, + "resourcesPreset": { + "description": "Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`.", + "type": "string", + "default": "nano", + "enum": [ + "nano", + "micro", + "small", + "medium", + "large", + "xlarge", + "2xlarge" + ] + } + } + }, + "nginx": { + "description": "Nginx configuration", + "type": "object", + "default": { + "replicas": 2, + "resources": {}, + "resourcesPreset": "nano" + }, + "required": [ + "replicas", + "resourcesPreset" + ], + "properties": { + "replicas": { + "description": "Number of Nginx replicas", + "type": "integer", + "default": 2 + }, + "resources": { + "description": "Explicit CPU and memory configuration for each replica. When left empty, the preset defined in `resourcesPreset` is applied.", + "type": "object", + "default": {}, + "properties": { + "cpu": { + "description": "CPU", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + }, + "memory": { + "description": "Memory", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + } + } + }, + "resourcesPreset": { + "description": "Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`.", + "type": "string", + "default": "nano", + "enum": [ + "nano", + "micro", + "small", + "medium", + "large", + "xlarge", + "2xlarge" + ] + } + } + }, + "size": { + "description": "Persistent Volume Claim size, available for application data", + "default": "10Gi", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + }, + "storageClass": { + "description": "StorageClass used to store the data", + "type": "string" + } + } +} \ No newline at end of file diff --git a/packages/apps/http-cache/values.yaml b/packages/apps/http-cache/values.yaml index db88617d..3deb7090 100644 --- a/packages/apps/http-cache/values.yaml +++ b/packages/apps/http-cache/values.yaml @@ -1,14 +1,14 @@ ## @section Common parameters ## -## @param size Persistent Volume size +## @param size {quantity} Persistent Volume Claim size, available for application data size: 10Gi -## @param storageClass StorageClass used to store the data +## @param storageClass {string} StorageClass used to store the data storageClass: "" -## @param external Enable external access from outside the cluster +## @param external {bool} Enable external access from outside the cluster external: false ## @section Application-specific parameters -## @param endpoints Endpoints configuration +## @param endpoints {[]string} Endpoints configuration, as a list of ## Example: ## endpoints: ## - 10.100.3.1:80 @@ -20,28 +20,34 @@ external: false ## endpoints: [] + ## @section HAProxy parameters +## +## @param haproxy {haproxy} HAProxy configuration haproxy: - ## @param haproxy.replicas Number of HAProxy replicas + ## @field haproxy.replicas {int} Number of HAProxy replicas replicas: 2 - ## @param haproxy.resources Explicit CPU and memory configuration for each HAProxy replica. When left empty, the preset defined in `resourcesPreset` is applied. + ## @field haproxy.resources {resources} Explicit CPU and memory configuration for each replica. When left empty, the preset defined in `resourcesPreset` is applied. + ## @field resources.cpu {*quantity} CPU + ## @field resources.memory {*quantity} Memory resources: {} # resources: # cpu: 4000m # memory: 4Gi - - ## @param haproxy.resourcesPreset Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. + ## @field haproxy.resourcesPreset {string enum:"nano,micro,small,medium,large,xlarge,2xlarge"} Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`. resourcesPreset: "nano" ## @section Nginx parameters +## +## @param nginx {nginx} Nginx configuration nginx: - ## @param nginx.replicas Number of Nginx replicas + ## @field nginx.replicas {int} Number of Nginx replicas replicas: 2 - ## @param nginx.resources Explicit CPU and memory configuration for each nginx replica. When left empty, the preset defined in `resourcesPreset` is applied. - resources: {} + ## @field nginx.resources {*resources} Explicit CPU and memory configuration for each replica. When left empty, the preset defined in `resourcesPreset` is applied. # resources: # cpu: 4000m # memory: 4Gi + resources: {} - ## @param nginx.resourcesPreset Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. + ## @field nginx.resourcesPreset {string enum:"nano,micro,small,medium,large,xlarge,2xlarge"} Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`. resourcesPreset: "nano" diff --git a/packages/apps/kafka/Makefile b/packages/apps/kafka/Makefile index 8e646a88..9e4d8a6e 100644 --- a/packages/apps/kafka/Makefile +++ b/packages/apps/kafka/Makefile @@ -2,6 +2,4 @@ include ../../../scripts/package.mk PRESET_ENUM := ["nano","micro","small","medium","large","xlarge","2xlarge"] generate: - readme-generator-for-helm -v values.yaml -s values.schema.json -r README.md - yq -i -o json --indent 4 '.properties.kafka.properties.resourcesPreset.enum = $(PRESET_ENUM)' values.schema.json - yq -i -o json --indent 4 '.properties.zookeeper.properties.resourcesPreset.enum = $(PRESET_ENUM)' values.schema.json + cozyvalues-gen -v values.yaml -s values.schema.json -r README.md diff --git a/packages/apps/kafka/README.md b/packages/apps/kafka/README.md index 9b030c1d..bc3e5b90 100644 --- a/packages/apps/kafka/README.md +++ b/packages/apps/kafka/README.md @@ -4,35 +4,49 @@ ### Common parameters -| Name | Description | Value | -| ---------- | ----------------------------------------------- | ------- | -| `external` | Enable external access from outside the cluster | `false` | +| Name | Description | Type | Value | +| ---------- | ----------------------------------------------- | ------ | ------- | +| `external` | Enable external access from outside the cluster | `bool` | `false` | + ### Application-specific parameters -| Name | Description | Value | -| -------- | ---------------------------------- | ----- | -| `topics` | Topics configuration (see example) | `[]` | +| Name | Description | Type | Value | +| ---------------------- | -------------------- | ---------- | ----- | +| `topics` | Topics configuration | `[]object` | `[]` | +| `topics[i].name` | Topic name | `string` | `""` | +| `topics[i].partitions` | Number of partitions | `int` | `0` | +| `topics[i].replicas` | Number of replicas | `int` | `0` | +| `topics[i].config` | Topic configuration | `object` | `{}` | + ### Kafka configuration -| Name | Description | Value | -| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------- | -| `kafka.replicas` | Number of Kafka replicas | `3` | -| `kafka.resources` | Explicit CPU and memory configuration for each Kafka replica. When left empty, the preset defined in `resourcesPreset` is applied. | `{}` | -| `kafka.resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. | `small` | -| `kafka.size` | Persistent Volume size for Kafka | `10Gi` | -| `kafka.storageClass` | StorageClass used to store the Kafka data | `""` | +| Name | Description | Type | Value | +| ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ------- | +| `kafka` | Kafka configuration | `object` | `{}` | +| `kafka.replicas` | Number of Kafka replicas | `int` | `3` | +| `kafka.resources` | Explicit CPU and memory configuration for each replica. When left empty, the preset defined in `resourcesPreset` is applied. | `*object` | `null` | +| `kafka.resources.cpu` | CPU | `*quantity` | `null` | +| `kafka.resources.memory` | Memory | `*quantity` | `null` | +| `kafka.resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`. | `string` | `small` | +| `kafka.size` | Persistent Volume size for Kafka | `quantity` | `10Gi` | +| `kafka.storageClass` | StorageClass used to store the Kafka data | `string` | `""` | + ### Zookeeper configuration -| Name | Description | Value | -| --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ------- | -| `zookeeper.replicas` | Number of ZooKeeper replicas | `3` | -| `zookeeper.resources` | Explicit CPU and memory configuration for each Zookeeper replica. When left empty, the preset defined in `resourcesPreset` is applied. | `{}` | -| `zookeeper.resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. | `small` | -| `zookeeper.size` | Persistent Volume size for ZooKeeper | `5Gi` | -| `zookeeper.storageClass` | StorageClass used to store the ZooKeeper data | `""` | +| Name | Description | Type | Value | +| ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ------- | +| `zookeeper` | Zookeeper configuration | `object` | `{}` | +| `zookeeper.replicas` | Number of ZooKeeper replicas | `int` | `3` | +| `zookeeper.resources` | Explicit CPU and memory configuration for each replica. When left empty, the preset defined in `resourcesPreset` is applied. | `*object` | `null` | +| `zookeeper.resources.cpu` | CPU | `*quantity` | `null` | +| `zookeeper.resources.memory` | Memory | `*quantity` | `null` | +| `zookeeper.resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`. | `string` | `small` | +| `zookeeper.size` | Persistent Volume size for ZooKeeper | `quantity` | `5Gi` | +| `zookeeper.storageClass` | StorageClass used to store the ZooKeeper data | `string` | `""` | + ## Parameter examples and reference diff --git a/packages/apps/kafka/values.schema.json b/packages/apps/kafka/values.schema.json index 946f3ea4..59f8f3d4 100644 --- a/packages/apps/kafka/values.schema.json +++ b/packages/apps/kafka/values.schema.json @@ -1,95 +1,222 @@ { - "properties": { - "external": { - "default": false, - "description": "Enable external access from outside the cluster", - "type": "boolean" - }, - "kafka": { - "properties": { - "replicas": { - "default": 3, - "description": "Number of Kafka replicas", - "type": "number" - }, - "resources": { - "default": {}, - "description": "Explicit CPU and memory configuration for each Kafka replica. When left empty, the preset defined in `resourcesPreset` is applied.", - "type": "object" - }, - "resourcesPreset": { - "default": "small", - "description": "Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge.", - "type": "string", - "enum": [ - "nano", - "micro", - "small", - "medium", - "large", - "xlarge", - "2xlarge" - ] - }, - "size": { - "default": "10Gi", - "description": "Persistent Volume size for Kafka", - "type": "string" - }, - "storageClass": { - "default": "", - "description": "StorageClass used to store the Kafka data", - "type": "string" - } - }, - "type": "object" - }, - "topics": { - "default": [], - "description": "Topics configuration (see example)", - "items": {}, - "type": "array" - }, - "zookeeper": { - "properties": { - "replicas": { - "default": 3, - "description": "Number of ZooKeeper replicas", - "type": "number" - }, - "resources": { - "default": {}, - "description": "Explicit CPU and memory configuration for each Zookeeper replica. When left empty, the preset defined in `resourcesPreset` is applied.", - "type": "object" - }, - "resourcesPreset": { - "default": "small", - "description": "Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge.", - "type": "string", - "enum": [ - "nano", - "micro", - "small", - "medium", - "large", - "xlarge", - "2xlarge" - ] - }, - "size": { - "default": "5Gi", - "description": "Persistent Volume size for ZooKeeper", - "type": "string" - }, - "storageClass": { - "default": "", - "description": "StorageClass used to store the ZooKeeper data", - "type": "string" - } - }, - "type": "object" - } + "title": "Chart Values", + "type": "object", + "properties": { + "external": { + "description": "Enable external access from outside the cluster", + "type": "boolean", + "default": false }, - "title": "Chart Values", - "type": "object" -} + "kafka": { + "description": "Kafka configuration", + "type": "object", + "default": { + "replicas": 3, + "resources": {}, + "resourcesPreset": "small", + "size": "10Gi", + "storageClass": "" + }, + "required": [ + "replicas", + "resourcesPreset", + "size", + "storageClass" + ], + "properties": { + "replicas": { + "description": "Number of Kafka replicas", + "type": "integer", + "default": 3 + }, + "resources": { + "description": "Explicit CPU and memory configuration for each replica. When left empty, the preset defined in `resourcesPreset` is applied.", + "type": "object", + "default": {}, + "properties": { + "cpu": { + "description": "CPU", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + }, + "memory": { + "description": "Memory", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + } + } + }, + "resourcesPreset": { + "description": "Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`.", + "type": "string", + "default": "small", + "enum": [ + "nano", + "micro", + "small", + "medium", + "large", + "xlarge", + "2xlarge" + ] + }, + "size": { + "description": "Persistent Volume size for Kafka", + "default": "10Gi", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + }, + "storageClass": { + "description": "StorageClass used to store the Kafka data", + "type": "string" + } + } + }, + "topics": { + "description": "Topics configuration", + "type": "array", + "default": [], + "items": { + "type": "object", + "required": [ + "config", + "name", + "partitions", + "replicas" + ], + "properties": { + "config": { + "description": "Topic configuration", + "type": "object", + "x-kubernetes-preserve-unknown-fields": true + }, + "name": { + "description": "Topic name", + "type": "string" + }, + "partitions": { + "description": "Number of partitions", + "type": "integer" + }, + "replicas": { + "description": "Number of replicas", + "type": "integer" + } + } + } + }, + "zookeeper": { + "description": "Zookeeper configuration", + "type": "object", + "default": { + "replicas": 3, + "resources": {}, + "resourcesPreset": "small", + "size": "5Gi", + "storageClass": "" + }, + "required": [ + "replicas", + "resourcesPreset", + "size", + "storageClass" + ], + "properties": { + "replicas": { + "description": "Number of ZooKeeper replicas", + "type": "integer", + "default": 3 + }, + "resources": { + "description": "Explicit CPU and memory configuration for each replica. When left empty, the preset defined in `resourcesPreset` is applied.", + "type": "object", + "default": {}, + "properties": { + "cpu": { + "description": "CPU", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + }, + "memory": { + "description": "Memory", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + } + } + }, + "resourcesPreset": { + "description": "Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`.", + "type": "string", + "default": "small", + "enum": [ + "nano", + "micro", + "small", + "medium", + "large", + "xlarge", + "2xlarge" + ] + }, + "size": { + "description": "Persistent Volume size for ZooKeeper", + "default": "5Gi", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + }, + "storageClass": { + "description": "StorageClass used to store the ZooKeeper data", + "type": "string" + } + } + } + } +} \ No newline at end of file diff --git a/packages/apps/kafka/values.yaml b/packages/apps/kafka/values.yaml index f6ee0bb9..d8567dfd 100644 --- a/packages/apps/kafka/values.yaml +++ b/packages/apps/kafka/values.yaml @@ -1,12 +1,17 @@ ## @section Common parameters ## -## @param external Enable external access from outside the cluster +## @param external {bool} Enable external access from outside the cluster external: false ## @section Application-specific parameters ## -## @param topics Topics configuration (see example) +## @param topics {[]topic} Topics configuration +## @field topic {topic} Topic +## @field topic.name {string} Topic name +## @field topic.partitions {int} Number of partitions +## @field topic.replicas {int} Number of replicas +## @field topic.config {object} Topic configuration ## Example: ## topics: ## - name: Results @@ -27,38 +32,41 @@ topics: [] ## @section Kafka configuration ## +## @param kafka {kafka} Kafka configuration kafka: - ## @param kafka.replicas Number of Kafka replicas + ## @field kafka.replicas {int} Number of Kafka replicas replicas: 3 - ## @param kafka.resources Explicit CPU and memory configuration for each Kafka replica. When left empty, the preset defined in `resourcesPreset` is applied. - resources: {} + ## @field kafka.resources {*resources} Explicit CPU and memory configuration for each replica. When left empty, the preset defined in `resourcesPreset` is applied. + ## @field resources.cpu {*quantity} CPU + ## @field resources.memory {*quantity} Memory # resources: # cpu: 4000m # memory: 4Gi - ## @param kafka.resourcesPreset Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. + resources: {} + ## @field kafka.resourcesPreset {string enum:"nano,micro,small,medium,large,xlarge,2xlarge"} Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`. resourcesPreset: "small" - ## @param kafka.size Persistent Volume size for Kafka + ## @field kafka.size {quantity} Persistent Volume size for Kafka size: 10Gi - ## @param kafka.storageClass StorageClass used to store the Kafka data + ## @field kafka.storageClass {string} StorageClass used to store the Kafka data storageClass: "" ## @section Zookeeper configuration ## +## @param zookeeper {zookeeper} Zookeeper configuration zookeeper: - ## @param zookeeper.replicas Number of ZooKeeper replicas + ## @field zookeeper.replicas {int} Number of ZooKeeper replicas replicas: 3 - ## @param zookeeper.resources Explicit CPU and memory configuration for each Zookeeper replica. When left empty, the preset defined in `resourcesPreset` is applied. - resources: {} + ## @field zookeeper.resources {*resources} Explicit CPU and memory configuration for each replica. When left empty, the preset defined in `resourcesPreset` is applied. # resources: # cpu: 4000m # memory: 4Gi - ## @param zookeeper.resourcesPreset Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. + resources: {} + + ## @field zookeeper.resourcesPreset {string enum:"nano,micro,small,medium,large,xlarge,2xlarge"} Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`. resourcesPreset: "small" - ## @param zookeeper.size Persistent Volume size for ZooKeeper + ## @field zookeeper.size {quantity} Persistent Volume size for ZooKeeper size: 5Gi - ## @param zookeeper.storageClass StorageClass used to store the ZooKeeper data + ## @field zookeeper.storageClass {string} StorageClass used to store the ZooKeeper data storageClass: "" - - diff --git a/packages/apps/kubernetes/Makefile b/packages/apps/kubernetes/Makefile index f4d5e067..437487f9 100644 --- a/packages/apps/kubernetes/Makefile +++ b/packages/apps/kubernetes/Makefile @@ -1,18 +1,12 @@ KUBERNETES_VERSION = v1.32 KUBERNETES_PKG_TAG = $(shell awk '$$1 == "version:" {print $$2}' Chart.yaml) -PRESET_ENUM := ["nano","micro","small","medium","large","xlarge","2xlarge"] include ../../../scripts/common-envs.mk include ../../../scripts/package.mk generate: - readme-generator-for-helm -v values.yaml -s values.schema.json -r README.md + cozyvalues-gen -v values.yaml -s values.schema.json -r README.md yq -o=json -i '.properties.version.enum = (load("files/versions.yaml") | keys)' values.schema.json - yq -o json -i '.properties.addons.properties.ingressNginx.properties.exposeMethod.enum = ["Proxied","LoadBalancer"]' values.schema.json - yq -o json -i '.properties.controlPlane.properties.apiServer.properties.resourcesPreset.enum = $(PRESET_ENUM)' values.schema.json - yq -o json -i '.properties.controlPlane.properties.controllerManager.properties.resourcesPreset.enum = $(PRESET_ENUM)' values.schema.json - yq -o json -i '.properties.controlPlane.properties.scheduler.properties.resourcesPreset.enum = $(PRESET_ENUM)' values.schema.json - yq -o json -i '.properties.controlPlane.properties.konnectivity.properties.server.properties.resourcesPreset.enum = $(PRESET_ENUM)' values.schema.json image: image-ubuntu-container-disk image-kubevirt-cloud-provider image-kubevirt-csi-driver image-cluster-autoscaler diff --git a/packages/apps/kubernetes/README.md b/packages/apps/kubernetes/README.md index 47e2a2c6..7f96854e 100644 --- a/packages/apps/kubernetes/README.md +++ b/packages/apps/kubernetes/README.md @@ -84,53 +84,91 @@ See the reference for components utilized in this service: ### Common Parameters -| Name | Description | Value | -| -------------- | ------------------------------------- | ------------ | -| `storageClass` | StorageClass used to store user data. | `replicated` | +| Name | Description | Type | Value | +| -------------- | ----------------------------------- | -------- | ------------ | +| `storageClass` | StorageClass used to store the data | `string` | `replicated` | + ### Application-specific parameters -| Name | Description | Value | -| ------------ | ----------------------------------------------------------------------------------------------------------------- | ------- | -| `version` | Kubernetes version given as vMAJOR.MINOR. Available are versions from 1.28 to 1.33. | `v1.32` | -| `host` | Hostname used to access the Kubernetes cluster externally. Defaults to `.` when empty. | `""` | -| `nodeGroups` | Worker nodes configuration (see example) | `{}` | +| Name | Description | Type | Value | +| ----------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ------------------- | ------- | +| `version` | Kubernetes version given as vMAJOR.MINOR. Available are versions from 1.28 to 1.33. | `string` | `v1.32` | +| `host` | Hostname used to access the Kubernetes cluster externally. Defaults to `.` when empty. | `string` | `""` | +| `nodeGroups` | Worker nodes configuration | `map[string]object` | `{...}` | +| `nodeGroups[name].minReplicas` | Minimum amount of replicas | `int` | `0` | +| `nodeGroups[name].maxReplicas` | Maximum amount of replicas | `int` | `0` | +| `nodeGroups[name].instanceType` | Virtual machine instance type | `string` | `""` | +| `nodeGroups[name].ephemeralStorage` | Ephemeral storage size | `quantity` | `""` | +| `nodeGroups[name].roles` | List of node's roles | `[]string` | `[]` | +| `nodeGroups[name].resources` | Available resources for each worker node | `object` | `{}` | +| `nodeGroups[name].resources.cpu` | Available CPU | `*quantity` | `null` | +| `nodeGroups[name].resources.memory` | Available memory (RAM) | `*quantity` | `null` | +| `nodeGroups[name].gpus` | List of GPUs to attach (WARN: NVIDIA driver requires at least 4 GiB of RAM) | `[]object` | `[]` | +| `nodeGroups[name].gpus.name` | Name of GPU, such as "nvidia.com/AD102GL_L40S" | `string` | `""` | + ### Cluster Addons -| Name | Description | Value | -| --------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- | -| `addons.certManager.enabled` | Enable cert-manager, which automatically creates and manages SSL/TLS certificates. | `false` | -| `addons.certManager.valuesOverride` | Custom values to override | `{}` | -| `addons.cilium.valuesOverride` | Custom values to override | `{}` | -| `addons.gatewayAPI.enabled` | Enable the Gateway API | `false` | -| `addons.ingressNginx.enabled` | Enable the Ingress-NGINX controller (requires nodes labeled with the 'ingress-nginx' role). | `false` | -| `addons.ingressNginx.exposeMethod` | Method to expose the Ingress-NGINX controller. (allowed values: Proxied, LoadBalancer) | `Proxied` | -| `addons.ingressNginx.hosts` | List of domain names that the parent cluster should route to this tenant cluster. Taken into account only when `exposeMethod` is set to `Proxied`. | `[]` | -| `addons.ingressNginx.valuesOverride` | Custom values to override | `{}` | -| `addons.gpuOperator.enabled` | Enable the GPU-operator | `false` | -| `addons.gpuOperator.valuesOverride` | Custom values to override | `{}` | -| `addons.fluxcd.enabled` | Enable FluxCD | `false` | -| `addons.fluxcd.valuesOverride` | Custom values to override | `{}` | -| `addons.monitoringAgents.enabled` | Enable monitoring agents (Fluent Bit and VMAgents) to send logs and metrics. If tenant monitoring is enabled, data is sent to tenant storage; otherwise, it goes to root storage. | `false` | -| `addons.monitoringAgents.valuesOverride` | Custom values to override | `{}` | -| `addons.verticalPodAutoscaler.valuesOverride` | Custom values to override | `{}` | -| `addons.velero.enabled` | Enable velero for backup and restore k8s cluster. | `false` | -| `addons.velero.valuesOverride` | Custom values to override | `{}` | +| Name | Description | Type | Value | +| --------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- | --------- | +| `addons` | Cluster addons configuration | `object` | `{}` | +| `addons.certManager` | Cert-manager: automatically creates and manages SSL/TLS certificate | `object` | `{}` | +| `addons.certManager.enabled` | Enable cert-manager, which automatically creates and manages SSL/TLS certificates. | `bool` | `false` | +| `addons.certManager.valuesOverride` | Custom values to override | `object` | `{}` | +| `addons.cilium` | Cilium CNI plugin | `object` | `{}` | +| `addons.cilium.valuesOverride` | Custom values to override | `object` | `{}` | +| `addons.gatewayAPI` | Gateway API | `object` | `{}` | +| `addons.gatewayAPI.enabled` | Enable the Gateway API | `bool` | `false` | +| `addons.ingressNginx` | Ingress-NGINX Controller | `object` | `{}` | +| `addons.ingressNginx.enabled` | Enable the Ingress-NGINX controller (requires nodes labeled with the 'ingress-nginx' role). | `bool` | `false` | +| `addons.ingressNginx.exposeMethod` | Method to expose the Ingress-NGINX controller. Allowed values: `Proxied`, `LoadBalancer`. | `string` | `Proxied` | +| `addons.ingressNginx.hosts` | List of domain names that the parent cluster should route to this tenant cluster. Taken into account only when `exposeMethod` is set to `Proxied`. | `[]string` | `[]` | +| `addons.ingressNginx.valuesOverride` | Custom values to override | `object` | `{}` | +| `addons.gpuOperator` | GPU-operator: NVIDIA GPU Operator | `object` | `{}` | +| `addons.gpuOperator.enabled` | Enable the GPU-operator | `bool` | `false` | +| `addons.gpuOperator.valuesOverride` | Custom values to override | `object` | `{}` | +| `addons.fluxcd` | Flux CD | `object` | `{}` | +| `addons.fluxcd.enabled` | Enable FluxCD | `bool` | `false` | +| `addons.fluxcd.valuesOverride` | Custom values to override | `object` | `{}` | +| `addons.monitoringAgents` | MonitoringAgents | `object` | `{}` | +| `addons.monitoringAgents.enabled` | Enable monitoring agents (Fluent Bit and VMAgents) to send logs and metrics. If tenant monitoring is enabled, data is sent to tenant storage; otherwise, it goes to root storage. | `bool` | `false` | +| `addons.monitoringAgents.valuesOverride` | Custom values to override | `object` | `{}` | +| `addons.verticalPodAutoscaler` | VerticalPodAutoscaler | `object` | `{}` | +| `addons.verticalPodAutoscaler.valuesOverride` | Custom values to override | `object` | `{}` | +| `addons.velero` | Velero | `object` | `{}` | +| `addons.velero.enabled` | Enable Velero for backup and recovery of a tenant Kubernetes cluster. | `bool` | `false` | +| `addons.velero.valuesOverride` | Custom values to override | `object` | `{}` | + ### Kubernetes Control Plane Configuration -| Name | Description | Value | -| -------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------- | -| `controlPlane.replicas` | Number of replicas for Kubernetes control-plane components. | `2` | -| `controlPlane.apiServer.resources` | Explicit CPU and memory configuration for the API Server. When left empty, the preset defined in `resourcesPreset` is applied. | `{}` | -| `controlPlane.apiServer.resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. | `medium` | -| `controlPlane.controllerManager.resources` | Explicit CPU and memory configuration for the Controller Manager. When left empty, the preset defined in `resourcesPreset` is applied. | `{}` | -| `controlPlane.controllerManager.resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. | `micro` | -| `controlPlane.scheduler.resources` | Explicit CPU and memory configuration for the Scheduler. When left empty, the preset defined in `resourcesPreset` is applied. | `{}` | -| `controlPlane.scheduler.resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. | `micro` | -| `controlPlane.konnectivity.server.resources` | Explicit CPU and memory configuration for Konnectivity. When left empty, the preset defined in `resourcesPreset` is applied. | `{}` | -| `controlPlane.konnectivity.server.resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. | `micro` | +| Name | Description | Type | Value | +| --------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ----------- | -------- | +| `controlPlane` | Control Plane Configuration | `object` | `{}` | +| `controlPlane.replicas` | Number of replicas for Kubernetes control plane components. | `int` | `2` | +| `controlPlane.apiServer` | Control plane API server configuration. | `object` | `{}` | +| `controlPlane.apiServer.resources` | Explicit CPU and memory configuration for the API Server. When left empty, the preset defined in `resourcesPreset` is applied. | `object` | `{}` | +| `controlPlane.apiServer.resources.cpu` | Available CPU | `*quantity` | `null` | +| `controlPlane.apiServer.resources.memory` | Available memory (RAM) | `*quantity` | `null` | +| `controlPlane.apiServer.resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. | `string` | `medium` | +| `controlPlane.controllerManager` | Controller Manager configuration. | `object` | `{}` | +| `controlPlane.controllerManager.resources` | Explicit CPU and memory configuration for the Controller Manager. When left empty, the preset defined in `resourcesPreset` is applied. | `object` | `{}` | +| `controlPlane.controllerManager.resources.cpu` | Available CPU | `*quantity` | `null` | +| `controlPlane.controllerManager.resources.memory` | Available memory (RAM) | `*quantity` | `null` | +| `controlPlane.controllerManager.resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. | `string` | `micro` | +| `controlPlane.scheduler` | Scheduler configuration. | `object` | `{}` | +| `controlPlane.scheduler.resources` | Explicit CPU and memory configuration for the Scheduler. When left empty, the preset defined in `resourcesPreset` is applied. | `object` | `{}` | +| `controlPlane.scheduler.resources.cpu` | Available CPU | `*quantity` | `null` | +| `controlPlane.scheduler.resources.memory` | Available memory (RAM) | `*quantity` | `null` | +| `controlPlane.scheduler.resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. | `string` | `micro` | +| `controlPlane.konnectivity` | Konnectivity configuration. | `object` | `{}` | +| `controlPlane.konnectivity.server` | Konnectivity server configuration. | `object` | `{}` | +| `controlPlane.konnectivity.server.resources` | Explicit CPU and memory configuration for Konnectivity. When left empty, the preset defined in `resourcesPreset` is applied. | `object` | `{}` | +| `controlPlane.konnectivity.server.resources.cpu` | Available CPU | `*quantity` | `null` | +| `controlPlane.konnectivity.server.resources.memory` | Available memory (RAM) | `*quantity` | `null` | +| `controlPlane.konnectivity.server.resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. | `string` | `micro` | + ## Parameter examples and reference diff --git a/packages/apps/kubernetes/values.schema.json b/packages/apps/kubernetes/values.schema.json index 140603f2..7d7df2f4 100644 --- a/packages/apps/kubernetes/values.schema.json +++ b/packages/apps/kubernetes/values.schema.json @@ -1,182 +1,365 @@ { + "title": "Chart Values", + "type": "object", "properties": { "addons": { - "properties": { + "description": "Cluster addons configuration", + "type": "object", + "default": { "certManager": { - "properties": { - "enabled": { - "default": false, - "description": "Enable cert-manager, which automatically creates and manages SSL/TLS certificates.", - "type": "boolean" - }, - "valuesOverride": { - "default": {}, - "description": "Custom values to override", - "type": "object" - } - }, - "type": "object" + "enabled": false, + "valuesOverride": {} }, "cilium": { - "properties": { - "valuesOverride": { - "default": {}, - "description": "Custom values to override", - "type": "object" - } - }, - "type": "object" + "valuesOverride": {} }, "fluxcd": { - "properties": { - "enabled": { - "default": false, - "description": "Enable FluxCD", - "type": "boolean" - }, - "valuesOverride": { - "default": {}, - "description": "Custom values to override", - "type": "object" - } - }, - "type": "object" + "enabled": false, + "valuesOverride": {} }, "gatewayAPI": { - "properties": { - "enabled": { - "default": false, - "description": "Enable the Gateway API", - "type": "boolean" - } - }, - "type": "object" + "enabled": false }, "gpuOperator": { - "properties": { - "enabled": { - "default": false, - "description": "Enable the GPU-operator", - "type": "boolean" - }, - "valuesOverride": { - "default": {}, - "description": "Custom values to override", - "type": "object" - } - }, - "type": "object" + "enabled": false, + "valuesOverride": {} }, "ingressNginx": { + "enabled": false, + "exposeMethod": "Proxied", + "hosts": {}, + "valuesOverride": {} + }, + "monitoringAgents": { + "enabled": false, + "valuesOverride": {} + }, + "velero": { + "enabled": false, + "valuesOverride": {} + }, + "verticalPodAutoscaler": { + "valuesOverride": {} + } + }, + "required": [ + "certManager", + "cilium", + "fluxcd", + "gatewayAPI", + "gpuOperator", + "ingressNginx", + "monitoringAgents", + "velero", + "verticalPodAutoscaler" + ], + "properties": { + "certManager": { + "description": "Cert-manager: automatically creates and manages SSL/TLS certificate", + "type": "object", + "default": { + "enabled": false, + "valuesOverride": {} + }, + "required": [ + "enabled", + "valuesOverride" + ], + "properties": { + "enabled": { + "description": "Enable cert-manager, which automatically creates and manages SSL/TLS certificates.", + "type": "boolean", + "default": false + }, + "valuesOverride": { + "description": "Custom values to override", + "type": "object", + "default": {}, + "x-kubernetes-preserve-unknown-fields": true + } + } + }, + "cilium": { + "description": "Cilium CNI plugin", + "type": "object", + "default": { + "valuesOverride": {} + }, + "required": [ + "valuesOverride" + ], + "properties": { + "valuesOverride": { + "description": "Custom values to override", + "type": "object", + "default": {}, + "x-kubernetes-preserve-unknown-fields": true + } + } + }, + "fluxcd": { + "description": "Flux CD", + "type": "object", + "default": { + "enabled": false, + "valuesOverride": {} + }, + "required": [ + "enabled", + "valuesOverride" + ], + "properties": { + "enabled": { + "description": "Enable FluxCD", + "type": "boolean", + "default": false + }, + "valuesOverride": { + "description": "Custom values to override", + "type": "object", + "default": {}, + "x-kubernetes-preserve-unknown-fields": true + } + } + }, + "gatewayAPI": { + "description": "Gateway API", + "type": "object", + "default": { + "enabled": false + }, + "required": [ + "enabled" + ], + "properties": { + "enabled": { + "description": "Enable the Gateway API", + "type": "boolean", + "default": false + } + } + }, + "gpuOperator": { + "description": "GPU-operator: NVIDIA GPU Operator", + "type": "object", + "default": { + "enabled": false, + "valuesOverride": {} + }, + "required": [ + "enabled", + "valuesOverride" + ], + "properties": { + "enabled": { + "description": "Enable the GPU-operator", + "type": "boolean", + "default": false + }, + "valuesOverride": { + "description": "Custom values to override", + "type": "object", + "default": {}, + "x-kubernetes-preserve-unknown-fields": true + } + } + }, + "ingressNginx": { + "description": "Ingress-NGINX Controller", + "type": "object", + "default": { + "enabled": false, + "exposeMethod": "Proxied", + "hosts": {}, + "valuesOverride": {} + }, + "required": [ + "enabled", + "exposeMethod", + "valuesOverride" + ], "properties": { "enabled": { - "default": false, "description": "Enable the Ingress-NGINX controller (requires nodes labeled with the 'ingress-nginx' role).", - "type": "boolean" + "type": "boolean", + "default": false }, "exposeMethod": { - "default": "Proxied", - "description": "Method to expose the Ingress-NGINX controller. (allowed values: Proxied, LoadBalancer)", + "description": "Method to expose the Ingress-NGINX controller. Allowed values: `Proxied`, `LoadBalancer`.", "type": "string", + "default": "Proxied", "enum": [ "Proxied", "LoadBalancer" ] }, "hosts": { - "default": [], "description": "List of domain names that the parent cluster should route to this tenant cluster. Taken into account only when `exposeMethod` is set to `Proxied`.", - "items": {}, - "type": "array" + "type": "array", + "default": [], + "items": { + "type": "string" + } }, "valuesOverride": { - "default": {}, "description": "Custom values to override", - "type": "object" + "type": "object", + "default": {}, + "x-kubernetes-preserve-unknown-fields": true } - }, - "type": "object" + } }, "monitoringAgents": { + "description": "MonitoringAgents", + "type": "object", + "default": { + "enabled": false, + "valuesOverride": {} + }, + "required": [ + "enabled", + "valuesOverride" + ], "properties": { "enabled": { - "default": false, "description": "Enable monitoring agents (Fluent Bit and VMAgents) to send logs and metrics. If tenant monitoring is enabled, data is sent to tenant storage; otherwise, it goes to root storage.", - "type": "boolean" + "type": "boolean", + "default": false }, "valuesOverride": { - "default": {}, "description": "Custom values to override", - "type": "object" + "type": "object", + "default": {}, + "x-kubernetes-preserve-unknown-fields": true } - }, - "type": "object" + } }, "velero": { + "description": "Velero", + "type": "object", + "default": { + "enabled": false, + "valuesOverride": {} + }, + "required": [ + "enabled", + "valuesOverride" + ], "properties": { "enabled": { - "default": false, - "description": "Enable velero for backup and restore k8s cluster.", - "type": "boolean" + "description": "Enable Velero for backup and recovery of a tenant Kubernetes cluster.", + "type": "boolean", + "default": false }, "valuesOverride": { - "default": {}, "description": "Custom values to override", - "type": "object" + "type": "object", + "default": {}, + "x-kubernetes-preserve-unknown-fields": true } - }, - "type": "object" + } }, "verticalPodAutoscaler": { + "description": "VerticalPodAutoscaler", + "type": "object", + "default": { + "valuesOverride": {} + }, + "required": [ + "valuesOverride" + ], "properties": { "valuesOverride": { - "default": {}, "description": "Custom values to override", - "type": "object" + "type": "object", + "default": {}, + "x-kubernetes-preserve-unknown-fields": true } - }, - "type": "object" + } } - }, - "type": "object" + } }, "controlPlane": { - "properties": { + "description": "Control Plane Configuration", + "type": "object", + "default": { "apiServer": { - "properties": { - "resources": { - "default": {}, - "description": "Explicit CPU and memory configuration for the API Server. When left empty, the preset defined in `resourcesPreset` is applied.", - "type": "object" - }, - "resourcesPreset": { - "default": "medium", - "description": "Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge.", - "type": "string", - "enum": [ - "nano", - "micro", - "small", - "medium", - "large", - "xlarge", - "2xlarge" - ] - } - }, - "type": "object" + "resources": {}, + "resourcesPreset": "medium" }, "controllerManager": { + "resources": {}, + "resourcesPreset": "micro" + }, + "konnectivity": { + "server": { + "resources": {}, + "resourcesPreset": "micro" + } + }, + "replicas": 2, + "scheduler": { + "resources": {}, + "resourcesPreset": "micro" + } + }, + "required": [ + "apiServer", + "controllerManager", + "konnectivity", + "replicas", + "scheduler" + ], + "properties": { + "apiServer": { + "description": "Control plane API server configuration.", + "type": "object", + "default": { + "resources": {}, + "resourcesPreset": "medium" + }, + "required": [ + "resources", + "resourcesPreset" + ], "properties": { "resources": { + "description": "Explicit CPU and memory configuration for the API Server. When left empty, the preset defined in `resourcesPreset` is applied.", + "type": "object", "default": {}, - "description": "Explicit CPU and memory configuration for the Controller Manager. When left empty, the preset defined in `resourcesPreset` is applied.", - "type": "object" + "properties": { + "cpu": { + "description": "Available CPU", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + }, + "memory": { + "description": "Available memory (RAM)", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + } + } }, "resourcesPreset": { - "default": "micro", "description": "Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge.", "type": "string", + "default": "medium", "enum": [ "nano", "micro", @@ -187,22 +370,131 @@ "2xlarge" ] } + } + }, + "controllerManager": { + "description": "Controller Manager configuration.", + "type": "object", + "default": { + "resources": {}, + "resourcesPreset": "micro" }, - "type": "object" + "required": [ + "resources", + "resourcesPreset" + ], + "properties": { + "resources": { + "description": "Explicit CPU and memory configuration for the Controller Manager. When left empty, the preset defined in `resourcesPreset` is applied.", + "type": "object", + "default": {}, + "properties": { + "cpu": { + "description": "Available CPU", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + }, + "memory": { + "description": "Available memory (RAM)", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + } + } + }, + "resourcesPreset": { + "description": "Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge.", + "type": "string", + "default": "micro", + "enum": [ + "nano", + "micro", + "small", + "medium", + "large", + "xlarge", + "2xlarge" + ] + } + } }, "konnectivity": { + "description": "Konnectivity configuration.", + "type": "object", + "default": { + "server": { + "resources": {}, + "resourcesPreset": "micro" + } + }, + "required": [ + "server" + ], "properties": { "server": { + "description": "Konnectivity server configuration.", + "type": "object", + "default": { + "resources": {}, + "resourcesPreset": "micro" + }, + "required": [ + "resources", + "resourcesPreset" + ], "properties": { "resources": { - "default": {}, "description": "Explicit CPU and memory configuration for Konnectivity. When left empty, the preset defined in `resourcesPreset` is applied.", - "type": "object" + "type": "object", + "default": {}, + "properties": { + "cpu": { + "description": "Available CPU", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + }, + "memory": { + "description": "Available memory (RAM)", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + } + } }, "resourcesPreset": { - "default": "micro", "description": "Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge.", "type": "string", + "default": "micro", "enum": [ "nano", "micro", @@ -213,28 +505,64 @@ "2xlarge" ] } - }, - "type": "object" + } } - }, - "type": "object" + } }, "replicas": { - "default": 2, - "description": "Number of replicas for Kubernetes control-plane components.", - "type": "number" + "description": "Number of replicas for Kubernetes control plane components.", + "type": "integer", + "default": 2 }, "scheduler": { + "description": "Scheduler configuration.", + "type": "object", + "default": { + "resources": {}, + "resourcesPreset": "micro" + }, + "required": [ + "resources", + "resourcesPreset" + ], "properties": { "resources": { - "default": {}, "description": "Explicit CPU and memory configuration for the Scheduler. When left empty, the preset defined in `resourcesPreset` is applied.", - "type": "object" + "type": "object", + "default": {}, + "properties": { + "cpu": { + "description": "Available CPU", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + }, + "memory": { + "description": "Available memory (RAM)", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + } + } }, "resourcesPreset": { - "default": "micro", "description": "Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge.", "type": "string", + "default": "micro", "enum": [ "nano", "micro", @@ -245,26 +573,132 @@ "2xlarge" ] } - }, - "type": "object" + } } - }, - "type": "object" + } }, "host": { - "default": "", "description": "Hostname used to access the Kubernetes cluster externally. Defaults to `.` when empty.", "type": "string" }, + "nodeGroups": { + "description": "Worker nodes configuration", + "type": "object", + "default": { + "md0": { + "ephemeralStorage": "20Gi", + "gpus": {}, + "instanceType": "u1.medium", + "maxReplicas": 10, + "minReplicas": 0, + "resources": {}, + "roles": [ + "ingress-nginx" + ] + } + }, + "additionalProperties": { + "type": "object", + "required": [ + "ephemeralStorage", + "instanceType", + "maxReplicas", + "minReplicas", + "resources" + ], + "properties": { + "ephemeralStorage": { + "description": "Ephemeral storage size", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + }, + "gpus": { + "description": "List of GPUs to attach (WARN: NVIDIA driver requires at least 4 GiB of RAM)", + "type": "array", + "items": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Name of GPU, such as \"nvidia.com/AD102GL_L40S\"", + "type": "string" + } + } + } + }, + "instanceType": { + "description": "Virtual machine instance type", + "type": "string" + }, + "maxReplicas": { + "description": "Maximum amount of replicas", + "type": "integer" + }, + "minReplicas": { + "description": "Minimum amount of replicas", + "type": "integer" + }, + "resources": { + "description": "Available resources for each worker node", + "type": "object", + "properties": { + "cpu": { + "description": "Available CPU", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + }, + "memory": { + "description": "Available memory (RAM)", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + } + } + }, + "roles": { + "description": "List of node's roles", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, "storageClass": { - "default": "replicated", - "description": "StorageClass used to store user data.", - "type": "string" + "description": "StorageClass used to store the data", + "type": "string", + "default": "replicated" }, "version": { - "default": "v1.32", "description": "Kubernetes version given as vMAJOR.MINOR. Available are versions from 1.28 to 1.33.", "type": "string", + "default": "v1.32", "enum": [ "v1.28", "v1.29", @@ -274,7 +708,5 @@ "v1.33" ] } - }, - "title": "Chart Values", - "type": "object" + } } diff --git a/packages/apps/kubernetes/values.yaml b/packages/apps/kubernetes/values.yaml index 133e0d52..83f5886c 100644 --- a/packages/apps/kubernetes/values.yaml +++ b/packages/apps/kubernetes/values.yaml @@ -1,14 +1,26 @@ ## @section Common Parameters -## @param storageClass StorageClass used to store user data. +## @param storageClass {string} StorageClass used to store the data storageClass: replicated ## @section Application-specific parameters -## @param version Kubernetes version given as vMAJOR.MINOR. Available are versions from 1.28 to 1.33. +## @param version {string} Kubernetes version given as vMAJOR.MINOR. Available are versions from 1.28 to 1.33. version: "v1.32" -## @param host Hostname used to access the Kubernetes cluster externally. Defaults to `.` when empty. +## @param host {string} Hostname used to access the Kubernetes cluster externally. Defaults to `.` when empty. host: "" -## @param nodeGroups [object] Worker nodes configuration (see example) + +## @param nodeGroups {map[string]node} Worker nodes configuration +## @field node {node} Node configuration +## @field node.minReplicas {int} Minimum amount of replicas +## @field node.maxReplicas {int} Maximum amount of replicas +## @field node.instanceType {string} Virtual machine instance type +## @field node.ephemeralStorage {quantity} Ephemeral storage size +## @field node.roles {[]string} List of node's roles +## @field node.resources {resources} Available resources for each worker node +## @field resources.cpu {*quantity} Available CPU +## @field resources.memory {*quantity} Available memory (RAM) +## @field node.gpus {[]gpu} List of GPUs to attach (WARN: NVIDIA driver requires at least 4 GiB of RAM) +## @field gpu.name {string} Name of GPU, such as "nvidia.com/AD102GL_L40S" ## nodeGroups: md0: @@ -18,11 +30,7 @@ nodeGroups: ephemeralStorage: 20Gi roles: - ingress-nginx - - resources: - cpu: "" - memory: "" - + resources: {} ## List of GPUs to attach (WARN: NVIDIA driver requires at least 4 GiB of RAM) ## e.g: ## instanceType: "u1.xlarge" @@ -33,117 +41,124 @@ nodeGroups: ## @section Cluster Addons ## +## @param addons {addons} Cluster addons configuration addons: - ## Cert-manager: automatically creates and manages SSL/TLS certificate + ## @field addons.certManager {certManager} Cert-manager: automatically creates and manages SSL/TLS certificate ## certManager: - ## @param addons.certManager.enabled Enable cert-manager, which automatically creates and manages SSL/TLS certificates. + ## @field certManager.enabled {bool} Enable cert-manager, which automatically creates and manages SSL/TLS certificates. enabled: false - ## @param addons.certManager.valuesOverride Custom values to override + ## @field certManager.valuesOverride {object} Custom values to override valuesOverride: {} - ## Cilium CNI plugin + ## @field addons.cilium {cilium} Cilium CNI plugin ## cilium: - ## @param addons.cilium.valuesOverride Custom values to override + ## @field cilium.valuesOverride {object} Custom values to override valuesOverride: {} - ## Gateway API + ## @field addons.gatewayAPI {gatewayAPI} Gateway API ## gatewayAPI: - ## @param addons.gatewayAPI.enabled Enable the Gateway API + ## @field gatewayAPI.enabled {bool} Enable the Gateway API enabled: false - ## Ingress-NGINX Controller + ## @field addons.ingressNginx {ingressNginx} Ingress-NGINX Controller ## ingressNginx: - ## @param addons.ingressNginx.enabled Enable the Ingress-NGINX controller (requires nodes labeled with the 'ingress-nginx' role). + ## @field ingressNginx.enabled {bool} Enable the Ingress-NGINX controller (requires nodes labeled with the 'ingress-nginx' role). enabled: false - ## @param addons.ingressNginx.exposeMethod Method to expose the Ingress-NGINX controller. (allowed values: Proxied, LoadBalancer) + ## @field ingressNginx.exposeMethod {string enum:"Proxied,LoadBalancer"} Method to expose the Ingress-NGINX controller. Allowed values: `Proxied`, `LoadBalancer`. exposeMethod: Proxied - ## @param addons.ingressNginx.hosts List of domain names that the parent cluster should route to this tenant cluster. Taken into account only when `exposeMethod` is set to `Proxied`. + ## @field ingressNginx.hosts {[]string} List of domain names that the parent cluster should route to this tenant cluster. Taken into account only when `exposeMethod` is set to `Proxied`. ## e.g: ## hosts: ## - example.org ## - foo.example.net ## hosts: [] - ## @param addons.ingressNginx.valuesOverride Custom values to override + ## @field ingressNginx.valuesOverride {object} Custom values to override valuesOverride: {} - ## GPU-operator: NVIDIA GPU Operator + ## @field addons.gpuOperator {gpuOperator} GPU-operator: NVIDIA GPU Operator ## gpuOperator: - ## @param addons.gpuOperator.enabled Enable the GPU-operator - ## @param addons.gpuOperator.valuesOverride Custom values to override + ## @field gpuOperator.enabled {bool} Enable the GPU-operator + ## @field gpuOperator.valuesOverride {object} Custom values to override enabled: false valuesOverride: {} - ## Flux CD + ## @field addons.fluxcd {fluxcd} Flux CD ## fluxcd: - ## @param addons.fluxcd.enabled Enable FluxCD - ## @param addons.fluxcd.valuesOverride Custom values to override + ## @field fluxcd.enabled {bool} Enable FluxCD + ## @field fluxcd.valuesOverride {object} Custom values to override ## enabled: false valuesOverride: {} - ## MonitoringAgents + ## @field addons.monitoringAgents {monitoringAgents} MonitoringAgents ## monitoringAgents: - ## @param addons.monitoringAgents.enabled Enable monitoring agents (Fluent Bit and VMAgents) to send logs and metrics. If tenant monitoring is enabled, data is sent to tenant storage; otherwise, it goes to root storage. - ## @param addons.monitoringAgents.valuesOverride Custom values to override + ## @field monitoringAgents.enabled {bool} Enable monitoring agents (Fluent Bit and VMAgents) to send logs and metrics. If tenant monitoring is enabled, data is sent to tenant storage; otherwise, it goes to root storage. + ## @field monitoringAgents.valuesOverride {object} Custom values to override ## enabled: false valuesOverride: {} - ## VerticalPodAutoscaler + ## @field addons.verticalPodAutoscaler {verticalPodAutoscaler} VerticalPodAutoscaler ## verticalPodAutoscaler: - ## @param addons.verticalPodAutoscaler.valuesOverride Custom values to override + ## @field verticalPodAutoscaler.valuesOverride {object} Custom values to override ## valuesOverride: {} - ## Velero + ## @field addons.velero {velero} Velero ## velero: - ## @param addons.velero.enabled Enable velero for backup and restore k8s cluster. - ## @param addons.velero.valuesOverride Custom values to override + ## @field velero.enabled {bool} Enable Velero for backup and recovery of a tenant Kubernetes cluster. + ## @field velero.valuesOverride {object} Custom values to override ## enabled: false valuesOverride: {} ## @section Kubernetes Control Plane Configuration ## +## @param controlPlane {controlPlane} Control Plane Configuration controlPlane: - ## @param controlPlane.replicas Number of replicas for Kubernetes control-plane components. + ## @field controlPlane.replicas {int} Number of replicas for Kubernetes control plane components. replicas: 2 + ## @field controlPlane.apiServer {apiServer} Control plane API server configuration. apiServer: - ## @param controlPlane.apiServer.resources Explicit CPU and memory configuration for the API Server. When left empty, the preset defined in `resourcesPreset` is applied. - resources: {} - ## @param controlPlane.apiServer.resourcesPreset Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. + ## @field apiServer.resources {resources} Explicit CPU and memory configuration for the API Server. When left empty, the preset defined in `resourcesPreset` is applied. ## e.g: ## resources: ## cpu: 4000m ## memory: 4Gi ## + resources: {} + ## @field apiServer.resourcesPreset {string enum:"nano,micro,small,medium,large,xlarge,2xlarge"} Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. resourcesPreset: "medium" + ## @field controlPlane.controllerManager {controllerManager} Controller Manager configuration. controllerManager: - ## @param controlPlane.controllerManager.resources Explicit CPU and memory configuration for the Controller Manager. When left empty, the preset defined in `resourcesPreset` is applied. - ## @param controlPlane.controllerManager.resourcesPreset Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. + ## @field controllerManager.resources {resources} Explicit CPU and memory configuration for the Controller Manager. When left empty, the preset defined in `resourcesPreset` is applied. + ## @field controllerManager.resourcesPreset {string enum:"nano,micro,small,medium,large,xlarge,2xlarge"} Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. resourcesPreset: "micro" resources: {} + ## @field controlPlane.scheduler {scheduler} Scheduler configuration. scheduler: - ## @param controlPlane.scheduler.resources Explicit CPU and memory configuration for the Scheduler. When left empty, the preset defined in `resourcesPreset` is applied. - ## @param controlPlane.scheduler.resourcesPreset Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. + ## @field scheduler.resources {resources} Explicit CPU and memory configuration for the Scheduler. When left empty, the preset defined in `resourcesPreset` is applied. + ## @field scheduler.resourcesPreset {string enum:"nano,micro,small,medium,large,xlarge,2xlarge"} Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. resourcesPreset: "micro" resources: {} + ## @field controlPlane.konnectivity {konnectivity} Konnectivity configuration. konnectivity: + ## @field konnectivity.server {konnectivityServer} Konnectivity server configuration. server: - ## @param controlPlane.konnectivity.server.resources Explicit CPU and memory configuration for Konnectivity. When left empty, the preset defined in `resourcesPreset` is applied. - ## @param controlPlane.konnectivity.server.resourcesPreset Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. + ## @field konnectivityServer.resources {resources} Explicit CPU and memory configuration for Konnectivity. When left empty, the preset defined in `resourcesPreset` is applied. + ## @field konnectivityServer.resourcesPreset {string enum:"nano,micro,small,medium,large,xlarge,2xlarge"} Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. resourcesPreset: "micro" resources: {} diff --git a/packages/apps/mysql/Makefile b/packages/apps/mysql/Makefile index 41e1e559..bbc85d1f 100644 --- a/packages/apps/mysql/Makefile +++ b/packages/apps/mysql/Makefile @@ -1,12 +1,10 @@ MARIADB_BACKUP_TAG = $(shell awk '$$1 == "version:" {print $$2}' Chart.yaml) -PRESET_ENUM := ["nano","micro","small","medium","large","xlarge","2xlarge"] include ../../../scripts/common-envs.mk include ../../../scripts/package.mk generate: - readme-generator-for-helm -v values.yaml -s values.schema.json -r README.md - yq -i -o json --indent 4 '.properties.resourcesPreset.enum = $(PRESET_ENUM)' values.schema.json + cozyvalues-gen -v values.yaml -s values.schema.json -r README.md image: docker buildx build images/mariadb-backup \ diff --git a/packages/apps/mysql/README.md b/packages/apps/mysql/README.md index 19ce3ece..c2d1ec09 100644 --- a/packages/apps/mysql/README.md +++ b/packages/apps/mysql/README.md @@ -68,34 +68,45 @@ more details: ### Common parameters -| Name | Description | Value | -| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------ | ------- | -| `replicas` | Number of MariaDB replicas | `2` | -| `resources` | Explicit CPU and memory configuration for each MariaDB replica. When left empty, the preset defined in `resourcesPreset` is applied. | `{}` | -| `resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. | `nano` | -| `size` | Persistent Volume size | `10Gi` | -| `storageClass` | StorageClass used to store the data | `""` | -| `external` | Enable external access from outside the cluster | `false` | +| Name | Description | Type | Value | +| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ------- | +| `replicas` | Number of MariaDB replicas | `int` | `2` | +| `resources` | Explicit CPU and memory configuration for each MariaDB replica. When left empty, the preset defined in `resourcesPreset` is applied. | `*object` | `{}` | +| `resources.cpu` | CPU | `*quantity` | `null` | +| `resources.memory` | Memory | `*quantity` | `null` | +| `resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`. | `string` | `nano` | +| `size` | Persistent Volume Claim size, available for application data | `quantity` | `10Gi` | +| `storageClass` | StorageClass used to store the data | `string` | `""` | +| `external` | Enable external access from outside the cluster | `bool` | `false` | + ### Application-specific parameters -| Name | Description | Value | -| ----------- | ----------------------- | ----- | -| `users` | Users configuration | `{}` | -| `databases` | Databases configuration | `{}` | +| Name | Description | Type | Value | +| -------------------------------- | --------------------------------------- | ------------------- | ------- | +| `users` | Users configuration | `map[string]object` | `{...}` | +| `users[name].password` | Password for the user | `string` | `""` | +| `users[name].maxUserConnections` | Maximum amount of connections | `int` | `0` | +| `databases` | Databases configuration | `map[string]object` | `{...}` | +| `databases[name].roles` | Roles for the database | `*object` | `null` | +| `databases[name].roles.admin` | List of users with admin privileges | `[]string` | `[]` | +| `databases[name].roles.readonly` | List of users with read-only privileges | `[]string` | `[]` | + ### Backup parameters -| Name | Description | Value | -| ------------------------ | ---------------------------------------------- | ------------------------------------------------------ | -| `backup.enabled` | Enable periodic backups | `false` | -| `backup.s3Region` | The AWS S3 region where backups are stored | `us-east-1` | -| `backup.s3Bucket` | The S3 bucket used for storing backups | `s3.example.org/postgres-backups` | -| `backup.schedule` | Cron schedule for automated backups | `0 2 * * *` | -| `backup.cleanupStrategy` | The strategy for cleaning up old backups | `--keep-last=3 --keep-daily=3 --keep-within-weekly=1m` | -| `backup.s3AccessKey` | The access key for S3, used for authentication | `oobaiRus9pah8PhohL1ThaeTa4UVa7gu` | -| `backup.s3SecretKey` | The secret key for S3, used for authentication | `ju3eum4dekeich9ahM1te8waeGai0oog` | -| `backup.resticPassword` | The password for Restic backup encryption | `ChaXoveekoh6eigh4siesheeda2quai0` | +| Name | Description | Type | Value | +| ------------------------ | ---------------------------------------------- | -------- | ------------------------------------------------------ | +| `backup` | Backup configuration | `object` | `{}` | +| `backup.enabled` | Enable regular backups, default is `false`. | `bool` | `false` | +| `backup.s3Region` | AWS S3 region where backups are stored | `string` | `us-east-1` | +| `backup.s3Bucket` | S3 bucket used for storing backups | `string` | `s3.example.org/postgres-backups` | +| `backup.schedule` | Cron schedule for automated backups | `string` | `0 2 * * *` | +| `backup.cleanupStrategy` | Retention strategy for cleaning up old backups | `string` | `--keep-last=3 --keep-daily=3 --keep-within-weekly=1m` | +| `backup.s3AccessKey` | Access key for S3, used for authentication | `string` | `oobaiRus9pah8PhohL1ThaeTa4UVa7gu` | +| `backup.s3SecretKey` | Secret key for S3, used for authentication | `string` | `ju3eum4dekeich9ahM1te8waeGai0oog` | +| `backup.resticPassword` | Password for Restic backup encryption | `string` | `ChaXoveekoh6eigh4siesheeda2quai0` | + ## Parameter examples and reference diff --git a/packages/apps/mysql/values.schema.json b/packages/apps/mysql/values.schema.json index 021a489a..9cfb09fd 100644 --- a/packages/apps/mysql/values.schema.json +++ b/packages/apps/mysql/values.schema.json @@ -1,90 +1,199 @@ { - "properties": { - "backup": { - "properties": { - "cleanupStrategy": { - "default": "--keep-last=3 --keep-daily=3 --keep-within-weekly=1m", - "description": "The strategy for cleaning up old backups", - "type": "string" - }, - "enabled": { - "default": false, - "description": "Enable periodic backups", - "type": "boolean" - }, - "resticPassword": { - "default": "ChaXoveekoh6eigh4siesheeda2quai0", - "description": "The password for Restic backup encryption", - "type": "string" - }, - "s3AccessKey": { - "default": "oobaiRus9pah8PhohL1ThaeTa4UVa7gu", - "description": "The access key for S3, used for authentication", - "type": "string" - }, - "s3Bucket": { - "default": "s3.example.org/postgres-backups", - "description": "The S3 bucket used for storing backups", - "type": "string" - }, - "s3Region": { - "default": "us-east-1", - "description": "The AWS S3 region where backups are stored", - "type": "string" - }, - "s3SecretKey": { - "default": "ju3eum4dekeich9ahM1te8waeGai0oog", - "description": "The secret key for S3, used for authentication", - "type": "string" - }, - "schedule": { - "default": "0 2 * * *", - "description": "Cron schedule for automated backups", - "type": "string" - } - }, - "type": "object" + "title": "Chart Values", + "type": "object", + "properties": { + "backup": { + "description": "Backup configuration", + "type": "object", + "default": { + "cleanupStrategy": "--keep-last=3 --keep-daily=3 --keep-within-weekly=1m", + "enabled": false, + "resticPassword": "ChaXoveekoh6eigh4siesheeda2quai0", + "s3AccessKey": "oobaiRus9pah8PhohL1ThaeTa4UVa7gu", + "s3Bucket": "s3.example.org/postgres-backups", + "s3Region": "us-east-1", + "s3SecretKey": "ju3eum4dekeich9ahM1te8waeGai0oog", + "schedule": "0 2 * * *" + }, + "required": [ + "cleanupStrategy", + "enabled", + "resticPassword", + "s3AccessKey", + "s3Bucket", + "s3Region", + "s3SecretKey", + "schedule" + ], + "properties": { + "cleanupStrategy": { + "description": "Retention strategy for cleaning up old backups", + "type": "string", + "default": "--keep-last=3 --keep-daily=3 --keep-within-weekly=1m" }, - "external": { - "default": false, - "description": "Enable external access from outside the cluster", - "type": "boolean" + "enabled": { + "description": "Enable regular backups, default is `false`.", + "type": "boolean", + "default": false }, - "replicas": { - "default": 2, - "description": "Number of MariaDB replicas", - "type": "number" + "resticPassword": { + "description": "Password for Restic backup encryption", + "type": "string", + "default": "ChaXoveekoh6eigh4siesheeda2quai0" }, - "resources": { - "default": {}, - "description": "Explicit CPU and memory configuration for each MariaDB replica. When left empty, the preset defined in `resourcesPreset` is applied.", - "type": "object" + "s3AccessKey": { + "description": "Access key for S3, used for authentication", + "type": "string", + "default": "oobaiRus9pah8PhohL1ThaeTa4UVa7gu" }, - "resourcesPreset": { - "default": "nano", - "description": "Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge.", - "type": "string", - "enum": [ - "nano", - "micro", - "small", - "medium", - "large", - "xlarge", - "2xlarge" - ] + "s3Bucket": { + "description": "S3 bucket used for storing backups", + "type": "string", + "default": "s3.example.org/postgres-backups" }, - "size": { - "default": "10Gi", - "description": "Persistent Volume size", - "type": "string" + "s3Region": { + "description": "AWS S3 region where backups are stored", + "type": "string", + "default": "us-east-1" }, - "storageClass": { - "default": "", - "description": "StorageClass used to store the data", - "type": "string" + "s3SecretKey": { + "description": "Secret key for S3, used for authentication", + "type": "string", + "default": "ju3eum4dekeich9ahM1te8waeGai0oog" + }, + "schedule": { + "description": "Cron schedule for automated backups", + "type": "string", + "default": "0 2 * * *" } + } }, - "title": "Chart Values", - "type": "object" -} + "databases": { + "description": "Databases configuration", + "type": "object", + "default": {}, + "additionalProperties": { + "type": "object", + "properties": { + "roles": { + "description": "Roles for the database", + "type": "object", + "properties": { + "admin": { + "description": "List of users with admin privileges", + "type": "array", + "items": { + "type": "string" + } + }, + "readonly": { + "description": "List of users with read-only privileges", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "external": { + "description": "Enable external access from outside the cluster", + "type": "boolean", + "default": false + }, + "replicas": { + "description": "Number of MariaDB replicas", + "type": "integer", + "default": 2 + }, + "resources": { + "description": "Explicit CPU and memory configuration for each MariaDB replica. When left empty, the preset defined in `resourcesPreset` is applied.", + "type": "object", + "default": {}, + "properties": { + "cpu": { + "description": "CPU", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + }, + "memory": { + "description": "Memory", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + } + } + }, + "resourcesPreset": { + "description": "Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`.", + "type": "string", + "default": "nano", + "enum": [ + "nano", + "micro", + "small", + "medium", + "large", + "xlarge", + "2xlarge" + ] + }, + "size": { + "description": "Persistent Volume Claim size, available for application data", + "default": "10Gi", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + }, + "storageClass": { + "description": "StorageClass used to store the data", + "type": "string" + }, + "users": { + "description": "Users configuration", + "type": "object", + "default": {}, + "additionalProperties": { + "type": "object", + "required": [ + "maxUserConnections", + "password" + ], + "properties": { + "maxUserConnections": { + "description": "Maximum amount of connections", + "type": "integer" + }, + "password": { + "description": "Password for the user", + "type": "string" + } + } + } + } + } +} \ No newline at end of file diff --git a/packages/apps/mysql/values.yaml b/packages/apps/mysql/values.yaml index eea2b7ff..0c4959f5 100644 --- a/packages/apps/mysql/values.yaml +++ b/packages/apps/mysql/values.yaml @@ -1,24 +1,28 @@ ## @section Common parameters ## -## @param replicas Number of MariaDB replicas +## @param replicas {int} Number of MariaDB replicas replicas: 2 -## @param resources Explicit CPU and memory configuration for each MariaDB replica. When left empty, the preset defined in `resourcesPreset` is applied. +## @param resources {*resources} Explicit CPU and memory configuration for each MariaDB replica. When left empty, the preset defined in `resourcesPreset` is applied. +## @field resources.cpu {*quantity} CPU +## @field resources.memory {*quantity} Memory resources: {} # resources: # cpu: 4000m # memory: 4Gi -## @param resourcesPreset Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. +## @param resourcesPreset {string enum:"nano,micro,small,medium,large,xlarge,2xlarge"} Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`. resourcesPreset: "nano" -## @param size Persistent Volume size +## @param size {quantity} Persistent Volume Claim size, available for application data size: 10Gi -## @param storageClass StorageClass used to store the data +## @param storageClass {string} StorageClass used to store the data storageClass: "" -## @param external Enable external access from outside the cluster +## @param external {bool} Enable external access from outside the cluster external: false ## @section Application-specific parameters ## -## @param users [object] Users configuration +## @param users {map[string]user} Users configuration +## @field user.password {string} Password for the user +## @field user.maxUserConnections {int} Maximum amount of connections ## Example: ## users: ## user1: @@ -30,7 +34,12 @@ external: false ## users: {} -## @param databases [object] Databases configuration + +## @param databases {map[string]database} Databases configuration +## @field database.roles {*databaseRoles} Roles for the database +## @field databaseRoles.admin {[]string} List of users with admin privileges +## @field databaseRoles.readonly {[]string} List of users with read-only privileges +## ## Example: ## databases: ## myapp1: @@ -43,14 +52,15 @@ databases: {} ## @section Backup parameters ## -## @param backup.enabled Enable periodic backups -## @param backup.s3Region The AWS S3 region where backups are stored -## @param backup.s3Bucket The S3 bucket used for storing backups -## @param backup.schedule Cron schedule for automated backups -## @param backup.cleanupStrategy The strategy for cleaning up old backups -## @param backup.s3AccessKey The access key for S3, used for authentication -## @param backup.s3SecretKey The secret key for S3, used for authentication -## @param backup.resticPassword The password for Restic backup encryption +## @param backup {backup} Backup configuration +## @field backup.enabled {bool} Enable regular backups, default is `false`. +## @field backup.s3Region {string} AWS S3 region where backups are stored +## @field backup.s3Bucket {string} S3 bucket used for storing backups +## @field backup.schedule {string} Cron schedule for automated backups +## @field backup.cleanupStrategy {string} Retention strategy for cleaning up old backups +## @field backup.s3AccessKey {string} Access key for S3, used for authentication +## @field backup.s3SecretKey {string} Secret key for S3, used for authentication +## @field backup.resticPassword {string} Password for Restic backup encryption backup: enabled: false s3Region: us-east-1 diff --git a/packages/apps/nats/Makefile b/packages/apps/nats/Makefile index 4a92cb71..7017c673 100644 --- a/packages/apps/nats/Makefile +++ b/packages/apps/nats/Makefile @@ -1,6 +1,4 @@ include ../../../scripts/package.mk -PRESET_ENUM := ["nano","micro","small","medium","large","xlarge","2xlarge"] generate: - readme-generator-for-helm -v values.yaml -s values.schema.json -r README.md - yq -i -o json --indent 4 '.properties.resourcesPreset.enum = $(PRESET_ENUM)' values.schema.json + cozyvalues-gen -v values.yaml -s values.schema.json -r README.md diff --git a/packages/apps/nats/README.md b/packages/apps/nats/README.md index 9875a21a..04359409 100644 --- a/packages/apps/nats/README.md +++ b/packages/apps/nats/README.md @@ -7,23 +7,30 @@ It provides a data layer for cloud native applications, IoT messaging, and micro ### Common parameters -| Name | Description | Value | -| ----------------- | --------------------------------------------------------------------------------------------------------------------------------- | ------- | -| `replicas` | Number of replicas | `2` | -| `resources` | Explicit CPU and memory configuration for each NATS replica. When left empty, the preset defined in `resourcesPreset` is applied. | `{}` | -| `resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. | `nano` | -| `storageClass` | StorageClass used to store the data | `""` | -| `external` | Enable external access from outside the cluster | `false` | +| Name | Description | Type | Value | +| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ------- | +| `replicas` | Number of replicas | `int` | `2` | +| `resources` | Explicit CPU and memory configuration for each NATS replica. When left empty, the preset defined in `resourcesPreset` is applied. | `*object` | `{}` | +| `resources.cpu` | CPU | `*quantity` | `null` | +| `resources.memory` | Memory | `*quantity` | `null` | +| `resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`. | `string` | `nano` | +| `storageClass` | StorageClass used to store the data | `string` | `""` | +| `external` | Enable external access from outside the cluster | `bool` | `false` | + ### Application-specific parameters -| Name | Description | Value | -| ------------------- | ------------------------------------------------------------------------- | ------ | -| `users` | Users configuration (see example) | `{}` | -| `jetstream.enabled` | Enable or disable Jetstream | `true` | -| `jetstream.size` | Jetstream persistent storage size | `10Gi` | -| `config.merge` | Additional configuration to merge into NATS config (see example) | `{}` | -| `config.resolver` | Additional resolver configuration to merge into NATS config (see example) | `{}` | +| Name | Description | Type | Value | +| ---------------------- | -------------------------------------------------------------------------------------------------------------- | ------------------- | ------- | +| `users` | Users configuration | `map[string]object` | `{...}` | +| `users[name].password` | Password for the user | `*string` | `null` | +| `jetstream` | Jetstream configuration | `object` | `{}` | +| `jetstream.enabled` | Enable or disable Jetstream. Set to `true` (default) to enable Jetstream for persistent messaging in NATS. | `bool` | `true` | +| `jetstream.size` | Jetstream persistent storage size. Specifies the size of the persistent storage for Jetstream (message store). | `quantity` | `10Gi` | +| `config` | NATS configuration | `object` | `{}` | +| `config.merge` | Additional configuration to merge into NATS config (see example) | `*object` | `{}` | +| `config.resolver` | Additional resolver configuration to merge into NATS config (see example) | `*object` | `{}` | + ## Parameter examples and reference diff --git a/packages/apps/nats/values.schema.json b/packages/apps/nats/values.schema.json index e76f0562..af8ce532 100644 --- a/packages/apps/nats/values.schema.json +++ b/packages/apps/nats/values.schema.json @@ -1,70 +1,136 @@ { - "properties": { - "config": { - "properties": { - "merge": { - "default": {}, - "description": "Additional configuration to merge into NATS config (see example)", - "type": "object" - }, - "resolver": { - "default": {}, - "description": "Additional resolver configuration to merge into NATS config (see example)", - "type": "object" - } - }, - "type": "object" + "title": "Chart Values", + "type": "object", + "properties": { + "config": { + "description": "NATS configuration", + "type": "object", + "default": { + "merge": {}, + "resolver": {} + }, + "properties": { + "merge": { + "description": "Additional configuration to merge into NATS config (see example)", + "type": "object", + "default": {}, + "x-kubernetes-preserve-unknown-fields": true }, - "external": { - "default": false, - "description": "Enable external access from outside the cluster", - "type": "boolean" - }, - "jetstream": { - "properties": { - "enabled": { - "default": true, - "description": "Enable or disable Jetstream", - "type": "boolean" - }, - "size": { - "default": "10Gi", - "description": "Jetstream persistent storage size", - "type": "string" - } - }, - "type": "object" - }, - "replicas": { - "default": 2, - "description": "Number of replicas", - "type": "number" - }, - "resources": { - "default": {}, - "description": "Explicit CPU and memory configuration for each NATS replica. When left empty, the preset defined in `resourcesPreset` is applied.", - "type": "object" - }, - "resourcesPreset": { - "default": "nano", - "description": "Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge.", - "type": "string", - "enum": [ - "nano", - "micro", - "small", - "medium", - "large", - "xlarge", - "2xlarge" - ] - }, - "storageClass": { - "default": "", - "description": "StorageClass used to store the data", - "type": "string" + "resolver": { + "description": "Additional resolver configuration to merge into NATS config (see example)", + "type": "object", + "default": {}, + "x-kubernetes-preserve-unknown-fields": true } + } }, - "title": "Chart Values", - "type": "object" -} + "external": { + "description": "Enable external access from outside the cluster", + "type": "boolean", + "default": false + }, + "jetstream": { + "description": "Jetstream configuration", + "type": "object", + "default": { + "enabled": true, + "size": "10Gi" + }, + "required": [ + "enabled", + "size" + ], + "properties": { + "enabled": { + "description": "Enable or disable Jetstream. Set to `true` (default) to enable Jetstream for persistent messaging in NATS.", + "type": "boolean", + "default": true + }, + "size": { + "description": "Jetstream persistent storage size. Specifies the size of the persistent storage for Jetstream (message store).", + "default": "10Gi", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + } + } + }, + "replicas": { + "description": "Number of replicas", + "type": "integer", + "default": 2 + }, + "resources": { + "description": "Explicit CPU and memory configuration for each NATS replica. When left empty, the preset defined in `resourcesPreset` is applied.", + "type": "object", + "default": {}, + "properties": { + "cpu": { + "description": "CPU", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + }, + "memory": { + "description": "Memory", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + } + } + }, + "resourcesPreset": { + "description": "Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`.", + "type": "string", + "default": "nano", + "enum": [ + "nano", + "micro", + "small", + "medium", + "large", + "xlarge", + "2xlarge" + ] + }, + "storageClass": { + "description": "StorageClass used to store the data", + "type": "string" + }, + "users": { + "description": "Users configuration", + "type": "object", + "default": {}, + "additionalProperties": { + "type": "object", + "properties": { + "password": { + "description": "Password for the user", + "type": "string" + } + } + } + } + } +} \ No newline at end of file diff --git a/packages/apps/nats/values.yaml b/packages/apps/nats/values.yaml index 6b5a7fb5..f948f97d 100644 --- a/packages/apps/nats/values.yaml +++ b/packages/apps/nats/values.yaml @@ -1,22 +1,25 @@ ## @section Common parameters ## -## @param replicas Number of replicas +## @param replicas {int} Number of replicas replicas: 2 -## @param resources Explicit CPU and memory configuration for each NATS replica. When left empty, the preset defined in `resourcesPreset` is applied. +## @param resources {*resources} Explicit CPU and memory configuration for each NATS replica. When left empty, the preset defined in `resourcesPreset` is applied. +## @field resources.cpu {*quantity} CPU +## @field resources.memory {*quantity} Memory resources: {} # resources: # cpu: 4000m # memory: 4Gi -## @param resourcesPreset Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. +## @param resourcesPreset {string enum:"nano,micro,small,medium,large,xlarge,2xlarge"} Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`. resourcesPreset: "nano" -## @param storageClass StorageClass used to store the data +## @param storageClass {string} StorageClass used to store the data storageClass: "" -## @param external Enable external access from outside the cluster +## @param external {bool} Enable external access from outside the cluster external: false ## @section Application-specific parameters ## -## @param users [object] Users configuration (see example) +## @param users {map[string]user} Users configuration +## @field user.password {*string} Password for the user ## Example: ## users: ## user1: @@ -24,18 +27,19 @@ external: false ## user2: {} users: {} +## @param jetstream {jetstream} Jetstream configuration jetstream: - ## @param jetstream.enabled Enable or disable Jetstream - ## Set to true to enable Jetstream for persistent messaging in NATS. + ## @field jetstream.enabled {bool} Enable or disable Jetstream. Set to `true` (default) to enable Jetstream for persistent messaging in NATS. + ## ## Default: true enabled: true - ## @param jetstream.size Jetstream persistent storage size - ## Specifies the size of the persistent storage for Jetstream (message store). - ## Default: 10Gi + ## @field jetstream.size {quantity} Jetstream persistent storage size. Specifies the size of the persistent storage for Jetstream (message store). + ## size: 10Gi +## @param config {config} NATS configuration config: - ## @param config.merge Additional configuration to merge into NATS config (see example) + ## @field config.merge {*object} Additional configuration to merge into NATS config (see example) ## Allows you to customize NATS server settings by merging additional configurations. ## For example, you can add extra parameters, configure authentication, or set custom settings. ## Default: {} @@ -63,7 +67,7 @@ config: ## include ./my-config-last.conf; ## } merge: {} - ## @param config.resolver Additional resolver configuration to merge into NATS config (see example) + ## @field config.resolver {*object} Additional resolver configuration to merge into NATS config (see example) ## Allows you to customize NATS server settings by merging resolver configurations. ## Default: {} ## Example: https://github.com/nats-io/k8s/blob/94414664c254b0bbac3a07fc9693f6c4f8f88709/helm/charts/nats/values.yaml#L248-L270 diff --git a/packages/apps/postgres/README.md b/packages/apps/postgres/README.md index 34096f49..c312c3b7 100644 --- a/packages/apps/postgres/README.md +++ b/packages/apps/postgres/README.md @@ -100,16 +100,16 @@ See: ### Backup parameters -| Name | Description | Type | Value | -| ------------------------ | ---------------------------------------------------------- | -------- | ----------------------------------- | -| `backup` | Backup configuration | `object` | `{}` | -| `backup.enabled` | Enable regular backups | `bool` | `false` | -| `backup.schedule` | Cron schedule for automated backups | `string` | `0 2 * * * *` | -| `backup.retentionPolicy` | Retention policy | `string` | `30d` | -| `backup.destinationPath` | Path to store the backup (i.e. s3://bucket/path/to/folder) | `string` | `s3://bucket/path/to/folder/` | -| `backup.endpointURL` | S3 Endpoint used to upload data to the cloud | `string` | `http://minio-gateway-service:9000` | -| `backup.s3AccessKey` | Access key for S3, used for authentication | `string` | `` | -| `backup.s3SecretKey` | Secret key for S3, used for authentication | `string` | `` | +| Name | Description | Type | Value | +| ------------------------ | ---------------------------------------------------------- | --------- | ----------------------------------- | +| `backup` | Backup configuration | `object` | `{}` | +| `backup.enabled` | Enable regular backups | `*bool` | `false` | +| `backup.schedule` | Cron schedule for automated backups | `*string` | `0 2 * * * *` | +| `backup.retentionPolicy` | Retention policy | `*string` | `30d` | +| `backup.destinationPath` | Path to store the backup (i.e. s3://bucket/path/to/folder) | `*string` | `s3://bucket/path/to/folder/` | +| `backup.endpointURL` | S3 Endpoint used to upload data to the cloud | `*string` | `http://minio-gateway-service:9000` | +| `backup.s3AccessKey` | Access key for S3, used for authentication | `*string` | `` | +| `backup.s3SecretKey` | Secret key for S3, used for authentication | `*string` | `` | ### Bootstrap (recovery) parameters diff --git a/packages/apps/postgres/values.schema.json b/packages/apps/postgres/values.schema.json index b280557f..ac56acbd 100644 --- a/packages/apps/postgres/values.schema.json +++ b/packages/apps/postgres/values.schema.json @@ -14,15 +14,6 @@ "s3SecretKey": "\u003csecret key\u003e", "schedule": "0 2 * * * *" }, - "required": [ - "destinationPath", - "enabled", - "endpointURL", - "retentionPolicy", - "s3AccessKey", - "s3SecretKey", - "schedule" - ], "properties": { "destinationPath": { "description": "Path to store the backup (i.e. s3://bucket/path/to/folder)", diff --git a/packages/apps/postgres/values.yaml b/packages/apps/postgres/values.yaml index bd283477..f6f3849f 100644 --- a/packages/apps/postgres/values.yaml +++ b/packages/apps/postgres/values.yaml @@ -78,13 +78,13 @@ databases: {} ## @section Backup parameters ## @param backup {backup} Backup configuration -## @field backup.enabled {bool} Enable regular backups -## @field backup.schedule {string} Cron schedule for automated backups -## @field backup.retentionPolicy {string} Retention policy -## @field backup.destinationPath {string} Path to store the backup (i.e. s3://bucket/path/to/folder) -## @field backup.endpointURL {string} S3 Endpoint used to upload data to the cloud -## @field backup.s3AccessKey {string} Access key for S3, used for authentication -## @field backup.s3SecretKey {string} Secret key for S3, used for authentication +## @field backup.enabled {*bool} Enable regular backups +## @field backup.schedule {*string} Cron schedule for automated backups +## @field backup.retentionPolicy {*string} Retention policy +## @field backup.destinationPath {*string} Path to store the backup (i.e. s3://bucket/path/to/folder) +## @field backup.endpointURL {*string} S3 Endpoint used to upload data to the cloud +## @field backup.s3AccessKey {*string} Access key for S3, used for authentication +## @field backup.s3SecretKey {*string} Secret key for S3, used for authentication backup: enabled: false retentionPolicy: 30d diff --git a/packages/apps/rabbitmq/Makefile b/packages/apps/rabbitmq/Makefile index 4a92cb71..7017c673 100644 --- a/packages/apps/rabbitmq/Makefile +++ b/packages/apps/rabbitmq/Makefile @@ -1,6 +1,4 @@ include ../../../scripts/package.mk -PRESET_ENUM := ["nano","micro","small","medium","large","xlarge","2xlarge"] generate: - readme-generator-for-helm -v values.yaml -s values.schema.json -r README.md - yq -i -o json --indent 4 '.properties.resourcesPreset.enum = $(PRESET_ENUM)' values.schema.json + cozyvalues-gen -v values.yaml -s values.schema.json -r README.md diff --git a/packages/apps/rabbitmq/README.md b/packages/apps/rabbitmq/README.md index fbbd9133..cfcf32e9 100644 --- a/packages/apps/rabbitmq/README.md +++ b/packages/apps/rabbitmq/README.md @@ -13,21 +13,33 @@ The service utilizes official RabbitMQ operator. This ensures the reliability an ### Common parameters -| Name | Description | Value | -| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ------- | -| `replicas` | Number of RabbitMQ replicas | `3` | -| `resources` | Explicit CPU and memory configuration for each RabbitMQ replica. When left empty, the preset defined in `resourcesPreset` is applied. | `{}` | -| `resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. | `nano` | -| `size` | Persistent Volume size | `10Gi` | -| `storageClass` | StorageClass used to store the data | `""` | -| `external` | Enable external access from outside the cluster | `false` | +| Name | Description | Type | Value | +| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ------- | +| `replicas` | Number of RabbitMQ replicas | `int` | `3` | +| `resources` | Explicit CPU and memory configuration for each RabbitMQ replica. When left empty, the preset defined in `resourcesPreset` is applied. | `*object` | `{}` | +| `resources.cpu` | CPU | `*quantity` | `null` | +| `resources.memory` | Memory | `*quantity` | `null` | +| `resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`. | `string` | `nano` | +| `size` | Persistent Volume Claim size, available for application data | `quantity` | `10Gi` | +| `storageClass` | StorageClass used to store the data | `string` | `""` | +| `external` | Enable external access from outside the cluster | `bool` | `false` | + ### Application-specific parameters -| Name | Description | Value | -| -------- | --------------------------- | ----- | -| `users` | Users configuration | `{}` | -| `vhosts` | Virtual Hosts configuration | `{}` | +| Name | Description | Type | Value | +| ----------------------------- | --------------------------- | ------------------- | ------- | +| `users` | Users configuration | `map[string]object` | `{...}` | +| `users[name].password` | Password for the user | `*string` | `null` | +| `vhosts` | Virtual Hosts configuration | `map[string]object` | `{...}` | +| `vhosts[name].roles` | Virtual host roles list | `object` | `{}` | +| `vhosts[name].roles.admin` | List of admin users | `[]string` | `[]` | +| `vhosts[name].roles.readonly` | List of readonly users | `[]string` | `[]` | +| `vhost` | Virtual Host | `object` | `{}` | +| `vhost.roles` | Virtual host roles list | `object` | `{}` | +| `vhost.roles.admin` | List of admin users | `[]string` | `[]` | +| `vhost.roles.readonly` | List of readonly users | `[]string` | `[]` | + ## Parameter examples and reference diff --git a/packages/apps/rabbitmq/values.schema.json b/packages/apps/rabbitmq/values.schema.json index c7749d18..fab480b8 100644 --- a/packages/apps/rabbitmq/values.schema.json +++ b/packages/apps/rabbitmq/values.schema.json @@ -1,50 +1,157 @@ { - "properties": { - "external": { - "default": false, - "description": "Enable external access from outside the cluster", - "type": "boolean" - }, - "replicas": { - "default": 3, - "description": "Number of RabbitMQ replicas", - "type": "number" - }, - "resources": { - "default": {}, - "description": "Explicit CPU and memory configuration for each RabbitMQ replica. When left empty, the preset defined in `resourcesPreset` is applied.", - "type": "object" - }, - "resourcesPreset": { - "default": "nano", - "description": "Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge.", - "type": "string", - "enum": [ - "nano", - "micro", - "small", - "medium", - "large", - "xlarge", - "2xlarge" - ] - }, - "size": { - "default": "10Gi", - "description": "Persistent Volume size", - "type": "string" - }, - "storageClass": { - "default": "", - "description": "StorageClass used to store the data", - "type": "string" - }, - "vhosts": { - "default": {}, - "description": "Virtual Hosts configuration", - "type": "object" - } + "title": "Chart Values", + "type": "object", + "properties": { + "external": { + "description": "Enable external access from outside the cluster", + "type": "boolean", + "default": false }, - "title": "Chart Values", - "type": "object" -} + "replicas": { + "description": "Number of RabbitMQ replicas", + "type": "integer", + "default": 3 + }, + "resources": { + "description": "Explicit CPU and memory configuration for each RabbitMQ replica. When left empty, the preset defined in `resourcesPreset` is applied.", + "type": "object", + "default": {}, + "properties": { + "cpu": { + "description": "CPU", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + }, + "memory": { + "description": "Memory", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + } + } + }, + "resourcesPreset": { + "description": "Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`.", + "type": "string", + "default": "nano", + "enum": [ + "nano", + "micro", + "small", + "medium", + "large", + "xlarge", + "2xlarge" + ] + }, + "size": { + "description": "Persistent Volume Claim size, available for application data", + "default": "10Gi", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + }, + "storageClass": { + "description": "StorageClass used to store the data", + "type": "string" + }, + "users": { + "description": "Users configuration", + "type": "object", + "default": {}, + "additionalProperties": { + "type": "object", + "properties": { + "password": { + "description": "Password for the user", + "type": "string" + } + } + } + }, + "vhost": { + "description": "Virtual Host", + "type": "object", + "required": [ + "roles" + ], + "properties": { + "roles": { + "description": "Virtual host roles list", + "type": "object", + "properties": { + "admin": { + "description": "List of admin users", + "type": "array", + "items": { + "type": "string" + } + }, + "readonly": { + "description": "List of readonly users", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "vhosts": { + "description": "Virtual Hosts configuration", + "type": "object", + "default": {}, + "additionalProperties": { + "type": "object", + "required": [ + "roles" + ], + "properties": { + "roles": { + "description": "Virtual host roles list", + "type": "object", + "properties": { + "admin": { + "description": "List of admin users", + "type": "array", + "items": { + "type": "string" + } + }, + "readonly": { + "description": "List of readonly users", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/packages/apps/rabbitmq/values.yaml b/packages/apps/rabbitmq/values.yaml index 8435e387..b5034b51 100644 --- a/packages/apps/rabbitmq/values.yaml +++ b/packages/apps/rabbitmq/values.yaml @@ -1,25 +1,29 @@ ## @section Common parameters ## -## @param replicas Number of RabbitMQ replicas +## @param replicas {int} Number of RabbitMQ replicas replicas: 3 -## @param resources Explicit CPU and memory configuration for each RabbitMQ replica. When left empty, the preset defined in `resourcesPreset` is applied. +## @param resources {*resources} Explicit CPU and memory configuration for each RabbitMQ replica. When left empty, the preset defined in `resourcesPreset` is applied. +## @field resources.cpu {*quantity} CPU +## @field resources.memory {*quantity} Memory +# resources: +# cpu: 4000m +# memory: 4Gi resources: {} - # resources: - # cpu: 4000m - # memory: 4Gi -## @param resourcesPreset Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. + +## @param resourcesPreset {string enum:"nano,micro,small,medium,large,xlarge,2xlarge"} Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`. resourcesPreset: "nano" -## @param size Persistent Volume size +## @param size {quantity} Persistent Volume Claim size, available for application data size: 10Gi -## @param storageClass StorageClass used to store the data +## @param storageClass {string} StorageClass used to store the data storageClass: "" -## @param external Enable external access from outside the cluster +## @param external {bool} Enable external access from outside the cluster external: false ## @section Application-specific parameters ## -## @param users [object] Users configuration +## @param users {map[string]user} Users configuration +## @field user.password {*string} Password for the user ## Example: ## users: ## user1: @@ -31,7 +35,12 @@ external: false ## users: {} -## @param vhosts Virtual Hosts configuration +## @param vhosts {map[string]vhost} Virtual Hosts configuration +## @param vhost {vhost} Virtual Host +## @field vhost.roles {roles} Virtual host roles list +## @field roles.admin {[]string} List of admin users +## @field roles.readonly {[]string} List of readonly users +## ## Example: ## vhosts: ## myapp: diff --git a/packages/apps/redis/Makefile b/packages/apps/redis/Makefile index 4a92cb71..7017c673 100644 --- a/packages/apps/redis/Makefile +++ b/packages/apps/redis/Makefile @@ -1,6 +1,4 @@ include ../../../scripts/package.mk -PRESET_ENUM := ["nano","micro","small","medium","large","xlarge","2xlarge"] generate: - readme-generator-for-helm -v values.yaml -s values.schema.json -r README.md - yq -i -o json --indent 4 '.properties.resourcesPreset.enum = $(PRESET_ENUM)' values.schema.json + cozyvalues-gen -v values.yaml -s values.schema.json -r README.md diff --git a/packages/apps/redis/README.md b/packages/apps/redis/README.md index 6ed7603a..90b211d6 100644 --- a/packages/apps/redis/README.md +++ b/packages/apps/redis/README.md @@ -13,20 +13,24 @@ Service utilizes the Spotahome Redis Operator for efficient management and orche ### Common parameters -| Name | Description | Value | -| ----------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------- | -| `replicas` | Number of Redis replicas | `2` | -| `resources` | Explicit CPU and memory configuration for each Redis replica. When left empty, the preset defined in `resourcesPreset` is applied. | `{}` | -| `resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. | `nano` | -| `size` | Persistent Volume size | `1Gi` | -| `storageClass` | StorageClass used to store the data | `""` | -| `external` | Enable external access from outside the cluster | `false` | +| Name | Description | Type | Value | +| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ------- | +| `replicas` | Number of Redis replicas | `int` | `2` | +| `resources` | Explicit CPU and memory configuration for each Redis replica. When left empty, the preset defined in `resourcesPreset` is applied. | `*object` | `{}` | +| `resources.cpu` | CPU | `*quantity` | `null` | +| `resources.memory` | Memory | `*quantity` | `null` | +| `resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`. | `string` | `nano` | +| `size` | Persistent Volume Claim size, available for application data | `quantity` | `1Gi` | +| `storageClass` | StorageClass used to store the data | `string` | `""` | +| `external` | Enable external access from outside the cluster | `bool` | `false` | + ### Application-specific parameters -| Name | Description | Value | -| ------------- | -------------------------- | ------ | -| `authEnabled` | Enable password generation | `true` | +| Name | Description | Type | Value | +| ------------- | -------------------------- | ------ | ------ | +| `authEnabled` | Enable password generation | `bool` | `true` | + ## Parameter examples and reference diff --git a/packages/apps/redis/values.schema.json b/packages/apps/redis/values.schema.json index eb68a5ee..03f00f8a 100644 --- a/packages/apps/redis/values.schema.json +++ b/packages/apps/redis/values.schema.json @@ -1,50 +1,86 @@ { - "properties": { - "authEnabled": { - "default": true, - "description": "Enable password generation", - "type": "boolean" - }, - "external": { - "default": false, - "description": "Enable external access from outside the cluster", - "type": "boolean" - }, - "replicas": { - "default": 2, - "description": "Number of Redis replicas", - "type": "number" - }, - "resources": { - "default": {}, - "description": "Explicit CPU and memory configuration for each Redis replica. When left empty, the preset defined in `resourcesPreset` is applied.", - "type": "object" - }, - "resourcesPreset": { - "default": "nano", - "description": "Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge.", - "type": "string", - "enum": [ - "nano", - "micro", - "small", - "medium", - "large", - "xlarge", - "2xlarge" - ] - }, - "size": { - "default": "1Gi", - "description": "Persistent Volume size", - "type": "string" - }, - "storageClass": { - "default": "", - "description": "StorageClass used to store the data", - "type": "string" - } + "title": "Chart Values", + "type": "object", + "properties": { + "authEnabled": { + "description": "Enable password generation", + "type": "boolean", + "default": true }, - "title": "Chart Values", - "type": "object" -} + "external": { + "description": "Enable external access from outside the cluster", + "type": "boolean", + "default": false + }, + "replicas": { + "description": "Number of Redis replicas", + "type": "integer", + "default": 2 + }, + "resources": { + "description": "Explicit CPU and memory configuration for each Redis replica. When left empty, the preset defined in `resourcesPreset` is applied.", + "type": "object", + "default": {}, + "properties": { + "cpu": { + "description": "CPU", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + }, + "memory": { + "description": "Memory", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + } + } + }, + "resourcesPreset": { + "description": "Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`.", + "type": "string", + "default": "nano", + "enum": [ + "nano", + "micro", + "small", + "medium", + "large", + "xlarge", + "2xlarge" + ] + }, + "size": { + "description": "Persistent Volume Claim size, available for application data", + "default": "1Gi", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + }, + "storageClass": { + "description": "StorageClass used to store the data", + "type": "string" + } + } +} \ No newline at end of file diff --git a/packages/apps/redis/values.yaml b/packages/apps/redis/values.yaml index 0058ac52..a4deab27 100644 --- a/packages/apps/redis/values.yaml +++ b/packages/apps/redis/values.yaml @@ -1,23 +1,25 @@ ## @section Common parameters ## -## @param replicas Number of Redis replicas +## @param replicas {int} Number of Redis replicas replicas: 2 -## @param resources Explicit CPU and memory configuration for each Redis replica. When left empty, the preset defined in `resourcesPreset` is applied. +## @param resources {*resources} Explicit CPU and memory configuration for each Redis replica. When left empty, the preset defined in `resourcesPreset` is applied. +## @field resources.cpu {*quantity} CPU +## @field resources.memory {*quantity} Memory resources: {} # resources: # cpu: 4000m # memory: 4Gi -## @param resourcesPreset Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. +## @param resourcesPreset {string enum:"nano,micro,small,medium,large,xlarge,2xlarge"} Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`. resourcesPreset: "nano" -## @param size Persistent Volume size +## @param size {quantity} Persistent Volume Claim size, available for application data size: 1Gi -## @param storageClass StorageClass used to store the data +## @param storageClass {string} StorageClass used to store the data storageClass: "" -## @param external Enable external access from outside the cluster +## @param external {bool} Enable external access from outside the cluster external: false ## @section Application-specific parameters ## -## @param authEnabled Enable password generation +## @param authEnabled {bool} Enable password generation authEnabled: true diff --git a/packages/apps/tcp-balancer/Makefile b/packages/apps/tcp-balancer/Makefile index 30e42a8f..7017c673 100644 --- a/packages/apps/tcp-balancer/Makefile +++ b/packages/apps/tcp-balancer/Makefile @@ -1,8 +1,4 @@ include ../../../scripts/package.mk -PRESET_ENUM := ["nano","micro","small","medium","large","xlarge","2xlarge"] generate: - readme-generator-for-helm -v values.yaml -s values.schema.json -r README.md - yq -i -o json --indent 2 '.properties.httpAndHttps.properties.mode.enum = ["tcp","tcp-with-proxy"]' values.schema.json - yq -i -o json --indent 2 '.properties.resourcesPreset.enum = $(PRESET_ENUM)' values.schema.json - rm -f values.schema.json.tmp + cozyvalues-gen -v values.yaml -s values.schema.json -r README.md diff --git a/packages/apps/tcp-balancer/README.md b/packages/apps/tcp-balancer/README.md index 2236dff5..4e5eda0f 100644 --- a/packages/apps/tcp-balancer/README.md +++ b/packages/apps/tcp-balancer/README.md @@ -12,23 +12,29 @@ Managed TCP Load Balancer Service efficiently utilizes HAProxy for load balancin ### Common parameters -| Name | Description | Value | -| ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ------- | -| `replicas` | Number of HAProxy replicas | `2` | -| `resources` | Explicit CPU and memory configuration for each TCP Balancer replica. When left empty, the preset defined in `resourcesPreset` is applied. | `{}` | -| `resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. | `nano` | -| `external` | Enable external access from outside the cluster | `false` | +| Name | Description | Type | Value | +| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ----------- | ------- | +| `replicas` | Number of HAProxy replicas | `int` | `2` | +| `resources` | Explicit CPU and memory configuration for each TCP Balancer replica. When left empty, the preset defined in `resourcesPreset` is applied. | `*object` | `null` | +| `resources.cpu` | CPU | `*quantity` | `null` | +| `resources.memory` | Memory | `*quantity` | `null` | +| `resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`. | `string` | `nano` | +| `external` | Enable external access from outside the cluster | `bool` | `false` | + ### Application-specific parameters -| Name | Description | Value | -| -------------------------------- | ------------------------------------------------------------- | ------- | -| `httpAndHttps.mode` | Mode for balancer. Allowed values: `tcp` and `tcp-with-proxy` | `tcp` | -| `httpAndHttps.targetPorts.http` | HTTP port number. | `80` | -| `httpAndHttps.targetPorts.https` | HTTPS port number. | `443` | -| `httpAndHttps.endpoints` | Endpoint addresses list | `[]` | -| `whitelistHTTP` | Secure HTTP by whitelisting client networks | `false` | -| `whitelist` | List of client networks | `[]` | +| Name | Description | Type | Value | +| -------------------------------- | ---------------------------------------------------------------- | ---------- | ------- | +| `httpAndHttps` | HTTP and HTTPS configuration | `object` | `{}` | +| `httpAndHttps.mode` | Mode for balancer. Allowed values: `tcp` and `tcp-with-proxy` | `string` | `tcp` | +| `httpAndHttps.targetPorts` | Target ports configuration | `object` | `{}` | +| `httpAndHttps.targetPorts.http` | HTTP port number. | `int` | `80` | +| `httpAndHttps.targetPorts.https` | HTTPS port number. | `int` | `443` | +| `httpAndHttps.endpoints` | Endpoint addresses list | `[]string` | `[]` | +| `whitelistHTTP` | Secure HTTP by whitelisting client networks, `false` by default. | `bool` | `false` | +| `whitelist` | List of allowed client networks | `[]string` | `[]` | + ## Parameter examples and reference diff --git a/packages/apps/tcp-balancer/values.schema.json b/packages/apps/tcp-balancer/values.schema.json index 3d9cc850..5b87986b 100644 --- a/packages/apps/tcp-balancer/values.schema.json +++ b/packages/apps/tcp-balancer/values.schema.json @@ -1,59 +1,112 @@ { + "title": "Chart Values", + "type": "object", "properties": { "external": { - "default": false, "description": "Enable external access from outside the cluster", - "type": "boolean" + "type": "boolean", + "default": false }, "httpAndHttps": { + "description": "HTTP and HTTPS configuration", + "type": "object", + "default": { + "endpoints": {}, + "mode": "tcp", + "targetPorts": { + "http": 80, + "https": 443 + } + }, + "required": [ + "mode", + "targetPorts" + ], "properties": { "endpoints": { - "default": [], "description": "Endpoint addresses list", - "items": {}, - "type": "array" + "type": "array", + "default": [], + "items": { + "type": "string" + } }, "mode": { - "default": "tcp", "description": "Mode for balancer. Allowed values: `tcp` and `tcp-with-proxy`", "type": "string", + "default": "tcp", "enum": [ "tcp", "tcp-with-proxy" ] }, "targetPorts": { + "description": "Target ports configuration", + "type": "object", + "default": { + "http": 80, + "https": 443 + }, + "required": [ + "http", + "https" + ], "properties": { "http": { - "default": 80, "description": "HTTP port number.", - "type": "number" + "type": "integer", + "default": 80 }, "https": { - "default": 443, "description": "HTTPS port number.", - "type": "number" + "type": "integer", + "default": 443 } - }, - "type": "object" + } } - }, - "type": "object" + } }, "replicas": { - "default": 2, "description": "Number of HAProxy replicas", - "type": "number" + "type": "integer", + "default": 2 }, "resources": { - "default": {}, - "description": "Explicit CPU and memory configuration for each TCP Balancer replica. When left empty, the preset defined in `resourcesPreset` is applied.", - "type": "object" + "description": "Explicit CPU and memory configuration for each TCP Balancer replica. When left empty, the preset defined in `resourcesPreset` is applied.", + "type": "object", + "properties": { + "cpu": { + "description": "CPU", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + }, + "memory": { + "description": "Memory", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + } + } }, "resourcesPreset": { - "default": "nano", - "description": "Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge.", + "description": "Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`.", "type": "string", + "default": "nano", "enum": [ "nano", "micro", @@ -65,17 +118,17 @@ ] }, "whitelist": { + "description": "List of allowed client networks", + "type": "array", "default": [], - "description": "List of client networks", - "items": {}, - "type": "array" + "items": { + "type": "string" + } }, "whitelistHTTP": { - "default": false, - "description": "Secure HTTP by whitelisting client networks", - "type": "boolean" + "description": "Secure HTTP by whitelisting client networks, `false` by default.", + "type": "boolean", + "default": false } - }, - "title": "Chart Values", - "type": "object" -} + } +} \ No newline at end of file diff --git a/packages/apps/tcp-balancer/values.yaml b/packages/apps/tcp-balancer/values.yaml index 7684ca55..83bcf0d4 100644 --- a/packages/apps/tcp-balancer/values.yaml +++ b/packages/apps/tcp-balancer/values.yaml @@ -1,25 +1,29 @@ ## @section Common parameters ## -## @param replicas Number of HAProxy replicas +## @param replicas {int} Number of HAProxy replicas replicas: 2 -## @param resources Explicit CPU and memory configuration for each TCP Balancer replica. When left empty, the preset defined in `resourcesPreset` is applied. -resources: {} +## @param resources {*resources} Explicit CPU and memory configuration for each TCP Balancer replica. When left empty, the preset defined in `resourcesPreset` is applied. +## @field resources.cpu {*quantity} CPU +## @field resources.memory {*quantity} Memory +#resources: {} # resources: # cpu: 4000m # memory: 4Gi -## @param resourcesPreset Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. +## @param resourcesPreset {string enum:"nano,micro,small,medium,large,xlarge,2xlarge"} Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`. resourcesPreset: "nano" ## -## @param external Enable external access from outside the cluster +## @param external {bool} Enable external access from outside the cluster external: false ## @section Application-specific parameters ## -## @param httpAndHttps.mode Mode for balancer. Allowed values: `tcp` and `tcp-with-proxy` -## @param httpAndHttps.targetPorts.http HTTP port number. -## @param httpAndHttps.targetPorts.https HTTPS port number. -## @param httpAndHttps.endpoints Endpoint addresses list +## @param httpAndHttps {httpAndHttps} HTTP and HTTPS configuration +## @field httpAndHttps.mode {string enum:"tcp,tcp-with-proxy"} Mode for balancer. Allowed values: `tcp` and `tcp-with-proxy` +## @field httpAndHttps.targetPorts {targetPorts} Target ports configuration +## @field targetPorts.http {int} HTTP port number. +## @field targetPorts.https {int} HTTPS port number. +## @field httpAndHttps.endpoints {[]string} Endpoint addresses list ## Example: ## ## httpAndHttps: @@ -42,8 +46,8 @@ httpAndHttps: https: 443 endpoints: [] -## @param whitelistHTTP Secure HTTP by whitelisting client networks -## @param whitelist List of client networks +## @param whitelistHTTP {bool} Secure HTTP by whitelisting client networks, `false` by default. +## @param whitelist {[]string} List of allowed client networks ## Example: ## whitelistHTTP: true ## whitelist: diff --git a/packages/apps/virtual-machine/README.md b/packages/apps/virtual-machine/README.md index 3c9f05ae..85320639 100644 --- a/packages/apps/virtual-machine/README.md +++ b/packages/apps/virtual-machine/README.md @@ -50,7 +50,7 @@ virtctl ssh @ | `systemDisk.storageClass` | StorageClass used to store the data | `*string` | `replicated` | | `gpus` | List of GPUs to attach | `[]object` | `[]` | | `gpus[i].name` | The name of the GPU to attach. This should match the GPU resource name in the cluster. | `string` | `""` | -| `resources` | Resources | `object` | `{}` | +| `resources` | Resources | `*object` | `{}` | | `resources.cpu` | The number of CPU cores allocated to the virtual machine | `*quantity` | `null` | | `resources.sockets` | The number of CPU sockets allocated to the virtual machine (used to define vCPU topology) | `*quantity` | `null` | | `resources.memory` | The amount of memory allocated to the virtual machine | `*quantity` | `null` | diff --git a/packages/apps/virtual-machine/values.yaml b/packages/apps/virtual-machine/values.yaml index f993a913..95db215a 100644 --- a/packages/apps/virtual-machine/values.yaml +++ b/packages/apps/virtual-machine/values.yaml @@ -36,15 +36,15 @@ systemDisk: gpus: [] -## @param resources {resources} Resources +## @param resources {*resources} Resources ## @field resources.cpu {*quantity} The number of CPU cores allocated to the virtual machine ## @field resources.sockets {*quantity} The number of CPU sockets allocated to the virtual machine (used to define vCPU topology) ## @field resources.memory {*quantity} The amount of memory allocated to the virtual machine ## Example: ## resources: -## cpu: "4" -## sockets: "1" -## memory: "8Gi" +## cpu: "4" +## sockets: "1" +## memory: "8Gi" resources: {} ## @param sshKeys {[]string} List of SSH public keys for authentication. Can be a single key or a list of keys. diff --git a/packages/apps/vm-disk/Makefile b/packages/apps/vm-disk/Makefile index 6bb0835c..7017c673 100644 --- a/packages/apps/vm-disk/Makefile +++ b/packages/apps/vm-disk/Makefile @@ -1,4 +1,4 @@ include ../../../scripts/package.mk generate: - readme-generator-for-helm -v values.yaml -s values.schema.json -r README.md + cozyvalues-gen -v values.yaml -s values.schema.json -r README.md diff --git a/packages/apps/vm-disk/README.md b/packages/apps/vm-disk/README.md index c6258006..0b3dfe2b 100644 --- a/packages/apps/vm-disk/README.md +++ b/packages/apps/vm-disk/README.md @@ -6,9 +6,15 @@ A Virtual Machine Disk ### Common parameters -| Name | Description | Value | -| -------------- | ------------------------------------------------------ | ------------ | -| `source` | The source image location used to create a disk | `{}` | -| `optical` | Defines is disk should be considered as optical | `false` | -| `storage` | The size of the disk allocated for the virtual machine | `5Gi` | -| `storageClass` | StorageClass used to store the data | `replicated` | +| Name | Description | Type | Value | +| ------------------- | -------------------------------------------------------------------------------------------------------------------- | ---------- | ------------ | +| `source` | The source image location used to create a disk | `object` | `{}` | +| `source.image` | Use image by name: uploaded as "golden image" or from the list: `ubuntu`, `fedora`, `cirros`, `alpine`, and `talos`. | `*object` | `null` | +| `source.image.name` | Name of the image to use | `string` | `""` | +| `source.upload` | Upload local image | `*object` | `null` | +| `source.http` | Download image from an HTTP source | `*object` | `null` | +| `source.http.url` | URL to download the image | `string` | `""` | +| `optical` | Defines if disk should be considered optical | `bool` | `false` | +| `storage` | The size of the disk allocated for the virtual machine | `quantity` | `5Gi` | +| `storageClass` | StorageClass used to store the data | `string` | `replicated` | + diff --git a/packages/apps/vm-disk/values.schema.json b/packages/apps/vm-disk/values.schema.json index eac8ac93..530ff45c 100644 --- a/packages/apps/vm-disk/values.schema.json +++ b/packages/apps/vm-disk/values.schema.json @@ -1,26 +1,67 @@ { - "properties": { - "optical": { - "default": false, - "description": "Defines is disk should be considered as optical", - "type": "boolean" - }, - "source": { - "default": {}, - "description": "The source image location used to create a disk", - "type": "object" - }, - "storage": { - "default": "5Gi", - "description": "The size of the disk allocated for the virtual machine", - "type": "string" - }, - "storageClass": { - "default": "replicated", - "description": "StorageClass used to store the data", - "type": "string" - } + "title": "Chart Values", + "type": "object", + "properties": { + "optical": { + "description": "Defines if disk should be considered optical", + "type": "boolean", + "default": false }, - "title": "Chart Values", - "type": "object" + "source": { + "description": "The source image location used to create a disk", + "type": "object", + "default": {}, + "properties": { + "http": { + "description": "Download image from an HTTP source", + "type": "object", + "required": [ + "url" + ], + "properties": { + "url": { + "description": "URL to download the image", + "type": "string" + } + } + }, + "image": { + "description": "Use image by name: uploaded as \"golden image\" or from the list: `ubuntu`, `fedora`, `cirros`, `alpine`, and `talos`.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Name of the image to use", + "type": "string" + } + } + }, + "upload": { + "description": "Upload local image", + "type": "object" + } + } + }, + "storage": { + "description": "The size of the disk allocated for the virtual machine", + "default": "5Gi", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + }, + "storageClass": { + "description": "StorageClass used to store the data", + "type": "string", + "default": "replicated" + } + } } \ No newline at end of file diff --git a/packages/apps/vm-disk/values.yaml b/packages/apps/vm-disk/values.yaml index fc34a140..2679cfaa 100644 --- a/packages/apps/vm-disk/values.yaml +++ b/packages/apps/vm-disk/values.yaml @@ -1,15 +1,20 @@ ## @section Common parameters -## @param source The source image location used to create a disk +## @param source {source} The source image location used to create a disk +## @field source.image {*uploadImage} Use image by name: uploaded as "golden image" or from the list: `ubuntu`, `fedora`, `cirros`, `alpine`, and `talos`. +## @field uploadImage.name {string} Name of the image to use ## Example using golden image: ## source: ## image: ## name: ubuntu ## +## @field source.upload {*emptyobject} Upload local image ## Example upload local image: ## source: ## upload: {} ## +## @field source.http {*uploadHTTP} Download image from an HTTP source +## @field uploadHTTP.url {string} URL to download the image ## Example download image from http source: ## source: ## http: @@ -24,10 +29,10 @@ source: {} -## @param optical Defines is disk should be considered as optical +## @param optical {bool} Defines if disk should be considered optical optical: false -## @param storage The size of the disk allocated for the virtual machine -## @param storageClass StorageClass used to store the data +## @param storage {quantity} The size of the disk allocated for the virtual machine +## @param storageClass {string} StorageClass used to store the data storage: 5Gi storageClass: replicated diff --git a/packages/apps/vm-instance/Makefile b/packages/apps/vm-instance/Makefile index 38d781ae..0a6e1914 100644 --- a/packages/apps/vm-instance/Makefile +++ b/packages/apps/vm-instance/Makefile @@ -1,12 +1,8 @@ include ../../../scripts/package.mk generate: - readme-generator-for-helm -v values.yaml -s values.schema.json -r README.md - yq -o json -i '.properties.disks.items.type = "object" | .properties.disks.default = []' values.schema.json - yq -o json -i '.properties.gpus.items.type = "object" | .properties.gpus.default = []' values.schema.json + cozyvalues-gen -v values.yaml -s values.schema.json -r README.md #INSTANCE_TYPES=$$(yq e '.metadata.name' -o=json -r ../../system/kubevirt-instancetypes/templates/instancetypes.yaml | yq 'split(" ") | . + [""]' -o json) \ # && yq -i -o json ".properties.instanceType.enum = $${INSTANCE_TYPES}" values.schema.json PREFERENCES=$$(yq e '.metadata.name' -o=json -r ../../system/kubevirt-instancetypes/templates/preferences.yaml | yq 'split(" ") | . + [""]' -o json) \ && yq -i -o json ".properties.instanceProfile.enum = $${PREFERENCES}" values.schema.json - yq -i -o json '.properties.externalPorts.items.type = "integer"' values.schema.json - yq -i -o json '.properties.externalMethod.enum = ["PortList", "WholeIP"]' values.schema.json diff --git a/packages/apps/vm-instance/README.md b/packages/apps/vm-instance/README.md index 6971ad54..b2d8ed11 100644 --- a/packages/apps/vm-instance/README.md +++ b/packages/apps/vm-instance/README.md @@ -36,22 +36,27 @@ virtctl ssh @ ### Common parameters -| Name | Description | Value | -| ------------------- | ---------------------------------------------------------------------------------------------------------- | ----------- | -| `external` | Enable external access from outside the cluster | `false` | -| `externalMethod` | specify method to passthrough the traffic to the virtual machine. Allowed values: `WholeIP` and `PortList` | `PortList` | -| `externalPorts` | Specify ports to forward from outside the cluster | `[]` | -| `running` | Determines if the virtual machine should be running | `true` | -| `instanceType` | Virtual Machine instance type | `u1.medium` | -| `instanceProfile` | Virtual Machine preferences profile | `ubuntu` | -| `disks` | List of disks to attach | `[]` | -| `gpus` | List of GPUs to attach | `[]` | -| `resources.cpu` | The number of CPU cores allocated to the virtual machine | `""` | -| `resources.memory` | The amount of memory allocated to the virtual machine | `""` | -| `resources.sockets` | The number of CPU sockets allocated to the virtual machine (used to define vCPU topology) | `""` | -| `sshKeys` | List of SSH public keys for authentication. Can be a single key or a list of keys. | `[]` | -| `cloudInit` | cloud-init user data config. See cloud-init documentation for more details. | `""` | -| `cloudInitSeed` | A seed string to generate an SMBIOS UUID for the VM. | `""` | +| Name | Description | Type | Value | +| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ----------- | +| `external` | Enable external access from outside the cluster | `bool` | `false` | +| `externalMethod` | Specify method to pass through the traffic to the virtual machine. Allowed values: `WholeIP` and `PortList` | `string` | `PortList` | +| `externalPorts` | Ports to forward from outside the cluster | `[]int` | `[22]` | +| `running` | Determines if the virtual machine should be running | `bool` | `true` | +| `instanceType` | Virtual Machine instance type | `string` | `u1.medium` | +| `instanceProfile` | Virtual Machine preferences profile | `string` | `ubuntu` | +| `disks` | List of disks to attach | `[]object` | `[]` | +| `disks[i].name` | Disk name | `string` | `""` | +| `disks[i].bus` | Disk bus type, such as "sata" | `*string` | `null` | +| `gpus` | List of GPUs to attach (WARN: NVIDIA driver requires at least 4 GiB of RAM) | `[]object` | `[]` | +| `gpus[i].name` | Name of GPU, such as "nvidia.com/AD102GL_L40S" | `string` | `""` | +| `resources` | Resources | `*object` | `{}` | +| `resources.cpu` | The number of CPU cores allocated to the virtual machine | `*quantity` | `null` | +| `resources.memory` | The amount of memory allocated to the virtual machine | `*quantity` | `null` | +| `resources.sockets` | The number of CPU sockets allocated to the virtual machine (used to define vCPU topology) | `*quantity` | `null` | +| `sshKeys` | List of SSH public keys for authentication. Can be a single key or a list of keys. | `[]string` | `[]` | +| `cloudInit` | cloud-init user data config. See cloud-init documentation for more details: [format](https://cloudinit.readthedocs.io/en/latest/explanation/format.html), [examples](https://cloudinit.readthedocs.io/en/latest/explanation/format.html). | `string` | `""` | +| `cloudInitSeed` | A seed string to generate an SMBIOS UUID for the VM. | `string` | `""` | + ## U Series diff --git a/packages/apps/vm-instance/values.schema.json b/packages/apps/vm-instance/values.schema.json index c411e3ab..9f28cf84 100644 --- a/packages/apps/vm-instance/values.schema.json +++ b/packages/apps/vm-instance/values.schema.json @@ -1,57 +1,81 @@ { + "title": "Chart Values", + "type": "object", "properties": { "cloudInit": { - "default": "", - "description": "cloud-init user data config. See cloud-init documentation for more details.", + "description": "cloud-init user data config. See cloud-init documentation for more details: [format](https://cloudinit.readthedocs.io/en/latest/explanation/format.html), [examples](https://cloudinit.readthedocs.io/en/latest/explanation/format.html).", "type": "string" }, "cloudInitSeed": { - "default": "", "description": "A seed string to generate an SMBIOS UUID for the VM.", "type": "string" }, "disks": { - "default": [], "description": "List of disks to attach", + "type": "array", + "default": [], "items": { - "type": "object" - }, - "type": "array" + "type": "object", + "required": [ + "name" + ], + "properties": { + "bus": { + "description": "Disk bus type, such as \"sata\"", + "type": "string" + }, + "name": { + "description": "Disk name", + "type": "string" + } + } + } }, "external": { - "default": false, "description": "Enable external access from outside the cluster", - "type": "boolean" + "type": "boolean", + "default": false }, "externalMethod": { - "default": "PortList", - "description": "specify method to passthrough the traffic to the virtual machine. Allowed values: `WholeIP` and `PortList`", + "description": "Specify method to pass through the traffic to the virtual machine. Allowed values: `WholeIP` and `PortList`", "type": "string", + "default": "PortList", "enum": [ "PortList", "WholeIP" ] }, "externalPorts": { - "default": [], - "description": "Specify ports to forward from outside the cluster", + "description": "Ports to forward from outside the cluster", + "type": "array", + "default": [ + 22 + ], "items": { "type": "integer" - }, - "type": "array" + } }, "gpus": { + "description": "List of GPUs to attach (WARN: NVIDIA driver requires at least 4 GiB of RAM)", + "type": "array", "default": [], - "description": "List of GPUs to attach", "items": { - "type": "object" - }, - "type": "array" + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Name of GPU, such as \"nvidia.com/AD102GL_L40S\"", + "type": "string" + } + } + } }, "instanceProfile": { - "default": "ubuntu", "description": "Virtual Machine preferences profile", "type": "string", + "default": "ubuntu", "enum": [ "alpine", "centos.7", @@ -99,42 +123,68 @@ ] }, "instanceType": { - "default": "u1.medium", "description": "Virtual Machine instance type", - "type": "string" + "type": "string", + "default": "u1.medium" }, "resources": { + "description": "Resources", + "type": "object", + "default": {}, "properties": { "cpu": { - "default": "", "description": "The number of CPU cores allocated to the virtual machine", - "type": "string" + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true }, "memory": { - "default": "", "description": "The amount of memory allocated to the virtual machine", - "type": "string" + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true }, "sockets": { - "default": "", "description": "The number of CPU sockets allocated to the virtual machine (used to define vCPU topology)", - "type": "string" + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true } - }, - "type": "object" + } }, "running": { - "default": true, "description": "Determines if the virtual machine should be running", - "type": "boolean" + "type": "boolean", + "default": true }, "sshKeys": { - "default": [], "description": "List of SSH public keys for authentication. Can be a single key or a list of keys.", - "items": {}, - "type": "array" + "type": "array", + "default": [], + "items": { + "type": "string" + } } - }, - "title": "Chart Values", - "type": "object" + } } diff --git a/packages/apps/vm-instance/values.yaml b/packages/apps/vm-instance/values.yaml index 30c3e4ea..0272edfe 100644 --- a/packages/apps/vm-instance/values.yaml +++ b/packages/apps/vm-instance/values.yaml @@ -1,23 +1,24 @@ ## @section Common parameters -## @param external Enable external access from outside the cluster -## @param externalMethod specify method to passthrough the traffic to the virtual machine. Allowed values: `WholeIP` and `PortList` -## @param externalPorts [array] Specify ports to forward from outside the cluster +## @param external {bool} Enable external access from outside the cluster external: false +## @param externalMethod {string enum:"PortList,WholeIP"} Specify method to pass through the traffic to the virtual machine. Allowed values: `WholeIP` and `PortList` externalMethod: PortList +## @param externalPorts {[]int} Ports to forward from outside the cluster externalPorts: - 22 -## @param running Determines if the virtual machine should be running +## @param running {bool} Determines if the virtual machine should be running running: true -## @param instanceType Virtual Machine instance type -## @param instanceProfile Virtual Machine preferences profile -## +## @param instanceType {string} Virtual Machine instance type instanceType: "u1.medium" +## @param instanceProfile {string} Virtual Machine preferences profile instanceProfile: ubuntu -## @param disks [array] List of disks to attach +## @param disks {[]disk} List of disks to attach +## @field disk.name {string} Disk name +## @field disk.bus {*string} Disk bus type, such as "sata" ## Example: ## disks: ## - name: example-system @@ -25,21 +26,25 @@ instanceProfile: ubuntu ## bus: sata disks: [] -## @param gpus [array] List of GPUs to attach +## @param gpus {[]gpu} List of GPUs to attach (WARN: NVIDIA driver requires at least 4 GiB of RAM) +## @field gpu.name {string} Name of GPU, such as "nvidia.com/AD102GL_L40S" ## Example: ## gpus: ## - name: nvidia.com/GA102GL_A10 gpus: [] -## @param resources.cpu The number of CPU cores allocated to the virtual machine -## @param resources.memory The amount of memory allocated to the virtual machine -## @param resources.sockets The number of CPU sockets allocated to the virtual machine (used to define vCPU topology) -resources: - cpu: "" - memory: "" - sockets: "" +## @param resources {*resources} Resources +## @field resources.cpu {*quantity} The number of CPU cores allocated to the virtual machine +## @field resources.memory {*quantity} The amount of memory allocated to the virtual machine +## @field resources.sockets {*quantity} The number of CPU sockets allocated to the virtual machine (used to define vCPU topology) +## Example +## resources: +## cpu: "4" +## sockets: "1" +## memory: "8Gi" +resources: {} -## @param sshKeys [array] List of SSH public keys for authentication. Can be a single key or a list of keys. +## @param sshKeys {[]string} List of SSH public keys for authentication. Can be a single key or a list of keys. ## Example: ## sshKeys: ## - ssh-rsa ... @@ -47,7 +52,7 @@ resources: ## sshKeys: [] -## @param cloudInit cloud-init user data config. See cloud-init documentation for more details. +## @param cloudInit {string} cloud-init user data config. See cloud-init documentation for more details: [format](https://cloudinit.readthedocs.io/en/latest/explanation/format.html), [examples](https://cloudinit.readthedocs.io/en/latest/explanation/format.html). ## - https://cloudinit.readthedocs.io/en/latest/explanation/format.html ## - https://cloudinit.readthedocs.io/en/latest/reference/examples.html ## Example: @@ -58,7 +63,7 @@ sshKeys: [] ## cloudInit: "" -## @param cloudInitSeed A seed string to generate an SMBIOS UUID for the VM. +## @param cloudInitSeed {string} A seed string to generate an SMBIOS UUID for the VM. cloudInitSeed: "" ## Change it to any new value to force a full cloud-init reconfiguration. Change it when you want to apply ## to an existing VM settings that are usually written only once, like new SSH keys or new network configuration. diff --git a/packages/apps/vpn/Makefile b/packages/apps/vpn/Makefile index 4a92cb71..7017c673 100644 --- a/packages/apps/vpn/Makefile +++ b/packages/apps/vpn/Makefile @@ -1,6 +1,4 @@ include ../../../scripts/package.mk -PRESET_ENUM := ["nano","micro","small","medium","large","xlarge","2xlarge"] generate: - readme-generator-for-helm -v values.yaml -s values.schema.json -r README.md - yq -i -o json --indent 4 '.properties.resourcesPreset.enum = $(PRESET_ENUM)' values.schema.json + cozyvalues-gen -v values.yaml -s values.schema.json -r README.md diff --git a/packages/apps/vpn/README.md b/packages/apps/vpn/README.md index 01f1fd25..ac3cd3c8 100644 --- a/packages/apps/vpn/README.md +++ b/packages/apps/vpn/README.md @@ -19,20 +19,25 @@ Furthermore, Shadowbox is compatible with standard Shadowsocks clients, providin ### Common parameters -| Name | Description | Value | -| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------- | ------- | -| `replicas` | Number of VPN server replicas | `2` | -| `resources` | Explicit CPU and memory configuration for each VPN server replica. When left empty, the preset defined in `resourcesPreset` is applied. | `{}` | -| `resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. | `nano` | -| `external` | Enable external access from outside the cluster | `false` | +| Name | Description | Type | Value | +| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ------- | +| `replicas` | Number of VPN server replicas | `int` | `2` | +| `resources` | Explicit CPU and memory configuration for each VPN server replica. When left empty, the preset defined in `resourcesPreset` is applied. | `*object` | `{}` | +| `resources.cpu` | CPU | `*quantity` | `null` | +| `resources.memory` | Memory | `*quantity` | `null` | +| `resourcesPreset` | Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`. | `string` | `nano` | +| `external` | Enable external access from outside the cluster | `bool` | `false` | + ### Application-specific parameters -| Name | Description | Value | -| ------------- | ----------------------------------------------------------------------------------------------------- | ----- | -| `host` | Host used to substitute into generated URLs | `""` | -| `users` | Users configuration (see example) | `{}` | -| `externalIPs` | List of externalIPs for service. Optional. If not specified will use LoadBalancer service by default. | `[]` | +| Name | Description | Type | Value | +| ---------------------- | ----------------------------------------------------------------------------------------------------- | ------------------- | ------- | +| `host` | Host used to substitute into generated URLs | `string` | `""` | +| `users` | Users configuration | `map[string]object` | `{...}` | +| `users[name].password` | Password for the user, autogenerated if none provided | `*string` | `null` | +| `externalIPs` | List of externalIPs for service. Optional. If not specified will use LoadBalancer service by default. | `[]*string` | `[]` | + ## Parameter examples and reference diff --git a/packages/apps/vpn/values.schema.json b/packages/apps/vpn/values.schema.json index d1227541..8c2cc999 100644 --- a/packages/apps/vpn/values.schema.json +++ b/packages/apps/vpn/values.schema.json @@ -1,46 +1,89 @@ { - "properties": { - "external": { - "default": false, - "description": "Enable external access from outside the cluster", - "type": "boolean" - }, - "externalIPs": { - "default": [], - "description": "List of externalIPs for service. Optional. If not specified will use LoadBalancer service by default.", - "items": {}, - "type": "array" - }, - "host": { - "default": "", - "description": "Host used to substitute into generated URLs", - "type": "string" - }, - "replicas": { - "default": 2, - "description": "Number of VPN server replicas", - "type": "number" - }, - "resources": { - "default": {}, - "description": "Explicit CPU and memory configuration for each VPN server replica. When left empty, the preset defined in `resourcesPreset` is applied.", - "type": "object" - }, - "resourcesPreset": { - "default": "nano", - "description": "Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge.", - "type": "string", - "enum": [ - "nano", - "micro", - "small", - "medium", - "large", - "xlarge", - "2xlarge" - ] - } + "title": "Chart Values", + "type": "object", + "properties": { + "external": { + "description": "Enable external access from outside the cluster", + "type": "boolean", + "default": false }, - "title": "Chart Values", - "type": "object" -} + "externalIPs": { + "description": "List of externalIPs for service. Optional. If not specified will use LoadBalancer service by default.", + "type": "array", + "default": [], + "items": { + "type": "string" + } + }, + "host": { + "description": "Host used to substitute into generated URLs", + "type": "string" + }, + "replicas": { + "description": "Number of VPN server replicas", + "type": "integer", + "default": 2 + }, + "resources": { + "description": "Explicit CPU and memory configuration for each VPN server replica. When left empty, the preset defined in `resourcesPreset` is applied.", + "type": "object", + "default": {}, + "properties": { + "cpu": { + "description": "CPU", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + }, + "memory": { + "description": "Memory", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "x-kubernetes-int-or-string": true + } + } + }, + "resourcesPreset": { + "description": "Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`.", + "type": "string", + "default": "nano", + "enum": [ + "nano", + "micro", + "small", + "medium", + "large", + "xlarge", + "2xlarge" + ] + }, + "users": { + "description": "Users configuration", + "type": "object", + "default": {}, + "additionalProperties": { + "type": "object", + "properties": { + "password": { + "description": "Password for the user, autogenerated if none provided", + "type": "string" + } + } + } + } + } +} \ No newline at end of file diff --git a/packages/apps/vpn/values.yaml b/packages/apps/vpn/values.yaml index eafa58be..7b761acd 100644 --- a/packages/apps/vpn/values.yaml +++ b/packages/apps/vpn/values.yaml @@ -1,25 +1,28 @@ ## @section Common parameters ## -## @param replicas Number of VPN server replicas +## @param replicas {int} Number of VPN server replicas replicas: 2 -## @param resources Explicit CPU and memory configuration for each VPN server replica. When left empty, the preset defined in `resourcesPreset` is applied. +## @param resources {*resources} Explicit CPU and memory configuration for each VPN server replica. When left empty, the preset defined in `resourcesPreset` is applied. +## @field resources.cpu {*quantity} CPU +## @field resources.memory {*quantity} Memory resources: {} # resources: # cpu: 4000m # memory: 4Gi ## -## @param resourcesPreset Default sizing preset used when `resources` is omitted. Allowed values: nano, micro, small, medium, large, xlarge, 2xlarge. +## @param resourcesPreset {string enum:"nano,micro,small,medium,large,xlarge,2xlarge"} Default sizing preset used when `resources` is omitted. Allowed values: `nano`, `micro`, `small`, `medium`, `large`, `xlarge`, `2xlarge`. resourcesPreset: "nano" -## @param external Enable external access from outside the cluster +## @param external {bool} Enable external access from outside the cluster external: false ## @section Application-specific parameters ## -## @param host Host used to substitute into generated URLs +## @param host {string} Host used to substitute into generated URLs host: "" -## @param users [object] Users configuration (see example) +## @param users {map[string]user} Users configuration +## @field user.password {*string} Password for the user, autogenerated if none provided ## Example: ## users: ## user1: @@ -27,7 +30,7 @@ host: "" ## user2: {} # autogenerated password users: {} -## @param externalIPs [array] List of externalIPs for service. Optional. If not specified will use LoadBalancer service by default. +## @param externalIPs {[]*string} List of externalIPs for service. Optional. If not specified will use LoadBalancer service by default. ## ## e.g: ## externalIPs: diff --git a/packages/extra/etcd/README.md b/packages/extra/etcd/README.md index 2ed8c5e8..3bf6c90d 100644 --- a/packages/extra/etcd/README.md +++ b/packages/extra/etcd/README.md @@ -4,10 +4,12 @@ ### Common parameters -| Name | Description | Type | Value | -| -------------- | ----------------------------------- | ----------- | ----- | -| `size` | Persistent Volume size | `*quantity` | `4Gi` | -| `storageClass` | StorageClass used to store the data | `*string` | `""` | -| `replicas` | Number of etcd replicas | `*int` | `3` | -| `resources` | Resource configuration for etcd | `*object` | `{}` | +| Name | Description | Type | Value | +| ------------------ | ----------------------------------- | ----------- | ----- | +| `size` | Persistent Volume size | `*quantity` | `4Gi` | +| `storageClass` | StorageClass used to store the data | `*string` | `""` | +| `replicas` | Number of etcd replicas | `*int` | `3` | +| `resources` | Resource configuration for etcd | `*object` | `{}` | +| `resources.cpu` | The number of CPU cores allocated | `*quantity` | `4` | +| `resources.memory` | The amount of memory allocated | `*quantity` | `1Gi` | diff --git a/packages/extra/etcd/values.yaml b/packages/extra/etcd/values.yaml index cb3225b0..816cd5a7 100644 --- a/packages/extra/etcd/values.yaml +++ b/packages/extra/etcd/values.yaml @@ -9,8 +9,8 @@ storageClass: "" replicas: 3 ## @param resources {*resources} Resource configuration for etcd -## @param resources.cpu {*quantity} The number of CPU cores allocated -## @param resources.memory {*quantity} The amount of memory allocated +## @field resources.cpu {*quantity} The number of CPU cores allocated +## @field resources.memory {*quantity} The amount of memory allocated resources: cpu: 4 memory: 1Gi diff --git a/packages/extra/info/Makefile b/packages/extra/info/Makefile index 75a9b220..56d436a1 100644 --- a/packages/extra/info/Makefile +++ b/packages/extra/info/Makefile @@ -3,4 +3,5 @@ NAME=etcd include ../../../scripts/package.mk generate: - readme-generator-for-helm -v values.yaml -s values.schema.json -r README.md + cozyvalues-gen -v values.yaml -s values.schema.json -r README.md + yq -o json -i '.properties = {}' values.schema.json \ No newline at end of file diff --git a/packages/extra/info/values.schema.json b/packages/extra/info/values.schema.json index 9282941e..167bc53e 100644 --- a/packages/extra/info/values.schema.json +++ b/packages/extra/info/values.schema.json @@ -1,5 +1,5 @@ { - "properties": {}, - "title": "Chart Values", - "type": "object" -} \ No newline at end of file + "title": "Chart Values", + "type": "object", + "properties": {} +} diff --git a/packages/library/cozy-lib/Makefile b/packages/library/cozy-lib/Makefile index fa8e0b3b..a4cf622b 100644 --- a/packages/library/cozy-lib/Makefile +++ b/packages/library/cozy-lib/Makefile @@ -2,5 +2,5 @@ include ../../../scripts/common-envs.mk include ../../../scripts/package.mk generate: - readme-generator-for-helm -v values.yaml -s values.schema.json -r README.md + cozyvalues-gen -v values.yaml -s values.schema.json -r README.md