From 08eb95b6f138eb418863a3cdf811affd7b8bcdb1 Mon Sep 17 00:00:00 2001 From: Andrei Kvapil Date: Fri, 18 Jul 2025 23:39:12 +0200 Subject: [PATCH] Introduce new OpenAPI schema generator Signed-off-by: Andrei Kvapil --- .github/workflows/pre-commit.yml | 1 + packages/apps/postgres/Makefile | 2 +- packages/apps/postgres/README.md | 75 ++-- packages/apps/postgres/values.schema.json | 207 ++++++--- packages/apps/postgres/values.yaml | 82 ++-- packages/apps/virtual-machine/Makefile | 2 +- packages/apps/virtual-machine/README.md | 71 ++- .../apps/virtual-machine/values.schema.json | 419 ++++++++++++------ packages/apps/virtual-machine/values.yaml | 175 +++++--- packages/extra/monitoring/Makefile | 2 +- packages/extra/monitoring/README.md | 61 ++- packages/extra/monitoring/values.schema.json | 350 +++++++++++---- packages/extra/monitoring/values.yaml | 57 ++- 13 files changed, 1051 insertions(+), 453 deletions(-) diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index a06a171f..cb185435 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -29,6 +29,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.5.0/cozyvalues-gen-linux-amd64.tar.gz | tar -xzvf- -C /usr/local/bin/ cozyvalues-gen - name: Run pre-commit hooks run: | diff --git a/packages/apps/postgres/Makefile b/packages/apps/postgres/Makefile index 4a92cb71..7ca7f8ce 100644 --- a/packages/apps/postgres/Makefile +++ b/packages/apps/postgres/Makefile @@ -2,5 +2,5 @@ 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 + cozyvalues-gen -v values.yaml -s values.schema.json -r README.md yq -i -o json --indent 4 '.properties.resourcesPreset.enum = $(PRESET_ENUM)' values.schema.json diff --git a/packages/apps/postgres/README.md b/packages/apps/postgres/README.md index e0a17ec6..4f743777 100644 --- a/packages/apps/postgres/README.md +++ b/packages/apps/postgres/README.md @@ -66,44 +66,57 @@ See: ### Common parameters -| Name | Description | Value | -| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------- | ------- | -| `replicas` | Number of Postgres replicas | `2` | -| `resources` | Explicit CPU and memory configuration for each PostgreSQL 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. | `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 | +| --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | -------- | ------- | +| `external` | Enable external access from outside the cluster | `bool` | `false` | +| `size` | Persistent Volume size | `string` | `10Gi` | +| `replicas` | Number of Postgres replicas | `int` | `2` | +| `storageClass` | StorageClass used to store the data | `string` | `` | +| `postgresql` | PostgreSQL server configuration | `object` | `null` | +| `postgresql.parameters` | PostgreSQL server parameters | `object` | | +| `postgresql.parameters.max_connections` | Determines the maximum number of concurrent connections to the database server. The default is typically 100 connections | `int` | | +| `quorum` | Quorum configuration for synchronous replication | `object` | `null` | +| `quorum.minSyncReplicas` | Minimum number of synchronous replicas that must acknowledge a transaction before it is considered committed. | `int` | | +| `quorum.maxSyncReplicas` | Maximum number of synchronous replicas that can acknowledge a transaction (must be lower than the number of instances). | `int` | | -### Application-specific parameters +### Configuration parameters -| Name | Description | Value | -| --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | ----- | -| `postgresql.parameters.max_connections` | Determines the maximum number of concurrent connections to the database server. The default is typically 100 connections | `100` | -| `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 number of instances). | `0` | -| `users` | Users configuration | `{}` | -| `databases` | Databases configuration | `{}` | +| Name | Description | Type | Value | +| -------------------------------- | ------------------------------------------- | --------------------- | ----- | +| `users` | Users configuration | `map[string]user` | `{}` | +| `users[name].password` | Password for the user | `*string` | | +| `users[name].replication` | Whether the user has replication privileges | `*bool` | | +| `databases` | Databases configuration | `map[string]database` | `{}` | +| `databases[name].roles` | Roles for the database | `object` | | +| `databases[name].roles.admin` | List of users with admin privileges | `[]string` | | +| `databases[name].roles.readonly` | List of users with read-only privileges | `[]string` | | +| `databases[name].extensions` | Extensions enabled for the database | `[]string` | | ### 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` | `null` | +| `backup.enabled` | Enable regular backups | `bool` | | +| `backup.schedule` | Cron schedule for automated backups | `string` | | +| `backup.retentionPolicy` | Retention policy | `string` | | +| `backup.destinationPath` | Path to store the backup (i.e. s3://bucket/path/to/folder) | `string` | | +| `backup.endpointURL` | S3 Endpoint used to upload data to the cloud | `string` | | +| `backup.s3AccessKey` | Access key for S3, used for authentication | `string` | | +| `backup.s3SecretKey` | Secret key for S3, used for authentication | `string` | | -### Bootstrap (recovery) parameters +### Bootstrap 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 configuration | `object` | `null` | +| `bootstrap.enabled` | Restore database cluster from a backup | `bool` | | +| `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` | | +| `resources` | Resources | `object` | `{}` | +| `resources.cpu` | CPU | `*quantity` | | +| `resources.memory` | Memory | `*quantity` | | +| `resourcesPreset` | Default sizing preset used when `resources` is omitted. | `string` | `micro` | ## Parameter examples and reference diff --git a/packages/apps/postgres/values.schema.json b/packages/apps/postgres/values.schema.json index 6964fde1..b4119bc2 100644 --- a/packages/apps/postgres/values.schema.json +++ b/packages/apps/postgres/values.schema.json @@ -1,119 +1,192 @@ { + "title": "Chart Values", + "type": "object", "properties": { "backup": { + "description": "Backup configuration", + "type": "object", + "required": [ + "destinationPath", + "enabled", + "endpointURL", + "retentionPolicy", + "s3AccessKey", + "s3SecretKey", + "schedule" + ], "properties": { "destinationPath": { - "default": "s3://bucket/path/to/folder/", "description": "Path to store the backup (i.e. s3://bucket/path/to/folder)", - "type": "string" + "type": "string", + "default": "s3://bucket/path/to/folder/" }, "enabled": { - "default": false, "description": "Enable regular backups", - "type": "boolean" + "type": "boolean", + "default": false }, "endpointURL": { - "default": "http://minio-gateway-service:9000", "description": "S3 Endpoint used to upload data to the cloud", - "type": "string" + "type": "string", + "default": "http://minio-gateway-service:9000" }, "retentionPolicy": { - "default": "30d", "description": "Retention policy", - "type": "string" + "type": "string", + "default": "30d" }, "s3AccessKey": { - "default": "oobaiRus9pah8PhohL1ThaeTa4UVa7gu", "description": "Access key for S3, used for authentication", - "type": "string" + "type": "string", + "default": "oobaiRus9pah8PhohL1ThaeTa4UVa7gu" }, "s3SecretKey": { - "default": "ju3eum4dekeich9ahM1te8waeGai0oog", "description": "Secret key for S3, used for authentication", - "type": "string" + "type": "string", + "default": "ju3eum4dekeich9ahM1te8waeGai0oog" }, "schedule": { - "default": "0 2 * * * *", "description": "Cron schedule for automated backups", - "type": "string" + "type": "string", + "default": "0 2 * * * *" } - }, - "type": "object" + } }, "bootstrap": { + "description": "Bootstrap configuration", + "type": "object", + "required": [ + "enabled", + "oldName", + "recoveryTime" + ], "properties": { "enabled": { - "default": false, "description": "Restore database cluster from a backup", - "type": "boolean" + "type": "boolean", + "default": false }, "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" + } }, "databases": { - "default": {}, "description": "Databases configuration", - "type": "object" - }, - "external": { - "default": false, - "description": "Enable external access from outside the cluster", - "type": "boolean" - }, - "postgresql": { - "properties": { - "parameters": { - "properties": { - "max_connections": { - "default": 100, - "description": "Determines the maximum number of concurrent connections to the database server. The default is typically 100 connections", - "type": "number" + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "extensions": { + "description": "Extensions enabled for the database", + "type": "array", + "items": { + "type": "string" } }, - "type": "object" + "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" + } + } + } + } } - }, - "type": "object" + } + }, + "external": { + "description": "Enable external access from outside the cluster", + "type": "boolean", + "default": false + }, + "postgresql": { + "description": "PostgreSQL server configuration", + "type": "object", + "required": [ + "parameters" + ], + "properties": { + "parameters": { + "description": "PostgreSQL server parameters", + "type": "object", + "required": [ + "max_connections" + ], + "properties": { + "max_connections": { + "description": "Determines the maximum number of concurrent connections to the database server. The default is typically 100 connections", + "type": "integer", + "default": 100 + } + } + } + } }, "quorum": { + "description": "Quorum configuration for synchronous replication", + "type": "object", + "required": [ + "maxSyncReplicas", + "minSyncReplicas" + ], "properties": { "maxSyncReplicas": { - "default": 0, "description": "Maximum number of synchronous replicas that can acknowledge a transaction (must be lower than the number of instances).", - "type": "number" + "type": "integer", + "default": 0 }, "minSyncReplicas": { - "default": 0, "description": "Minimum number of synchronous replicas that must acknowledge a transaction before it is considered committed.", - "type": "number" + "type": "integer", + "default": 0 } - }, - "type": "object" + } }, "replicas": { - "default": 2, "description": "Number of Postgres replicas", - "type": "number" + "type": "integer", + "default": 2 }, "resources": { - "default": {}, - "description": "Explicit CPU and memory configuration for each PostgreSQL replica. When left empty, the preset defined in `resourcesPreset` is applied.", - "type": "object" + "description": "Resources", + "type": "object", + "properties": { + "cpu": { + "description": "CPU", + "type": "string", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "x-kubernetes-int-or-string": true + }, + "memory": { + "description": "Memory", + "type": "string", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "x-kubernetes-int-or-string": true + } + } }, "resourcesPreset": { - "default": "micro", - "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.", "type": "string", + "default": "micro", "enum": [ "nano", "micro", @@ -125,16 +198,30 @@ ] }, "size": { - "default": "10Gi", "description": "Persistent Volume size", - "type": "string" + "type": "string", + "default": "10Gi" }, "storageClass": { - "default": "", "description": "StorageClass used to store the data", "type": "string" + }, + "users": { + "description": "Users configuration", + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "password": { + "description": "Password for the user", + "type": "string" + }, + "replication": { + "description": "Whether the user has replication privileges", + "type": "boolean" + } + } + } } - }, - "title": "Chart Values", - "type": "object" + } } diff --git a/packages/apps/postgres/values.yaml b/packages/apps/postgres/values.yaml index 25aa091e..f37f96e1 100644 --- a/packages/apps/postgres/values.yaml +++ b/packages/apps/postgres/values.yaml @@ -1,36 +1,37 @@ ## @section Common parameters + +## @param external {bool} Enable external access from outside the cluster +## @param size {string} Persistent Volume size +## @param replicas {int} Number of Postgres replicas +## @param storageClass {string} StorageClass used to store the data ## -## @param replicas Number of Postgres replicas -replicas: 2 -## @param resources Explicit CPU and memory configuration for each PostgreSQL replica. When left empty, the preset defined in `resourcesPreset` is applied. -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. -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 +size: 10Gi +replicas: 2 +storageClass: "" - -## @section Application-specific parameters +## @param postgresql {postgresql} PostgreSQL server configuration +## @field postgresql.parameters {postgresqlParameters} PostgreSQL server parameters +## @field postgresqlParameters.max_connections {int} Determines the maximum number of concurrent connections to the database server. The default is typically 100 connections ## -## @param postgresql.parameters.max_connections Determines the maximum number of concurrent connections to the database server. The default is typically 100 connections postgresql: parameters: max_connections: 100 -## @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 number of instances). +## Configuration for the quorum-based synchronous replication +## @param quorum {quorum} Quorum configuration for 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 number of instances). quorum: minSyncReplicas: 0 maxSyncReplicas: 0 -## @param users [object] Users configuration +## @section Configuration parameters + +## @param users {map[string]user} Users configuration +## @field user.password {*string} Password for the user +## @field user.replication {*bool} Whether the user has replication privileges +## ## Example: ## users: ## user1: @@ -44,7 +45,12 @@ quorum: ## users: {} -## @param databases 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 +## @field database.extensions {[]string} Extensions enabled for the database +## ## Example: ## databases: ## myapp: @@ -64,13 +70,14 @@ databases: {} ## @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 +## @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 @@ -80,11 +87,12 @@ backup: s3AccessKey: oobaiRus9pah8PhohL1ThaeTa4UVa7gu s3SecretKey: ju3eum4dekeich9ahM1te8waeGai0oog -## @section Bootstrap (recovery) parameters +## @section Bootstrap 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 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 @@ -92,3 +100,13 @@ bootstrap: recoveryTime: "" oldName: "" +## @param resources {resources} Resources +## @field resources.cpu {*quantity} CPU +## @field resources.memory {*quantity} Memory +resources: {} + # resources: + # cpu: 4000m + # memory: 4Gi + +## @param resourcesPreset {string enum:"nano,micro,small,medium,large,xlarge,2xlarge"} Default sizing preset used when `resources` is omitted. +resourcesPreset: "micro" diff --git a/packages/apps/virtual-machine/Makefile b/packages/apps/virtual-machine/Makefile index 5aaa17e1..7a85d4e3 100644 --- a/packages/apps/virtual-machine/Makefile +++ b/packages/apps/virtual-machine/Makefile @@ -1,7 +1,7 @@ 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.gpus.items.type = "object" | .properties.gpus.default = []' values.schema.json 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.optional=true | .properties.instanceType.enum = $${INSTANCE_TYPES}" values.schema.json diff --git a/packages/apps/virtual-machine/README.md b/packages/apps/virtual-machine/README.md index a1a89bdc..4ac54c69 100644 --- a/packages/apps/virtual-machine/README.md +++ b/packages/apps/virtual-machine/README.md @@ -36,24 +36,59 @@ 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` | -| `systemDisk.image` | The base image for the virtual machine. Allowed values: `ubuntu`, `cirros`, `alpine`, `fedora` and `talos` | `ubuntu` | -| `systemDisk.storage` | The size of the disk allocated for the virtual machine | `5Gi` | -| `systemDisk.storageClass` | StorageClass used to store the data | `replicated` | -| `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` | +| `size` | Persistent Volume size | `string` | `10Gi` | +| `replicas` | Number of Postgres replicas | `int` | `2` | +| `storageClass` | StorageClass used to store the data | `string` | `` | +| `postgresql` | PostgreSQL server configuration | `object` | `null` | +| `postgresql.parameters` | PostgreSQL server parameters | `object` | | +| `postgresql.parameters.max_connections` | Determines the maximum number of concurrent connections to the database server. The default is typically 100 connections | `int` | | +| `quorum` | Quorum configuration for synchronous replication | `object` | `null` | +| `quorum.minSyncReplicas` | Minimum number of synchronous replicas that must acknowledge a transaction before it is considered committed. | `int` | | +| `quorum.maxSyncReplicas` | Maximum number of synchronous replicas that can acknowledge a transaction (must be lower than the number of instances). | `int` | | + +### Configuration parameters + +| Name | Description | Type | Value | +| -------------------------------- | ------------------------------------------- | --------------------- | ------ | +| `users` | Users configuration | `map[string]user` | `{}` | +| `users[name].password` | Password for the user | `string` | | +| `users[name].replication` | Whether the user has replication privileges | `bool` | | +| `databases` | Databases configuration | `map[string]database` | `null` | +| `databases[name].roles` | Roles for the database | `object` | | +| `databases[name].roles.admin` | List of users with admin privileges | `[]string` | | +| `databases[name].roles.readonly` | List of users with read-only privileges | `[]string` | | +| `databases[name].extensions` | Extensions enabled for the database | `[]string` | | + +### Backup parameters + +| Name | Description | Type | Value | +| ------------------------ | ---------------------------------------------------------- | -------- | ------ | +| `backup` | Backup configuration | `object` | `null` | +| `backup.enabled` | Enable regular backups | `bool` | | +| `backup.schedule` | Cron schedule for automated backups | `string` | | +| `backup.retentionPolicy` | Retention policy | `string` | | +| `backup.destinationPath` | Path to store the backup (i.e. s3://bucket/path/to/folder) | `string` | | +| `backup.endpointURL` | S3 Endpoint used to upload data to the cloud | `string` | | +| `backup.s3AccessKey` | Access key for S3, used for authentication | `string` | | +| `backup.s3SecretKey` | Secret key for S3, used for authentication | `string` | | + +### Bootstrap parameters + +| Name | Description | Type | Value | +| ------------------------ | -------------------------------------------------------------------------------------------------------------------- | ----------- | ------- | +| `bootstrap` | Bootstrap configuration | `object` | `null` | +| `bootstrap.enabled` | Restore database cluster from a backup | `bool` | | +| `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` | | +| `resources` | Resources | `object` | `{}` | +| `resources.cpu` | CPU | `*quantity` | | +| `resources.memory` | Memory | `*quantity` | | +| `resourcesPreset` | Default sizing preset used when `resources` is omitted. | `string` | `micro` | +| `gpus` | List of GPUs to attach | `[]gpu` | `[]` | +| `gpus[].name` | The name of the GPU to attach. This should match the GPU resource name in the cluster. | `string` | | ## U Series diff --git a/packages/apps/virtual-machine/values.schema.json b/packages/apps/virtual-machine/values.schema.json index 48650049..7882cefe 100644 --- a/packages/apps/virtual-machine/values.schema.json +++ b/packages/apps/virtual-machine/values.schema.json @@ -1,100 +1,253 @@ { + "title": "Chart Values", + "type": "object", "properties": { - "cloudInit": { - "default": "", - "description": "cloud-init user data config. See cloud-init documentation for more details.", - "type": "string" + "backup": { + "description": "Backup configuration", + "type": "object", + "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/" + }, + "enabled": { + "description": "Enable regular backups", + "type": "boolean", + "default": false + }, + "endpointURL": { + "description": "S3 Endpoint used to upload data to the cloud", + "type": "string", + "default": "http://minio-gateway-service:9000" + }, + "retentionPolicy": { + "description": "Retention policy", + "type": "string", + "default": "30d" + }, + "s3AccessKey": { + "description": "Access key for S3, used for authentication", + "type": "string", + "default": "oobaiRus9pah8PhohL1ThaeTa4UVa7gu" + }, + "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 * * * *" + } + } }, - "cloudInitSeed": { - "default": "", - "description": "A seed string to generate an SMBIOS UUID for the VM.", - "type": "string" + "bootstrap": { + "description": "Bootstrap configuration", + "type": "object", + "required": [ + "enabled", + "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" + } + } + }, + "databases": { + "description": "Databases configuration", + "type": "object", + "additionalProperties": { + "type": "object", + "required": [ + "roles" + ], + "properties": { + "extensions": { + "description": "Extensions enabled for the database", + "type": "array", + "items": { + "type": "string" + } + }, + "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": { - "default": false, "description": "Enable external access from outside the cluster", - "type": "boolean" - }, - "externalMethod": { - "default": "PortList", - "description": "specify method to passthrough the traffic to the virtual machine. Allowed values: `WholeIP` and `PortList`", - "type": "string", - "enum": [ - "PortList", - "WholeIP" - ] - }, - "externalPorts": { - "default": [], - "description": "Specify ports to forward from outside the cluster", - "items": { - "type": "integer" - }, - "type": "array" + "type": "boolean", + "default": false }, "gpus": { - "default": [], "description": "List of GPUs to attach", + "type": "array", "items": { - "type": "object" + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "The name of the GPU to attach. This should match the GPU resource name in the cluster.", + "type": "string" + } + } }, - "type": "array" + "default": [] }, - "instanceProfile": { - "default": "ubuntu", - "description": "Virtual Machine preferences profile", + "postgresql": { + "description": "PostgreSQL server configuration", + "type": "object", + "required": [ + "parameters" + ], + "properties": { + "parameters": { + "description": "PostgreSQL server parameters", + "type": "object", + "required": [ + "max_connections" + ], + "properties": { + "max_connections": { + "description": "Determines the maximum number of concurrent connections to the database server. The default is typically 100 connections", + "type": "integer", + "default": 100 + } + } + } + } + }, + "quorum": { + "description": "Quorum configuration for synchronous replication", + "type": "object", + "required": [ + "maxSyncReplicas", + "minSyncReplicas" + ], + "properties": { + "maxSyncReplicas": { + "description": "Maximum number of synchronous replicas that can acknowledge a transaction (must be lower than the number of instances).", + "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 Postgres replicas", + "type": "integer", + "default": 2 + }, + "resources": { + "description": "Resources", + "type": "object", + "properties": { + "cpu": { + "description": "CPU", + "type": "string", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "x-kubernetes-int-or-string": true + }, + "memory": { + "description": "Memory", + "type": "string", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "x-kubernetes-int-or-string": true + } + } + }, + "resourcesPreset": { + "description": "Default sizing preset used when `resources` is omitted.", "type": "string", - "optional": true, + "default": "micro", "enum": [ - "alpine", - "centos.7", - "centos.7.desktop", - "centos.stream10", - "centos.stream10.desktop", - "centos.stream8", - "centos.stream8.desktop", - "centos.stream8.dpdk", - "centos.stream9", - "centos.stream9.desktop", - "centos.stream9.dpdk", - "cirros", - "fedora", - "fedora.arm64", - "opensuse.leap", - "opensuse.tumbleweed", - "rhel.10", - "rhel.10.arm64", - "rhel.7", - "rhel.7.desktop", - "rhel.8", - "rhel.8.desktop", - "rhel.8.dpdk", - "rhel.9", - "rhel.9.arm64", - "rhel.9.desktop", - "rhel.9.dpdk", - "rhel.9.realtime", - "sles", - "ubuntu", - "windows.10", - "windows.10.virtio", - "windows.11", - "windows.11.virtio", - "windows.2k16", - "windows.2k16.virtio", - "windows.2k19", - "windows.2k19.virtio", - "windows.2k22", - "windows.2k22.virtio", - "windows.2k25", - "windows.2k25.virtio", - "" + "nano", + "micro", + "small", + "medium", + "large", + "xlarge", + "2xlarge" ] }, - "instanceType": { - "default": "u1.medium", - "description": "Virtual Machine instance type", + "size": { + "description": "Persistent Volume size", "type": "string", + "default": "10Gi" + }, + "storageClass": { + "description": "StorageClass used to store the data", + "type": "string" + }, + "users": { + "description": "Users configuration", + "type": "object", + "additionalProperties": { + "type": "object", + "required": [ + "password", + "replication" + ], + "properties": { + "password": { + "description": "Password for the user", + "type": "string" + }, + "replication": { + "description": "Whether the user has replication privileges", + "type": "boolean" + } + } + } + }, + "instanceType": { "optional": true, "enum": [ "cx1.2xlarge", @@ -148,43 +301,62 @@ "" ] }, - "resources": { - "properties": { - "cpu": { - "default": "", - "description": "The number of CPU cores allocated to the virtual machine", - "type": "string" - }, - "memory": { - "default": "", - "description": "The amount of memory allocated to the virtual machine", - "type": "string" - }, - "sockets": { - "default": "", - "description": "The number of CPU sockets allocated to the virtual machine (used to define vCPU topology)", - "type": "string" - } - }, - "type": "object" + "instanceProfile": { + "optional": true, + "enum": [ + "alpine", + "centos.7", + "centos.7.desktop", + "centos.stream10", + "centos.stream10.desktop", + "centos.stream8", + "centos.stream8.desktop", + "centos.stream8.dpdk", + "centos.stream9", + "centos.stream9.desktop", + "centos.stream9.dpdk", + "cirros", + "fedora", + "fedora.arm64", + "opensuse.leap", + "opensuse.tumbleweed", + "rhel.10", + "rhel.10.arm64", + "rhel.7", + "rhel.7.desktop", + "rhel.8", + "rhel.8.desktop", + "rhel.8.dpdk", + "rhel.9", + "rhel.9.arm64", + "rhel.9.desktop", + "rhel.9.dpdk", + "rhel.9.realtime", + "sles", + "ubuntu", + "windows.10", + "windows.10.virtio", + "windows.11", + "windows.11.virtio", + "windows.2k16", + "windows.2k16.virtio", + "windows.2k19", + "windows.2k19.virtio", + "windows.2k22", + "windows.2k22.virtio", + "windows.2k25", + "windows.2k25.virtio", + "" + ] }, - "running": { - "default": true, - "description": "Determines if the virtual machine should be running", - "type": "boolean" - }, - "sshKeys": { - "default": [], - "description": "List of SSH public keys for authentication. Can be a single key or a list of keys.", - "items": {}, - "type": "array" + "externalPorts": { + "items": { + "type": "integer" + } }, "systemDisk": { "properties": { "image": { - "default": "ubuntu", - "description": "The base image for the virtual machine. Allowed values: `ubuntu`, `cirros`, `alpine`, `fedora` and `talos`", - "type": "string", "enum": [ "ubuntu", "cirros", @@ -192,21 +364,14 @@ "fedora", "talos" ] - }, - "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" } - }, - "type": "object" + } + }, + "externalMethod": { + "enum": [ + "PortList", + "WholeIP" + ] } - }, - "title": "Chart Values", - "type": "object" + } } diff --git a/packages/apps/virtual-machine/values.yaml b/packages/apps/virtual-machine/values.yaml index 116e8ab3..570e000b 100644 --- a/packages/apps/virtual-machine/values.yaml +++ b/packages/apps/virtual-machine/values.yaml @@ -1,69 +1,124 @@ + ## @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 -external: false -externalMethod: PortList -externalPorts: -- 22 - -## @param running Determines if the virtual machine should be running -running: true - -## @param instanceType Virtual Machine instance type -## @param instanceProfile Virtual Machine preferences profile +## @param external {bool} Enable external access from outside the cluster +## @param size {string} Persistent Volume size +## @param replicas {int} Number of Postgres replicas +## @param storageClass {string} StorageClass used to store the data ## -instanceType: "u1.medium" -instanceProfile: ubuntu +external: false +size: 10Gi +replicas: 2 +storageClass: "" -## @param systemDisk.image The base image for the virtual machine. Allowed values: `ubuntu`, `cirros`, `alpine`, `fedora` and `talos` -## @param systemDisk.storage The size of the disk allocated for the virtual machine -## @param systemDisk.storageClass StorageClass used to store the data -## -systemDisk: - image: ubuntu - storage: 5Gi - storageClass: replicated +## @param postgresql {postgresql} PostgreSQL server configuration +## @field postgresql.parameters {postgresqlParameters} PostgreSQL server parameters +## @field postgresqlParameters.max_connections {int} Determines the maximum number of concurrent connections to the database server. The default is typically 100 connections +## +postgresql: + parameters: + max_connections: 100 -## @param gpus [array] List of GPUs to attach +## Configuration for the quorum-based synchronous replication +## @param quorum {quorum} Quorum configuration for 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 number of instances). +quorum: + minSyncReplicas: 0 + maxSyncReplicas: 0 + +## @section Configuration parameters + +## @param users {map[string]user} Users configuration +## @field user.password {string} Password for the user +## @field user.replication {bool} Whether the user has replication privileges +## +## Example: +## users: +## user1: +## password: strongpassword +## user2: +## password: hackme +## airflow: +## password: qwerty123 +## debezium: +## replication: true +## +users: {} + +## @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 +## @field database.extensions {[]string} Extensions enabled for the database +## +## Example: +## databases: +## myapp: +## roles: +## admin: +## - user1 +## - debezium +## readonly: +## - user2 +## airflow: +## roles: +## admin: +## - airflow +## extensions: +## - hstore +databases: + asd: + roles: {} + assg: {} + +## @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 +backup: + enabled: false + retentionPolicy: 30d + destinationPath: s3://bucket/path/to/folder/ + endpointURL: http://minio-gateway-service:9000 + schedule: "0 2 * * * *" + s3AccessKey: oobaiRus9pah8PhohL1ThaeTa4UVa7gu + s3SecretKey: ju3eum4dekeich9ahM1te8waeGai0oog + +## @section Bootstrap parameters + +## @param bootstrap {bootstrap} Bootstrap 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 + # example: 2020-11-26 15:22:00.00000+00 + recoveryTime: "" + oldName: "" + +## @param resources {resources} Resources +## @field resources.cpu {*quantity} CPU +## @field resources.memory {*quantity} Memory +resources: {} + # resources: + # cpu: 4000m + # memory: 4Gi + +## @param resourcesPreset {string enum:"nano,micro,small,medium,large,xlarge,2xlarge"} Default sizing preset used when `resources` is omitted. +resourcesPreset: "micro" + + +## @param gpus {[]gpu} List of GPUs to attach +## @field gpu.name {string} The name of the GPU to attach. This should match the GPU resource name in the cluster. ## 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 sshKeys [array] List of SSH public keys for authentication. Can be a single key or a list of keys. -## Example: -## sshKeys: -## - ssh-rsa ... -## - ssh-ed25519 ... -## -sshKeys: [] - -## @param cloudInit cloud-init user data config. See cloud-init documentation for more details. -## - https://cloudinit.readthedocs.io/en/latest/explanation/format.html -## - https://cloudinit.readthedocs.io/en/latest/reference/examples.html -## Example: -## cloudInit: | -## #cloud-config -## password: ubuntu -## chpasswd: { expire: False } -## -cloudInit: "" - -## @param cloudInitSeed 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. -## An empty value does nothing (and the existing UUID is not reverted). Please note that changing this value -## does not trigger a VM restart. You must perform the restart separately. -## Example: -## cloudInitSeed: "upd1" diff --git a/packages/extra/monitoring/Makefile b/packages/extra/monitoring/Makefile index 8b7e72da..4ab2fafa 100644 --- a/packages/extra/monitoring/Makefile +++ b/packages/extra/monitoring/Makefile @@ -6,7 +6,7 @@ include ../../../scripts/common-envs.mk include ../../../scripts/package.mk generate: - readme-generator-for-helm -v values.yaml -s values.schema.json.tmp -r README.md + cozyvalues-gen -v values.yaml -s values.schema.json.tmp -r README.md cat values.schema.json.tmp | \ jq '.properties.metricsStorages.items.type = "object" | .properties.logsStorages.items.type = "object"' \ > values.schema.json diff --git a/packages/extra/monitoring/README.md b/packages/extra/monitoring/README.md index 5fa84dce..dae7ff31 100644 --- a/packages/extra/monitoring/README.md +++ b/packages/extra/monitoring/README.md @@ -4,22 +4,45 @@ ### Common parameters -| Name | Description | Value | -| ----------------------------------------- | --------------------------------------------------------------------------------------------------------- | ------- | -| `host` | The hostname used to access the grafana externally (defaults to 'grafana' subdomain for the tenant host). | `""` | -| `metricsStorages` | Configuration of metrics storage instances | `[]` | -| `logsStorages` | Configuration of logs storage instances | `[]` | -| `alerta.storage` | Persistent Volume size for alerta database | `10Gi` | -| `alerta.storageClassName` | StorageClass used to store the data | `""` | -| `alerta.resources.requests.cpu` | The minimum amount of CPU required for alerta | `100m` | -| `alerta.resources.requests.memory` | The minimum amount of memory required for alerta | `256Mi` | -| `alerta.resources.limits.cpu` | The maximum amount of CPU allowed for alerta | `1` | -| `alerta.resources.limits.memory` | The maximum amount of memory allowed for alerta | `1Gi` | -| `alerta.alerts.telegram.token` | telegram token for your bot | `""` | -| `alerta.alerts.telegram.chatID` | specify multiple ID's separated by comma. Get yours in https://t.me/chatid_echo_bot | `""` | -| `alerta.alerts.telegram.disabledSeverity` | list of severity without alerts, separated comma like: "informational,warning" | `""` | -| `grafana.db.size` | Persistent Volume size for grafana database | `10Gi` | -| `grafana.resources.requests.cpu` | The minimum amount of CPU required for grafana | `100m` | -| `grafana.resources.requests.memory` | The minimum amount of memory required for grafana | `256Mi` | -| `grafana.resources.limits.cpu` | The maximum amount of CPU allowed for grafana | `1` | -| `grafana.resources.limits.memory` | The maximum amount of memory allowed for grafana | `1Gi` | +| Name | Description | Type | Value | +| ----------------------------------------- | --------------------------------------------------------------------------------------------------------- | ------------------ | ------ | +| `host` | The hostname used to access the grafana externally (defaults to 'grafana' subdomain for the tenant host). | `string` | `` | +| `metricsStorages` | Configuration of metrics storage instances | `[]metricsStorage` | `null` | +| `metricsStorages[].name` | Name of the storage instance | `string` | | +| `metricsStorages[].retentionPeriod` | Retention period for the metrics in the storage instance | `string` | | +| `metricsStorages[].deduplicationInterval` | Deduplication interval for the metrics in the storage instance | `string` | | +| `metricsStorages[].storage` | Persistent Volume size for the storage instance | `string` | | +| `metricsStorages[].storageClassName` | StorageClass used to store the data | `*string` | | +| `metricsStorages[].vminsert` | Configuration for vminsert component of the storage instance | `object` | | +| `metricsStorages[].vmselect` | Configuration for vmselect component of the storage instance | `object` | | +| `metricsStorages[].vmstorage` | Configuration for vmstorage component of the storage instance | `object` | | +| `metricsStorages[].vminsert.minAllowed` | Minimum allowed resources for vminsert component | `object` | | +| `metricsStorages[].vminsert.maxAllowed` | Maximum allowed resources for vminsert component | `object` | | +| `metricsStorages[].vmselect.minAllowed` | Minimum allowed resources for vminsert component | `object` | | +| `metricsStorages[].vmselect.maxAllowed` | Maximum allowed resources for vminsert component | `object` | | +| `metricsStorages[].vmstorage.minAllowed` | Minimum allowed resources for vminsert component | `object` | | +| `metricsStorages[].vmstorage.maxAllowed` | Maximum allowed resources for vminsert component | `object` | | +| `grafana.resources.requests.cpu` | CPU resources | `*quantity` | | +| `grafana.resources.requests.memory` | Memory resources | `*quantity` | | +| `logsStorages` | Configuration of logs storage instances | `[]logsStorage` | `null` | +| `logsStorages[].name` | Name of the storage instance | `string` | | +| `logsStorages[].retentionPeriod` | Retention period for the logs in the storage instance | `string` | | +| `logsStorages[].storage` | Persistent Volume size for the storage instance | `string` | | +| `logsStorages[].storageClassName` | StorageClass used to store the data | `*string` | | +| `alerta` | Configuration for Alerta | `object` | `null` | +| `alerta.storage` | Persistent Volume size for alerta database | `string` | | +| `alerta.storageClassName` | StorageClass used to store the data | `string` | | +| `alerta.resources` | Resources configuration for alerta | `object` | | +| `alerta.resources.limits` | Resources limits for alerta | `object` | | +| `alerta.resources.requests` | Resources requests for alerta | `object` | | +| `alerta.alerts` | Configuration for alerts | `object` | | +| `alerta.alerts.telegram` | Configuration for Telegram alerts | `object` | | +| `alerta.alerts.telegram.token` | Telegram token for your bot | `string` | | +| `alerta.alerts.telegram.chatID` | Specify multiple ID's separated by comma. Get yours in https://t.me/chatid_echo_bot | `string` | | +| `alerta.alerts.telegram.disabledSeverity` | List of severity without alerts, separated by comma like: "informational,warning" | `string` | | +| `grafana` | Configuration for Grafana | `object` | `null` | +| `grafana.db` | | `object` | | +| `grafana.db.size` | Persistent Volume size for grafana database | `string` | | +| `grafana.resources` | Resources configuration for grafana | `object` | | +| `grafana.resources.limits` | Resources limits for grafana | `object` | | +| `grafana.resources.requests` | Resources requests for grafana | `object` | | diff --git a/packages/extra/monitoring/values.schema.json b/packages/extra/monitoring/values.schema.json index 75f76eb5..a1976190 100644 --- a/packages/extra/monitoring/values.schema.json +++ b/packages/extra/monitoring/values.schema.json @@ -1,152 +1,330 @@ { + "title": "Chart Values", + "type": "object", "properties": { "alerta": { + "description": "Configuration for Alerta", + "type": "object", + "required": [ + "storage", + "storageClassName" + ], "properties": { - "alerts": { - "properties": { - "telegram": { - "properties": { - "chatID": { - "default": "", - "description": "specify multiple ID's separated by comma. Get yours in https://t.me/chatid_echo_bot", - "type": "string" - }, - "disabledSeverity": { - "default": "", - "description": "list of severity without alerts, separated comma like: \"informational,warning\"", - "type": "string" - }, - "token": { - "default": "", - "description": "telegram token for your bot", - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, "resources": { + "description": "Resources configuration for alerta", + "type": "object", "properties": { "limits": { + "description": "Resources limits for alerta", + "type": "object", "properties": { "cpu": { - "default": "1", - "description": "The maximum amount of CPU allowed for alerta", - "type": "string" + "description": "CPU resources", + "type": "string", + "default": "100m", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "x-kubernetes-int-or-string": true }, "memory": { - "default": "1Gi", - "description": "The maximum amount of memory allowed for alerta", - "type": "string" + "description": "Memory resources", + "type": "string", + "default": "256Mi", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "x-kubernetes-int-or-string": true } - }, - "type": "object" + } }, "requests": { + "description": "Resources requests for alerta", + "type": "object", "properties": { "cpu": { + "description": "CPU resources", + "type": "string", "default": "100m", - "description": "The minimum amount of CPU required for alerta", - "type": "string" + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "x-kubernetes-int-or-string": true }, "memory": { + "description": "Memory resources", + "type": "string", "default": "256Mi", - "description": "The minimum amount of memory required for alerta", - "type": "string" + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "x-kubernetes-int-or-string": true } - }, - "type": "object" + } } - }, - "type": "object" + } }, "storage": { - "default": "10Gi", "description": "Persistent Volume size for alerta database", - "type": "string" + "type": "string", + "default": "10Gi" }, "storageClassName": { - "default": "", "description": "StorageClass used to store the data", "type": "string" } - }, - "type": "object" + } }, "grafana": { + "description": "Configuration for Grafana", + "type": "object", "properties": { - "db": { - "properties": { - "size": { - "default": "10Gi", - "description": "Persistent Volume size for grafana database", - "type": "string" - } - }, - "type": "object" - }, "resources": { + "description": "Resources configuration for grafana", + "type": "object", "properties": { "limits": { + "description": "Resources limits for grafana", + "type": "object", "properties": { "cpu": { - "default": "1", - "description": "The maximum amount of CPU allowed for grafana", - "type": "string" + "description": "CPU resources", + "type": "string", + "default": "100m", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "x-kubernetes-int-or-string": true }, "memory": { - "default": "1Gi", - "description": "The maximum amount of memory allowed for grafana", - "type": "string" + "description": "Memory resources", + "type": "string", + "default": "256Mi", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "x-kubernetes-int-or-string": true } - }, - "type": "object" + } }, "requests": { + "description": "Resources requests for grafana", + "type": "object", "properties": { "cpu": { + "description": "CPU resources", + "type": "string", "default": "100m", - "description": "The minimum amount of CPU required for grafana", - "type": "string" + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "x-kubernetes-int-or-string": true }, "memory": { + "description": "Memory resources", + "type": "string", "default": "256Mi", - "description": "The minimum amount of memory required for grafana", - "type": "string" + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "x-kubernetes-int-or-string": true } - }, - "type": "object" + } } - }, - "type": "object" + } } - }, - "type": "object" + } }, "host": { - "default": "", "description": "The hostname used to access the grafana externally (defaults to 'grafana' subdomain for the tenant host).", "type": "string" }, "logsStorages": { - "default": [], "description": "Configuration of logs storage instances", + "type": "array", "items": { - "type": "object" - }, - "type": "array" + "type": "object", + "required": [ + "name", + "retentionPeriod", + "storage" + ], + "properties": { + "name": { + "description": "Name of the storage instance", + "type": "string" + }, + "retentionPeriod": { + "description": "Retention period for the logs in the storage instance", + "type": "string" + }, + "storage": { + "description": "Persistent Volume size for the storage instance", + "type": "string" + }, + "storageClassName": { + "description": "StorageClass used to store the data", + "type": "string" + } + } + } }, "metricsStorages": { - "default": [], "description": "Configuration of metrics storage instances", + "type": "array", "items": { - "type": "object" - }, - "type": "array" + "type": "object", + "required": [ + "deduplicationInterval", + "name", + "retentionPeriod", + "storage" + ], + "properties": { + "deduplicationInterval": { + "description": "Deduplication interval for the metrics in the storage instance", + "type": "string" + }, + "name": { + "description": "Name of the storage instance", + "type": "string" + }, + "retentionPeriod": { + "description": "Retention period for the metrics in the storage instance", + "type": "string" + }, + "storage": { + "description": "Persistent Volume size for the storage instance", + "type": "string" + }, + "storageClassName": { + "description": "StorageClass used to store the data", + "type": "string" + }, + "vminsert": { + "description": "Configuration for vminsert component of the storage instance", + "type": "object", + "properties": { + "maxAllowed": { + "description": "Maximum allowed resources for vminsert component", + "type": "object", + "properties": { + "cpu": { + "description": "CPU resources", + "type": "string", + "default": "100m", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "x-kubernetes-int-or-string": true + }, + "memory": { + "description": "Memory resources", + "type": "string", + "default": "256Mi", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "x-kubernetes-int-or-string": true + } + } + }, + "minAllowed": { + "description": "Minimum allowed resources for vminsert component", + "type": "object", + "properties": { + "cpu": { + "description": "CPU resources", + "type": "string", + "default": "100m", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "x-kubernetes-int-or-string": true + }, + "memory": { + "description": "Memory resources", + "type": "string", + "default": "256Mi", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "x-kubernetes-int-or-string": true + } + } + } + } + }, + "vmselect": { + "description": "Configuration for vmselect component of the storage instance", + "type": "object", + "properties": { + "maxAllowed": { + "description": "Maximum allowed resources for vminsert component", + "type": "object", + "properties": { + "cpu": { + "description": "CPU resources", + "type": "string", + "default": "100m", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "x-kubernetes-int-or-string": true + }, + "memory": { + "description": "Memory resources", + "type": "string", + "default": "256Mi", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "x-kubernetes-int-or-string": true + } + } + }, + "minAllowed": { + "description": "Minimum allowed resources for vminsert component", + "type": "object", + "properties": { + "cpu": { + "description": "CPU resources", + "type": "string", + "default": "100m", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "x-kubernetes-int-or-string": true + }, + "memory": { + "description": "Memory resources", + "type": "string", + "default": "256Mi", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "x-kubernetes-int-or-string": true + } + } + } + } + }, + "vmstorage": { + "description": "Configuration for vmstorage component of the storage instance", + "type": "object", + "properties": { + "maxAllowed": { + "description": "Maximum allowed resources for vminsert component", + "type": "object", + "properties": { + "cpu": { + "description": "CPU resources", + "type": "string", + "default": "100m", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "x-kubernetes-int-or-string": true + }, + "memory": { + "description": "Memory resources", + "type": "string", + "default": "256Mi", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "x-kubernetes-int-or-string": true + } + } + }, + "minAllowed": { + "description": "Minimum allowed resources for vminsert component", + "type": "object", + "properties": { + "cpu": { + "description": "CPU resources", + "type": "string", + "default": "100m", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "x-kubernetes-int-or-string": true + }, + "memory": { + "description": "Memory resources", + "type": "string", + "default": "256Mi", + "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", + "x-kubernetes-int-or-string": true + } + } + } + } + } + } + } } - }, - "title": "Chart Values", - "type": "object" + } } diff --git a/packages/extra/monitoring/values.yaml b/packages/extra/monitoring/values.yaml index 9e992f22..92424cdb 100644 --- a/packages/extra/monitoring/values.yaml +++ b/packages/extra/monitoring/values.yaml @@ -1,9 +1,25 @@ ## @section Common parameters -## @param host The hostname used to access the grafana externally (defaults to 'grafana' subdomain for the tenant host). +## @param host {string} The hostname used to access the grafana externally (defaults to 'grafana' subdomain for the tenant host). host: "" -## @param metricsStorages [array] Configuration of metrics storage instances +## @param metricsStorages {[]metricsStorage} Configuration of metrics storage instances +## @field metricsStorage.name {string} Name of the storage instance +## @field metricsStorage.retentionPeriod {string} Retention period for the metrics in the storage instance +## @field metricsStorage.deduplicationInterval {string} Deduplication interval for the metrics in the storage instance +## @field metricsStorage.storage {string} Persistent Volume size for the storage instance +## @field metricsStorage.storageClassName {*string} StorageClass used to store the data +## @field metricsStorage.vminsert {*vminsert} Configuration for vminsert component of the storage instance +## @field metricsStorage.vmselect {*vmselect} Configuration for vmselect component of the storage instance +## @field metricsStorage.vmstorage {*vmstorage} Configuration for vmstorage component of the storage instance +## @field vminsert.minAllowed {*resources} Minimum allowed resources for vminsert component +## @field vminsert.maxAllowed {*resources} Maximum allowed resources for vminsert component +## @field vmselect.minAllowed {*resources} Minimum allowed resources for vminsert component +## @field vmselect.maxAllowed {*resources} Maximum allowed resources for vminsert component +## @field vmstorage.minAllowed {*resources} Minimum allowed resources for vminsert component +## @field vmstorage.maxAllowed {*resources} Maximum allowed resources for vminsert component +## @field resources.cpu {*quantity} CPU resources +## @field resources.memory {*quantity} Memory resources ## ## Example: ## metricsStorages: @@ -46,7 +62,11 @@ metricsStorages: storage: 10Gi storageClassName: "" -## @param logsStorages [array] Configuration of logs storage instances +## @param logsStorages {[]logsStorage} Configuration of logs storage instances +## @field logsStorage.name {string} Name of the storage instance +## @field logsStorage.retentionPeriod {string} Retention period for the logs in the storage instance +## @field logsStorage.storage {string} Persistent Volume size for the storage instance +## @field logsStorage.storageClassName {*string} StorageClass used to store the data ## logsStorages: - name: generic @@ -55,12 +75,12 @@ logsStorages: storageClassName: replicated ## Configuration for Alerta -## @param alerta.storage Persistent Volume size for alerta database -## @param alerta.storageClassName StorageClass used to store the data -## @param alerta.resources.requests.cpu The minimum amount of CPU required for alerta -## @param alerta.resources.requests.memory The minimum amount of memory required for alerta -## @param alerta.resources.limits.cpu The maximum amount of CPU allowed for alerta -## @param alerta.resources.limits.memory The maximum amount of memory allowed for alerta +## @param alerta {alerta} Configuration for Alerta +## @field alerta.storage {string} Persistent Volume size for alerta database +## @field alerta.storageClassName {string} StorageClass used to store the data +## @field alerta.resources {*alertaResources} Resources configuration for alerta +## @field alertaResources.limits {*resources} Resources limits for alerta +## @field alertaResources.requests {*resources} Resources requests for alerta ## alerta: storage: 10Gi @@ -73,9 +93,11 @@ alerta: cpu: 100m memory: 256Mi alerts: - ## @param alerta.alerts.telegram.token telegram token for your bot - ## @param alerta.alerts.telegram.chatID specify multiple ID's separated by comma. Get yours in https://t.me/chatid_echo_bot - ## @param alerta.alerts.telegram.disabledSeverity list of severity without alerts, separated comma like: "informational,warning" + ## @field alerta.alerts {alerts} Configuration for alerts + ## @field alerts.telegram {telegramAlerts} Configuration for Telegram alerts + ## @field telegramAlerts.token {string} Telegram token for your bot + ## @field telegramAlerts.chatID {string} Specify multiple ID's separated by comma. Get yours in https://t.me/chatid_echo_bot + ## @field telegramAlerts.disabledSeverity {string} List of severity without alerts, separated by comma like: "informational,warning" ## example: ## telegram: ## token: "7262461387:AAGtwq16iwuVtWtzoN6TUEMpF00fpC9Xz34" @@ -88,11 +110,12 @@ alerta: disabledSeverity: "" ## Configuration for Grafana -## @param grafana.db.size Persistent Volume size for grafana database -## @param grafana.resources.requests.cpu The minimum amount of CPU required for grafana -## @param grafana.resources.requests.memory The minimum amount of memory required for grafana -## @param grafana.resources.limits.cpu The maximum amount of CPU allowed for grafana -## @param grafana.resources.limits.memory The maximum amount of memory allowed for grafana +## @param grafana {grafana} Configuration for Grafana +## @field grafana.db {grafanaDB} +## @field grafanaDB.size {string} Persistent Volume size for grafana database +## @field grafana.resources {*grafanaResources} Resources configuration for grafana +## @field grafanaResources.limits {*resources} Resources limits for grafana +## @field grafanaResources.requests {*resources} Resources requests for grafana grafana: db: size: 10Gi