diff --git a/.gitignore b/.gitignore index 612a48b5..fd4fffbe 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,6 @@ hugo/ # IDE files .idea + +# Claude Code local settings +.claude/ diff --git a/assets/scss/blocks/_nav.scss b/assets/scss/blocks/_nav.scss index 16b93acb..cef74436 100644 --- a/assets/scss/blocks/_nav.scss +++ b/assets/scss/blocks/_nav.scss @@ -212,7 +212,10 @@ nav.navbar { // Sidebar background .td-sidebar { background-color: rgba(61, 109, 221, 0.03); - padding-top: 0 !important; + + @include media-breakpoint-up(md) { + padding-top: 1rem; + } } .td-sidebar-nav { @@ -244,3 +247,38 @@ nav.navbar { color: #3c6ddd !important; } } + +// Sidebar version switcher +.version-switcher { + display: flex; + gap: 0.5rem; + padding: 0.75rem 1rem; + + &__item { + flex: 1; + text-align: center; + padding: 0.35rem 0.75rem; + border-radius: 0.25rem; + font-size: 0.85rem; + font-weight: 600; + color: $cozy-dark-blue; + background: rgba($cozy-dark-blue, 0.05); + border: 1px solid rgba($cozy-dark-blue, 0.2); + text-decoration: none; + transition: background 0.15s, color 0.15s; + + &:hover { + background: rgba($cozy-dark-blue, 0.12); + } + + &--active { + background: $cozy-dark-blue; + color: $cozy-white; + border-color: $cozy-dark-blue; + + &:hover { + background: $cozy-darkest-blue; + } + } + } +} diff --git a/content/en/blog/2024-04-05-diy-create-your-own-cloud-with-kubernetes-part-1/index.md b/content/en/blog/2024-04-05-diy-create-your-own-cloud-with-kubernetes-part-1/index.md index 9348c3d8..4c96905c 100644 --- a/content/en/blog/2024-04-05-diy-create-your-own-cloud-with-kubernetes-part-1/index.md +++ b/content/en/blog/2024-04-05-diy-create-your-own-cloud-with-kubernetes-part-1/index.md @@ -170,7 +170,7 @@ two years ago was entirely built using this approach. But unfortunately, it does deploy your very first parent cluster that will hold the others. So now you have prepared a solution that will help you do this the same using PXE approach. -Essentially, all you need to do is [run temporary]({{% ref "/docs/install/talos/pxe" %}}) +Essentially, all you need to do is [run temporary]({{% ref "/docs/v1/install/talos/pxe" %}}) **DHCP** and **PXE** servers inside containers. Then your nodes will boot from your image, and you can use a simple Debian-flavored script to help you bootstrap your nodes. diff --git a/content/en/blog/2024-04-05-diy-create-your-own-cloud-with-kubernetes-part-2/index.md b/content/en/blog/2024-04-05-diy-create-your-own-cloud-with-kubernetes-part-2/index.md index fae33b6a..277e4da3 100644 --- a/content/en/blog/2024-04-05-diy-create-your-own-cloud-with-kubernetes-part-2/index.md +++ b/content/en/blog/2024-04-05-diy-create-your-own-cloud-with-kubernetes-part-2/index.md @@ -27,7 +27,7 @@ project and development team. Virtual machines are the primary means of isolating tenants from each other in a cloud environment. In virtual machines, users can execute code and programs with administrative privilege, but this doesn't affect other tenants or the environment itself. In other words, virtual machines allow to -achieve [hard multi-tenancy isolation]({{% ref "/docs/guides/concepts#tenant-system" %}}), and run +achieve [hard multi-tenancy isolation]({{% ref "/docs/v1/guides/concepts#tenant-system" %}}), and run in environments where tenants do not trust each other. ## Virtualization technologies in Kubernetes diff --git a/content/en/docs/_index.md b/content/en/docs/_index.md index 7946cfaf..11264d17 100644 --- a/content/en/docs/_index.md +++ b/content/en/docs/_index.md @@ -1,19 +1,31 @@ --- -title: "Cozystack Documentation" +title: "Choose Documentation Version" linkTitle: "Documentation" -description: "Free PaaS platform and framework for building clouds" -taxonomyCloud: [] +description: "Select the version of Cozystack documentation that matches your installation" +weight: 40 cascade: type: docs menu: main: weight: 40 -aliases: - - /docs/reference --- -Cozystack is a free PaaS platform and framework for building clouds +**New users:** Start with [v1 documentation](/docs/v1/) — the current stable release. -With Cozystack, you can transform your bunch of servers into an intelligent system with a simple REST API for spawning Kubernetes clusters, Database-as-a-Service, virtual machines, load balancers, HTTP caching services, and other services with ease. +**Existing v0.4x users:** Continue with [v0 documentation](/docs/v0/) until you're ready to [upgrade](/docs/v1/operations/upgrades/). -You can use Cozystack to build your own cloud or to provide a cost-effective development environments. +### Check Your Current Version + +If you have an existing installation, run: + +```bash +kubectl get deployment -n cozy-system +``` + +- **v1:** You will see a `cozystack-operator` deployment. +- **v0:** You will see a `cozystack` deployment (the legacy installer). +- **Namespace not found:** Cozystack is not installed — start with [v1](/docs/v1/). + +**Additional Resources:** +- [Release notes](https://github.com/cozystack/cozystack/releases) +- [v0 to v1 upgrade guide](/docs/v1/operations/upgrades/) diff --git a/content/en/docs/cozystack-api/rest.md b/content/en/docs/cozystack-api/rest.md deleted file mode 100644 index 4c8e3e31..00000000 --- a/content/en/docs/cozystack-api/rest.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: REST API Reference -linkTitle: REST API -description: "Cozystack REST API Reference" -type: swagger -weight: 10 ---- - -{{< swaggerui src="https://raw.githubusercontent.com/cozystack/website/refs/heads/main/content/en/docs/cozystack-api/api.json" >}} - diff --git a/content/en/docs/operations/services/monitoring/_index.md b/content/en/docs/operations/services/monitoring/_index.md deleted file mode 100644 index a3b94f41..00000000 --- a/content/en/docs/operations/services/monitoring/_index.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "Monitoring Hub Reference" -linkTitle: "Monitoring" ---- -{{< include "docs/operations/services/_include/monitoring-overview.md" >}} \ No newline at end of file diff --git a/content/en/docs/.gitkeep b/content/en/docs/v0/.gitkeep similarity index 100% rename from content/en/docs/.gitkeep rename to content/en/docs/v0/.gitkeep diff --git a/content/en/docs/v0/_index.md b/content/en/docs/v0/_index.md new file mode 100644 index 00000000..a78cdc82 --- /dev/null +++ b/content/en/docs/v0/_index.md @@ -0,0 +1,18 @@ +--- +title: "Cozystack v0 Documentation" +linkTitle: "Cozystack v0" +description: "Free PaaS platform and framework for building clouds" +taxonomyCloud: [] +cascade: + type: docs +weight: 20 +aliases: + - /docs/v0/reference + - /docs/reference +--- + +Cozystack is a free PaaS platform and framework for building clouds + +With Cozystack, you can transform your bunch of servers into an intelligent system with a simple REST API for spawning Kubernetes clusters, Database-as-a-Service, virtual machines, load balancers, HTTP caching services, and other services with ease. + +You can use Cozystack to build your own cloud or to provide a cost-effective development environments. diff --git a/content/en/docs/v0/applications/_include/clickhouse.md b/content/en/docs/v0/applications/_include/clickhouse.md new file mode 100644 index 00000000..cfc8383e --- /dev/null +++ b/content/en/docs/v0/applications/_include/clickhouse.md @@ -0,0 +1,9 @@ +--- +title: "Managed ClickHouse Service" +linkTitle: "ClickHouse" +description: "" +weight: 10 +aliases: + - /docs/v0/reference/applications/clickhouse +--- + diff --git a/content/en/docs/v0/applications/_include/ferretdb.md b/content/en/docs/v0/applications/_include/ferretdb.md new file mode 100644 index 00000000..bfc082b9 --- /dev/null +++ b/content/en/docs/v0/applications/_include/ferretdb.md @@ -0,0 +1,8 @@ +--- +title: "Managed FerretDB Service" +linkTitle: "FerretDB" +weight: 20 +aliases: + - /docs/v0/reference/applications/ferretdb +--- + diff --git a/content/en/docs/v0/applications/_include/kafka.md b/content/en/docs/v0/applications/_include/kafka.md new file mode 100644 index 00000000..969f86bb --- /dev/null +++ b/content/en/docs/v0/applications/_include/kafka.md @@ -0,0 +1,8 @@ +--- +title: "Managed Kafka Service" +linkTitle: "Kafka" +weight: 30 +aliases: + - /docs/v0/reference/applications/kafka +--- + diff --git a/content/en/docs/v0/applications/_include/mongodb.md b/content/en/docs/v0/applications/_include/mongodb.md new file mode 100644 index 00000000..9e2b849b --- /dev/null +++ b/content/en/docs/v0/applications/_include/mongodb.md @@ -0,0 +1,8 @@ +--- +title: "Managed MongoDB Service" +linkTitle: "MongoDB" +weight: 65 +aliases: + - /docs/v0/reference/applications/mongodb +--- + diff --git a/content/en/docs/v0/applications/_include/mysql.md b/content/en/docs/v0/applications/_include/mysql.md new file mode 100644 index 00000000..71e8acbb --- /dev/null +++ b/content/en/docs/v0/applications/_include/mysql.md @@ -0,0 +1,8 @@ +--- +title: "Managed MariaDB Service" +linkTitle: "MariaDB" +weight: 40 +aliases: + - /docs/v0/reference/applications/mariadb +--- + diff --git a/content/en/docs/v0/applications/_include/nats.md b/content/en/docs/v0/applications/_include/nats.md new file mode 100644 index 00000000..c5c4ff3c --- /dev/null +++ b/content/en/docs/v0/applications/_include/nats.md @@ -0,0 +1,8 @@ +--- +title: "Managed NATS Service" +linkTitle: "NATS" +weight: 50 +aliases: + - /docs/v0/reference/applications/nats +--- + diff --git a/content/en/docs/v0/applications/_include/postgres.md b/content/en/docs/v0/applications/_include/postgres.md new file mode 100644 index 00000000..9f5df349 --- /dev/null +++ b/content/en/docs/v0/applications/_include/postgres.md @@ -0,0 +1,8 @@ +--- +title: "Managed PostgreSQL Service" +linkTitle: "PostgreSQL" +weight: 60 +aliases: + - /docs/v0/reference/applications/postgres +--- + diff --git a/content/en/docs/v0/applications/_include/rabbitmq.md b/content/en/docs/v0/applications/_include/rabbitmq.md new file mode 100644 index 00000000..8e7edb5e --- /dev/null +++ b/content/en/docs/v0/applications/_include/rabbitmq.md @@ -0,0 +1,8 @@ +--- +title: "Managed RabbitMQ Service" +linkTitle: "RabbitMQ" +weight: 70 +aliases: + - /docs/v0/reference/applications/rabbitmq +--- + diff --git a/content/en/docs/v0/applications/_include/redis.md b/content/en/docs/v0/applications/_include/redis.md new file mode 100644 index 00000000..560e2bf2 --- /dev/null +++ b/content/en/docs/v0/applications/_include/redis.md @@ -0,0 +1,8 @@ +--- +title: "Managed Redis Service" +linkTitle: "Redis" +weight: 80 +aliases: + - /docs/v0/reference/applications/redis +--- + diff --git a/content/en/docs/v0/applications/_include/tenant.md b/content/en/docs/v0/applications/_include/tenant.md new file mode 100644 index 00000000..84dfcf5d --- /dev/null +++ b/content/en/docs/v0/applications/_include/tenant.md @@ -0,0 +1,8 @@ +--- +title: "Tenant Application Reference" +linkTitle: "Tenant" +weight: 90 +aliases: + - /docs/v0/reference/applications/tenant +--- + diff --git a/content/en/docs/v0/applications/_index.md b/content/en/docs/v0/applications/_index.md new file mode 100644 index 00000000..29b71288 --- /dev/null +++ b/content/en/docs/v0/applications/_index.md @@ -0,0 +1,24 @@ +--- +title: "Managed Applications: Guides and Reference" +linkTitle: "Managed Applications" +description: "Learn how to deploy, configure, access, and backup managed applications in Cozystack." +weight: 45 +aliases: + - /docs/v0/components + - /docs/v0/guides/applications + - /docs/applications + - /docs/components + - /docs/guides/applications +--- + +## Available Application Versions + +Cozystack deploys applications in two complementary ways: + +- **Operator‑managed applications** – Cozystack bundles a specific version of a Kubernetes Operator that installs and continuously reconciles the application. + As a rule, the operator chooses one of the most recent stable versions of the application by default. + +- **Chart‑managed applications** – When no mature operator exists, Cozystack packages an upstream (or in‑house) Helm chart. + The chart’s `appVersion` pin tracks the latest stable upstream release, keeping deployments secure and up‑to‑date. + + diff --git a/content/en/docs/v0/applications/clickhouse.md b/content/en/docs/v0/applications/clickhouse.md new file mode 100644 index 00000000..409dc91d --- /dev/null +++ b/content/en/docs/v0/applications/clickhouse.md @@ -0,0 +1,115 @@ +--- +title: "Managed ClickHouse Service" +linkTitle: "ClickHouse" +description: "" +weight: 10 +aliases: + - /docs/v0/reference/applications/clickhouse + - /docs/applications/clickhouse + - /docs/reference/applications/clickhouse +--- + + + + +ClickHouse is an open source high-performance and column-oriented SQL database management system (DBMS). +It is used for online analytical processing (OLAP). + +### How to restore backup from S3 + +1. Find the snapshot: + + ```bash + restic -r s3:s3.example.org/clickhouse-backups/table_name snapshots + ``` + +2. Restore it: + + ```bash + restic -r s3:s3.example.org/clickhouse-backups/table_name restore latest --target /tmp/ + ``` + +For more details, read [Restic: Effective Backup from Stdin](https://blog.aenix.io/restic-effective-backup-from-stdin-4bc1e8f083c1). + +## Parameters + +### Common parameters + +| 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 omitted, the preset defined in `resourcesPreset` is applied. | `object` | `{}` | +| `resources.cpu` | CPU available to each replica. | `quantity` | `""` | +| `resources.memory` | Memory (RAM) available to each replica. | `quantity` | `""` | +| `resourcesPreset` | Default sizing preset used when `resources` is omitted. | `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 | 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. | `map[string]object` | `{}` | +| `users[name].password` | Password for the user. | `string` | `""` | +| `users[name].readonly` | User is readonly (default: false). | `bool` | `false` | + + +### Backup parameters + +| Name | Description | Type | Value | +| ------------------------ | ----------------------------------------------- | -------- | ------------------------------------------------------ | +| `backup` | Backup configuration. | `object` | `{}` | +| `backup.enabled` | Enable regular backups (default: 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 authentication. | `string` | `` | +| `backup.s3SecretKey` | Secret key for S3 authentication. | `string` | `` | +| `backup.resticPassword` | Password for Restic backup encryption. | `string` | `` | + + +### 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. | `string` | `micro` | +| `clickhouseKeeper.replicas` | Number of Keeper replicas. | `int` | `3` | + + +## Parameter examples and reference + +### resources and resourcesPreset + +`resources` sets explicit CPU and memory configurations for each replica. +When left empty, the preset defined in `resourcesPreset` is applied. + +```yaml +resources: + cpu: 4000m + memory: 4Gi +``` + +`resourcesPreset` sets named CPU and memory configurations for each replica. +This setting is ignored if the corresponding `resources` value is set. + +| Preset name | CPU | memory | +|-------------|--------|---------| +| `nano` | `250m` | `128Mi` | +| `micro` | `500m` | `256Mi` | +| `small` | `1` | `512Mi` | +| `medium` | `1` | `1Gi` | +| `large` | `2` | `2Gi` | +| `xlarge` | `4` | `4Gi` | +| `2xlarge` | `8` | `8Gi` | diff --git a/content/en/docs/v0/applications/external.md b/content/en/docs/v0/applications/external.md new file mode 100644 index 00000000..0d1e1993 --- /dev/null +++ b/content/en/docs/v0/applications/external.md @@ -0,0 +1,80 @@ +--- +title: "Adding External Applications to Cozystack Catalog" +linkTitle: "External Apps" +description: "Learn how to add managed applications from external sources" +weight: 5 +aliases: + - /docs/applications/external +--- + +Since v0.37.0, Cozystack administrators can add applications from external sources in addition to the standard application catalog. +These applications will appear in the same application catalog and behave like regular managed applications for platform users. + +This guide explains how to define a managed application package and how to add it to Cozystack. + + +## 1. Create an Application Package Repository + +Create a repository with the application package sources. +For a reference, see [github.com/cozystack/external-apps-example](https://github.com/cozystack/external-apps-example). + +Application repository has the following structure: + +- `./packages/core`: Manifests for the platform configuration and to deploy system applications. +- `./packages/system`: Helm charts for system applications. +- `./packages/apps`: Helm charts for applications that can be installed from the dashboard. + +Just like standard Cozystack applications, this external application package is using Helm and FluxCD. +To learn more about developing application packages, read Cozystack [Developer Guide](/docs/v0/development/) + +These FluxCD documents will help you understand the resources used in this guide: + +- [GitRepository](https://fluxcd.io/flux/components/source/gitrepositories/) +- [HelmRelease](https://fluxcd.io/flux/components/helm/helmreleases/) + +## 2. Add the Application Package with a Manifest + +Create a manifest file with resources `GitRepository` and `HelmRelease`, as in the example: + + +```yaml +--- +apiVersion: source.toolkit.fluxcd.io/v1 +kind: GitRepository +metadata: + name: external-apps + namespace: cozy-public +spec: + interval: 1m0s + ref: + branch: main + timeout: 60s + url: https://github.com/cozystack/external-apps-example.git +--- +apiVersion: helm.toolkit.fluxcd.io/v2 +kind: HelmRelease +metadata: + name: external-apps + namespace: cozy-system +spec: + interval: 5m + targetNamespace: cozy-system + chart: + spec: + chart: ./packages/core/platform + sourceRef: + kind: GitRepository + name: external-apps + namespace: cozy-public + version: '*' +``` + +For a detailed reference, read [Git Repositories in Flux CD](https://fluxcd.io/flux/components/source/gitrepositories/). + +Next, write this manifest to a file and apply it to your Cozystack cluster: + +```bash +kubectl apply -f init.yaml +``` + +After applying the manifest, open your application catalog to confirm that the application is available. diff --git a/content/en/docs/v0/applications/ferretdb.md b/content/en/docs/v0/applications/ferretdb.md new file mode 100644 index 00000000..d8b29336 --- /dev/null +++ b/content/en/docs/v0/applications/ferretdb.md @@ -0,0 +1,97 @@ +--- +title: "Managed FerretDB Service" +linkTitle: "FerretDB" +weight: 20 +aliases: + - /docs/v0/reference/applications/ferretdb + - /docs/applications/ferretdb + - /docs/reference/applications/ferretdb +--- + + + + +FerretDB is an open source MongoDB alternative. +It translates MongoDB wire protocol queries to SQL and can be used as a direct replacement for MongoDB 5.0+. +Internally, FerretDB service is backed by Postgres. + +## Parameters + +### Common parameters + +| Name | Description | Type | Value | +| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------- | ---------- | ------- | +| `replicas` | Number of replicas. | `int` | `2` | +| `resources` | Explicit CPU and memory configuration for each FerretDB replica. When omitted, the preset defined in `resourcesPreset` is applied. | `object` | `{}` | +| `resources.cpu` | CPU available to each replica. | `quantity` | `""` | +| `resources.memory` | Memory (RAM) available to each replica. | `quantity` | `""` | +| `resourcesPreset` | Default sizing preset used when `resources` is omitted. | `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 | Type | Value | +| ------------------------ | ---------------------------------------------------------------------------------- | ------------------- | ----- | +| `quorum` | Configuration for quorum-based synchronous replication. | `object` | `{}` | +| `quorum.minSyncReplicas` | Minimum number of synchronous replicas required for commit. | `int` | `0` | +| `quorum.maxSyncReplicas` | Maximum number of synchronous replicas allowed (must be less than total replicas). | `int` | `0` | +| `users` | Users configuration map. | `map[string]object` | `{}` | +| `users[name].password` | Password for the user. | `string` | `""` | + + +### Backup parameters + +| Name | Description | Type | Value | +| ------------------------ | ------------------------------------------------------------ | -------- | ----------------------------------- | +| `backup` | Backup configuration. | `object` | `{}` | +| `backup.enabled` | Enable regular backups (default: false). | `bool` | `false` | +| `backup.schedule` | Cron schedule for automated backups. | `string` | `0 2 * * * *` | +| `backup.retentionPolicy` | Retention policy. | `string` | `30d` | +| `backup.endpointURL` | S3 endpoint URL for uploads. | `string` | `http://minio-gateway-service:9000` | +| `backup.destinationPath` | Path to store the backup (e.g. s3://bucket/path/to/folder/). | `string` | `s3://bucket/path/to/folder/` | +| `backup.s3AccessKey` | Access key for S3 authentication. | `string` | `` | +| `backup.s3SecretKey` | Secret key for S3 authentication. | `string` | `` | + + +### Bootstrap (recovery) parameters + +| Name | Description | Type | Value | +| ------------------------ | ------------------------------------------------------------------- | -------- | ------- | +| `bootstrap` | Bootstrap configuration. | `object` | `{}` | +| `bootstrap.enabled` | Restore database cluster from a backup. | `bool` | `false` | +| `bootstrap.recoveryTime` | Timestamp (RFC3339) for point-in-time recovery; empty means latest. | `string` | `""` | +| `bootstrap.oldName` | Name of database cluster before deletion. | `string` | `""` | + + +## Parameter examples and reference + +### resources and resourcesPreset + +`resources` sets explicit CPU and memory configurations for each replica. +When left empty, the preset defined in `resourcesPreset` is applied. + +```yaml +resources: + cpu: 4000m + memory: 4Gi +``` + +`resourcesPreset` sets named CPU and memory configurations for each replica. +This setting is ignored if the corresponding `resources` value is set. + +| Preset name | CPU | memory | +|-------------|--------|---------| +| `nano` | `250m` | `128Mi` | +| `micro` | `500m` | `256Mi` | +| `small` | `1` | `512Mi` | +| `medium` | `1` | `1Gi` | +| `large` | `2` | `2Gi` | +| `xlarge` | `4` | `4Gi` | +| `2xlarge` | `8` | `8Gi` | diff --git a/content/en/docs/v0/applications/kafka.md b/content/en/docs/v0/applications/kafka.md new file mode 100644 index 00000000..b82c9336 --- /dev/null +++ b/content/en/docs/v0/applications/kafka.md @@ -0,0 +1,109 @@ +--- +title: "Managed Kafka Service" +linkTitle: "Kafka" +weight: 30 +aliases: + - /docs/v0/reference/applications/kafka + - /docs/applications/kafka + - /docs/reference/applications/kafka +--- + + + + +## Parameters + +### Common parameters + +| Name | Description | Type | Value | +| ---------- | ------------------------------------------------ | ------ | ------- | +| `external` | Enable external access from outside the cluster. | `bool` | `false` | + + +### Application-specific parameters + +| 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 | Type | Value | +| ------------------------ | -------------------------------------------------------------------------------------------------------- | ---------- | ------- | +| `kafka` | Kafka configuration. | `object` | `{}` | +| `kafka.replicas` | Number of Kafka replicas. | `int` | `3` | +| `kafka.resources` | Explicit CPU and memory configuration. When omitted, the preset defined in `resourcesPreset` is applied. | `object` | `{}` | +| `kafka.resources.cpu` | CPU available to each replica. | `quantity` | `""` | +| `kafka.resources.memory` | Memory (RAM) available to each replica. | `quantity` | `""` | +| `kafka.resourcesPreset` | Default sizing preset used when `resources` is omitted. | `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 | Type | Value | +| ---------------------------- | -------------------------------------------------------------------------------------------------------- | ---------- | ------- | +| `zookeeper` | ZooKeeper configuration. | `object` | `{}` | +| `zookeeper.replicas` | Number of ZooKeeper replicas. | `int` | `3` | +| `zookeeper.resources` | Explicit CPU and memory configuration. When omitted, the preset defined in `resourcesPreset` is applied. | `object` | `{}` | +| `zookeeper.resources.cpu` | CPU available to each replica. | `quantity` | `""` | +| `zookeeper.resources.memory` | Memory (RAM) available to each replica. | `quantity` | `""` | +| `zookeeper.resourcesPreset` | Default sizing preset used when `resources` is omitted. | `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 + +### resources and resourcesPreset + +`resources` sets explicit CPU and memory configurations for each replica. +When left empty, the preset defined in `resourcesPreset` is applied. + +```yaml +resources: + cpu: 4000m + memory: 4Gi +``` + +`resourcesPreset` sets named CPU and memory configurations for each replica. +This setting is ignored if the corresponding `resources` value is set. + +| Preset name | CPU | memory | +|-------------|--------|---------| +| `nano` | `250m` | `128Mi` | +| `micro` | `500m` | `256Mi` | +| `small` | `1` | `512Mi` | +| `medium` | `1` | `1Gi` | +| `large` | `2` | `2Gi` | +| `xlarge` | `4` | `4Gi` | +| `2xlarge` | `8` | `8Gi` | + +### topics + +```yaml +topics: + - name: Results + partitions: 1 + replicas: 3 + config: + min.insync.replicas: 2 + - name: Orders + config: + cleanup.policy: compact + segment.ms: 3600000 + max.compaction.lag.ms: 5400000 + min.insync.replicas: 2 + partitions: 1 + replicas: 3 +``` diff --git a/content/en/docs/v0/applications/mongodb.md b/content/en/docs/v0/applications/mongodb.md new file mode 100644 index 00000000..ae9be0e3 --- /dev/null +++ b/content/en/docs/v0/applications/mongodb.md @@ -0,0 +1,129 @@ +--- +title: "Managed MongoDB Service" +linkTitle: "MongoDB" +weight: 65 +aliases: + - /docs/v0/reference/applications/mongodb + - /docs/applications/mongodb + - /docs/reference/applications/mongodb +--- + + + + +MongoDB is a popular document-oriented NoSQL database known for its flexibility and scalability. +The Managed MongoDB Service provides a self-healing replicated cluster managed by the Percona Operator for MongoDB. + +## Deployment Details + +This managed service is controlled by the Percona Operator for MongoDB, ensuring efficient management and seamless operation. + +- Docs: +- Github: + +## Deployment Modes + +### Replica Set Mode (default) + +By default, MongoDB deploys as a replica set with the specified number of replicas. +This mode is suitable for most use cases requiring high availability. + +### Sharded Cluster Mode + +Enable `sharding: true` for horizontal scaling across multiple shards. +Each shard is a replica set, and mongos routers handle query routing. + +## Notes + +### External Access + +When `external: true` is enabled: +- **Replica Set mode**: Traffic is load-balanced across all replica set members. This works well for read operations, but write operations require connecting to the primary. MongoDB drivers handle primary discovery automatically using the replica set connection string. +- **Sharded mode**: Traffic is routed through mongos routers, which handle both reads and writes correctly. + +### Credentials + +On first install, the credentials secret will be empty until the Percona operator initializes the cluster. +Run `helm upgrade` after MongoDB is ready to populate the credentials secret with the actual password. + +## Parameters + +### Common parameters + +| Name | Description | Type | Value | +| ------------------ | --------------------------------------------------------------------------------------------------------------------------------- | ---------- | ------- | +| `replicas` | Number of MongoDB replicas in replica set. | `int` | `3` | +| `resources` | Explicit CPU and memory configuration for each MongoDB replica. When omitted, the preset defined in `resourcesPreset` is applied. | `object` | `{}` | +| `resources.cpu` | CPU available to each replica. | `quantity` | `""` | +| `resources.memory` | Memory (RAM) available to each replica. | `quantity` | `""` | +| `resourcesPreset` | Default sizing preset used when `resources` is omitted. | `string` | `small` | +| `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` | +| `version` | MongoDB major version to deploy. | `string` | `v8` | + + +### Image configuration + +| Name | Description | Type | Value | +| --------------- | -------------------------------------- | -------- | --------------------------------------- | +| `images` | Container images used by the operator. | `object` | `{}` | +| `images.pmm` | PMM client image for monitoring. | `string` | `percona/pmm-client:2.44.1` | +| `images.backup` | Percona Backup for MongoDB image. | `string` | `percona/percona-backup-mongodb:2.11.0` | + + +### Sharding configuration + +| Name | Description | Type | Value | +| ----------------------------------- | ------------------------------------------------------------------ | ---------- | ------- | +| `sharding` | Enable sharded cluster mode. When disabled, deploys a replica set. | `bool` | `false` | +| `shardingConfig` | Configuration for sharded cluster mode. | `object` | `{}` | +| `shardingConfig.configServers` | Number of config server replicas. | `int` | `3` | +| `shardingConfig.configServerSize` | PVC size for config servers. | `quantity` | `3Gi` | +| `shardingConfig.mongos` | Number of mongos router replicas. | `int` | `2` | +| `shardingConfig.shards` | List of shard configurations. | `[]object` | `[...]` | +| `shardingConfig.shards[i].name` | Shard name. | `string` | `""` | +| `shardingConfig.shards[i].replicas` | Number of replicas in this shard. | `int` | `0` | +| `shardingConfig.shards[i].size` | PVC size for this shard. | `quantity` | `""` | + + +### Users configuration + +| Name | Description | Type | Value | +| --------------------------- | --------------------------------------------------- | ------------------- | ----- | +| `users` | Custom MongoDB users configuration map. | `map[string]object` | `{}` | +| `users[name].password` | Password for the user (auto-generated if omitted). | `string` | `""` | +| `users[name].db` | Database to authenticate against. | `string` | `""` | +| `users[name].roles` | List of MongoDB roles with database scope. | `[]object` | `[]` | +| `users[name].roles[i].name` | Role name (e.g., readWrite, dbAdmin, clusterAdmin). | `string` | `""` | +| `users[name].roles[i].db` | Database the role applies to. | `string` | `""` | + + +### 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 (e.g. "30d"). | `string` | `30d` | +| `backup.destinationPath` | Destination path for backups (e.g. s3://bucket/path/). | `string` | `s3://bucket/path/to/folder/` | +| `backup.endpointURL` | S3 endpoint URL for uploads. | `string` | `http://minio-gateway-service:9000` | +| `backup.s3AccessKey` | Access key for S3 authentication. | `string` | `""` | +| `backup.s3SecretKey` | Secret key for S3 authentication. | `string` | `""` | + + +### Bootstrap (recovery) parameters + +| Name | Description | Type | Value | +| ------------------------ | --------------------------------------------------------- | -------- | ------- | +| `bootstrap` | Bootstrap configuration. | `object` | `{}` | +| `bootstrap.enabled` | Whether to restore from a backup. | `bool` | `false` | +| `bootstrap.recoveryTime` | Timestamp for point-in-time recovery; empty means latest. | `string` | `""` | +| `bootstrap.backupName` | Name of backup to restore from. | `string` | `""` | + + diff --git a/content/en/docs/v0/applications/mysql.md b/content/en/docs/v0/applications/mysql.md new file mode 100644 index 00000000..9e418b88 --- /dev/null +++ b/content/en/docs/v0/applications/mysql.md @@ -0,0 +1,177 @@ +--- +title: "Managed MariaDB Service" +linkTitle: "MariaDB" +weight: 40 +aliases: + - /docs/v0/reference/applications/mariadb + - /docs/applications/mysql + - /docs/reference/applications/mariadb +--- + + + + +The Managed MariaDB Service offers a powerful and widely used relational database solution. +This service allows you to create and manage a replicated MariaDB cluster seamlessly. + +## Deployment Details + +This managed service is controlled by mariadb-operator, ensuring efficient management and seamless operation. + +- Docs: https://mariadb.com/kb/en/documentation/ +- GitHub: https://github.com/mariadb-operator/mariadb-operator + +## HowTos + +### How to switch master/slave replica + +```bash +kubectl edit mariadb +``` +update: + +```bash +spec: + replication: + primary: + podIndex: 1 +``` + +check status: + +```bash +NAME READY STATUS PRIMARY POD AGE + True Running app-db1-1 41d +``` + +### How to restore backup: + +find snapshot: +```bash +restic -r s3:s3.example.org/mariadb-backups/database_name snapshots +``` + + +restore: +```bash +restic -r s3:s3.example.org/mariadb-backups/database_name restore latest --target /tmp/ +``` + +more details: +- https://blog.aenix.io/restic-effective-backup-from-stdin-4bc1e8f083c1 + +### Known issues + +- **Replication can't be finished with various errors** +- **Replication can't be finished in case if `binlog` purged** + + Until `mariadbbackup` is not used to bootstrap a node by mariadb-operator (this feature is not implemented yet), follow these manual steps to fix it: + https://github.com/mariadb-operator/mariadb-operator/issues/141#issuecomment-1804760231 + +- **Corrupted indices** + Sometimes some indices can be corrupted on master replica, you can recover them from slave: + + ```bash + mysqldump -h -P 3306 -u -p --column-statistics=0 ~/tmp/fix-table.sql + mysql -h -P 3306 -u -p < ~/tmp/fix-table.sql + ``` + +## Parameters + +### Common parameters + +| Name | Description | Type | Value | +| ------------------ | --------------------------------------------------------------------------------------------------------------------------------- | ---------- | ------- | +| `replicas` | Number of MariaDB replicas. | `int` | `2` | +| `resources` | Explicit CPU and memory configuration for each MariaDB replica. When omitted, the preset defined in `resourcesPreset` is applied. | `object` | `{}` | +| `resources.cpu` | CPU available to each replica. | `quantity` | `""` | +| `resources.memory` | Memory (RAM) available to each replica. | `quantity` | `""` | +| `resourcesPreset` | Default sizing preset used when `resources` is omitted. | `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` | +| `version` | MariaDB major.minor version to deploy | `string` | `v11.8` | + + +### Application-specific parameters + +| Name | Description | Type | Value | +| -------------------------------- | ---------------------------------------- | ------------------- | ----- | +| `users` | Users configuration map. | `map[string]object` | `{}` | +| `users[name].password` | Password for the user. | `string` | `""` | +| `users[name].maxUserConnections` | Maximum number of connections. | `int` | `0` | +| `databases` | Databases configuration map. | `map[string]object` | `{}` | +| `databases[name].roles` | Roles assigned to users. | `object` | `{}` | +| `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 | Type | Value | +| ------------------------ | ----------------------------------------------- | -------- | ------------------------------------------------------ | +| `backup` | Backup configuration. | `object` | `{}` | +| `backup.enabled` | Enable regular backups (default: 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/mysql-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 authentication. | `string` | `` | +| `backup.s3SecretKey` | Secret key for S3 authentication. | `string` | `` | +| `backup.resticPassword` | Password for Restic backup encryption. | `string` | `` | + + +## Parameter examples and reference + +### resources and resourcesPreset + +`resources` sets explicit CPU and memory configurations for each replica. +When left empty, the preset defined in `resourcesPreset` is applied. + +```yaml +resources: + cpu: 4000m + memory: 4Gi +``` + +`resourcesPreset` sets named CPU and memory configurations for each replica. +This setting is ignored if the corresponding `resources` value is set. + +| Preset name | CPU | memory | +|-------------|--------|---------| +| `nano` | `250m` | `128Mi` | +| `micro` | `500m` | `256Mi` | +| `small` | `1` | `512Mi` | +| `medium` | `1` | `1Gi` | +| `large` | `2` | `2Gi` | +| `xlarge` | `4` | `4Gi` | +| `2xlarge` | `8` | `8Gi` | + +### users + +```yaml +users: + user1: + maxUserConnections: 1000 + password: hackme + user2: + maxUserConnections: 1000 + password: hackme +``` + + +### databases + +```yaml +databases: + myapp1: + roles: + admin: + - user1 + readonly: + - user2 +``` diff --git a/content/en/docs/v0/applications/nats.md b/content/en/docs/v0/applications/nats.md new file mode 100644 index 00000000..00595668 --- /dev/null +++ b/content/en/docs/v0/applications/nats.md @@ -0,0 +1,75 @@ +--- +title: "Managed NATS Service" +linkTitle: "NATS" +weight: 50 +aliases: + - /docs/v0/reference/applications/nats + - /docs/applications/nats + - /docs/reference/applications/nats +--- + + + + +NATS is an open-source, simple, secure, and high performance messaging system. +It provides a data layer for cloud native applications, IoT messaging, and microservices architectures. + +## Parameters + +### Common parameters + +| Name | Description | Type | Value | +| ------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ---------- | ------- | +| `replicas` | Number of replicas. | `int` | `2` | +| `resources` | Explicit CPU and memory configuration for each NATS replica. When omitted, the preset defined in `resourcesPreset` is applied. | `object` | `{}` | +| `resources.cpu` | CPU available to each replica. | `quantity` | `""` | +| `resources.memory` | Memory (RAM) available to each replica. | `quantity` | `""` | +| `resourcesPreset` | Default sizing preset used when `resources` is omitted. | `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 | Type | Value | +| ---------------------- | ------------------------------------------------------------- | ------------------- | ------ | +| `users` | Users configuration map. | `map[string]object` | `{}` | +| `users[name].password` | Password for the user. | `string` | `""` | +| `jetstream` | Jetstream configuration. | `object` | `{}` | +| `jetstream.enabled` | Enable or disable Jetstream for persistent messaging in NATS. | `bool` | `true` | +| `jetstream.size` | Jetstream persistent storage size. | `quantity` | `10Gi` | +| `config` | NATS configuration. | `object` | `{}` | +| `config.merge` | Additional configuration to merge into NATS config. | `*object` | `{}` | +| `config.resolver` | Additional resolver configuration to merge into NATS config. | `*object` | `{}` | + + +## Parameter examples and reference + +### resources and resourcesPreset + +`resources` sets explicit CPU and memory configurations for each replica. +When left empty, the preset defined in `resourcesPreset` is applied. + +```yaml +resources: + cpu: 4000m + memory: 4Gi +``` + +`resourcesPreset` sets named CPU and memory configurations for each replica. +This setting is ignored if the corresponding `resources` value is set. + +| Preset name | CPU | memory | +|-------------|--------|---------| +| `nano` | `250m` | `128Mi` | +| `micro` | `500m` | `256Mi` | +| `small` | `1` | `512Mi` | +| `medium` | `1` | `1Gi` | +| `large` | `2` | `2Gi` | +| `xlarge` | `4` | `4Gi` | +| `2xlarge` | `8` | `8Gi` | + diff --git a/content/en/docs/v0/applications/postgres.md b/content/en/docs/v0/applications/postgres.md new file mode 100644 index 00000000..80896236 --- /dev/null +++ b/content/en/docs/v0/applications/postgres.md @@ -0,0 +1,216 @@ +--- +title: "Managed PostgreSQL Service" +linkTitle: "PostgreSQL" +weight: 60 +aliases: + - /docs/v0/reference/applications/postgres + - /docs/applications/postgres + - /docs/reference/applications/postgres +--- + + + + +PostgreSQL is currently the leading choice among relational databases, known for its robust features and performance. +The Managed PostgreSQL Service takes advantage of platform-side implementation to provide a self-healing replicated cluster. +This cluster is efficiently managed using the highly acclaimed CloudNativePG operator, which has gained popularity within the community. + +## Deployment Details + +This managed service is controlled by the CloudNativePG operator, ensuring efficient management and seamless operation. + +- Docs: +- Github: + +## Operations + +### How to enable backups + +To back up a PostgreSQL application, an external S3-compatible storage is required. + +To start regular backups, update the application, setting `backup.enabled` to `true`, and fill in the path and credentials to an `backup.*`: + +```yaml +## @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 +backup: + enabled: false + retentionPolicy: 30d + destinationPath: s3://bucket/path/to/folder/ + endpointURL: http://minio-gateway-service:9000 + schedule: "0 2 * * * *" + s3AccessKey: oobaiRus9pah8PhohL1ThaeTa4UVa7gu + s3SecretKey: ju3eum4dekeich9ahM1te8waeGai0oog +``` + +### How to recover a backup + +CloudNativePG supports point-in-time-recovery. +Recovering a backup is done by creating a new database instance and restoring the data in it. + +Create a new PostgreSQL application with a different name, but identical configuration. +Set `bootstrap.enabled` to `true` and fill in the name of the database instance to recover from and the recovery time: + +```yaml +## @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 +## +bootstrap: + enabled: false + recoveryTime: "" # leave empty for latest or exact timestamp; example: 2020-11-26 15:22:00.00000+00 + oldName: "" +``` + +### How to switch primary/secondary replica + +See: + +- + +## Parameters + +### Common parameters + +| Name | Description | Type | Value | +| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ---------- | ------- | +| `replicas` | Number of Postgres replicas. | `int` | `2` | +| `resources` | Explicit CPU and memory configuration for each PostgreSQL replica. When omitted, the preset defined in `resourcesPreset` is applied. | `object` | `{}` | +| `resources.cpu` | CPU available to each replica. | `quantity` | `""` | +| `resources.memory` | Memory (RAM) available to each replica. | `quantity` | `""` | +| `resourcesPreset` | Default sizing preset used when `resources` is omitted. | `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` | +| `version` | PostgreSQL major version to deploy | `string` | `v18` | + + +### Application-specific parameters + +| Name | Description | Type | Value | +| --------------------------------------- | ---------------------------------------------------------------- | -------- | ----- | +| `postgresql` | PostgreSQL server configuration. | `object` | `{}` | +| `postgresql.parameters` | PostgreSQL server parameters. | `object` | `{}` | +| `postgresql.parameters.max_connections` | Maximum number of concurrent connections to the database server. | `int` | `100` | + + +### Quorum-based synchronous replication + +| Name | Description | Type | Value | +| ------------------------ | ---------------------------------------------------------------------------------- | -------- | ----- | +| `quorum` | Quorum configuration for synchronous replication. | `object` | `{}` | +| `quorum.minSyncReplicas` | Minimum number of synchronous replicas required for commit. | `int` | `0` | +| `quorum.maxSyncReplicas` | Maximum number of synchronous replicas allowed (must be less than total replicas). | `int` | `0` | + + +### Users configuration + +| Name | Description | Type | Value | +| ------------------------- | -------------------------------------------- | ------------------- | ------- | +| `users` | Users configuration map. | `map[string]object` | `{}` | +| `users[name].password` | Password for the user. | `string` | `""` | +| `users[name].replication` | Whether the user has replication privileges. | `bool` | `false` | + + +### Databases configuration + +| Name | Description | Type | Value | +| -------------------------------- | ---------------------------------------- | ------------------- | ----- | +| `databases` | Databases configuration map. | `map[string]object` | `{}` | +| `databases[name].roles` | Roles assigned to users. | `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` | List of enabled PostgreSQL extensions. | `[]string` | `[]` | + + +### 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 (e.g. "30d"). | `string` | `30d` | +| `backup.destinationPath` | Destination path for backups (e.g. s3://bucket/path/). | `string` | `s3://bucket/path/to/folder/` | +| `backup.endpointURL` | S3 endpoint URL for uploads. | `string` | `http://minio-gateway-service:9000` | +| `backup.s3AccessKey` | Access key for S3 authentication. | `string` | `` | +| `backup.s3SecretKey` | Secret key for S3 authentication. | `string` | `` | + + +### Bootstrap (recovery) parameters + +| Name | Description | Type | Value | +| ------------------------ | ------------------------------------------------------------------- | -------- | ------- | +| `bootstrap` | Bootstrap configuration. | `object` | `{}` | +| `bootstrap.enabled` | Whether to restore from a backup. | `bool` | `false` | +| `bootstrap.recoveryTime` | Timestamp (RFC3339) for point-in-time recovery; empty means latest. | `string` | `""` | +| `bootstrap.oldName` | Previous cluster name before deletion. | `string` | `""` | + + +## Parameter examples and reference + +### resources and resourcesPreset + +`resources` sets explicit CPU and memory configurations for each replica. +When left empty, the preset defined in `resourcesPreset` is applied. + +```yaml +resources: + cpu: 4000m + memory: 4Gi +``` + +`resourcesPreset` sets named CPU and memory configurations for each replica. +This setting is ignored if the corresponding `resources` value is set. + +| Preset name | CPU | memory | +|-------------|--------|---------| +| `nano` | `250m` | `128Mi` | +| `micro` | `500m` | `256Mi` | +| `small` | `1` | `512Mi` | +| `medium` | `1` | `1Gi` | +| `large` | `2` | `2Gi` | +| `xlarge` | `4` | `4Gi` | +| `2xlarge` | `8` | `8Gi` | + +### users + +```yaml +users: + user1: + password: strongpassword + user2: + password: hackme + airflow: + password: qwerty123 + debezium: + replication: true +``` + +### databases + +```yaml +databases: + myapp: + roles: + admin: + - user1 + - debezium + readonly: + - user2 + airflow: + roles: + admin: + - airflow + extensions: + - hstore +``` diff --git a/content/en/docs/v0/applications/rabbitmq.md b/content/en/docs/v0/applications/rabbitmq.md new file mode 100644 index 00000000..869e22db --- /dev/null +++ b/content/en/docs/v0/applications/rabbitmq.md @@ -0,0 +1,80 @@ +--- +title: "Managed RabbitMQ Service" +linkTitle: "RabbitMQ" +weight: 70 +aliases: + - /docs/v0/reference/applications/rabbitmq + - /docs/applications/rabbitmq + - /docs/reference/applications/rabbitmq +--- + + + + +RabbitMQ is a robust message broker that plays a crucial role in modern distributed systems. Our Managed RabbitMQ Service simplifies the deployment and management of RabbitMQ clusters, ensuring reliability and scalability for your messaging needs. + +## Deployment Details + +The service utilizes official RabbitMQ operator. This ensures the reliability and seamless operation of your RabbitMQ instances. + +- Github: https://github.com/rabbitmq/cluster-operator/ +- Docs: https://www.rabbitmq.com/kubernetes/operator/operator-overview.html + +## Parameters + +### Common parameters + +| Name | Description | Type | Value | +| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------- | ---------- | ------- | +| `replicas` | Number of RabbitMQ replicas. | `int` | `3` | +| `resources` | Explicit CPU and memory configuration for each RabbitMQ replica. When omitted, the preset defined in `resourcesPreset` is applied. | `object` | `{}` | +| `resources.cpu` | CPU available to each replica. | `quantity` | `""` | +| `resources.memory` | Memory (RAM) available to each replica. | `quantity` | `""` | +| `resourcesPreset` | Default sizing preset used when `resources` is omitted. | `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 | Type | Value | +| ----------------------------- | -------------------------------- | ------------------- | ----- | +| `users` | Users configuration map. | `map[string]object` | `{}` | +| `users[name].password` | Password for the user. | `string` | `""` | +| `vhosts` | Virtual hosts configuration map. | `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` | `[]` | + + +## Parameter examples and reference + +### resources and resourcesPreset + +`resources` sets explicit CPU and memory configurations for each replica. +When left empty, the preset defined in `resourcesPreset` is applied. + +```yaml +resources: + cpu: 4000m + memory: 4Gi +``` + +`resourcesPreset` sets named CPU and memory configurations for each replica. +This setting is ignored if the corresponding `resources` value is set. + +| Preset name | CPU | memory | +|-------------|--------|---------| +| `nano` | `100m` | `128Mi` | +| `micro` | `250m` | `256Mi` | +| `small` | `500m` | `512Mi` | +| `medium` | `500m` | `1Gi` | +| `large` | `1` | `2Gi` | +| `xlarge` | `2` | `4Gi` | +| `2xlarge` | `4` | `8Gi` | + diff --git a/content/en/docs/v0/applications/redis.md b/content/en/docs/v0/applications/redis.md new file mode 100644 index 00000000..6322b760 --- /dev/null +++ b/content/en/docs/v0/applications/redis.md @@ -0,0 +1,75 @@ +--- +title: "Managed Redis Service" +linkTitle: "Redis" +weight: 80 +aliases: + - /docs/v0/reference/applications/redis + - /docs/applications/redis + - /docs/reference/applications/redis +--- + + + + +Redis is a highly versatile and blazing-fast in-memory data store and cache that can significantly boost the performance of your applications. Managed Redis Service offers a hassle-free solution for deploying and managing Redis clusters, ensuring that your data is always available and responsive. + +## Deployment Details + +Service utilizes the Spotahome Redis Operator for efficient management and orchestration of Redis clusters. + +- Docs: https://redis.io/docs/ +- GitHub: https://github.com/spotahome/redis-operator + +## Parameters + +### Common parameters + +| Name | Description | Type | Value | +| ------------------ | ------------------------------------------------------------------------------------------------------------------------------- | ---------- | ------- | +| `replicas` | Number of Redis replicas. | `int` | `2` | +| `resources` | Explicit CPU and memory configuration for each Redis replica. When omitted, the preset defined in `resourcesPreset` is applied. | `object` | `{}` | +| `resources.cpu` | CPU available to each replica. | `quantity` | `""` | +| `resources.memory` | Memory (RAM) available to each replica. | `quantity` | `""` | +| `resourcesPreset` | Default sizing preset used when `resources` is omitted. | `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` | +| `version` | Redis major version to deploy | `string` | `v8` | + + +### Application-specific parameters + +| Name | Description | Type | Value | +| ------------- | --------------------------- | ------ | ------ | +| `authEnabled` | Enable password generation. | `bool` | `true` | + + +## Parameter examples and reference + +### resources and resourcesPreset + +`resources` sets explicit CPU and memory configurations for each replica. +When left empty, the preset defined in `resourcesPreset` is applied. + +```yaml +resources: + cpu: 4000m + memory: 4Gi +``` + +`resourcesPreset` sets named CPU and memory configurations for each replica. +This setting is ignored if the corresponding `resources` value is set. + +| Preset name | CPU | memory | +|-------------|--------|---------| +| `nano` | `250m` | `128Mi` | +| `micro` | `500m` | `256Mi` | +| `small` | `1` | `512Mi` | +| `medium` | `1` | `1Gi` | +| `large` | `2` | `2Gi` | +| `xlarge` | `4` | `4Gi` | +| `2xlarge` | `8` | `8Gi` | diff --git a/content/en/docs/v0/applications/tenant.md b/content/en/docs/v0/applications/tenant.md new file mode 100644 index 00000000..4593620d --- /dev/null +++ b/content/en/docs/v0/applications/tenant.md @@ -0,0 +1,126 @@ +--- +title: "Tenant Application Reference" +linkTitle: "Tenant" +weight: 90 +aliases: + - /docs/v0/reference/applications/tenant + - /docs/applications/tenant + - /docs/reference/applications/tenant +--- + + + + +A tenant is the main unit of security on the platform. The closest analogy would be Linux kernel namespaces. + +Tenants can be created recursively and are subject to the following rules: + +### Tenant naming + +Tenant names must be alphanumeric. +Using dashes (`-`) in tenant names is not allowed, unlike with other services. +This limitation exists to keep consistent naming in tenants, nested tenants, and services deployed in them. + +For example: + +- The root tenant is named `root`, but internally it's referenced as `tenant-root`. +- A nested tenant could be named `foo`, which would result in `tenant-foo` in service names and URLs. +- However, a tenant can not be named `foo-bar`, because parsing names such as `tenant-foo-bar` would be ambiguous. + +### Unique domains + +Each tenant has its own domain. +By default, (unless otherwise specified), it inherits the domain of its parent with a prefix of its name. +For example, if the parent had the domain `example.org`, then `tenant-foo` would get the domain `foo.example.org` by default. + +Kubernetes clusters created in this tenant namespace would get domains like: `kubernetes-cluster.foo.example.org` + +Example: +```text +tenant-root (example.org) +└── tenant-foo (foo.example.org) + └── kubernetes-cluster1 (kubernetes-cluster1.foo.example.org) +``` + +### Nesting tenants and reusing parent services + +Tenants can be nested. +A tenant administrator can create nested tenants using the "Tenant" application from the catalogue. + +Higher-level tenants can view and manage the applications of all their children tenants. +If a tenant does not run their own cluster services, it can access ones of its parent. + +For example, you create: +- Tenant `tenant-u1` with a set of services like `etcd`, `ingress`, `monitoring`. +- Tenant `tenant-u2` nested in `tenant-u1`. + +Let's see what will happen when you run Kubernetes and Postgres under `tenant-u2` namespace. + +Since `tenant-u2` does not have its own cluster services like `etcd`, `ingress`, and `monitoring`, +the applications running in `tenant-u2` will use the cluster services of the parent tenant. + +This in turn means: + +- The Kubernetes cluster data will be stored in `etcd` for `tenant-u1`. +- Access to the cluster will be through the common `ingress` of `tenant-u1`. +- Essentially, all metrics will be collected in the `monitoring` from `tenant-u1`, and only that tenant will have access to them. + +Example: +``` +tenant-u1 +├── etcd +├── ingress +├── monitoring +└── tenant-u2 + ├── kubernetes-cluster1 + └── postgres-db1 +``` + +## Parameters + +### Common parameters + +| Name | Description | Type | Value | +| ---------------- | -------------------------------------------------------------------------------------------------------------------------- | --------------------- | ------- | +| `host` | The hostname used to access tenant services (defaults to using the tenant name as a subdomain for its parent tenant host). | `string` | `""` | +| `etcd` | Deploy own Etcd cluster. | `bool` | `false` | +| `monitoring` | Deploy own Monitoring Stack. | `bool` | `false` | +| `ingress` | Deploy own Ingress Controller. | `bool` | `false` | +| `seaweedfs` | Deploy own SeaweedFS. | `bool` | `false` | +| `resourceQuotas` | Define resource quotas for the tenant. | `map[string]quantity` | `{}` | + + +## Configuration + +### Resource Quotas + +The `resourceQuotas` parameter allows you to limit resources available to the tenant. Supported keys include: + +**Compute resources** (converted to `requests.X` and `limits.X`): +- `cpu` - Total CPU cores (e.g., `"4"` or `"500m"`) +- `memory` - Total memory (e.g., `"4Gi"` or `"512Mi"`) +- `ephemeral-storage` - Ephemeral storage limit (e.g., `"10Gi"`) +- `storage` - Total persistent storage (e.g., `"100Gi"`) + +**Object count quotas** (passed as-is): +- `pods` - Maximum number of pods +- `services` - Maximum number of services +- `services.loadbalancers` - Maximum number of LoadBalancer services +- `services.nodeports` - Maximum number of NodePort services +- `configmaps` - Maximum number of ConfigMaps +- `secrets` - Maximum number of Secrets +- `persistentvolumeclaims` - Maximum number of PVCs + +**Example:** +```yaml +resourceQuotas: + cpu: 4 + memory: 4Gi + storage: 10Gi + services.loadbalancers: "3" + pods: "50" +``` diff --git a/content/en/docs/v0/cozystack-api/_index.md b/content/en/docs/v0/cozystack-api/_index.md new file mode 100644 index 00000000..1188e3c1 --- /dev/null +++ b/content/en/docs/v0/cozystack-api/_index.md @@ -0,0 +1,128 @@ +--- +title: Cozystack API +description: Cozystack API +weight: 70 +aliases: + - /docs/v0/development/cozystack-api + - /docs/cozystack-api + - /docs/development/cozystack-api +--- + +## Cozystack API + +Cozystack provides a powerful API that allows you to deploy services using various tools. + +**The best way to learn the Cozystack API is to:** + +1. Use the dashboard to deploy an application. +2. Examine the deployed resource in the Cozystack API and use it as a reference. +3. Parameterize and replicate the example resource to create your own resources through the API. + +You can list all available resources using `kubectl`: + +```bash +# kubectl api-resources | grep cozystack +buckets apps.cozystack.io/v1alpha1 true Bucket +clickhouses apps.cozystack.io/v1alpha1 true ClickHouse +etcds apps.cozystack.io/v1alpha1 true Etcd +ferretdb apps.cozystack.io/v1alpha1 true FerretDB +httpcaches apps.cozystack.io/v1alpha1 true HTTPCache +ingresses apps.cozystack.io/v1alpha1 true Ingress +kafkas apps.cozystack.io/v1alpha1 true Kafka +kuberneteses apps.cozystack.io/v1alpha1 true Kubernetes +monitorings apps.cozystack.io/v1alpha1 true Monitoring +mysqls apps.cozystack.io/v1alpha1 true MySQL +natses apps.cozystack.io/v1alpha1 true NATS +postgreses apps.cozystack.io/v1alpha1 true Postgres +rabbitmqs apps.cozystack.io/v1alpha1 true RabbitMQ +redises apps.cozystack.io/v1alpha1 true Redis +seaweedfses apps.cozystack.io/v1alpha1 true SeaweedFS +tcpbalancers apps.cozystack.io/v1alpha1 true TCPBalancer +tenants apps.cozystack.io/v1alpha1 true Tenant +virtualmachines apps.cozystack.io/v1alpha1 true VirtualMachine +vmdisks apps.cozystack.io/v1alpha1 true VMDisk +vminstances apps.cozystack.io/v1alpha1 true VMInstance +vpns apps.cozystack.io/v1alpha1 true VPN +``` + +Next, request a specific resource type in your tenant namespace: + +```bash +# kubectl get postgreses -n tenant-test +NAME READY AGE VERSION +test True 46s 0.7.1 +``` + +To view the YAML output: + +```yaml +# kubectl get postgreses -n tenant-test test -o yaml +apiVersion: apps.cozystack.io/v1alpha1 +appVersion: 0.7.1 +kind: Postgres +metadata: + name: test + namespace: tenant-test +spec: + databases: {} + replicas: 2 + size: 10Gi + storageClass: "" + users: {} +status: + conditions: + - lastTransitionTime: "2024-12-10T09:53:32Z" + message: Helm install succeeded for release tenant-test/postgres-test.v1 with chart postgres@0.7.1 + reason: InstallSucceeded + status: "True" + type: Ready + - lastTransitionTime: "2024-12-10T09:53:32Z" + message: Helm install succeeded for release tenant-test/postgres-test.v1 with chart postgres@0.7.1 + reason: InstallSucceeded + status: "True" + type: Released + version: 0.7.1 +``` + +You can use this resource as an example to create a similar service via the API. Just save the output to a file, update the `name` and any parameters you need, then use `kubectl` to create a new Postgres instance: + +```bash +kubectl create -f postgres.yaml +``` + +#### Using Terraform with the Cozystack API + +Cozystack integrates with Terraform. You can use the default `kubernetes` provider to create resources in the Cozystack API. + +**Example:** + +```hcl +provider "kubernetes" { + config_path = "~/.kube/config" +} + +resource "kubernetes_manifest" "vm_disk_iso" { + manifest = { + "apiVersion" = "apps.cozystack.io/v1alpha1" + "appVersion" = "0.7.1" + "kind" = "Postgres" + "metadata" = { + "name" = "test2" + "namespace" = "tenant-test" + } + "spec" = { + "replicas" = 2 + "size" = "10Gi" + } + } +} +``` + +Then run: + +```bash +terraform plan +terraform apply +``` + +Your new Postgres cluster will be deployed. diff --git a/content/en/docs/cozystack-api/api.json b/content/en/docs/v0/cozystack-api/api.json similarity index 100% rename from content/en/docs/cozystack-api/api.json rename to content/en/docs/v0/cozystack-api/api.json diff --git a/content/en/docs/v0/cozystack-api/rest.md b/content/en/docs/v0/cozystack-api/rest.md new file mode 100644 index 00000000..035ced2a --- /dev/null +++ b/content/en/docs/v0/cozystack-api/rest.md @@ -0,0 +1,11 @@ +--- +title: REST API Reference +linkTitle: REST API +description: "Cozystack REST API Reference" +type: swagger +weight: 10 +aliases: + - /docs/cozystack-api/rest +--- + +{{< swaggerui src="/docs/v0/cozystack-api/api.json" >}} diff --git a/content/en/docs/v0/development.md b/content/en/docs/v0/development.md new file mode 100644 index 00000000..dbd7492a --- /dev/null +++ b/content/en/docs/v0/development.md @@ -0,0 +1,231 @@ +--- +linkTitle: Developer Guide +title: Cozystack Internals and Developer Guides +description: Cozystack Internals and Development +weight: 100 +aliases: + - /docs/v0/development/development + - /docs/development + - /docs/development/development +--- + + + +## How it works + +In short, cozystack is a seed container that bootstraps the entire platform. It consists of: + +- **installer.sh** script: Contains minimal business logic, performs migrations, installs + FluxCD, and prepares Kubernetes to run the platform chart. + +- **platform chart**: A Helm chart that bootstraps the remaining configuration. It reads + the state from the Kubernetes cluster using Helm lookup functions and templates + all necessary manifests. The `installer.sh` script continuously runs the platform chart + to ensure changes in the cluster are properly reconciled. + +- **HTTP server**: Serves assets (Helm charts and Grafana dashboards) built from Cozystack repository. + +- **FluxCD**: The main engine that applies all necessary Helm charts from the HTTP server + to Kubernetes according to the configuration applied by the platform chart. + +## Repository Structure + +The main structure of the [cozystack](https://github.com/cozystack/cozystack) repository is: + +```shell +. +├── packages # Main directory for cozystack packages +│ ├── core # Core platform logic charts +│ ├── system # System charts used to configure the system +│ ├── apps # User-facing charts shown in the dashboard catalog +│ └── extra # Tenant-specific applications that can be deployed as tenant options +├── dashboards # Grafana dashboards +├── hack # Helper scripts for local development +└── scripts # Scripts mainly used by the cozystack container + └── migrations # Migrations between versions +``` + +Development can be done locally by modifying and updating files in this repository. + +## Packages + +### [core](https://github.com/cozystack/cozystack/tree/main/packages/core) + +Core packages are used to bootstrap Cozystack and its configuration itself. + +It consists of two packages: + +#### installer + +Provides everything needed for the initial bootstrap of cozystack: the installer.sh script and an HTTP server with assets built from this repository. + +#### platform + +Reads the configuration from the cluster, templates the manifests, and applies them +back to the cluster. + +It primarily reads the `cozystack` ConfigMap from `cozy-system` namespace, and templates +manifests according to the specified options. This ConfigMap +specifies the [bundle](/docs/v0/bundles/) name and options, detailing which system components should be +installed in the cluster. + +{{% alert color="info" %}} +Core packages do not use Helm to apply manifests; they are intended to be used only as `helm template . | kubectl apply -f -`. +{{% /alert %}} + +### [system](https://github.com/cozystack/cozystack/tree/main/packages/system) + +System packages configure the system to manage and deploy user applications. The +necessary system components are specified in the bundle configuration. This can also +include components without an operator, whose installation can be triggered as part +of user applications. + +{{% alert color="info" %}} +System packages use Helm to install and are managed by FluxCD. +{{% /alert %}} + +### [apps](https://github.com/cozystack/cozystack/tree/main/packages/apps) + +These user-facing applications appear in the dashboard and include manifests to be applied to the cluster. + +They should not contain business logic, because they are managed by operators installed from system. + +### [extra](https://github.com/cozystack/cozystack/tree/main/packages/extra) + +Similar to `apps` but not shown in the application catalog. They can only be installed as part of a tenant. +They are allowed to use by bottom tenants installed in current tenant namespace. + +Read more about [Tenant System](/docs/v0/guides/concepts/#tenant-system) on the Core Concepts page. + +It is possible to use only one application type within a single tenant namespace. + +{{% alert color="info" %}} +Apps and extra packages use Helm for application and are installed from the dashboard and managed by FluxCD. +{{% /alert %}} + +## Package Structure + +Every package is a typical Helm chart containing all necessary images and manifests +for the platform. We follow an umbrella chart logic to keep upstream charts in the +`./charts` directory and override values.yaml in the application's root. +This structure simplifies upstream chart updates. + +```shell +. +├── Chart.yaml # Helm chart definition and parameter description +├── Makefile # Common targets for simplifying local development +├── charts # Directory for upstream charts +├── images # Directory for Docker images +├── patches # Optional directory for upstream chart patches +├── templates # Additional manifests for the upstream Helm chart +├── templates/dashboard-resourcemap.yaml # Role used to display k8s resources in dashboard +├── values.yaml # Override values for the upstream Helm chart +└── values.schema.json # JSON schema used for input values validation and to render UI elements in dashboard +``` + +You can use bitnami's [readme-generator](https://github.com/bitnami/readme-generator-for-helm) for generating `README.md` and `values.schema.json` files. + +Just install it as `readme-generator` binary in your system and run generation using `make generate` command. + +## Development + +### Buildx configuration + +To build images, you need to install and configure the [`docker buildx`](https://github.com/docker/buildx) plugin. + +Instead of a built-in builder, you can [configure additional ones](https://docs.docker.com/build/builders/), which may be remote, or support multiple architectures. +This example shows how to create a builder with `kubernetes` driver, which allows you to build images directly in a Kubernetes cluster: + +```bash +docker buildx create \ + --bootstrap \ + --name=buildkit \ + --driver=kubernetes \ + --driver-opt=namespace=tenant-kvaps,replicas=2 \ + --platform=linux/amd64 \ + --platform=linux/arm64 \ + --use +``` + +Alternatively, omit the --driver* options to set up the build environment in an local Docker environment. + +### Packages management + +Each application includes a Makefile to simplify the development process. We follow this logic for every package: + +```shell +make update # Update Helm chart and versions from the upstream source +make image # Build Docker images used in the package +make show # Show output of rendered templates +make diff # Diff Helm release against objects in a Kubernetes cluster +make apply # Apply Helm release to a Kubernetes cluster +``` + +For example, to update cilium: + +```shell +cd packages/system/cilium # Go to application directory +make update # Download new version from upstream +make image # Build cilium image +git diff . # Show diff with changed manifests +make diff # Show diff with applied cluster manifests +make apply # Apply changed manifests to the cluster +kubectl get pod -n cozy-cilium # Check if everything works as expected +git commit -m "Update cilium" # Commit changes to the branch +``` + +To build the cozystack container with an updated chart: + +```shell +cd packages/core/installer # Go to the cozystack package +make image-cozystack # Build cozystack image +make apply # Apply to the cluster +kubectl get pod -n cozy-system # Check if everything works as expected +kubectl get hr -A # Check HelmRelease objects +``` + +{{% alert color="info" %}} +When rebuilding images, specify the `REGISTRY` environment variable to point to your Docker registry. + +Feel free to look inside each Makefile to better understand the logic. +{{% /alert %}} + +### Testing + +The platform includes an [`e2e.sh`](https://github.com/cozystack/cozystack/blob/main/hack/e2e.sh) script that performs the following tasks: + +- Runs three QEMU virtual machines +- Configures Talos Linux +- Installs Cozystack +- Waits for all HelmReleases to be installed +- Performs additional checks to ensure that components are up and running + +You can run e2e.sh either locally or directly within a Kubernetes container. + +To run tests in a Kubernetes cluster, navigate to the `packages/core/testing` directory and execute the following commands: + +```shell +make apply # Create testing sandbox in Kubernetes cluster +make test # Run the end-to-end tests in existing sandbox +make delete # Remove testing sandbox from Kubernetes cluster +``` + +{{% alert color="warning" %}} +:warning: To run e2e tests in a Kubernetes cluster, your nodes must have sufficient free resources to create 3 VMs and store the data for the deployed applications. + +It is recommended to use bare-metal nodes of the parent Cozystack cluster. +{{% /alert %}} + +### Dynamic Development Environment + +If you prefer to develop Cozystack in virtual machines instead of modifying the existing cluster, you can utilize the same sandbox from testing environment. The Makefile in the `packages/core/testing` includes additional options: + +```shell +make exec # Opens an interactive shell in the sandbox container. +make login # Downloads the kubeconfig into a temporary directory and runs a shell with the sandbox environment; mirrord must be installed. +make proxy # Enable a SOCKS5 proxy server; mirrord and gost must be installed. +``` + +Socks5 proxy can be configured in a browser to access services of a cluster running in sandbox. Firefox has a handy extension for toogling proxy on/off: + +- [Proxy Toggle](https://addons.mozilla.org/en-US/firefox/addon/proxy-toggle/) diff --git a/content/en/docs/v0/getting-started/_index.md b/content/en/docs/v0/getting-started/_index.md new file mode 100644 index 00000000..c72d5259 --- /dev/null +++ b/content/en/docs/v0/getting-started/_index.md @@ -0,0 +1,29 @@ +--- +title: "Getting Started with Cozystack: Deploying Private Cloud from Scratch" +linkTitle: "Getting Started" +description: "Make your first steps, run a home lab, build a POC with Cozystack." +weight: 10 +aliases: + - /docs/v0/get-started + - /docs/getting-started + - /docs/get-started +--- + +This tutorial will guide you through your first deployment of a Cozystack cluster. +Along the way, you will get to know about key concepts, learn to use Cozystack via dashboard and CLI, +and get a working proof-of-concept. + +The tutorial is divided into several steps. +Make sure to complete each step before starting the next one: + +| Step | Description | +|-----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------| +| [Requirements: prepare infrastructure and tools]({{% ref "requirements" %}}) | Prepare infrastructure and install required CLI tools on your machine before running this tutorial. | +| 1. [Install Talos Linux]({{% ref "install-talos" %}}) | Install a Cozystack-specific distribution of Talos Linux using [`boot-to-talos`][btt], likely the easiest installation method. | +| 2. [Install and bootstrap a Kubernetes cluster]({{% ref "install-kubernetes" %}}) | Bootstrap a Kubernetes cluster using [Talm][talm], the Talos configuration management tool made for Cozystack. | +| 3. [Install and configure Cozystack]({{% ref "install-cozystack" %}}) | Install Cozystack, get administrative access, perform basic configuration, and access the Cozystack dashboard. | +| 4. [Create a tenant for users and teams]({{% ref "create-tenant" %}}) | Create a user tenant, the foundation of RBAC in Cozystack, and get access to it via dashboard and Cozystack API. | +| 5. [Deploy managed applications]({{% ref "deploy-app" %}}) | Start using Cozystack: deploy a virtual machine, managed application, and a tenant Kubernetes cluster. | + +[btt]: https://github.com/cozystack/boot-to-talos +[talm]: https://github.com/cozystack/talm \ No newline at end of file diff --git a/content/en/docs/v0/getting-started/create-tenant.md b/content/en/docs/v0/getting-started/create-tenant.md new file mode 100644 index 00000000..5a71e757 --- /dev/null +++ b/content/en/docs/v0/getting-started/create-tenant.md @@ -0,0 +1,170 @@ +--- +title: "4. Create a User Tenant and Configure Access" +linkTitle: "4. Create User Tenant" +description: "Create a user tenant, the foundation of RBAC in Cozystack, and get access to it via dashboard and Cozystack API." +weight: 40 +aliases: + - /docs/getting-started/create-tenant +--- + +## Objectives + +At this step of the tutorial, you will create a user tenant — a space for users to deploy applications and VMs. +You will also get tenant credentials and log in as a user with access to this tenant. + +## Prerequisites + +Before you begin: + + +- Complete the previous steps of the tutorial to get + a [Cozystack cluster]({{% ref "/docs/v0/getting-started/install-cozystack" %}}) running, + with storage, networking, and management dashboard configured. + +- Make sure you can access the dashboard, as described in the + [previous step of the tutorial]({{% ref "/docs/v0/getting-started/install-cozystack" %}}). + +- If you're using OIDC, users and roles must be configured. + See the [OIDC guide]({{% ref "/docs/v0/operations/oidc" %}}) for details on how to work with the built-in OIDC server. + +During [Kubernetes installation]({{% ref "/docs/v0/getting-started/install-kubernetes" %}}) for Cozystack, +you should have obtained the administrative `kubeconfig` file for your new cluster. +Keep it at hand — it may be useful later for troubleshooting. +However, for day-to-day operations, you'll want to create user-specific credentials. + + +## Introduction + +Tenants are the isolation mechanism in Cozystack. +They are used to separate clients, teams, or environments. +Each tenant has its own set of applications and one or more nested Kubernetes clusters. +Tenant users have full access to their clusters. +Optionally, you can configure quotas for each tenant to limit resource usage and prevent overconsumption. + +To learn more about tenants, read the [Core Concepts]({{% ref "/docs/v0/guides/concepts#tenant-system" %}}) guide. + + +## Create a Tenant + +Tenants are created using the Cozystack application named `Tenant`. +After installation, Cozystack includes a built-in tenant called `tenant-root`. +This root tenant is reserved for platform administrators and should only be used to create child tenants. +Although it’s technically possible to install applications in `tenant-root`, +doing so is **not recommended** for production environments. + +{{< tabs name="create_tenant" >}} +{{% tab name="Using Dashboard" %}} + +1. Open the dashboard as a `tenant-root` user. +1. Ensure the current context is set to `tenant-root`. + Switch context and reload the page if needed. +1. Navigate to the **Catalog** tab. +1. Search for the **Tenant** application and open it. +1. Review the documentation, then click the **Deploy** button to proceed to the parameters page. +1. Fill in the tenant `name`. + It is the only parameter that can't be changed later. +1. (Optional) Fill in the domain name in `host`. + This domain name must already exist. + Ensure that the tenant user has enough control over the domain to configure DNS records. + If left blank, the domain will default to `.`. +1. Select the checkboxes to install system-level apps: `etcd`, `monitoring`, `ingress`, and `seaweedfs`. + Tenant users will **not** be able to install or uninstall these apps — only administrators can. + + The `etcd` option is required for nested Kubernetes. + Select it before installing the **Kubernetes** application in the tenant. + Only disable it if you're certain the tenant won’t use nested Kubernetes. +1. The `isolated` option determines whether sibling tenants can communicate over the network. + This does **not** affect visibility in the dashboard. + In most cases, it should be enabled (i.e., isolation is on). +1. By default, no resource quotas are set. + This means no usage limits. + You can define quotas to prevent resource overuse. +1. Click **Deploy ** to install the tenant application into the root tenant. + +{{% /tab %}} + +{{% tab name="Using kubectl" %}} + +Create a HelmRelease manifest for the tenant. You can use a manifest created via the dashboard as a starting point: + +```yaml +apiVersion: helm.toolkit.fluxcd.io/v2 +kind: HelmRelease +metadata: + name: tenant-team1 + namespace: tenant-root +spec: + chart: + spec: + chart: tenant + reconcileStrategy: Revision + sourceRef: + kind: HelmRepository + name: cozystack-apps + namespace: cozy-public + version: 1.9.1 + interval: 0s + values: + etcd: true + host: team1.example.org + ingress: true + isolated: true + monitoring: false + resourceQuotas: {} + seaweedfs: false +``` + +Apply the manifest: + +```bash +# Use the kubeconfig for the root tenant +export KUBECONFIG=./kubeconfig-tenant-root +# Apply the manifest +kubectl -n tenant-root apply -f hr-tenant-team1.yaml +``` + +{{% /tab %}} +{{< /tabs >}} + +You can assist tenant users with installing database applications or nested Kubernetes clusters. +As an administrator, you can switch context in the dashboard to access any tenant. +Tenant users, however, can only access their own tenant and any child tenants. + + +## Get Tenant Kubeconfig + +Tenant users need a kubeconfig file to access their Kubernetes cluster. +The method to retrieve it depends on whether OIDC is enabled in your Cozystack setup. + +### With OIDC Enabled + +You can retrieve the kubeconfig file directly from the dashboard, as described in the +[OIDC guide]({{% ref "/docs/v0/operations/oidc/enable_oidc#step-4-retrieve-kubeconfig" %}}). + +### Without OIDC + +As an administrator, you'll need to retrieve a service account token from the tenant namespace. +The secret holding the token has the same name as the tenant. + +To retrieve the token for a tenant named `team1`, run: + +```bash +kubectl -n tenant-team1 get secret tenant-team1 -o json | jq -r '.data.token | @base64d' +``` + +Next, insert this token into a kubeconfig template, and save the file as `kubeconfig-tenant-.yaml`. + +Make sure to also set the default namespace to the tenant name. +Many GUI clients will display permission errors if the namespace is not explicitly defined. + +The same token can also be used by the tenant user to log into the Cozystack dashboard if OIDC is disabled. + +### Get Nested Kubernetes Kubeconfig + +In general, administrators do **not** need to retrieve kubeconfig files for nested Kubernetes clusters. + +These clusters are installed by the tenant user, within their own tenant namespace. +Tenant users have full control over their nested Kubernetes environments. + +To access a nested Kubernetes cluster, the tenant user can download the kubeconfig file +directly from the corresponding application's page in the dashboard. diff --git a/content/en/docs/v0/getting-started/deploy-app.md b/content/en/docs/v0/getting-started/deploy-app.md new file mode 100644 index 00000000..c2f1d615 --- /dev/null +++ b/content/en/docs/v0/getting-started/deploy-app.md @@ -0,0 +1,336 @@ +--- +title: "5. Deploy Managed Applications, VMs, and tenant Kubernetes cluster" +linkTitle: "5. Deploy Applications" +description: "Start using Cozystack: deploy a virtual machine, managed application, and a tenant Kubernetes cluster." +weight: 50 +aliases: + - /docs/getting-started/deploy-app +--- + +## Objectives + +This guide will walk you through setting up the environment needed to run a typical web application with common service +dependencies—PostgreSQL and Redis—on Cozystack, a Kubernetes-based PaaS framework. + +You’ll learn how to: + +- Deploy managed applications in your tenant: a PostgreSQL database and Redis cache. +- Create a managed Kubernetes cluster, configure DNS, and access the cluster. +- Deploy a containerized application to the new cluster. + +You don’t need in-depth Kubernetes knowledge to complete this tutorial—most steps are done through the Cozystack web interface. + +This is your fast track to a successful first deployment on Cozystack. +Once you're done, you’ll have a working setup ready for your own applications—and a solid foundation to build upon and showcase to your team. + +## Prerequisites + +Before you begin: + +- **Cozystack cluster** should already be [installed and running]({{% ref "/docs/v0/getting-started/install-cozystack" %}}). + You won’t need to install or configure anything on the infrastructure level—this + guide assumes that part is already done, possibly by you or someone else on your team. +- **Tenant and credentials:** You must have access to your tenant in Cozystack. + This can be either through a `kubeconfig` file or OIDC login for the dashboard. + If you don’t have access, ask your Ops team or refer to the guide on creating a tenant. +- **DNS for dev/testing:** To access the deployed app over HTTPS you need a DNS record set up. + A wildcard DNS record is preferred, as it's more convenient to use. + +> 🛠️ **CLI is optional.** +> You don’t need to use `kubectl` or `helm` unless you want to. +> All major steps (like creating the Kubernetes cluster and managed services) can be done entirely in the Cozystack Dashboard. +> The only point where you’ll need the CLI is when deploying the app to a Kubernetes cluster. + +## 1. Access the Cozystack Dashboard + +Open the Cozystack dashboard in your browser. +The link usually looks like `https://dashboard.`. + +Depending on how authentication is configured in your Cozystack cluster, you'll see one of the following: + +- An **OIDC login screen** with a button that redirects you to Keycloak. +- A **Token login screen**, where you manually paste a token from your kubeconfig file. + +Choose your login method below: + +{{< tabs name="access_dashboard" >}} +{{% tab name="OIDC" %}} +Click the `OIDC Login` button. +This will take you to the Keycloak login page. + +Enter your credentials and click `Login`. +If everything is configured correctly, you'll be logged in and redirected back to the dashboard. +{{% /tab %}} + +{{% tab name="kubeconfig" %}} +This login form doesn’t have a `username` field—only a `token` input. +You can get this token from your kubeconfig file. + +1. Open your kubeconfig file and copy the token value (it’s a long string). + Make sure you copy it without extra spaces or line breaks. +1. Paste it into the form and click `Submit`. + +{{% /tab %}} +{{< /tabs >}} + +Once you're logged in, the dashboard will automatically show your tenant context. + +You may see system-level applications like `ingress` or `monitoring` already running—these are managed by your cluster admin. +As a tenant user, you can’t install or modify them, but your own apps will run alongside them in your isolated tenant environment. + +## 2. Create a Managed PostgreSQL + +Cozystack lets you provision managed databases directly on the hardware layer for maximum performance. +Each database is created inside your tenant namespace and is automatically accessible from your nested Kubernetes cluster. + +If you're familiar with services like AWS RDS or GCP Cloud SQL, the experience is similar— +except it's fully integrated with Cozystack and isolated within your own tenant. + +> Throughout this tutorial, you’ll have the option to use either the Cozystack dashboard (UI) or `kubectl`: +> +> - **Cozystack Dashboard** offers the quickest and most straightforward experience—recommended if this is your first time using Cozystack. +> - **`kubectl`** provides in-depth visibility into how managed services are deployed behind the scenes. +> +> While neither approach reflects how services are typically deployed in production, +> both are well-suited for learning and experimentation—making them ideal for this tutorial. + +### 2.1 Deploy PostgresSQL + +{{< tabs name="create_database" >}} +{{% tab name="Cozystack Dashboard" %}} + +1. Open the Cozystack dashboard and go to the **Catalog** tab. +1. Search for the **Postgres** application badge and click it to open its built-in documentation. +1. Click the **Deploy** button to open the deployment configuration page. +1. Fill in `instaphoto-postgres` in the **`name`** field. Application name must be unique within your tenant and **cannot be changed after deployment**. +1. Review the other parameters. They come pre-filled with sensible defaults, so you can keep them unchanged. + - Try using both the **Visual editor** and the **YAML editor**. You can switch between editors at any time. + - The YAML editor includes inline comments to guide you. + - Don’t worry if you’re unsure about some settings. Most of them can be updated later. +1. Click **Deploy** again. The database will be installed in your tenant’s namespace. + + +{{% /tab %}} + +{{% tab name="kubectl" %}} +Create a manifest `postgres.yaml` with the following content: + +```yaml +apiVersion: helm.toolkit.fluxcd.io/v2 +kind: HelmRelease +metadata: + name: postgres-instaphoto-dev + namespace: tenant-team1 +spec: + chart: + spec: + chart: postgres + reconcileStrategy: Revision + sourceRef: + kind: HelmRepository + name: cozystack-apps + namespace: cozy-public + version: 0.10.0 + interval: 0s + values: + databases: + myapp: + roles: + admin: + - user1 + external: true + replicas: 2 + resourcesPreset: nano + size: 5Gi + users: + user1: + password: strongpassword +``` + +Apply the manifest using: + +```bash +kubectl apply -f postgres.yaml +``` + +> 💡 Tip: You can generate a similar manifest by deploying the Postgres app through the dashboard first. +> Then, export the configuration and edit it as needed. +> It's useful if you’re trying to reproduce or automate the setup. + +{{% /tab %}} +{{< /tabs >}} + + +### 2.2 Get the Connection Credentials + +Navigate to the **Applications** tab, then find and open the `instaphoto-postgres` application. +Once the application is installed and ready, you’ll find connection details in the **Application Resources** section of the dashboard. + +- The **Secrets** tab contains the database password for each user you defined. +- The **Services** tab lists the internal service endpoints: + - Use `postgres--ro` to connect to the **read-only replica**. + - Use `postgres--rw` to connect to the **primary (read-write)** instance. + +These service names are resolvable from within the nested Kubernetes cluster and can be used in your app’s configuration. + +If you need to connect to the database from outside the cluster, you can expose it externally by setting the `external` parameter to `true`. +This will create a service named `postgres--external-write` with a public IP address. + +> ⚠️ **Only enable external access if absolutely necessary.** Exposing databases to the internet introduces security risks and should be avoided in most cases. + +## 3. Create a Cache Service + +From this point on, you'll use your tenant credentials to access the platform. +Use the tenant's kubeconfig for `kubectl`, and the token from it to access the dashboard. + +{{< tabs name="create_redis" >}} +{{% tab name="Cozystack Dashboard" %}} + +1. Open the dashboard. +1. Follow the same steps as with PostgreSQL, but for Redis application. +1. The Redis application has an `authEnabled` parameter, which will create a default user. That’s sufficient for our application. +1. Once you're done configuring the parameters, click the **Deploy** button. The application will be installed in your tenant. + +{{% /tab %}} +{{% tab name="kubectl" %}} + +Create a manifest file named `redis.yaml` with the following content: + +```yaml +apiVersion: helm.toolkit.fluxcd.io/v2 +kind: HelmRelease +metadata: + name: redis-instaphoto + namespace: tenant-team1 +spec: + chart: + spec: + chart: redis + reconcileStrategy: Revision + sourceRef: + kind: HelmRepository + name: cozystack-apps + namespace: cozy-public + version: 0.6.0 + interval: 0s + values: + authEnabled: true + external: false + replicas: 2 + resources: {} + resourcesPreset: nano + size: 1Gi +``` + +Then apply it: + +```bash +kubectl apply -f redis.yaml +``` +{{% /tab %}} +{{< /tabs >}} + +After a short time, the Redis application will be installed in the `team1` tenant. +The generated password can be found in the dashboard. + +{{< tabs name="redis_password" >}} +{{% tab name="Cozystack Dashboard" %}} + +1. Open the dashboard as the `tenant-team1` user. +1. Click on the **Applications** tab in the left menu. +1. Find the `redis-instaphoto` application and click on it. +1. The password is shown in the **Secrets** section, with buttons to copy or reveal it. + +{{% /tab %}} +{{% tab name="kubectl" %}} + +```bash +# Use the tenant kubeconfig +export KUBECONFIG=./kubeconfig-tenant-team1 +# Get the password +kubectl -n tenant-team1 get secret redis-instaphoto-auth +``` + +{{% /tab %}} +{{< /tabs >}} + +## 4. Deploy a Nested Kubernetes Cluster + +The nested Kubernetes cluster is created in the same way as the database and cache. +However, there are a few important additional points to consider: + +- **`etcd` must be enabled in the tenant**
+ The `etcd` service is required to run a nested Kubernetes cluster and can only be enabled by a Cozystack administrator. +- **Verify your quota.**
+ Ensure your tenant has enough CPU, RAM, and disk resources to create and run a cluster. +- **Choose an appropriate instance preset.**
+ Avoid selecting presets that are too small. A Kubernetes node consumes approximately 2.5 GB of RAM just for system components. + For example, if you select a 4 GB RAM preset, only about 1.5 GB will be available for your actual workloads. + 4 GB is sufficient for testing, but in general, it’s better to provision **fewer nodes with more RAM** than many nodes with minimal RAM. +- **Enable `ingress` and `cert-manager` if needed.**
+ If you're deploying web applications, you will likely need ingress and certificate management. + Both can be enabled with a checkbox when configuring the nested Kubernetes application in Cozystack. + +Once the nested Kubernetes cluster is ready, you'll find its kubeconfig files in the **Secrets** tab of the application page in the dashboard. +Several options are provided: + +- **`admin.conf`** — The standard kubeconfig for accessing your new cluster. + You can create additional Kubernetes users using this configuration. +- **`admin.svc`** — Same token as `admin.conf`, but with the API server address set to the internal service name. + Use it for applications running inside the cluster that need API access. +- **`super-admin.conf`** — Similar to `admin.conf`, but with extended administrative permissions. + Intended for troubleshooting and cluster maintenance tasks. +- **`super-admin.svc`** — Same as `super-admin.conf`, but pointing to the internal API server address. + +## 5. Update DNS and Access the Cluster + +After deployment, the nested Kubernetes cluster will automatically claim one of the floating IP addresses from the main cluster. + +You can find the assigned DNS name and IP address in one of two ways: +- Open the application page for the cluster in the dashboard. +- Check the ingress status using `kubectl`. + +Once you have the correct DNS name and IP address, update your DNS settings to point your domain or subdomain to the assigned IP. + +After the DNS records are updated and propagated, you can access your nested Kubernetes cluster using the downloaded kubeconfig file. + +Here’s an example of how to configure and use it: + +1. Save the contents of `admin.conf` in a file, for example, `~/.kube/kubeconfig-team1.example.org`: + + ```console + $ cat ~/.kube/kubeconfig-team1.example.org + apiVersion: v1 + clusters: + - cluster: + certificate-authority-data: LS0tL + ... + ``` + +1. Set up `KUBECONFIG` env variable to this file and check that the nodes are ready: + + ```console + $ export KUBECONFIG=~/.kube/kubeconfig-team1.example.org + $ kubectl get nodes + NAME STATUS ROLES AGE VERSION + kubernetes-dev-md0-vn8dh-jjbm9 Ready ingress-nginx 29m v1.30.11 + kubernetes-dev-md0-vn8dh-xhsvl Ready ingress-nginx 25m v1.30.11 + ``` + +## 6. Deploy an Application with Helm + +From this point, working with your cluster is the same as working with any standard Kubernetes environment. + +You can use `kubectl`, `helm`, or your CI/CD pipeline to deploy Kubernetes-native applications. + +To deploy your application: + +1. Update your Helm chart values to include the correct credentials for the database and cache. +1. Run a standard Helm deployment command, for example: + + ```bash + helm upgrade --install -f values.yaml + ``` + +Service names such as the database and cache do not need DNS suffixes. +They are accessible within the same namespace by their service names. \ No newline at end of file diff --git a/content/en/docs/v0/getting-started/install-cozystack.md b/content/en/docs/v0/getting-started/install-cozystack.md new file mode 100644 index 00000000..83ec6966 --- /dev/null +++ b/content/en/docs/v0/getting-started/install-cozystack.md @@ -0,0 +1,651 @@ +--- +title: "3. Install and Configure Cozystack" +linkTitle: "3. Install Cozystack" +description: "Install Cozystack, get administrative access, perform basic configuration, and enable the UI dashboard." +weight: 20 +aliases: + - /docs/getting-started/install-cozystack +--- + +## Objectives + +In this step of the tutorial, we'll install Cozystack on top of a [Kubernetes cluster, prepared in the previous step]({{% ref "./install-kubernetes" %}}). + +The tutorial will guide you through the following stages: + +1. Prepare a Cozystack configuration file +1. Install Cozystack by applying configuration +1. Configure storage +1. Configure networking +1. Deploy etcd, ingress and monitoring stack in the root tenant +1. Finalize deployment and access Cozystack dashboard + +## 1. Prepare a Configuration File + +We will start installing Cozystack by making a configuration file. +Take the example below and write it in a file **cozystack.yaml**: + +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: cozystack + namespace: cozy-system +data: + bundle-name: "paas-full" + root-host: "example.org" + api-server-endpoint: "https://api.example.org:443" + expose-services: "dashboard,api" + ipv4-pod-cidr: "10.244.0.0/16" + ipv4-pod-gateway: "10.244.0.1" + ipv4-svc-cidr: "10.96.0.0/16" + ipv4-join-cidr: "100.64.0.0/16" +``` + +Action points: + +1. Replace `example.org` in `data.root-host` and `data.api-server-endpoint` with a routable fully-qualified domain name (FQDN) that you control. + If you only have a public IP, but no FQDN, use [nip.io](https://nip.io/) with dash notation. +2. Use the same values for `data.ipv4*` as on the previous step, where you bootstrapped a Kubernetes cluster with Talm or `talosctl`. + Settings provided in the example are sane defaults that can be used in most cases. + +There are other values in this config that you don't need to change in the course of the tutorial. +However, let's overview and explain each value: + +- `metadata.name` and `metadata.namespace` define that this is the main + [ConfigMap](https://kubernetes.io/docs/concepts/configuration/configmap/) of Cozystack. +- `root-host` is used as the main domain for all services created under Cozystack, such as the dashboard, Grafana, Keycloak, etc. +- `api-server-endpoint` is the Cluster API endpoint. It's used for generating kubeconfig files for your users. It is recommended to use routable IP addresses instead of local ones. +- `data.bundle-name: "paas-full"` means that we're using the Cozystack bundle `paas-full`, the most complete set of components. + Learn more about bundles in the [Cozystack Bundles reference]({{% ref "/docs/v0/operations/configuration/bundles" %}}). +- `data.expose-services: "dashboard,api"` means that we want to make Cozystack dashboard (UI) and API accessible by users. +- `ipv4-*` are internal networking configurations for the underlying Kubernetes cluster. + +You can learn more about this configuration file in the [Cozystack ConfigMap reference]({{% ref "/docs/v0/operations/configuration/configmap" %}}). + +{{% alert color="info" %}} +Cozystack gathers anonymous usage statistics by default. Learn more about what data is collected and how to opt out in the [Telemetry Documentation]({{% ref "/docs/v0/operations/configuration/telemetry" %}}). +{{% /alert %}} + + +## 2. Install Cozystack + +Next, we will install Cozystack and check that the installation is complete and successful. + + +### 2.1. Create Namespace and Apply Configuration + +Create a namespace `cozy-system`, then apply the ConfigMap created in the previous step and the installer configuration: + + ```bash + kubectl create ns cozy-system + kubectl apply -f cozystack.yaml + ``` + + +### 2.2. Apply Installer + +Apply the installer configuration. +This file defines the Cozystack version. +For tutorial, just take the latest stable version available on GitHub: + +```bash +kubectl apply -f https://github.com/cozystack/cozystack/releases/latest/download/cozystack-installer.yaml +``` + +As the installation goes on, you can track the logs of installer: + +```bash +kubectl logs -n cozy-system deploy/cozystack -f +``` + + +### 2.3. Check Installation Status + +Wait for a while, then check the status of installation: + +```bash +kubectl get hr -A +``` + +Wait and check again until you see `True` on each line, as in this example: + +```console +NAMESPACE NAME AGE READY STATUS +cozy-cert-manager cert-manager 4m1s True Release reconciliation succeeded +cozy-cert-manager cert-manager-issuers 4m1s True Release reconciliation succeeded +cozy-cilium cilium 4m1s True Release reconciliation succeeded +cozy-cluster-api capi-operator 4m1s True Release reconciliation succeeded +cozy-cluster-api capi-providers 4m1s True Release reconciliation succeeded +cozy-dashboard dashboard 4m1s True Release reconciliation succeeded +cozy-grafana-operator grafana-operator 4m1s True Release reconciliation succeeded +cozy-kamaji kamaji 4m1s True Release reconciliation succeeded +cozy-kubeovn kubeovn 4m1s True Release reconciliation succeeded +cozy-kubevirt-cdi kubevirt-cdi 4m1s True Release reconciliation succeeded +cozy-kubevirt-cdi kubevirt-cdi-operator 4m1s True Release reconciliation succeeded +cozy-kubevirt kubevirt 4m1s True Release reconciliation succeeded +cozy-kubevirt kubevirt-operator 4m1s True Release reconciliation succeeded +cozy-linstor linstor 4m1s True Release reconciliation succeeded +cozy-linstor piraeus-operator 4m1s True Release reconciliation succeeded +cozy-mariadb-operator mariadb-operator 4m1s True Release reconciliation succeeded +cozy-metallb metallb 4m1s True Release reconciliation succeeded +cozy-monitoring monitoring 4m1s True Release reconciliation succeeded +cozy-postgres-operator postgres-operator 4m1s True Release reconciliation succeeded +cozy-rabbitmq-operator rabbitmq-operator 4m1s True Release reconciliation succeeded +cozy-redis-operator redis-operator 4m1s True Release reconciliation succeeded +cozy-telepresence telepresence 4m1s True Release reconciliation succeeded +cozy-victoria-metrics-operator victoria-metrics-operator 4m1s True Release reconciliation succeeded +tenant-root tenant-root 4m1s True Release reconciliation succeeded +``` + +The list of components in your installation may be different from the example above, +as it depends on your configuration and Cozystack version. + +Once every component shows `READY: True`, we're ready to proceed by configuring subsystems. + + +## 3. Configure Storage + +Kubernetes needs a storage subsystem to provide persistent volumes to applications, but it doesn't include one of its own. +Cozystack provides [LINSTOR](https://github.com/LINBIT/linstor-server) as a storage subsystem. + +In the following steps, we'll access LINSTOR interface, create storage pools, and define storage classes. + + +### 3.1. Check Storage Devices + +1. Set up an alias to access LINSTOR: + + ```bash + alias linstor='kubectl exec -n cozy-linstor deploy/linstor-controller -- linstor' + ``` + +1. List your nodes and check their readiness: + + ```bash + linstor node list + ``` + + Example output shows node names and state: + + ```console + +-------------------------------------------------------+ + | Node | NodeType | Addresses | State | + |=======================================================| + | srv1 | SATELLITE | 192.168.100.11:3367 (SSL) | Online | + | srv2 | SATELLITE | 192.168.100.12:3367 (SSL) | Online | + | srv3 | SATELLITE | 192.168.100.13:3367 (SSL) | Online | + +-------------------------------------------------------+ + ``` + +1. List available empty devices: + + ```bash + linstor physical-storage list + ``` + + Example output shows the same node names: + + ```console + +--------------------------------------------+ + | Size | Rotational | Nodes | + |============================================| + | 107374182400 | True | srv3[/dev/sdb] | + | | | srv1[/dev/sdb] | + | | | srv2[/dev/sdb] | + +--------------------------------------------+ + ``` + +### 3.2. Create Storage Pools + +1. Create storage pools using ZFS: + + ```bash + linstor ps cdp zfs srv1 /dev/sdb --pool-name data --storage-pool data + linstor ps cdp zfs srv2 /dev/sdb --pool-name data --storage-pool data + linstor ps cdp zfs srv3 /dev/sdb --pool-name data --storage-pool data + ``` + + It is [recommended](https://github.com/LINBIT/linstor-server/issues/463#issuecomment-3401472020) + to set `failmode=continue` on ZFS storage pools to allow DRBD to handle disk failures instead of ZFS. + + ```bash + kubectl exec -ti -n cozy-linstor ds/linstor-satellite.srv1 -- zpool set failmode=continue data + kubectl exec -ti -n cozy-linstor ds/linstor-satellite.srv2 -- zpool set failmode=continue data + kubectl exec -ti -n cozy-linstor ds/linstor-satellite.srv3 -- zpool set failmode=continue data + ``` + +1. Check the results by listing the storage pools: + + ```bash + linstor sp l + ``` + + Example output: + + ```console + +-------------------------------------------------------------------------------------------------------------------------------------+ + | StoragePool | Node | Driver | PoolName | FreeCapacity | TotalCapacity | CanSnapshots | State | SharedName | + |=====================================================================================================================================| + | DfltDisklessStorPool | srv1 | DISKLESS | | | | False | Ok | srv1;DfltDisklessStorPool | + | DfltDisklessStorPool | srv2 | DISKLESS | | | | False | Ok | srv2;DfltDisklessStorPool | + | DfltDisklessStorPool | srv3 | DISKLESS | | | | False | Ok | srv3;DfltDisklessStorPool | + | data | srv1 | ZFS | data | 96.41 GiB | 99.50 GiB | True | Ok | srv1;data | + | data | srv2 | ZFS | data | 96.41 GiB | 99.50 GiB | True | Ok | srv2;data | + | data | srv3 | ZFS | data | 96.41 GiB | 99.50 GiB | True | Ok | srv3;data | + +-------------------------------------------------------------------------------------------------------------------------------------+ + ``` + +### 3.3. Create Storage Classes + +Finally, we can create a couple of storage classes, one of which will be the default class. + + +1. Create a file with storage class definitions. + Below is a sane default example providing two classes: `local` (default) and `replicated`. + + **storageclasses.yaml:** + + ```yaml + --- + apiVersion: storage.k8s.io/v1 + kind: StorageClass + metadata: + name: local + annotations: + storageclass.kubernetes.io/is-default-class: "true" + provisioner: linstor.csi.linbit.com + parameters: + linstor.csi.linbit.com/storagePool: "data" + linstor.csi.linbit.com/layerList: "storage" + linstor.csi.linbit.com/allowRemoteVolumeAccess: "false" + volumeBindingMode: WaitForFirstConsumer + allowVolumeExpansion: true + --- + apiVersion: storage.k8s.io/v1 + kind: StorageClass + metadata: + name: replicated + provisioner: linstor.csi.linbit.com + parameters: + linstor.csi.linbit.com/storagePool: "data" + linstor.csi.linbit.com/autoPlace: "3" + linstor.csi.linbit.com/layerList: "drbd storage" + linstor.csi.linbit.com/allowRemoteVolumeAccess: "true" + property.linstor.csi.linbit.com/DrbdOptions/auto-quorum: suspend-io + property.linstor.csi.linbit.com/DrbdOptions/Resource/on-no-data-accessible: suspend-io + property.linstor.csi.linbit.com/DrbdOptions/Resource/on-suspended-primary-outdated: force-secondary + property.linstor.csi.linbit.com/DrbdOptions/Net/rr-conflict: retry-connect + volumeBindingMode: Immediate + allowVolumeExpansion: true + ``` + +1. Apply the storage class configuration + + ```bash + kubectl create -f storageclasses.yaml + ``` + +1. Check that the storage classes were successfully created: + + ```bash + kubectl get storageclasses + ``` + + Example output: + + ```console + NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE + local (default) linstor.csi.linbit.com Delete WaitForFirstConsumer true 11m + replicated linstor.csi.linbit.com Delete Immediate true 11m + ``` + + +## 4. Configure Networking + +Next, we will configure how the Cozystack cluster can be accessed. +This step has two options depending on your available infrastructure: + +- For your own bare metal or self-hosted VMs, choose the MetalLB option. + MetalLB is Cozystack's default load balancer. +- For VMs and dedicated servers from cloud providers, choose the public IP setup. + [Most cloud providers don't support MetalLB](https://metallb.universe.tf/installation/clouds/). + + Check out the [provider-specific installation]({{% ref "/docs/v0/install/providers" %}}) section. + It may have instructions for your provider, which you can use to deploy a production-ready cluster. + +### 4.a MetalLB Setup + +Cozystack has three types of IP addresses used: + +- Node IPs: persistent and valid only within the cluster. +- Virtual floating IP: used to access one of the nodes in the cluster and valid only within the cluster. +- External access IPs: used by LoadBalancers to expose services outside the cluster. + +Services with external IPs may be exposed in two modes: L2 and BGP. +L2 mode is a simple one, but requires that nodes belong to a single L2 domain, and does not load-balance well. +BGP has more complicated setup -- you need BGP peers ready to accept announces, but gives the ability to make proper load-balancing, and provides more options for choosing IP address ranges. + +Select a range of unused IPs for the services, here will use the `192.168.100.200-192.168.100.250` range. +If you use L2 mode, these IPs should either be from the same network as the nodes, or have all necessary routes to them. + +For BGP mode, you will also need BGP peer IP addresses and local and remote AS numbers. Here we will use `192.168.20.254` as peer IP, and AS numbers 65000 and 65001 as local and remote. + +Create and apply a file describing an address pool. + +**metallb-ip-address-pool.yml** +```yaml +apiVersion: metallb.io/v1beta1 +kind: IPAddressPool +metadata: + name: cozystack + namespace: cozy-metallb +spec: + addresses: + # used to expose services outside the cluster + - 192.168.100.200-192.168.100.250 + autoAssign: true + avoidBuggyIPs: false +``` + +```bash +kubectl create -f metallb-ip-address-pool.yml +``` + +Create and apply resources needed for an L2 or a BGP advertisement. + +{{< tabs name="metallb_announce" >}} +{{% tab name="L2 mode" %}} +L2Advertisement uses the name of the IPAddressPool resource we created previously. + +**metallb-l2-advertisement.yml** +```yaml +apiVersion: metallb.io/v1beta1 +kind: L2Advertisement +metadata: + name: cozystack + namespace: cozy-metallb +spec: + ipAddressPools: + - cozystack +``` +
+ +Apply changes. + +```bash +kubectl create -f metallb-l2-advertisement.yml +``` +{{% /tab %}} +{{% tab name="BGP mode" %}} +First, create a separate BGPPeer resource for **each** peer. + +**metallb-bgp-peer.yml** +```yaml +apiVersion: metallb.io/v1beta2 +kind: BGPPeer +metadata: + name: peer1 + namespace: cozy-metallb +spec: + myASN: 65000 + peerASN: 65001 + peerAddress: 192.168.20.254 +``` +
+ +Next, create a single BGPAdvertisement resource. + +**metallb-bgp-advertisement.yml** +```yaml +apiVersion: metallb.io/v1beta1 +kind: BGPAdvertisement +metadata: + name: cozystack + namespace: cozy-metallb +spec: + ipAddressPools: + - cozystack +``` +
+Apply changes. + +```bash +kubectl create -f metallb-bgp-peer.yml +kubectl create -f metallb-bgp-advertisement.yml +``` +{{% /tab %}} +{{< /tabs >}} +
+ +Now that MetalLB is configured, enable `ingress` in the `tenant-root`: + +```bash +kubectl patch -n tenant-root tenants.apps.cozystack.io root --type=merge -p ' +{"spec":{ + "ingress": true +}}' +``` + +To confirm successful configuration, check the HelmReleases `ingress` and `ingress-nginx-system`: + +```bash +kubectl -n tenant-root get hr ingress ingress-nginx-system +``` + +Example of correct output: +```console +NAME AGE READY STATUS +ingress 47m True Helm upgrade succeeded for release tenant-root/ingress.v3 with chart ingress@1.8.0 +ingress-nginx-system 47m True Helm upgrade succeeded for release tenant-root/ingress-nginx-system.v2 with chart cozy-ingress-nginx@0.35.1 +``` + +Next, check the state of service `root-ingress-controller`: + +```bash +kubectl -n tenant-root get svc root-ingress-controller +``` + +The service should be deployed as `TYPE: LoadBalancer` and have correct external IP: + +```console +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +root-ingress-controller LoadBalancer 10.96.91.83 192.168.100.200 80/TCP,443/TCP 48m +``` + +### 4.b. Node Public IP Setup + +If your cloud provider does not support MetalLB, you can expose ingress controller using external IPs on your nodes. + +If public IPs are attached directly to nodes, specify them. +If public IPs are provided with a 1:1 NAT, as some clouds do, use IP addresses of **external** network interfaces. + +Here we will use `192.168.100.11`, `192.168.100.12`, and `192.168.100.13`. + +First, patch the ConfigMap with IPs to expose: + +```bash +kubectl patch -n cozy-system configmap cozystack --type=merge -p '{ + "data": { + "expose-external-ips": "192.168.100.11,192.168.100.12,192.168.100.13" + } +}' +``` + +Next, enable `ingress` for the root tenant: + +```bash +kubectl patch -n tenant-root tenants.apps.cozystack.io root --type=merge -p '{ + "spec":{ + "ingress": true + } +}' +``` + +Finally, add external IPs to the `externalIPs` list in the Ingress configuration: + +```bash +kubectl patch -n tenant-root ingresses.apps.cozystack.io ingress --type=merge -p '{ + "spec":{ + "externalIPs": [ + "192.168.100.11", + "192.168.100.12", + "192.168.100.13" + ] + } +}' +``` + +After that, your Ingress will be available on the specified IPs. +Check it in the following way: + +```bash +kubectl get svc -n tenant-root root-ingress-controller +``` + +The service should be deployed as `TYPE: ClusterIP` and have the full range of external IPs: + +```console +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +root-ingress-controller ClusterIP 10.96.91.83 192.168.100.11,192.168.100.12,192.168.100.13 80/TCP,443/TCP 48m +``` + +## 5. Finalize Installation + +### 5.1. Setup Root Tenant Services + +Enable `etcd` and `monitoring` for the root tenant: + +```bash +kubectl patch -n tenant-root tenants.apps.cozystack.io root --type=merge -p ' +{"spec":{ + "monitoring": true, + "etcd": true +}}' +``` + +### 5.2. Check the cluster state and composition + +Check the provisioned persistent volumes: + +```bash +kubectl get pvc -n tenant-root +``` + +Example output: + +```console +NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE +data-etcd-0 Bound pvc-4cbd29cc-a29f-453d-b412-451647cd04bf 10Gi RWO local 2m10s +data-etcd-1 Bound pvc-1579f95a-a69d-4a26-bcc2-b15ccdbede0d 10Gi RWO local 115s +data-etcd-2 Bound pvc-907009e5-88bf-4d18-91e7-b56b0dbfb97e 10Gi RWO local 91s +grafana-db-1 Bound pvc-7b3f4e23-228a-46fd-b820-d033ef4679af 10Gi RWO local 2m41s +grafana-db-2 Bound pvc-ac9b72a4-f40e-47e8-ad24-f50d843b55e4 10Gi RWO local 113s +vmselect-cachedir-vmselect-longterm-0 Bound pvc-622fa398-2104-459f-8744-565eee0a13f1 2Gi RWO local 2m21s +vmselect-cachedir-vmselect-longterm-1 Bound pvc-fc9349f5-02b2-4e25-8bef-6cbc5cc6d690 2Gi RWO local 2m21s +vmselect-cachedir-vmselect-shortterm-0 Bound pvc-7acc7ff6-6b9b-4676-bd1f-6867ea7165e2 2Gi RWO local 2m41s +vmselect-cachedir-vmselect-shortterm-1 Bound pvc-e514f12b-f1f6-40ff-9838-a6bda3580eb7 2Gi RWO local 2m40s +vmstorage-db-vmstorage-longterm-0 Bound pvc-e8ac7fc3-df0d-4692-aebf-9f66f72f9fef 10Gi RWO local 2m21s +vmstorage-db-vmstorage-longterm-1 Bound pvc-68b5ceaf-3ed1-4e5a-9568-6b95911c7c3a 10Gi RWO local 2m21s +vmstorage-db-vmstorage-shortterm-0 Bound pvc-cee3a2a4-5680-4880-bc2a-85c14dba9380 10Gi RWO local 2m41s +vmstorage-db-vmstorage-shortterm-1 Bound pvc-d55c235d-cada-4c4a-8299-e5fc3f161789 10Gi RWO local 2m41s +``` + +Check that all pods are running: + +```bash +kubectl get pod -n tenant-root +``` + +example output: +```console +NAME READY STATUS RESTARTS AGE +etcd-0 1/1 Running 0 2m1s +etcd-1 1/1 Running 0 106s +etcd-2 1/1 Running 0 82s +grafana-db-1 1/1 Running 0 119s +grafana-db-2 1/1 Running 0 13s +grafana-deployment-74b5656d6-5dcvn 1/1 Running 0 90s +grafana-deployment-74b5656d6-q5589 1/1 Running 1 (105s ago) 111s +root-ingress-controller-6ccf55bc6d-pg79l 2/2 Running 0 2m27s +root-ingress-controller-6ccf55bc6d-xbs6x 2/2 Running 0 2m29s +root-ingress-defaultbackend-686bcbbd6c-5zbvp 1/1 Running 0 2m29s +vmalert-vmalert-644986d5c-7hvwk 2/2 Running 0 2m30s +vmalertmanager-alertmanager-0 2/2 Running 0 2m32s +vmalertmanager-alertmanager-1 2/2 Running 0 2m31s +vminsert-longterm-75789465f-hc6cz 1/1 Running 0 2m10s +vminsert-longterm-75789465f-m2v4t 1/1 Running 0 2m12s +vminsert-shortterm-78456f8fd9-wlwww 1/1 Running 0 2m29s +vminsert-shortterm-78456f8fd9-xg7cw 1/1 Running 0 2m28s +vmselect-longterm-0 1/1 Running 0 2m12s +vmselect-longterm-1 1/1 Running 0 2m12s +vmselect-shortterm-0 1/1 Running 0 2m31s +vmselect-shortterm-1 1/1 Running 0 2m30s +vmstorage-longterm-0 1/1 Running 0 2m12s +vmstorage-longterm-1 1/1 Running 0 2m12s +vmstorage-shortterm-0 1/1 Running 0 2m32s +vmstorage-shortterm-1 1/1 Running 0 2m31s +``` + +Get the public IP of ingress controller: + +```bash +kubectl get svc -n tenant-root root-ingress-controller +``` + +Example output: + +```console +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +root-ingress-controller LoadBalancer 10.96.16.141 192.168.100.200 80:31632/TCP,443:30113/TCP 3m33s +``` + +### 5.3 Access the Cozystack Dashboard + +If you left this line in the ConfigMap, Cozystack Dashboard must be already available at this moment: + +```yaml +data: + expose-services: "dashboard,api" +``` + +If the initial configmap did not have this line, patch it with the following command: + +```bash +kubectl patch -n cozy-system cm cozystack --type=merge -p '{"data":{ + "expose-services": "dashboard" + }}' +``` + +Open `dashboard.example.org` to access the system dashboard, where `example.org` is your domain specified for `tenant-root`. +There you will see a login window which expects an authentication token. + +Get the authentication token for `tenant-root`: + +```bash +kubectl get secret -n tenant-root tenant-root -o go-template='{{ printf "%s\n" (index .data "token" | base64decode) }}' +``` + +Log in using the token. +Now you can use the dashboard as an administrator. + +Further on, you will be able to: + +- Set up OIDC to authenticate with it instead of tokens. +- Create user tenants and grant users access to them via tokens or OIDC. + +### 5.4 Access metrics in Grafana + +Use `grafana.example.org` to access the system monitoring, where `example.org` is your domain specified for `tenant-root`. +In this example, `grafana.example.org` is located at 192.168.100.200. + +- login: `admin` +- request a password: + + ```bash + kubectl get secret -n tenant-root grafana-admin-password -o go-template='{{ printf "%s\n" (index .data "password" | base64decode) }}' + ``` + +## Next Step + +Continue the Cozystack tutorial by [creating a user tenant]({{% ref "/docs/v0/getting-started/create-tenant" %}}). diff --git a/content/en/docs/v0/getting-started/install-kubernetes.md b/content/en/docs/v0/getting-started/install-kubernetes.md new file mode 100644 index 00000000..992b2555 --- /dev/null +++ b/content/en/docs/v0/getting-started/install-kubernetes.md @@ -0,0 +1,33 @@ +--- +title: "2. Install and Bootstrap a Kubernetes cluster" +linkTitle: "2. Install Kubernetes" +description: "Use Talm CLI to bootstrap a Kubernetes cluster, ready for Cozystack." +weight: 15 +aliases: + - /docs/getting-started/install-kubernetes +--- + +## Objectives + +We start this step of the tutorial, having [three nodes with Talos Linux installed on them]({{% ref "/docs/v0/getting-started/install-talos" %}}). + +As a result of this step, we will have a Kubernetes cluster installed, configured, and ready to install Cozystack. +We will also have a `kubeconfgig` for this cluster, and will have performed basic checks on the cluster. + +## Installing Kubernetes + +Install and bootstrap a Kubernetes cluster using [Talm]({{% ref "/docs/v0/install/kubernetes/talm" %}}), a declarative CLI configuration tool with ready configuration presets for Cozystack. + +{{% alert color="info" %}} +This part of the tutorial is being reworked. +It will include simplified instructions for Talm installation, without all the extra options and corner cases, included in the main Talm guide. +{{% /alert %}} + + +## Next Step + +Continue the Cozystack tutorial by [installing and configuring Cozystack]({{% ref "/docs/v0/getting-started/install-cozystack" %}}). + +Extra tasks: + +- Check out [github.com/cozystack/talm](https://github.com/cozystack/talm) and give it a star! diff --git a/content/en/docs/v0/getting-started/install-talos.md b/content/en/docs/v0/getting-started/install-talos.md new file mode 100644 index 00000000..fcf1b19d --- /dev/null +++ b/content/en/docs/v0/getting-started/install-talos.md @@ -0,0 +1,99 @@ +--- +title: "1. Install Talos Linux" +linkTitle: "1. Install Talos" +description: "Install Talos Linux on any machine using cozystack/boot-to-talos." +weight: 10 +aliases: + - /docs/v0/getting-started/first-deployment + - /docs/v0/getting-started/deploy-cluster + - /docs/getting-started/install-talos + - /docs/getting-started/first-deployment + - /docs/getting-started/deploy-cluster +--- + +## Before you begin + +Make sure that you have nodes (bare-metal servers or VMs) that fit the +[hardware requirements]({{% ref "/docs/v0/getting-started/requirements" %}}). + +## Objectives + +On this step of the tutorial you will install Talos Linux on bare-metal servers or VMs running some other Linux distribution. + +The tutorial is using `boot-to-talos`, a simple-to-use CLI app made by Cozystack team for users and teams adopting Cozystack. +There are multiple ways to [install Talos Linux for Cozystack]({{% ref "/docs/v0/install/talos" %}}), not used here and covered in separate guides. + +## Installation + +### 1. Install `boot-to-talos` + +Install `boot-to-talos` using the installer script: + +```bash +curl -sSL https://github.com/cozystack/boot-to-talos/raw/refs/heads/main/hack/install.sh | sh -s +``` + +### 2. Run to install Talos + +Run `boot-to-talos` and provide the configuration values. +Make sure to use Cozystack's own Talos build, found at [ghcr.io/cozystack/cozystack/talos](https://github.com/cozystack/cozystack/pkgs/container/cozystack%2Ftalos). + +```console +$ boot-to-talos +Target disk [/dev/sda]: +Talos installer image [ghcr.io/cozystack/cozystack/talos:v1.10.5]: +Add networking configuration? [yes]: +Interface [eth0]: +IP address [10.0.2.15]: +Netmask [255.255.255.0]: +Gateway (or 'none') [10.0.2.2]: +Configure serial console? (or 'no') [ttyS0]: + +Summary: + Image: ghcr.io/cozystack/cozystack/talos:v1.10.5 + Disk: /dev/sda + Extra kernel args: ip=10.0.2.15::10.0.2.2:255.255.255.0::eth0::::: console=ttyS0 + +WARNING: ALL DATA ON /dev/sda WILL BE ERASED! + +Continue? [yes]: + +2025/08/03 00:11:03 created temporary directory /tmp/installer-3221603450 +2025/08/03 00:11:03 pulling image ghcr.io/cozystack/cozystack/talos:v1.10.5 +2025/08/03 00:11:03 extracting image layers +2025/08/03 00:11:07 creating raw disk /tmp/installer-3221603450/image.raw (2 GiB) +2025/08/03 00:11:07 attached /tmp/installer-3221603450/image.raw to /dev/loop0 +2025/08/03 00:11:07 starting Talos installer +2025/08/03 00:11:07 running Talos installer v1.10.5 +2025/08/03 00:11:07 WARNING: config validation: +2025/08/03 00:11:07 use "worker" instead of "" for machine type +2025/08/03 00:11:07 created EFI (C12A7328-F81F-11D2-BA4B-00A0C93EC93B) size 104857600 bytes +2025/08/03 00:11:07 created BIOS (21686148-6449-6E6F-744E-656564454649) size 1048576 bytes +2025/08/03 00:11:07 created BOOT (0FC63DAF-8483-4772-8E79-3D69D8477DE4) size 1048576000 bytes +2025/08/03 00:11:07 created META (0FC63DAF-8483-4772-8E79-3D69D8477DE4) size 1048576 bytes +2025/08/03 00:11:07 formatting the partition "/dev/loop0p1" as "vfat" with label "EFI" +2025/08/03 00:11:07 formatting the partition "/dev/loop0p2" as "zeroes" with label "BIOS" +2025/08/03 00:11:07 formatting the partition "/dev/loop0p3" as "xfs" with label "BOOT" +2025/08/03 00:11:07 formatting the partition "/dev/loop0p4" as "zeroes" with label "META" +2025/08/03 00:11:07 copying from io reader to /boot/A/vmlinuz +2025/08/03 00:11:07 copying from io reader to /boot/A/initramfs.xz +2025/08/03 00:11:08 writing /boot/grub/grub.cfg to disk +2025/08/03 00:11:08 executing: grub-install --boot-directory=/boot --removable --efi-directory=/boot/EFI /dev/loop0 +2025/08/03 00:11:08 installation of v1.10.5 complete +2025/08/03 00:11:08 Talos installer finished successfully +2025/08/03 00:11:08 remounting all filesystems read-only +2025/08/03 00:11:08 copy /tmp/installer-3221603450/image.raw → /dev/sda +2025/08/03 00:11:19 installation image copied to /dev/sda +2025/08/03 00:11:19 rebooting system +``` + +## Next Step + +Continue the Cozystack tutorial by [installing and bootstrapping a Kubernetes cluster using Talm]({{% ref "/docs/v0/getting-started/install-kubernetes" %}}). + +Extra tasks: + +- Read the [Talos Linux overview]({{% ref "/docs/v0/guides/talos" %}}) to learn why Talos Linux is the optimal OS choice for Cozystack + and what it brings to the platform. +- Learn more about [`boot-to-talos`]({{% ref "/docs/v0/install/talos/boot-to-talos#about-the-application" %}}). +- Check out [github.com/cozystack/boot-to-talos](https://github.com/cozystack/boot-to-talos) and give it a star! \ No newline at end of file diff --git a/content/en/docs/v0/getting-started/requirements.md b/content/en/docs/v0/getting-started/requirements.md new file mode 100644 index 00000000..0dec389a --- /dev/null +++ b/content/en/docs/v0/getting-started/requirements.md @@ -0,0 +1,54 @@ +--- +title: "Requirements and Toolchain" +linkTitle: "Requirements" +description: "Prepare infrastructure and install the toolchain." +weight: 1 +aliases: + - /docs/getting-started/requirements +--- + +## Toolchain + +You will need the following tools installed on your workstation: + +- [talosctl](https://www.talos.dev/v1.10/talos-guides/install/talosctl/), the command line client for Talos Linux. +- [kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl), the command line client for Kubernetes. +- [Talm](https://github.com/cozystack/talm?tab=readme-ov-file#installation), Cozystack's own configuration manager for Talos Linux:
+ + ```bash + curl -sSL https://github.com/cozystack/talm/raw/refs/heads/main/hack/install.sh | sh -s + ``` + +## Hardware Requirements + +To run this tutorial, you will need the following setup: + +**Cluster nodes:** three bare-metal servers or virtual machines. Hardware requirements depend on your usage scenario: + +{{< include "docs/v0/install/_include/hardware-config-tabs.md" >}} + +**Storage:** +- **Primary Disk**: Used for Talos Linux, etcd storage, and downloaded images. Low latency is required. +- **Secondary Disk**: Used for user application data (ZFS pool). + +**OS:** +- Any Linux distribution, for example, Ubuntu.
+- There are [other installation methods]({{% ref "/docs/v0/install/talos" %}}) which require either any Linux or no OS at all to start. + +**BIOS/UEFI Settings:** +- **Secure Boot must be disabled.**
+ Secure Boot is currently not supported and must be disabled in the BIOS/UEFI settings before installation. + +**Networking:** +- Routable FQDN domain.
If you don't have one, you can use [nip.io](https://nip.io/) with dash notation +- Located in the same L2 network segment. +- Anti-spoofing disabled.
+ It is required for MetalLB, the load balancer used in Cozystack. + +**Virtual machines:** +- CPU passthrough enabled and CPU model set to `host` in the hypervisor settings. +- Nested virtualization enabled.
+ Required for virtual machines and tenant kubernetes clusters. + +For a more detailed explanation of hardware requirements for different setups, refer to the [Hardware Requirements]({{% ref "/docs/v0/install/hardware-requirements" %}}) + diff --git a/content/en/docs/v0/guides/_index.md b/content/en/docs/v0/guides/_index.md new file mode 100644 index 00000000..18f36092 --- /dev/null +++ b/content/en/docs/v0/guides/_index.md @@ -0,0 +1,8 @@ +--- +title: "Learn Cozystack" +linkTitle: "Learn Cozystack" +description: "Learn to use Cozystack as a cluster administrator and tenant owner." +weight: 20 +aliases: + - /docs/guides +--- diff --git a/content/en/docs/v0/guides/concepts.md b/content/en/docs/v0/guides/concepts.md new file mode 100644 index 00000000..e21d0ca0 --- /dev/null +++ b/content/en/docs/v0/guides/concepts.md @@ -0,0 +1,83 @@ +--- +title: Key Concepts +linkTitle: Key Concepts +description: "Learn about the key concepts of Cozystack, such as management cluster, tenants, and bundles." +weight: 10 +aliases: + - /docs/v0/concepts + - /docs/guides/concepts + - /docs/concepts +--- + +Cozystack is an open-source, Kubernetes-native platform that turns bare-metal or virtual infrastructure into a fully featured, multi-tenant cloud. +At its core are a few foundational building blocks: + +- the **management cluster** that runs the platform itself; +- **tenants** that provide strict, hierarchical isolation; +- **tenant clusters** that give users their own Kubernetes control planes; +- rich catalog of **managed applications** and virtual machines; +- **bundles** that assemble these components into a turnkey stack. + +Understanding how these concepts fit together will help you plan, deploy, and operate Cozystack effectively, +whether you are building an internal developer platform or a public cloud service. + +## Management Cluster + +Cozystack is a system of services working on a Kubernetes cluster, usually deployed on top of Talos Linux on bare metal or virtual machines. +This Kubernetes cluster is called the **management cluster** to highlight its role and distinguish it from tenant Kubernetes clusters. +Only Cozystack administrators have full access to the management cluster. + +The management cluster is used to deploy preconfigured applications, such as tenants, system components, managed apps, VMs, and tenant clusters. +Cozystack users can interact with the management cluster through dashboard and API, and deploy managed applications. +However, they don't have administrative rights and may not deploy custom applications in the management cluster, but can use tenant clusters instead. + +## Tenant + +A **tenant** in Cozystack is the primary unit of isolation and security, analogous to a Kubernetes namespace but with enhanced scope. +Each tenant represents an isolated environment with its own resources, networking, and RBAC (role-based access control). +Some cloud providers use the term "projects" for a similar entity. + +When Cozystack is used to build a private cloud and an internal development platform, a tenant usually belongs to a team or subteam. +In a hosting business, where Cozystack is the foundation of a public cloud, a tenant can belong to a customer. + +Read more: [Tenant System]({{% ref "/docs/v0/guides/tenants" %}}). + +## Tenant Cluster + +Users can deploy separate Kubernetes clusters in their own tenants. +These are not namespaces of the management cluster, but complete Kubernetes-in-Kubernetes clusters. + +Tenant clusters are what many cloud providers call "managed Kubernetes". +They are used as development, testing, and production environments. + +Read more: [tenant Kubernetes clusters]({{% ref "/docs/v0/kubernetes" %}}). + +## Managed Applications + +Cozystack comes with a catalog of **managed applications** (services) that can be deployed on the platform with minimal effort. +These include relational databases (PostgreSQL, MySQL/MariaDB), NoSQL/queues (Redis, NATS, Kafka, RabbitMQ), HTTP cache, load balancer, and others. + +Tenants, tenant Kubernetes clusters, and VMs are also managed applications in terms of Cozystack. +They are created with the same user workflow and are managed with Helm and Flux, just as other applications. + +Read more: [managed applications]({{% ref "/docs/v0/applications" %}}). + +## Cozystack API + +Instead of a proprietary API or UI-only management, Cozystack exposes its functionality through +[Kubernetes Custom Resources](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/) +and the standard Kubernetes API, accessible via REST API, `kubectl` client, and the Cozystack dashboard. + +This approach combines well with role-based access control. +Non-administrative users can use `kubectl` to access the management cluster, +but their kubeconfig will authorize them only to create custom resources in their tenants. + +Read more: [Cozystack API]({{% ref "/docs/v0/cozystack-api" %}}). + +## Bundles + +Bundles are pre-defined combinations of Cozystack components. +Each bundle is tested, versioned, and guaranteed to work as a unit. +They simplify installation, reduce the risk of misconfiguration, and make it easier to choose the right set of features for your deployment. + +Read more: [Bundles]({{% ref "/docs/v0/operations/configuration/bundles" %}}). diff --git a/content/en/docs/v0/guides/platform-stack/_index.md b/content/en/docs/v0/guides/platform-stack/_index.md new file mode 100644 index 00000000..da947728 --- /dev/null +++ b/content/en/docs/v0/guides/platform-stack/_index.md @@ -0,0 +1,328 @@ +--- +title: "Cozystack Architecture and Platform Stack" +linkTitle: "Platform Stack" +description: "Learn of the core components that power the functionality and flexibility of Cozystack" +weight: 15 +aliases: + - /docs/guides/platform-stack +--- + +This article explains Cozystack composition through its four layers, and shows the role and value of each component in the platform stack. + +## Overview + +To understand Cozystack composition, it's helpful to view it as sub-systems, layered from hardware to user-facing: + +![Cozystack Architecture Layers](cozystack-layers.png) + +## Layer 1: OS and Hardware + +This is a foundation layer, providing cluster functionality on bare metal. +It consists of Talos Linux and a Kubernetes cluster installed on Talos. + +### Talos Linux + +Talos Linux is a Linux distribution made and optimized for a single purpose: to run Kubernetes. +It provides the foundation for reliability and security in a Cozystack cluster. +Its use allows Cozystack to limit the technology stack, improving stability and security. + +Read more about it in the [Talos Linux]({{% ref "/docs/v0/guides/talos" %}}) section. + +### Kubernetes + +Kubernetes has already become a kind of de facto standard for managing server workloads. + +One of the key features of Kubernetes is a convenient and unified API that is understandable to everyone (everything is YAML). Also, the best software design patterns that provide continuous recovery in any situation (reconciliation method) and efficient scaling to a large number of servers. + +This fully solves the integration problem, since all existing virtualization platforms have an outdated and rather complex APIs that cannot be extended without modifying the source code. As a result, there is always a need to create your own custom solutions, which requires additional effort. + +## Layer 2: Infrastructure Services + +Second layer contains the key components which perform major roles such as storage, networking, and virtualization. +Adding these components to the base Kubernetes cluster makes it much more functional. + +### Flux CD + +FluxCD provides a simple and uniform interface for both installing all platform components and managing their lifecycle. +Cozystack developers have adopted FluxCD as the core element of the platform, believing it sets a new industry standard for platform engineering. + +### KubeVirt + +KubeVirt brings virtualization capability to Cozystack. +It enables creating virtual machines and worker nodes for tenant Kubernetes clusters. + +KubeVirt is a project started by global industry leaders with a common vision to unify Kubernetes and a desire to introduce it to the world of virtualization. +It extends the capabilities of Kubernetes by providing convenient abstractions for launching and managing virtual machines, +as well the all related entities such as snapshots, presets, virtual volumes, and more. + +At the moment, the KubeVirt project is being jointly developed by such world-famous companies as RedHat, NVIDIA, ARM. + +### DRBD and LINSTOR + +DRBD and LINSTOR are the foundation of replicated storage in Cozystack. + +DRBD is the fastest replication block storage running right in the Linux kernel. +When DRBD only deals with data replication, time-tested technologies such as LVM or ZFS are used to securely store the data. +The DRBD kernel module is included in the mainline Linux kernel and has been used to build fault-tolerant systems for over a decade. + +DRBD is managed using LINSTOR, a system integrated with Kubernetes. +LINSTOR is a management layer for creating virtual volumes based on DRBD. +It enables managing hundreds or thousands of virtual volumes in the Cozystack cluster. + +### Kube-OVN + +The networking functionality in Cozystack is based on Kube-OVN and Cilium. + +OVN is a free implementation of virtual network fabric for Kubernetes and OpenStack based on the Open vSwitch technology. +With Kube-OVN, you get a robust and functional virtual network that ensures reliable isolation between tenants and provides floating addresses for virtual machines. + +In the future, this will enable seamless integration with other clusters and customer network services. + +### Cilium + +Utilizing Cilium in conjunction with OVN enables the most efficient and flexible network policies, +along with a productive services network in Kubernetes, leveraging an offloaded Linux network stack featuring the cutting-edge eBPF technology. + +Cilium is a highly promising project, widely adopted and supported by numerous cloud providers worldwide. + +## Layer 3: Platform Services + +These are components that provide the user-side functionality to Cozystack and its managed applications. + +### OpenAPI UI + +OpenAPI UI provides the main web interface for deploying and managing applications in Cozystack. +It serves as the primary dashboard that allows users to interact with the Cozystack API through a user-friendly interface. + +The interface is built on top of the Cozystack OpenAPI specifications, automatically generating forms and documentation +for all available managed applications. Users can deploy databases, Kubernetes clusters, virtual machines, and other services +directly through the dashboard without needing to write YAML manifests manually. + +The dashboard also integrates with OIDC authentication via Keycloak, providing secure single sign-on access to the platform. + +### Kamaji + +Cozystack uses Kamaji Control Plane to deploy tenant Kubernetes clusters. +Kamaji provides a straightforward and convenient method for launching all the necessary Kubernetes control-plane in containers. +Worker nodes are then connected to these control planes and handle user workloads. + +The approach developed by the Kamaji project is modeled after the design of modern clouds and ensures security by design +where end users do not have any control plane nodes for their clusters. + +### Grafana + +Grafana with Grafana Loki and the OnCall extension provides a single interface to Observability. +It allows you to conveniently view charts, logs and manage alerts for your infrastructure and applications. + +### Victoria Metrics + +Victoria Metrics allows you to most efficiently collect, store and process metrics in the Open Metrics format, +doing it more efficiently than Prometheus in the same setup. + +### MetalLB + +MetalLB is the default load balancer for Kubernetes; +with its help, your services can obtain public addresses that are accessible not only from inside, +but also from outside your cluster network. + +### HAProxy + +HAProxy is an advanced and widely known TCP balancer. +It continuously checks service availability and carefully balances production traffic between them in real time. + +See the application reference: [TCP Balancer]({{% ref "/docs/v0/networking/tcp-balancer" %}}) + +### SeaweedFS + +SeaweedFS is a simple and highly scalable distributed file system designed for two main objectives: +to store billions of files and to serve the files faster. It allows access O(1), usually just one disk read operation. + +### Kubernetes Operators + +Cozystack includes a set of Kubernetes operators, used for managing system services and managed applications. + +## Layer 4: User-side services + +Cozystack is shipped with a number of user-side applications, pre-configured for reliability and resource efficiency, +coming with monitoring and observability included: + +- [Tenant Kubernetes clusters]({{% ref "/docs/v0/kubernetes" %}}), fully-functional managed Kubernetes clusters for development and production workloads. +- [Managed applications]({{% ref "/docs/v0/applications" %}}), such as databases and queues. +- [Virtual machines]({{% ref "/docs/v0/virtualization" %}}), supporting Linux and Windows OS. +- [Networking appliances]({{% ref "/docs/v0/networking" %}}), including VPN, HTTP cache, TCP load balancer, and virtual routers. + +### Managed Kubernetes + +Cozystack deploys and manages tenant Kubernetes clusters as standalone applications within each tenant’s isolated environment. +These clusters are fully separate from the root management cluster and are intended for deploying tenant-specific or customer-developed applications. + +Deployment involves the following components: + +- **Kamaji Control Plane**: [Kamaji](https://kamaji.clastix.io/) is an open-source project that facilitates the deployment + of Kubernetes control planes as pods within a root cluster. + Each control plane pod includes essential components like `kube-apiserver`, `controller-manager`, and `scheduler`, + allowing for efficient multi-tenancy and resource utilization. + +- **Etcd Cluster**: A dedicated etcd cluster is deployed using Ænix's [aenix-io/etcd-operator](https://github.com/aenix-io/etcd-operator). + It provides reliable and scalable key-value storage for the Kubernetes control plane. + +- **Worker Nodes**: Virtual Machines are provisioned to serve as worker nodes. + These nodes are configured to join the tenant Kubernetes cluster, enabling the deployment and management of workloads. + +This architecture ensures isolated, scalable, and efficient Kubernetes environments tailored for each tenant. + +- Supported version: Kubernetes v1.32.4 +- Operator: [aenix-io/etcd-operator](https://github.com/aenix-io/etcd-operator) v0.4.2 +- Managed application reference: [Kubernetes]({{% ref "/docs/v0/kubernetes" %}}) + + +### Virtual Machines + +In Cozystack, virtualization features are powered by [KubeVirt]({{% ref "/docs/v0/guides/platform-stack#kubevirt" %}}). +Cozystack has a number of applications providing virtualization functionality: + +- [Simple virtual machine]({{% ref "/docs/v0/virtualization/virtual-machine" %}}). +- [Virtual machine instance]({{% ref "/docs/v0/virtualization/vm-instance" %}}) with more advanced configuration. +- [Virtual machine disk]({{% ref "/docs/v0/virtualization/vm-disk" %}}), offering a choice of image sources. +- [VM image (Golden Disk)]({{% ref "/docs/v0/virtualization/vm-image" %}}), which makes OS images locally available, improving VM creation time and saving network traffic. + + +### ClickHouse + +ClickHouse is an open source high-performance and column-oriented SQL database management system (DBMS). +It is used for online analytical processing (OLAP). +In the Cozystack platform, we use the Altinity operator to provide ClickHouse. + +- Supported version: 24.9.2.42 +- Kubernetes operator: [Altinity/clickhouse-operator](https://github.com/Altinity/clickhouse-operator) v0.25.0 +- Website: [clickhouse.com](https://clickhouse.com/) +- Managed application reference: [ClickHouse]({{% ref "/docs/v0/applications/clickhouse" %}}) + + +### FerretDB + +FerretDB is an open source MongoDB alternative. +It translates MongoDB wire protocol queries to SQL and can be used as a direct replacement for MongoDB 5.0+. +In Cozystack, it is backed by PostgreSQL. + +- Supported version: FerretDB 1.24.0. +- Website: [ferretdb.io](https://www.ferretdb.io/) +- Managed application reference: [FerretDB]({{% ref "/docs/v0/applications/ferretdb" %}}) + + +### Kafka + +Apache Kafka is an open-source distributed event streaming platform. +It aims to provide a unified, high-throughput, low-latency platform for handling real-time data feeds. +Cozystack is using [Strimzi](https://github.com/cozystack/cozystack/blob/main/packages/system/kafka-operator/charts/strimzi-kafka-operator/README.md) +to run an Apache Kafka cluster on Kubernetes in various deployment configurations. + +- Supported version: Apache Kafka 3.9.0 +- Kubernetes operator: [strimzi/strimzi-kafka-operator](https://github.com/strimzi/strimzi-kafka-operator) v0.45.0 +- Website: [kafka.apache.org](https://kafka.apache.org/) +- Managed application reference: [Kafka]({{% ref "/docs/v0/applications/kafka" %}}) + + +### MySQL (MariaDB) + +MySQL is a widely used and well-known relational database. +The implementation in the platform provides the ability to create a replicated MariaDB cluster. +This cluster is managed using the increasingly popular mariadb-operator. + +For each database, there is an interface for configuring users, their permissions, +as well as schedules for creating backups using [Restic](https://restic.net/), one of the most efficient tools currently available. + +- Supported version: MariaDB 11.4.3 +- Kubernetes operator: [mariadb-operator/mariadb-operator](https://github.com/mariadb-operator/mariadb-operator) v0.18.0 +- Website: [mariadb.com](https://mariadb.com/) +- Managed application reference: [MySQL]({{% ref "/docs/v0/applications/mysql" %}}) + + +### NATS Messaging + +NATS is an open-source, simple, secure, and high performance messaging system. +It provides a data layer for cloud native applications, IoT messaging, and microservices architectures. + +- Supported version: NATS 2.10.17 +- Website: [nats.io](https://nats.io/) +- Managed application reference: [NATS]({{% ref "/docs/v0/applications/nats" %}}) + + +### PostgreSQL + +Nowadays, PostgreSQL is the most popular relational database. +Its platform-side implementation involves a self-healing replicated cluster. +This is managed with the increasingly popular CloudNativePG operator within the community. + + +- Supported version: PostgreSQL 17 +- Kubernetes operator: [cloudnative-pg/cloudnative-pg](https://github.com/cloudnative-pg/cloudnative-pg) v1.24.0 +- Website: [cloudnative-pg.io](https://cloudnative-pg.io/) +- Managed application reference: [PostgreSQL]({{% ref "/docs/v0/applications/postgres" %}}) + + +### RabbitMQ + +RabbitMQ is a widely known message broker. +The platform-side implementation allows you to create failover clusters managed by the official RabbitMQ operator. + +- Supported version: RabbitMQ 4.1.0+ (latest stable version) +- Kubernetes operator: [rabbitmq/cluster-operator](https://github.com/rabbitmq/cluster-operator) v1.10.0 +- Website: [rabbitmq.com](https://www.rabbitmq.com/) +- Managed application reference: [RabbitMQ]({{% ref "/docs/v0/applications/rabbitmq" %}}) + + +### Redis + +Redis is the most commonly used key-value in-memory data store. +It is most often used as a cache, as storage for user sessions, or as a message broker. +The platform-side implementation involves a replicated failover Redis cluster with Sentinel. +This is managed by the spotahome/redis-operator. + +- Supported version: Redis 6.2.6+ (based on `alpine`) +- Kubernetes operator: [spotahome/redis-operator](https://github.com/spotahome/redis-operator) v1.3.0-rc1 +- Website: [redis.io](https://redis.io/) +- Managed application reference: [Redis]({{% ref "/docs/v0/applications/redis" %}}) + + +### VPN Service + +The VPN Service is powered by the Outline Server, an advanced and user-friendly VPN solution. +It is internally known as "Shadowbox," which simplifies the process of setting up and sharing Shadowsocks servers. +It operates by launching Shadowsocks instances on demand. + +The Shadowsocks protocol uses symmetric encryption algorithms. +This enables fast internet access while complicating traffic analysis and blocking through DPI (Deep Packet Inspection). + +- Supported version: Outline Server, v1.12.3+ (stable) +- Website: [getoutline.org](https://getoutline.org/) +- Managed application reference: [VPN]({{% ref "/docs/v0/networking/vpn" %}}) + +### HTTP Cache + +Nginx-based HTTP caching service helps protect your application from overload using the powerful Nginx. +Nginx is traditionally used to build CDNs and caching servers. + +The platform-side implementation features efficient caching without using a clustered file system. +It also supports horizontal scaling without duplicating data on multiple servers. + +- Included versions: Nginx 1.25.3, HAProxy latest stable. +- Website: [nginx.org](https://nginx.org/) +- Managed application reference: [HTTP Cache]({{% ref "/docs/v0/networking/http-cache" %}}) + + +### TCP Balancer + +The Managed TCP Load Balancer service provides deployment and management of load balancers. +It efficiently distributes incoming TCP traffic across multiple backend servers, ensuring high availability and optimal resource utilization. + +TCP Load Balancer service is powered by [HAProxy](https://www.haproxy.org/), a mature and reliable TCP load balancer. + +- Managed application reference: [TCP balancer]({{% ref "/docs/v0/networking/tcp-balancer" %}}) +- Docs: [HAProxy Documentation](https://www.haproxy.com/documentation/) + + +### Tenants + +Tenants in Cozystack are implemented as managed applications. +Learn more about tenants in [Tenant System]({{% ref "/docs/v0/guides/tenants" %}}). diff --git a/content/en/docs/guides/platform-stack/cozystack-layers.png b/content/en/docs/v0/guides/platform-stack/cozystack-layers.png similarity index 100% rename from content/en/docs/guides/platform-stack/cozystack-layers.png rename to content/en/docs/v0/guides/platform-stack/cozystack-layers.png diff --git a/content/en/docs/v0/guides/resource-management/_index.md b/content/en/docs/v0/guides/resource-management/_index.md new file mode 100644 index 00000000..96c6e003 --- /dev/null +++ b/content/en/docs/v0/guides/resource-management/_index.md @@ -0,0 +1,183 @@ +--- +title: Resource Management in Cozystack +linkTitle: Resource Management +description: > + How CPU, memory, and presets work across VMs, Kubernetes clusters, and managed + workloads in Cozystack; and how to reconfigure resources via the UI, CLI, or API. +weight: 25 +aliases: + - /docs/guides/resource-management +--- + +## Introduction + +Cozystack runs everything, including system components and user-side applications, as services in a Kubernetes cluster, +having a finite pool of CPU and memory. + +This guide explains how users can configure available resources for an application, and how Cozystack handles this configuration. + + +## Service Resource Configuration + +Resources, available to each service (managed application, VM, or tenant cluster), are defined in its configuration file. +There are two ways to specify CPU time and memory available for a service in Cozystack: + +- Using resource presets. +- Using explicit resource configurations. + + +### Using Resource Presets + +Cozystack provides a number of named resource presets. +Each user-side service, including managed applications, tenant Kubernetes clusters and virtual machines, has a default preset value. + +When deploying a service, a preset is defined in `resourcesPreset` configuration variable, for example: + +```yaml +## @param resourcesPreset Default sizing preset used when `resources` is omitted. +## Allowed values: none, nano, micro, small, medium, large, xlarge, 2xlarge. +resourcesPreset: "small" +``` + +| Preset name | CPU | memory | +|-------------|--------|---------| +| `nano` | `100m` | `128Mi` | +| `micro` | `250m` | `256Mi` | +| `small` | `500m` | `512Mi` | +| `medium` | `500m` | `1Gi` | +| `large` | `1` | `2Gi` | +| `xlarge` | `2` | `4Gi` | +| `2xlarge` | `4` | `8Gi` | + +In CPU, the `m` unit is 1/1000th of a full CPU time. + +Cozystack presets are defined in an internal library +[`cozy-lib`](https://github.com/cozystack/cozystack/tree/main/packages/library/cozy-lib). + + +### Defining Resources Explicitly + +A service configuration can define available CPU and memory explicitly, using the `resources` variable. +Cozystack has a simple resource configuration format for `cpu` and `memory`: + +```yaml +## @param resources Explicit CPU and memory configuration for each ClickHouse replica. +## When left empty, the preset defined in `resourcesPreset` is applied. +resources: + cpu: 1 + memory: 2Gi +``` + +If both `resources` and `resourcesPreset` are defined, `resource` is used and `resourcsePreset` is ignored. + + +## Resource Requests and Limits + +Everything in Cozystack runs as Kubernetes services, and Kubernetes uses two important mechanisms in resource management: +requests and limits. +First, let's understand what they are. + +- **Resource request** defines the amount of resource that will be reserved for a service and always provided. + If there is not enough resource to fulfill a request, a service will not run at all. + +- **Resource limit** defines how much a service can use from a free resource pool. + +{{% alert color="info" %}} +For a detailed explanation of how requests and limits work in Kubernetes, read [Resource Management for Pods and Containers]( +https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/). +{{% /alert %}} + +CPU time is easily shared between multiple services with uneven CPU load. +For this reason, it's a common practice to set low CPU requests with much higher limits. +For services that are CPU-intensive, the optimal ratio can be 1:2 or 1:4. +For less CPU-intensive services, as much as 1:10 can provide great resource efficiency and still be enough. + +On the other hand, memory is a resource that, once given to a service, usually can't be taken back without OOM-killing the service. +For this reason, it's usually best to set memory requests at a level that guarantees service operation. + + +## CPU Allocation Ratio + +Cozystack has a single-point-of-truth configuration variable `cpu-allocation-ratio`. +It defines the ratio between CPU requests and limits for all services. + +CPU allocation ratio is defined in the main Cozystack config: + +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: cozystack + namespace: cozy-system +data: + bundle-name: "paas-full" + # ... + cpu-allocation-ratio: 4 +``` + +By default, `cpu-allocation-ratio` equals 10, which means that CPU requests will be 1/10th of CPU limits. +Cozystack borrows this default value from [KubeVirt](https://kubevirt.io/user-guide/compute/resources_requests_and_limits/#cpu). + +### How Cozystack Derives CPU Requests and Limits + +```yaml +## @param resources Explicit CPU and memory configuration for each ClickHouse replica. +## When left empty, the preset defined in `resourcesPreset` is applied. +resources: + cpu: 1 + ## actual cpu limit: 1 + ## actual cpu request: (cpu / cpu-allocation-ratio) + memory: 2Gi +``` + +### Example 1, default setting: `cpu-allocation-ratio: 10` + +| Preset name | `resources.cpu` | actual CPU request | actual CPU limit | +|-------------|-----------------|--------------------|------------------| +| `nano` | `100m` | `10m` | `100m` | +| `micro` | `250m` | `25m` | `250m` | +| `small` | `500m` | `50m` | `500m` | +| `medium` | `500m` | `50m` | `500m` | +| `large` | `1` | `100m` | `1` | +| `xlarge` | `2` | `200m` | `2` | +| `2xlarge` | `4` | `400m` | `4` | + +### Example 2: `cpu-allocation-ratio: 4` + +| Preset name | `resources.cpu` | actual CPU request | actual CPU limit | +|-------------|-----------------|--------------------|------------------| +| `nano` | `100m` | `25m` | `100m` | +| `micro` | `250m` | `63m` | `250m` | +| `small` | `500m` | `125m` | `500m` | +| `medium` | `500m` | `125m` | `500m` | +| `large` | `1` | `250m` | `1` | +| `xlarge` | `2` | `500m` | `2` | +| `2xlarge` | `4` | `1` | `4` | + +## Configuration Format Before v0.31.0 + +Before Cozystack v0.31.0, service configuration allowed users to define requests and limits explicitly. +After updating Cozystack from earlier versions to v0.31.0 or later, such services will require no immediate action. + +When users update such applications, they need to change the configuration to the new form. + +```yaml +resources: + requests: + cpu: 250m + memory: 512Mi + limits: + cpu: 1 + memory: 2Gi +``` + +There were several reasons for this change. + +Managed applications assume that the user doesn't need in-depth knowledge of Kubernetes. +However, explicit request/limit configuration was a “leaky abstraction”, confusing users and leading to misconfigurations. + +For hosting companies that run public clouds on Cozystack, a unified ratio across the cloud is crucial. +This approach helps ensure a stable level of service and simplifies billing. + +Users who deploy their own applications to tenant Kubernetes clusters still have the freedom to define precise resource requests and limits. + diff --git a/content/en/docs/v0/guides/talos.md b/content/en/docs/v0/guides/talos.md new file mode 100644 index 00000000..9161e362 --- /dev/null +++ b/content/en/docs/v0/guides/talos.md @@ -0,0 +1,47 @@ +--- +title: "Talos Linux in Cozystack" +linkTitle: "Talos Linux" +description: "Learn why Cozystack uses Talos Linux as the foundation for its Kubernetes clusters. Discover the benefits of Talos Linux, including reliability, scalability, and Kubernetes optimization." +weight: 30 +aliases: + - /docs/guides/talos +--- + +## Why Cozystack is Using Talos Linux + +Talos Linux is a Linux distribution made and optimized for one job: to run Kubernetes. +It is the foundation of reliability and security in Cozystack cluster. +Selecting it enables Cozystack to strictly limit the technology stack and make the system stable as a rock. + +Let's see why Cozystack developers chose Talos as the foundation of a Kubernetes cluster and what it brings to Cozystack. + +### Reliable and Straightforward + +Talos Linux is an immutable OS that's managed through an API. +It has no moving parts, no traditional package manager, no file structure, and no ability to run anything except Kubernetes containers. + +The base layer of the platform includes the latest version of the kernel, all the necessary kernel modules, +container runtime and a Kubernetes-like API for interacting with the system. +Updating the system is done by rewriting the Talos image "as is" entirely onto the hard drive. + + +### Scalable and Reproducible + +Talos Linux implements the infrastructure-as-code principle. +Talos is configured via an external, declarative manifest that can be version‑controlled in Git and +reused for all operations such as re-deploying the same cluster, adding extra nodes, and such. + +When you discover an optimal configuration or solve an operational problem, +you apply it once in the manifest and instantly propagate the change to any number of nodes, making scale‑out trivial. +All nodes automatically converge to exactly the same configuration, eliminating configuration drift and making troubleshooting deterministic. + +### Tailored for Kubernetes + +Talos contains built‑in logic to bootstrap and maintain a Kubernetes cluster, reducing the cognitive load of the first cluster installation. +It provides full lifecycle management of both the operating system and Kubernetes itself through a single `talosctl` command set, +covering upgrades, node replacement, and disaster recovery. + +### Fine‑tuned for Cozystack + +Cozystack ships a curated Talos build that already includes the extensions and kernel modules required by its storage, +networking, and observability stack, so clusters come up production‑ready out of the box. \ No newline at end of file diff --git a/content/en/docs/v0/guides/tenants/_index.md b/content/en/docs/v0/guides/tenants/_index.md new file mode 100644 index 00000000..73375bf6 --- /dev/null +++ b/content/en/docs/v0/guides/tenants/_index.md @@ -0,0 +1,86 @@ +--- +title: Tenant System +description: "Learn about tenants, the way Cozystack helps manage resources and improve security." +weight: 17 +aliases: + - /docs/guides/tenants +--- + +## Introduction + +A **tenant** in Cozystack is the primary unit of isolation and security, analogous to a Kubernetes namespace but with enhanced scope. +Each tenant represents an isolated environment with its own resources, networking, and RBAC (role-based access control). +Some cloud providers use the term "projects" for a similar entity. + +Cozystack administrators and users create tenants using the [Tenant application]({{% ref "/docs/v0/applications/tenant" %}}) +from the application catalog. +Tenants can be created via the Cozystack dashboard (UI), `kubectl`, or directly via Cozystack API. + + +### Tenant Nesting + +All user tenants belong to the base `root` tenant. +This `root` tenant is used only to deploy user tenants and system components. +All user-side applications are deployed in their respective tenants. + +Tenants can be nested further: an administrator of a tenant can create sub-tenants as applications in the Cozystack catalog. +Parent tenants can share their resources with their children and oversee their applications. +In turn, children can use their parent's services. + +![tenant hierarchy diagram](./tenants1.png) + + +### Sharing Cluster Services + +Tenants may have [cluster services]({{% ref "/docs/v0/operations/services" %}}) deployed in them. +Cluster services are middleware services providing core functionality to the tenants and user-facing applications. + +The `root` tenant has a set of services like `etcd`, `ingress`, and `monitoring` by default. +Lower-level tenants can run their own cluster services or access ones of their parent. + +For example, a Cozystack user creates the following tenants and services: + +- Tenant `foo` inside of tenant `root`, having its own instances of `etcd` and `monitoring` running. +- Tenant `bar` inside of tenant `foo`, having its own instance of `etcd`. +- [Tenant Kubernetes cluster]({{% ref "/docs/v0/kubernetes" %}}) and a + [Postgres database]({{% ref "/docs/v0/applications/postgres" %}}) in the tenant `bar`. + +All applications need services like `ingress` and `monitoring`. +Since tenant `bar` does not have these services, the applications will use the parent tenant's services. + +Here's how this configuration will be resolved: + +- The tenant Kubernetes cluster will store its data in the `bar` tenant's own `etcd` service. +- All metrics will be collected in the monitoring stack of the parent tenant `foo`. +- Access to the applications will be through the common `ingress` deployed in the tenant `root`. + +![tenant services](./tenants2.png) + + +### Unique Domain Names + +Each tenant has its own domain. +By default, (unless otherwise specified), it inherits the domain of its parent with a prefix of its name. +For example, if the `root` tenant has domain `example.org`, then tenant `foo` gets the domain `foo.example.org` by default. +However, it can be redefined to have another domain, such as `example.com`. + +Kubernetes clusters created in this tenant namespace would get domains like: `kubernetes-cluster.foo.example.org` + + +### Tenant Naming Limitations + +Tenant names must be alphanumeric. +Using dashes (`-`) in tenant names is not allowed, unlike with other services. +This limitation exists to keep consistent naming in tenants, nested tenants, and services deployed in them. + +For example: + +- The root tenant is named `root`, but internally it's referenced as `tenant-root`. +- A user tenant is named `foo`, which results in `tenant-foo`. +- However, a tenant cannot be named `foo-bar`, because parsing names like `tenant-foo-bar` can be ambiguous. + + +### Reference + +See the reference for the application implementing tenant management: [`tenant`]({{% ref "/docs/v0/applications/tenant#parameters" %}}) + diff --git a/content/en/docs/guides/tenants/tenants1.png b/content/en/docs/v0/guides/tenants/tenants1.png similarity index 100% rename from content/en/docs/guides/tenants/tenants1.png rename to content/en/docs/v0/guides/tenants/tenants1.png diff --git a/content/en/docs/guides/tenants/tenants2.png b/content/en/docs/v0/guides/tenants/tenants2.png similarity index 100% rename from content/en/docs/guides/tenants/tenants2.png rename to content/en/docs/v0/guides/tenants/tenants2.png diff --git a/content/en/docs/v0/guides/use-cases/_index.md b/content/en/docs/v0/guides/use-cases/_index.md new file mode 100644 index 00000000..5f62f68c --- /dev/null +++ b/content/en/docs/v0/guides/use-cases/_index.md @@ -0,0 +1,10 @@ +--- +title: "Use Cases" +linkTitle: "Use Cases" +description: "Cozystack use cases." +weight: 30 +aliases: + - /docs/v0/use-cases + - /docs/guides/use-cases + - /docs/use-cases +--- diff --git a/content/en/docs/v0/guides/use-cases/kubernetes-distribution.md b/content/en/docs/v0/guides/use-cases/kubernetes-distribution.md new file mode 100644 index 00000000..0332cecb --- /dev/null +++ b/content/en/docs/v0/guides/use-cases/kubernetes-distribution.md @@ -0,0 +1,22 @@ +--- +title: Using Cozystack as Kubernetes distribution +linkTitle: Kubernetes Distribution +description: "How to use Cozystack as Kubernetes distribution" +weight: 30 +aliases: + - /docs/v0/use-cases/kubernetes-distribution + - /docs/guides/use-cases/kubernetes-distribution + - /docs/use-cases/kubernetes-distribution +--- + +You can use Cozystack as Kubernetes distribution for Bare Metal + +### Overview + +We created Cozystack primarily for our own needs, having vast experience in building reliable systems on bare metal infrastructure. This experience led to the formation of a separate boxed product, which is aimed at standardizing and providing a ready-to-use tool for managing your infrastructure. + +Currently, Cozystack already solves a huge scope of infrastructure tasks: starting from provisioning bare-metal servers, having a ready monitoring system, fast and reliable storage, a network fabric with the possibility of interconnect with your infrastructure, the ability to run virtual machines, databases, and much more right out of the box. + +All this makes Cozystack a convenient platform for delivering and launching your application on Bare Metal. + +![Cozystack as Kubernetes Distribution](/img/case-distribution.png) diff --git a/content/en/docs/v0/guides/use-cases/private-cloud.md b/content/en/docs/v0/guides/use-cases/private-cloud.md new file mode 100644 index 00000000..5400298e --- /dev/null +++ b/content/en/docs/v0/guides/use-cases/private-cloud.md @@ -0,0 +1,26 @@ +--- +title: Using Cozystack to build private cloud +linkTitle: Private Cloud +description: "How to use Cozystack to build private cloud" +weight: 20 +aliases: + - /docs/v0/use-cases/private-cloud + - /docs/guides/use-cases/private-cloud + - /docs/use-cases/private-cloud +--- + +You can use Cozystack as platform to build a private cloud powered by Infrastructure-as-Code + +### Overview + +One of the use cases is a self-portal for users within your company, where they can order the service they're interested in or a managed database. + +You can implement best GitOps practices, where users will launch their own Kubernetes clusters and databases for their needs with a simple commit of configuration into your infrastructure Git repository. + +Thanks to the standardization of the approach to deploying applications, you can expand the platform's capabilities using the functionality of standard Helm charts. + +![Cozystack for private cloud](/img/case-private-cloud.png) + +Here you can find reference repository to learn how to configure Cozystack services using GitOps approach: + +- https://github.com/aenix-io/cozystack-gitops-example diff --git a/content/en/docs/v0/guides/use-cases/public-cloud.md b/content/en/docs/v0/guides/use-cases/public-cloud.md new file mode 100644 index 00000000..6923b95c --- /dev/null +++ b/content/en/docs/v0/guides/use-cases/public-cloud.md @@ -0,0 +1,24 @@ +--- +title: Using Cozystack to build public cloud +linkTitle: Public Cloud +description: "How to use Cozystack to build public cloud" +weight: 10 +aliases: + - /docs/v0/use-cases/public-cloud + - /docs/guides/use-cases/public-cloud + - /docs/use-cases/public-cloud +--- + +You can use Cozystack as backend for a public cloud + +### Overview + +Cozystack positions itself as a kind of framework for building public clouds. The key word here is framework. In this case, it's important to understand that Cozystack is made for cloud providers, not for end users. + +Despite having a graphical interface, the current security model does not imply public user access to your management cluster. + +Instead, end users get access to their own Kubernetes clusters, can order LoadBalancers and additional services from it, but they have no access and know nothing about your management cluster powered by Cozystack. + +Thus, to integrate with your billing system, it's enough to teach your system to go to the management Kubernetes and place a YAML file signifying the service you're interested in. Cozystack will do the rest of the work for you. + +![Cozystack for public cloud](/img/case-public-cloud.png) diff --git a/content/en/docs/install/_include/hardware-config-tabs.md b/content/en/docs/v0/install/_include/hardware-config-tabs.md similarity index 100% rename from content/en/docs/install/_include/hardware-config-tabs.md rename to content/en/docs/v0/install/_include/hardware-config-tabs.md diff --git a/content/en/docs/v0/install/_index.md b/content/en/docs/v0/install/_index.md new file mode 100644 index 00000000..e9c469ae --- /dev/null +++ b/content/en/docs/v0/install/_index.md @@ -0,0 +1,54 @@ +--- +title: "Cozystack Deployment Guide: from Infrastructure to a Ready Cluster" +linkTitle: "Deploying Cozystack" +description: "Learn how to deploy a Cozystack cluster using Talos Linux and Kubernetes. This guide covers installation, configuration, and best practices for a reliable and secure Cozystack deployment." +weight: 30 +aliases: + - /docs/v0/talos + - /docs/v0/operations/talos + - /docs/install + - /docs/talos + - /docs/operations/talos +--- + +## Cozystack Tutorial + +If this is your first time installing Cozystack, consider [going through the Cozystack tutorial]({{% ref "/docs/v0/getting-started" %}}). +It shows the shortest way to getting a proof-of-concept Cozystack cluster. + +## Generic Installation Path + +Installing Cozystack on bare-metal servers or VMs involves three consecutive steps. +Each of them has a variety of options, and while there is a recommended option, we provide alternatives to make the installation process flexible: + +1. [Install Talos Linux]({{% ref "./talos" %}}) on bare metal or VMs running Linux or having no OS at all. +1. [Install and bootstrap a Kubernetes cluster]({{% ref "./kubernetes" %}}) on top of Talos Linux. +1. [Install and configure Cozystack]({{% ref "./cozystack" %}}) on the Kubernetes cluster. + +## Air-gapped Environment + +Cozystack can be installed in an isolated environment without direct Internet access. +The key difference of such installation is in using proxy registries for images: + +1. [Install Talos Linux]({{% ref "./talos" %}}) on bare metal or VMs running Linux or having no OS at all. +1. [Configure Talos nodes for air-gap and bootstrap a Kubernetes cluster]({{% ref "./kubernetes/air-gapped" %}}). +1. [Install and configure Cozystack]({{% ref "./cozystack" %}}) on the Kubernetes cluster. + +## Provider-specific Installation + +There are specific guides for cloud providers, covering all the steps from preparing infrastructure to installing and configuring Cozystack. +If that's your case, we recommend using the guides below: + +- [Hetzner]({{% ref "/docs/v0/install/providers/hetzner" %}}) +- [Oracle Cloud Infrastructure (OCI)]({{% ref "/docs/v0/install/providers/oracle-cloud" %}}) +- [Servers.com]({{% ref "/docs/v0/install/providers/servers-com" %}}) + + +## Upgrading and Post-deployment Configuration + +After you've deployed a cluster, proceed to the [Cluster Administration]({{% ref "/docs/v0/operations" %}}) section for +the next actions: + +- [Configure OIDC]({{% ref "/docs/v0/operations/oidc" %}}) +- [Deploy Cozystack in a Multi-Datacenter Setup]({{% ref "/docs/v0/operations/stretched" %}}) +- [Upgrading Cozystack]({{% ref "/docs/v0/operations/cluster/upgrade" %}}) diff --git a/content/en/docs/v0/install/cozystack/_index.md b/content/en/docs/v0/install/cozystack/_index.md new file mode 100644 index 00000000..eee6c114 --- /dev/null +++ b/content/en/docs/v0/install/cozystack/_index.md @@ -0,0 +1,684 @@ +--- +title: "Installing and Configuring Cozystack" +linkTitle: "3. Install Cozystack" +description: "Step 3: Installing Cozystack on a Kubernetes Cluster, getting administrative access, and configuring the dashboard." +weight: 30 +aliases: + - /docs/install/cozystack +--- + +**The third step** in deploying a Cozystack cluster is to install Cozystack on a Kubernetes cluster that has been previously installed and configured on Talos Linux nodes. +A prerequisite to this step is having [installed a Kubernetes cluster]({{% ref "/docs/v0/install/kubernetes" %}}). + +If this is your first time installing Cozystack, consider starting with the [Cozystack tutorial]({{% ref "/docs/v0/getting-started" %}}). + +To plan a production-ready installation, follow the guide below. +It mirrors the tutorial in structure, but gives much more details and explains various installation options. + +## 1. Define Cluster Configuration + +Installing Cozystack starts with a single [ConfigMap]({{% ref "/docs/v0/operations/configuration/configmap" %}}). +This ConfigMap includes [Cozystack bundle]({{% ref "/docs/v0/operations/configuration/bundles" %}}) and [components setup]({{% ref "/docs/v0/operations/configuration/components" %}}), +key network settings, exposed services, and other options. + +Cozystack configuration can be updated after installing it. +However, some values, as shown below, are required for installation. + +Here's a minimal example of **cozystack.yaml**: + +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: cozystack + namespace: cozy-system +data: + bundle-name: "paas-full" + root-host: "example.org" + api-server-endpoint: "https://api.example.org:443" + expose-services: "dashboard,api" + ipv4-pod-cidr: "10.244.0.0/16" + ipv4-pod-gateway: "10.244.0.1" + ipv4-svc-cidr: "10.96.0.0/16" + ipv4-join-cidr: "100.64.0.0/16" +``` + +For the explanation of each configuration parameter, see the [ConfigMap reference]({{% ref "/docs/v0/operations/configuration/configmap" %}}). + + +### 1.1. Choose a Bundle + +The composition of Cozystack is defined by a bundle. +Bundle `paas-full` is the most complete one, as it covers all layers from hardware to managed applications. +Choose it if you deploy Cozystack on bare metal or VMs and if you want to use its full power. + +If you deploy Cozystack on a provided Kubernetes cluster, or if you only want to deploy a Kubernetes cluster without services, +refer to the [bundles overview and comparison]({{% ref "/docs/v0/operations/configuration/bundles" %}}). + +### 1.2. Fine-tune the Components + +You can add some optional components or remove ones that are included by default. +Refer to the [components reference]({{% ref "/docs/v0/operations/configuration/components" %}}). + +If you deploy on VMs or dedicated servers of a cloud provider, you'll likely need to disable MetalLB and +enable a provider-specific load balancer, or use a different network setup. +Check out the [provider-specific installation]({{% ref "/docs/v0/install/providers" %}}) section. +It may include a complete guide for your provider that you can use to deploy a production-ready cluster. + +### 1.3. Define Network Configuration + +Replace `example.org` in `data.root-host` and `data.api-server-endpoint` with a routable fully-qualified domain name (FQDN) that you control. +If you only have a public IP, but no routable FQDN, use [nip.io](https://nip.io/) with dash notation. + +The following section contains sane defaults. +Check that they match Talos node settings that you used in the previous steps. +If you were using Talm to install Kubernetes, they should be the same. + +```yaml +ipv4-pod-cidr: "10.244.0.0/16" +ipv4-pod-gateway: "10.244.0.1" +ipv4-svc-cidr: "10.96.0.0/16" +ipv4-join-cidr: "100.64.0.0/16" +``` + +{{% alert color="info" %}} +Cozystack gathers anonymous usage statistics by default. Learn more about what data is collected and how to opt out in the [Telemetry Documentation]({{% ref "/docs/v0/operations/configuration/telemetry" %}}). +{{% /alert %}} + + +## 2. Install Cozystack by Applying Configuration + +Create a namespace `cozy-system` and install Cozystack system components: + +```bash +kubectl create ns cozy-system +kubectl apply -f cozystack.yaml +kubectl apply -f https://github.com/cozystack/cozystack/releases/latest/download/cozystack-installer.yaml +``` + +As the installation goes on, you can track the logs of installer: + +```bash +kubectl logs -n cozy-system deploy/cozystack -f +``` + +Wait for a while, then check the status of installation: +```bash +kubectl get hr -A +``` + +Wait until all releases become to `Ready` state: +```console +NAMESPACE NAME AGE READY STATUS +cozy-cert-manager cert-manager 4m1s True Release reconciliation succeeded +cozy-cert-manager cert-manager-issuers 4m1s True Release reconciliation succeeded +cozy-cilium cilium 4m1s True Release reconciliation succeeded +cozy-cluster-api capi-operator 4m1s True Release reconciliation succeeded +cozy-cluster-api capi-providers 4m1s True Release reconciliation succeeded +cozy-dashboard dashboard 4m1s True Release reconciliation succeeded +cozy-grafana-operator grafana-operator 4m1s True Release reconciliation succeeded +cozy-kamaji kamaji 4m1s True Release reconciliation succeeded +cozy-kubeovn kubeovn 4m1s True Release reconciliation succeeded +cozy-kubevirt-cdi kubevirt-cdi 4m1s True Release reconciliation succeeded +cozy-kubevirt-cdi kubevirt-cdi-operator 4m1s True Release reconciliation succeeded +cozy-kubevirt kubevirt 4m1s True Release reconciliation succeeded +cozy-kubevirt kubevirt-operator 4m1s True Release reconciliation succeeded +cozy-linstor linstor 4m1s True Release reconciliation succeeded +cozy-linstor piraeus-operator 4m1s True Release reconciliation succeeded +cozy-mariadb-operator mariadb-operator 4m1s True Release reconciliation succeeded +cozy-metallb metallb 4m1s True Release reconciliation succeeded +cozy-monitoring monitoring 4m1s True Release reconciliation succeeded +cozy-postgres-operator postgres-operator 4m1s True Release reconciliation succeeded +cozy-rabbitmq-operator rabbitmq-operator 4m1s True Release reconciliation succeeded +cozy-redis-operator redis-operator 4m1s True Release reconciliation succeeded +cozy-telepresence telepresence 4m1s True Release reconciliation succeeded +cozy-victoria-metrics-operator victoria-metrics-operator 4m1s True Release reconciliation succeeded +tenant-root tenant-root 4m1s True Release reconciliation succeeded +``` + +### Installing on non-Talos OS + +By default, Cozystack is configured to use the [KubePrism](https://www.talos.dev/latest/kubernetes-guides/configuration/kubeprism/) +feature of Talos Linux, which allows access to the Kubernetes API via a local address on the node. +If you're installing Cozystack on a system other than Talos Linux, you must update the `KUBERNETES_SERVICE_HOST` and `KUBERNETES_SERVICE_PORT` +environment variables in the `cozystack-installer.yaml` manifest. + +### Dividing Control Plane and Worker Nodes + +Normally Cozystack requires at least three worker nodes to run workloads in HA mode. There are no tolerations in +Cozystack components that will allow them to run on control-plane nodes. + +However, it's common to have only three nodes for testing purposes. Or you might only have big hardware nodes, and you +want to use them for both control-plane and worker workloads. In this case, you have to remove the control-plane taint +from the nodes. + +Example of removing control-plane taint from the nodes: + +```bash +kubectl taint nodes --all node-role.kubernetes.io/control-plane- +``` + +## 3. Configure Storage + +Kubernetes needs a storage subsystem to provide persistent volumes to applications, but it doesn't include one of its own. +Cozystack provides [LINSTOR](https://github.com/LINBIT/linstor-server) as a storage subsystem. + +In the following steps, we'll access LINSTOR interface, create storage pools, and define storage classes. + + +### 3.1. Check Storage Devices + +1. Set up an alias to access LINSTOR: + + ```bash + alias linstor='kubectl exec -n cozy-linstor deploy/linstor-controller -- linstor' + ``` + +1. List your nodes and check their readiness: + + ```bash + linstor node list + ``` + + Example output shows node names and state: + + ```console + +-------------------------------------------------------+ + | Node | NodeType | Addresses | State | + |=======================================================| + | srv1 | SATELLITE | 192.168.100.11:3367 (SSL) | Online | + | srv2 | SATELLITE | 192.168.100.12:3367 (SSL) | Online | + | srv3 | SATELLITE | 192.168.100.13:3367 (SSL) | Online | + +-------------------------------------------------------+ + ``` + +1. List available empty devices: + + ```bash + linstor physical-storage list + ``` + + Example output shows the same node names: + + ```console + +--------------------------------------------+ + | Size | Rotational | Nodes | + |============================================| + | 107374182400 | True | srv3[/dev/sdb] | + | | | srv1[/dev/sdb] | + | | | srv2[/dev/sdb] | + +--------------------------------------------+ + ``` + + + +### 3.2. Create Storage Pools + +1. Create storage pools using ZFS or LVM. + + You can also restore previously created storage pools after a node reset. + + {{< tabs name="create_storage_pools" >}} + {{% tab name="ZFS" %}} + +```bash +linstor ps cdp zfs srv1 /dev/sdb --pool-name data --storage-pool data +linstor ps cdp zfs srv2 /dev/sdb --pool-name data --storage-pool data +linstor ps cdp zfs srv3 /dev/sdb --pool-name data --storage-pool data +``` + +It is [recommended](https://github.com/LINBIT/linstor-server/issues/463#issuecomment-3401472020) +to set `failmode=continue` on ZFS storage pools to allow DRBD to handle disk failures instead of ZFS. + +```bash +kubectl exec -ti -n cozy-linstor ds/linstor-satellite.srv1 -- zpool set failmode=continue data +kubectl exec -ti -n cozy-linstor ds/linstor-satellite.srv2 -- zpool set failmode=continue data +kubectl exec -ti -n cozy-linstor ds/linstor-satellite.srv3 -- zpool set failmode=continue data +``` + + {{% /tab %}} + {{% tab name="LVM" %}} + +```bash +linstor ps cdp lvm srv1 /dev/sdb --pool-name data --storage-pool data +linstor ps cdp lvm srv2 /dev/sdb --pool-name data --storage-pool data +linstor ps cdp lvm srv3 /dev/sdb --pool-name data --storage-pool data +``` + + {{% /tab %}} + {{% tab name="Restore ZFS/LVM storage-pool on nodes after reset" %}} + +```bash +for node in $(kubectl get nodes --no-headers -o custom-columns=":metadata.name"); do + echo "linstor storage-pool create zfs $node data data" +done +# linstor storage-pool create zfs data data +``` + + {{% /tab %}} + {{< /tabs >}} + +1. Check the results by listing the storage pools: + + ```bash + linstor sp l + ``` + + Example output: + + ```console + +-------------------------------------------------------------------------------------------------------------------------------------+ + | StoragePool | Node | Driver | PoolName | FreeCapacity | TotalCapacity | CanSnapshots | State | SharedName | + |=====================================================================================================================================| + | DfltDisklessStorPool | srv1 | DISKLESS | | | | False | Ok | srv1;DfltDisklessStorPool | + | DfltDisklessStorPool | srv2 | DISKLESS | | | | False | Ok | srv2;DfltDisklessStorPool | + | DfltDisklessStorPool | srv3 | DISKLESS | | | | False | Ok | srv3;DfltDisklessStorPool | + | data | srv1 | ZFS | data | 96.41 GiB | 99.50 GiB | True | Ok | srv1;data | + | data | srv2 | ZFS | data | 96.41 GiB | 99.50 GiB | True | Ok | srv2;data | + | data | srv3 | ZFS | data | 96.41 GiB | 99.50 GiB | True | Ok | srv3;data | + +-------------------------------------------------------------------------------------------------------------------------------------+ + ``` + + +### 3.3. Create Storage Classes + +Create storage classes, one of which should be the default class. + + +1. Create a file with storage class definitions. + Below is a sane default example providing two classes: `local` (default) and `replicated`. + + **storageclasses.yaml:** + + ```yaml + --- + apiVersion: storage.k8s.io/v1 + kind: StorageClass + metadata: + name: local + annotations: + storageclass.kubernetes.io/is-default-class: "true" + provisioner: linstor.csi.linbit.com + parameters: + linstor.csi.linbit.com/storagePool: "data" + linstor.csi.linbit.com/layerList: "storage" + linstor.csi.linbit.com/allowRemoteVolumeAccess: "false" + volumeBindingMode: WaitForFirstConsumer + allowVolumeExpansion: true + --- + apiVersion: storage.k8s.io/v1 + kind: StorageClass + metadata: + name: replicated + provisioner: linstor.csi.linbit.com + parameters: + linstor.csi.linbit.com/storagePool: "data" + linstor.csi.linbit.com/autoPlace: "3" + linstor.csi.linbit.com/layerList: "drbd storage" + linstor.csi.linbit.com/allowRemoteVolumeAccess: "true" + property.linstor.csi.linbit.com/DrbdOptions/auto-quorum: suspend-io + property.linstor.csi.linbit.com/DrbdOptions/Resource/on-no-data-accessible: suspend-io + property.linstor.csi.linbit.com/DrbdOptions/Resource/on-suspended-primary-outdated: force-secondary + property.linstor.csi.linbit.com/DrbdOptions/Net/rr-conflict: retry-connect + volumeBindingMode: Immediate + allowVolumeExpansion: true + ``` + +1. Apply the storage class configuration + + ```bash + kubectl create -f storageclasses.yaml + ``` + +1. Check that the storage classes were successfully created: + + ```bash + kubectl get storageclasses + ``` + + Example output: + + ```console + NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE + local (default) linstor.csi.linbit.com Delete WaitForFirstConsumer true 11m + replicated linstor.csi.linbit.com Delete Immediate true 11m + ``` + + + +## 4. Configure Networking + +Next, we will configure how the Cozystack cluster can be accessed. +This step has two options depending on your available infrastructure: + +- For your own bare metal or self-hosted VMs, choose the MetalLB option. + MetalLB is Cozystack's default load balancer. +- For VMs and dedicated servers from cloud providers, choose the public IP setup. + [Most cloud providers don't support MetalLB](https://metallb.universe.tf/installation/clouds/). + + Check out the [provider-specific installation]({{% ref "/docs/v0/install/providers" %}}) section. + It may have instructions for your provider, which you can use to deploy a production-ready cluster. + +### 4.a MetalLB Setup + +Cozystack has three types of IP addresses used: + +- Node IPs: persistent and valid only within the cluster. +- Virtual floating IP: used to access one of the nodes in the cluster and valid only within the cluster. +- External access IPs: used by LoadBalancers to expose services outside the cluster. + +Services with external IPs may be exposed in two modes: L2 and BGP. +L2 mode is a simple one, but requires that nodes belong to a single L2 domain, and does not load-balance well. +BGP has more complicated setup -- you need BGP peers ready to accept announces, but gives the ability to make proper load-balancing, and provides more options for choosing IP address ranges. + +Select a range of unused IPs for the services, here will use the `192.168.100.200-192.168.100.250` range. +If you use L2 mode, these IPs should either be from the same network as the nodes, or have all necessary routes to them. + +For BGP mode, you will also need BGP peer IP addresses and local and remote AS numbers. Here we will use `192.168.20.254` as peer IP, and AS numbers 65000 and 65001 as local and remote. + +Create and apply a file describing an address pool. + +**metallb-ip-address-pool.yml** +```yaml +apiVersion: metallb.io/v1beta1 +kind: IPAddressPool +metadata: + name: cozystack + namespace: cozy-metallb +spec: + addresses: + # used to expose services outside the cluster + - 192.168.100.200-192.168.100.250 + autoAssign: true + avoidBuggyIPs: false +``` + +```bash +kubectl create -f metallb-ip-address-pool.yml +``` + +Create and apply resources needed for an L2 or a BGP advertisement. + +{{< tabs name="metallb_announce" >}} +{{% tab name="L2 mode" %}} +L2Advertisement uses the name of the IPAddressPool resource we created previously. + +**metallb-l2-advertisement.yml** +```yaml +apiVersion: metallb.io/v1beta1 +kind: L2Advertisement +metadata: + name: cozystack + namespace: cozy-metallb +spec: + ipAddressPools: + - cozystack +``` +
+ +Apply changes. + +```bash +kubectl create -f metallb-l2-advertisement.yml +``` +{{% /tab %}} +{{% tab name="BGP mode" %}} +First, create a separate BGPPeer resource for **each** peer. + +**metallb-bgp-peer.yml** +```yaml +apiVersion: metallb.io/v1beta2 +kind: BGPPeer +metadata: + name: peer1 + namespace: cozy-metallb +spec: + myASN: 65000 + peerASN: 65001 + peerAddress: 192.168.20.254 +``` +
+ +Next, create a single BGPAdvertisement resource. + +**metallb-bgp-advertisement.yml** +```yaml +apiVersion: metallb.io/v1beta1 +kind: BGPAdvertisement +metadata: + name: cozystack + namespace: cozy-metallb +spec: + ipAddressPools: + - cozystack +``` +
+Apply changes. + +```bash +kubectl create -f metallb-bgp-peer.yml +kubectl create -f metallb-bgp-advertisement.yml +``` +{{% /tab %}} +{{< /tabs >}} +
+ +Now that MetalLB is configured, enable `ingress` in the `tenant-root`: + +```bash +kubectl patch -n tenant-root tenants.apps.cozystack.io root --type=merge -p ' +{"spec":{ + "ingress": true +}}' +``` + +To confirm successful configuration, check the HelmReleases `ingress` and `ingress-nginx-system`: + +```bash +kubectl -n tenant-root get hr ingress ingress-nginx-system +``` + +Example of correct output: +```console +NAME AGE READY STATUS +ingress 47m True Helm upgrade succeeded for release tenant-root/ingress.v3 with chart ingress@1.8.0 +ingress-nginx-system 47m True Helm upgrade succeeded for release tenant-root/ingress-nginx-system.v2 with chart cozy-ingress-nginx@0.35.1 +``` + +Next, check the state of service `root-ingress-controller`: + +```bash +kubectl -n tenant-root get svc root-ingress-controller +``` + +The service should be deployed as `TYPE: LoadBalancer` and have correct external IP: + +```console +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +root-ingress-controller LoadBalancer 10.96.91.83 192.168.100.200 80/TCP,443/TCP 48m +``` + +### 4.b. Node Public IP Setup + +If your cloud provider does not support MetalLB, you can expose ingress controller using external IPs on your nodes. + +If public IPs are attached directly to nodes, specify them. +If public IPs are provided with a 1:1 NAT, as some clouds do, use IP addresses of **external** network interfaces. + +Here we will use `192.168.100.11`, `192.168.100.12`, and `192.168.100.13`. + +First, patch the ConfigMap with IPs to expose: + +```bash +kubectl patch -n cozy-system configmap cozystack --type=merge -p '{ + "data": { + "expose-external-ips": "192.168.100.11,192.168.100.12,192.168.100.13" + } +}' +``` + +Next, enable `ingress` for the root tenant: + +```bash +kubectl patch -n tenant-root tenants.apps.cozystack.io root --type=merge -p '{ + "spec":{ + "ingress": true + } +}' +``` + +After that, your Ingress will be available on the specified IPs. +Check it in the following way: + +```bash +kubectl get svc -n tenant-root root-ingress-controller +``` + +The service should be deployed as `TYPE: ClusterIP` and have the full range of external IPs: + +```console +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +root-ingress-controller ClusterIP 10.96.91.83 192.168.100.11,192.168.100.12,192.168.100.13 80/TCP,443/TCP 48m +``` + +## 5. Finalize Installation + +### 5.1. Setup Root Tenant Services + +Enable `etcd` and `monitoring` for the root tenant: + +```bash +kubectl patch -n tenant-root tenants.apps.cozystack.io root --type=merge -p ' +{"spec":{ + "ingress": true, + "monitoring": true, + "etcd": true +}}' +``` + +### 5.2. Check the Cluster State and composition + +Check the provisioned persistent volumes: + +```bash +kubectl get pvc -n tenant-root +``` + +example output: +```console +NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE +data-etcd-0 Bound pvc-4cbd29cc-a29f-453d-b412-451647cd04bf 10Gi RWO local 2m10s +data-etcd-1 Bound pvc-1579f95a-a69d-4a26-bcc2-b15ccdbede0d 10Gi RWO local 115s +data-etcd-2 Bound pvc-907009e5-88bf-4d18-91e7-b56b0dbfb97e 10Gi RWO local 91s +grafana-db-1 Bound pvc-7b3f4e23-228a-46fd-b820-d033ef4679af 10Gi RWO local 2m41s +grafana-db-2 Bound pvc-ac9b72a4-f40e-47e8-ad24-f50d843b55e4 10Gi RWO local 113s +vmselect-cachedir-vmselect-longterm-0 Bound pvc-622fa398-2104-459f-8744-565eee0a13f1 2Gi RWO local 2m21s +vmselect-cachedir-vmselect-longterm-1 Bound pvc-fc9349f5-02b2-4e25-8bef-6cbc5cc6d690 2Gi RWO local 2m21s +vmselect-cachedir-vmselect-shortterm-0 Bound pvc-7acc7ff6-6b9b-4676-bd1f-6867ea7165e2 2Gi RWO local 2m41s +vmselect-cachedir-vmselect-shortterm-1 Bound pvc-e514f12b-f1f6-40ff-9838-a6bda3580eb7 2Gi RWO local 2m40s +vmstorage-db-vmstorage-longterm-0 Bound pvc-e8ac7fc3-df0d-4692-aebf-9f66f72f9fef 10Gi RWO local 2m21s +vmstorage-db-vmstorage-longterm-1 Bound pvc-68b5ceaf-3ed1-4e5a-9568-6b95911c7c3a 10Gi RWO local 2m21s +vmstorage-db-vmstorage-shortterm-0 Bound pvc-cee3a2a4-5680-4880-bc2a-85c14dba9380 10Gi RWO local 2m41s +vmstorage-db-vmstorage-shortterm-1 Bound pvc-d55c235d-cada-4c4a-8299-e5fc3f161789 10Gi RWO local 2m41s +``` + +Check that all pods are running: + + +```bash +kubectl get pod -n tenant-root +``` + +Example output: + +```console +NAME READY STATUS RESTARTS AGE +etcd-0 1/1 Running 0 2m1s +etcd-1 1/1 Running 0 106s +etcd-2 1/1 Running 0 82s +grafana-db-1 1/1 Running 0 119s +grafana-db-2 1/1 Running 0 13s +grafana-deployment-74b5656d6-5dcvn 1/1 Running 0 90s +grafana-deployment-74b5656d6-q5589 1/1 Running 1 (105s ago) 111s +root-ingress-controller-6ccf55bc6d-pg79l 2/2 Running 0 2m27s +root-ingress-controller-6ccf55bc6d-xbs6x 2/2 Running 0 2m29s +root-ingress-defaultbackend-686bcbbd6c-5zbvp 1/1 Running 0 2m29s +vmalert-vmalert-644986d5c-7hvwk 2/2 Running 0 2m30s +vmalertmanager-alertmanager-0 2/2 Running 0 2m32s +vmalertmanager-alertmanager-1 2/2 Running 0 2m31s +vminsert-longterm-75789465f-hc6cz 1/1 Running 0 2m10s +vminsert-longterm-75789465f-m2v4t 1/1 Running 0 2m12s +vminsert-shortterm-78456f8fd9-wlwww 1/1 Running 0 2m29s +vminsert-shortterm-78456f8fd9-xg7cw 1/1 Running 0 2m28s +vmselect-longterm-0 1/1 Running 0 2m12s +vmselect-longterm-1 1/1 Running 0 2m12s +vmselect-shortterm-0 1/1 Running 0 2m31s +vmselect-shortterm-1 1/1 Running 0 2m30s +vmstorage-longterm-0 1/1 Running 0 2m12s +vmstorage-longterm-1 1/1 Running 0 2m12s +vmstorage-shortterm-0 1/1 Running 0 2m32s +vmstorage-shortterm-1 1/1 Running 0 2m31s +``` + +Now you can get the public IP of ingress controller: + +```bash +kubectl get svc -n tenant-root root-ingress-controller +``` + +example output: +```console +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +root-ingress-controller LoadBalancer 10.96.16.141 192.168.100.200 80:31632/TCP,443:30113/TCP 3m33s +``` + +### 5.3 Access the Cozystack Dashboard + +If you left this line in the ConfigMap, Cozystack Dashboard must be already available at this moment: + +```yaml +data: + expose-services: "dashboard,api" +``` + +If the initial configmap did not have this line, patch it with the following command: + +```bash +kubectl patch -n cozy-system cm cozystack --type=merge -p '{"data":{ + "expose-services": "dashboard" + }}' +``` + +Open `dashboard.example.org` to access the system dashboard, where `example.org` is your domain specified for `tenant-root`. +There you will see a login window which expects an authentication token. + +Get the authentication token for `tenant-root`: + +```bash +kubectl get secret -n tenant-root tenant-root -o go-template='{{ printf "%s\n" (index .data "token" | base64decode) }}' +``` + +Log in using the token. +Now you can use the dashboard as an administrator. + +Further on, you will be able to: + +- Set up OIDC to authenticate with it instead of tokens. +- Create user tenants and grant users access to them via tokens or OIDC. + +### 5.4 Access metrics in Grafana + +Use `grafana.example.org` to access the system monitoring, where `example.org` is your domain specified for `tenant-root`. +In this example, `grafana.example.org` is located at 192.168.100.200. + +- login: `admin` +- request a password: + ```bash + kubectl get secret -n tenant-root grafana-admin-password -o go-template='{{ printf "%s\n" (index .data "password" | base64decode) }}' + ``` + + +## Next Steps + +- [Configure OIDC]({{% ref "/docs/v0/operations/oidc/" %}}). +- [Create a user tenant]({{% ref "/docs/v0/getting-started/create-tenant" %}}). diff --git a/content/en/docs/v0/install/hardware-requirements.md b/content/en/docs/v0/install/hardware-requirements.md new file mode 100644 index 00000000..46c49828 --- /dev/null +++ b/content/en/docs/v0/install/hardware-requirements.md @@ -0,0 +1,124 @@ +--- +title: "Hardware requirements" +linkTitle: "Hardware Requirements" +description: "Define the hardware requirements for your Cozystack use case." +weight: 5 +aliases: + - /docs/v0/getting-started/hardware-requirements + - /docs/v0/talos/hardware-requirements + - /docs/install/hardware-requirements + - /docs/getting-started/hardware-requirements + - /docs/talos/hardware-requirements +--- + +Cozystack utilizes [Talos Linux]({{% ref "/docs/v0/guides/talos" %}}), a minimalistic Linux distribution designed solely to run Kubernetes. +Usually, this means you cannot share a server with any services other than those run by Cozystack. +The good news is that whichever service you need, Cozystack will run it perfectly: securely, efficiently, and +in a fully containerized or virtualized environment. + +Hardware requirements depend on your usage scenario. +Below are several common deployment options; review them to determine which setup fits your needs best. + +{{< include "docs/v0/install/_include/hardware-config-tabs.md" >}} + +**Compute:** + +- Three or more physical or virtual servers with amd64/x86_64 architecture, with the specifications shown in the table above. +- Virtualized servers need nested virtualization enabled and the CPU model set to `host` (without emulation). +- PXE installation requires an extra management instance connected to the same network, with any Linux system able to run a Docker container. + It should also have `x86-64-v2` architecture, which most probably may be achieved by setting CPU model to `host` in case of a VM. + +**Storage:** + +Storage in a Cozystack cluster is used both by the system and by the user workloads. +There are two options: having a dedicated disk for each role or allocating space on system disk for user storage. +Low latency is critical for control-plane nodes storage, local SSDs are recommended. + +**Using two disks** + +Separating disks by role is the primary and more reliable option. + +- **Primary Disk**: This disk contains the Talos Linux operating system, essential system kernel modules and + Cozystack system base pods, logs, and base container images. Also an etcd cluster will be running on top of it, so a low-latency volume should be used, preferably a local SSD. + + Minimum sizes vary by configuration (see table above). Talos installation expects `/dev/sda` as the system disk (virtio drives usually appear as `/dev/vda`). + +- **Secondary Disk**: Dedicated to workload data and can be increased based on workload requirements. + Used for provisioning volumes via PersistentVolumeClaims (PVCs). + + Minimum sizes vary by configuration (see table above). Disk path (usually `/dev/sdb`) will be defined in the storage configuration. + It does not affect the Talos installation. + + Learn more about configuring Linstor StorageClass from the + [Deploy Cozystack tutorial]({{% ref "/docs/v0/getting-started/install-cozystack#3-configure-storage" %}}) + +**Using a single disk** + +It's possible to use a single disk with space allocated for user storage. +See [How to install Talos on a single-disk machine]({{% ref "/docs/v0/install/how-to/single-disk" %}}) +Using a local SSD disk is recommended. + +**Networking:** + +- Machines must be allowed to use additional IPs, or an external load balancer must be available. + Using additional IPs is disabled by default and must be enabled explicitly in most public clouds. +- Additional public IPs for ingress and virtual machines may be needed. Check if your public cloud provider supports floating IPs. +- Routable FQDN domain (or use [nip.io](https://nip.io/) with dash notation) +- Located in the same L2 network segment +- Anti-spoofing disabled (required for MetalLB) +- Minimum 1 Gbps (10 Gbps recommended for production) +- Low latency between cluster nodes + +## Production Cluster + +For a production environment, consider the following: + +**Compute:** + +- Having at least **three worker nodes** is mandatory for running highly available applications. + If one of the three nodes becomes unavailable due to hardware failure or maintenance, you’ll be operating in a degraded state. + While database clusters and replicated storage will continue functioning, starting new database instances or creating replicated volumes won’t be possible. +- Having separate servers for Kubernetes master nodes is highly recommended, although not required. + It’s much easier to take a pure worker node offline for maintenance or upgrades, than if it also serves as a management node. + +**Networking:** + +- In a setup with multiple data centers, it’s ideal to have direct, dedicated optical links between them. +- Servers must support out-of-band management (IPMI, iLO, iDRAC, etc.) to allow remote monitoring, recovery, and management. + +## Distributed Cluster + +You can build a [distributed cluster]({{% ref "/docs/v0/operations/stretched/" %}}) with Cozystack. + +**Networking:** + +- Distributed cluster requires both a fast and reliable network, and it **must** have low RTT (Round Trip Time), as + Kubernetes is not designed to operate efficiently over high-latency networks. + + Data centers in the same city typically have less than 1 ms latency, which is ideal. + The *maximum acceptable* RTT is 10 ms. + Running Kubernetes or replicated storage over a network with RTT above 20 ms is strongly discouraged. + To measure actual RTT, you can use the `ping` command. + +- It's also recommended to have at least 2–3 nodes per data center in a distributed cluster. + This ensures that the cluster would be able to survive one data center loss without major disruption. + +- If it's hard to keep a single address space between data centers, instead of using some external VPN, + you can enable **KubeSpan**, a Talos Linux feature that creates a WireGuard-backed full-mesh VPN between nodes. + +## Highly Available Applications + +Achieving high availability adds to the basic production environment requirements. + +**Networking:** + +- It is recommended to have multiple 10 Gbps (or faster) network cards. + You can separate storage and application traffic by assigning them to different network interfaces. + +- Expect a significant amount of horizontal, inter-node traffic inside clusters. + It is usually caused by multiple replicas of services and databases deployed across different nodes exchanging data. + Also, virtual machines with live migration require replicated volumes, which further increases the amount of traffic. + +## System Resource Planning + +For detailed recommendations on system resource allocation (CPU and memory) per node, based on cluster scale and number of tenants, refer to [System Resource Planning Recommendations]({{% ref "/docs/v0/install/resource-planning" %}}). diff --git a/content/en/docs/v0/install/how-to/_index.md b/content/en/docs/v0/install/how-to/_index.md new file mode 100644 index 00000000..97164dde --- /dev/null +++ b/content/en/docs/v0/install/how-to/_index.md @@ -0,0 +1,8 @@ +--- +title: "Guides for Specific Cases in Cozystack Deployment" +linkTitle: "How-Tos" +description: "" +weight: 50 +aliases: + - /docs/install/how-to +--- diff --git a/content/en/docs/v0/install/how-to/hugepages.md b/content/en/docs/v0/install/how-to/hugepages.md new file mode 100644 index 00000000..dc2be80c --- /dev/null +++ b/content/en/docs/v0/install/how-to/hugepages.md @@ -0,0 +1,64 @@ +--- +title: "How to enable Hugepages" +linkTitle: "Enable Hugepages" +description: "How to enable Hugepages" +weight: 130 +aliases: + - /docs/install/how-to/hugepages +--- + +Enabling Hugepages for Cozystack can be done both on initial installation and at any time after it. +Applying this configuration after installation will require a full node reboot. + +Read more in the Linux Kernel documentation: [HugeTLB Pages](https://docs.kernel.org/admin-guide/mm/hugetlbpage.html). + + +## Using Talm + +Requires Talm `v0.16.0` or later. + +1. Add the following lines to `values.yaml`: + + ```yaml + ... + certSANs: [] + nr_hugepages: 3000 + ``` + + `vm.nr_hugepages` is the count of pages per 2Mi. + +1. Apply the configuration: + + ```bash + talm apply -f nodes/node0.yaml + ``` + +1. Finally, reboot the nodes: + + ```bash + talm -f nodes/node0.yaml reboot + ``` + +## Using talosctl + +1. Add the following lines to your node template: + + ```yaml + machine: + sysctls: + vm.nr_hugepages: "3000" + ``` + + `vm.nr_hugepages` is the count of pages per 2Mi. + +1. Apply the configuration: + + ```bash + talosctl apply -f nodetemplate.yaml -n 192.168.123.11 -e 192.168.123.11 + ``` + +1. Reboot the nodes: + + ```bash + talosctl reboot -n 192.168.123.11 -e 192.168.123.11 + ``` diff --git a/content/en/docs/v0/install/how-to/kubespan.md b/content/en/docs/v0/install/how-to/kubespan.md new file mode 100644 index 00000000..ce63bee8 --- /dev/null +++ b/content/en/docs/v0/install/how-to/kubespan.md @@ -0,0 +1,38 @@ +--- +title: How to Enable KubeSpan +linkTitle: Enable KubeSpan +description: "How to Enable KubeSpan." +weight: 120 +aliases: + - /docs/install/how-to/kubespan +--- + +Talos Linux provides a full mesh WireGuard network for your cluster. + +To enable this functionality, you need to configure [KubeSpan](https://www.talos.dev/v1.8/talos-guides/network/kubespan/) and [Cluster Discovery](https://www.talos.dev/v1.2/kubernetes-guides/configuration/discovery/) in your Talos Linux configuration: + +```yaml +machine: + network: + kubespan: + enabled: true +cluster: + discovery: + enabled: true +``` + +Since KubeSpan encapsulates traffic into a WireGuard tunnel, Kube-OVN should also be configured with a lower MTU value. + +To achieve this, add the following to the Cozystack ConfigMap: + +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: cozystack + namespace: cozy-system +data: + values-kubeovn: | + kube-ovn: + mtu: 1222 +``` diff --git a/content/en/docs/v0/install/how-to/public-ip.md b/content/en/docs/v0/install/how-to/public-ip.md new file mode 100644 index 00000000..5085c9dc --- /dev/null +++ b/content/en/docs/v0/install/how-to/public-ip.md @@ -0,0 +1,26 @@ +--- +title: "Public-network Kubernetes deployment" +linkTitle: "Deploy with public networks" +description: "" +weight: 110 +aliases: + - /docs/install/how-to/public-ip +--- + +A Kubernetes cluster for Cozystack can be deployed using only public networks: + +- Both management and worker nodes have public IP addresses. +- Worker nodes connect to the management nodes over the public Internet, without a private internal network or VPN. + +Such a setup is not recommended for production, but can be used for research and testing, +when hosting limitations prevent provisioning a private network. + +To enable this setup when deploying with `talosctl`, add the following data in the node configuration files: + +```yaml +cluster: + controlPlane: + endpoint: https://:6443 +``` + +For `talm`, append the same lines at end of the first node's configuration file, such as `nodes/node1.yaml`. diff --git a/content/en/docs/v0/install/how-to/single-disk.md b/content/en/docs/v0/install/how-to/single-disk.md new file mode 100644 index 00000000..1267b9b6 --- /dev/null +++ b/content/en/docs/v0/install/how-to/single-disk.md @@ -0,0 +1,76 @@ +--- +title: "How to install Talos on a single-disk machine" +linkTitle: "Install on a single disk" +description: "How to install Talos on a single-disk machine, allocating space on system disk for user storage" +weight: 100 +aliases: + - /docs/v0/operations/faq/single-disk-installation + - /docs/install/how-to/single-disk + - /docs/operations/faq/single-disk-installation +--- + +Default Talos setup assumes that each node has a primary and secondary disks, used for system and user storage, respectively. +However, it's possible to use a single disk, allocating space for user storage. + +This configuration must be applied with the first [`talosctl apply`]({{% ref "/docs/v0/install/kubernetes/talosctl#3-apply-node-configuration" %}}) +or [`talm apply`]({{% ref "/docs/v0/install/kubernetes/talm#3-apply-node-configuration" %}}) +— the one with the `-i` (`--insecure`) flag. +Applying changes after initialization will not have any effect. + +For `talosctl`, append the following lines to `patch.yaml`: + +```yaml +--- +apiVersion: v1alpha1 +kind: VolumeConfig +name: EPHEMERAL +provisioning: + minSize: 70GiB + +--- +apiVersion: v1alpha1 +kind: UserVolumeConfig +name: data-storage +provisioning: + diskSelector: + match: disk.transport == 'nvme' + minSize: 400GiB +``` + +For `talm`, append the same lines at end of the first node's configuration file, such as `nodes/node1.yaml`. + +Read more in the Talos documentation: https://www.talos.dev/v1.10/talos-guides/configuration/disk-management/. + +After applying the configuration, wipe the `data-storage` partition: + +```bash +kubectl -n kube-system debug -it --profile sysadmin --image=alpine node/node1 + +apk add util-linux + +umount /dev/nvme0n1p6 ### The partition allocated for user storage +rm -rf /host/var/mnt/data-storage +wipefs -a /dev/nvme0n1p6 +exit +``` + +When the storage is configured, add the new partition to LINSTOR: +```bash +linstor ps cdp zfs node1 nvme0n1p6 --pool-name data --storage-pool data1 +``` + +Check the result: +```bash +linstor sp l +``` + +Output will be similar to this example: + +```text ++---------------------------------------------------------------------------------------------------------------------------------------+ +| StoragePool | Node | Driver | PoolName | FreeCapacity | TotalCapacity | CanSnapshots | State | SharedName | +|=======================================================================================================================================| +| DfltDisklessStorPool | node1 | DISKLESS | | | | False | Ok | node1;DfltDisklessStorPool | +| data | node1 | ZFS | data | 351.46 GiB | 476 GiB | True | Ok | node1;data | +| data1 | node1 | ZFS | data | 378.93 GiB | 412 GiB | True | Ok | node1;data1 | +``` diff --git a/content/en/docs/v0/install/kubernetes/_index.md b/content/en/docs/v0/install/kubernetes/_index.md new file mode 100644 index 00000000..0a6bb188 --- /dev/null +++ b/content/en/docs/v0/install/kubernetes/_index.md @@ -0,0 +1,37 @@ +--- +title: "Installing and Configuring Kubernetes Cluster on Talos Linux" +linkTitle: "2. Install Kubernetes" +description: "Step 2: Installing and configuring a Kubernetes cluster on Talos Linux nodes, ready for Cozystack installation." +weight: 20 +aliases: + - /docs/v0/operations/talos/configuration + - /docs/v0/talos/bootstrap + - /docs/v0/talos/configuration + - /docs/install/kubernetes + - /docs/operations/talos/configuration + - /docs/talos/bootstrap + - /docs/talos/configuration +--- + + +**The second step** in deploying a Cozystack cluster is to install and configure a Kubernetes cluster on Talos Linux nodes. +A prerequisite to this step is having [installed Talos Linux]({{% ref "/docs/v0/install/talos" %}}). +The result is a Kubernetes cluster installed, configured, and ready to install Cozystack. + +If this is your first time installing Cozystack, [start with the Cozystack tutorial]({{% ref "/docs/v0/getting-started" %}}). + +## Installation Options + +There are several methods to configure Talos nodes and bootstrap a Kubernetes cluster: + +- **Recommended**: [using Talm]({{% ref "./talm" %}}), a declarative CLI tool, which has ready presets for Cozystack and uses the power of Talos API under the hood. +- [Using `talos-bootstrap`]({{% ref "./talos-bootstrap" %}}), an interactive script for bootstrapping Kubernetes clusters on Talos OS. +- [Using talosctl]({{% ref "./talosctl" %}}), a specialized command line tool for managing Talos. +- [Air-gapped installation]({{% ref "./air-gapped" %}}) is possible with Talm or talosctl. + +If you encounter problems with installation, refer to the [Troubleshooting section]({{% ref "./troubleshooting" %}}). + +## Further Steps + +- After installing and configuring Kubernetes on top of Talos Linux nodes, you will have a Kubernetes cluster ready to + [install and configure Cozystack]({{% ref "/docs/v0/install/cozystack" %}}). diff --git a/content/en/docs/v0/install/kubernetes/air-gapped.md b/content/en/docs/v0/install/kubernetes/air-gapped.md new file mode 100644 index 00000000..49f61e41 --- /dev/null +++ b/content/en/docs/v0/install/kubernetes/air-gapped.md @@ -0,0 +1,222 @@ +--- +title: Bootstrap an Air-Gapped Cluster +linkTitle: Air-Gapped +description: "Bootstrap a Cozystack cluster in an isolated (air-gapped) environment with container registry mirrors." +weight: 20 +aliases: + - /docs/v0/operations/talos/configuration/air-gapped + - /docs/v0/talos/bootstrap/air-gapped + - /docs/install/kubernetes/air-gapped + - /docs/operations/talos/configuration/air-gapped + - /docs/talos/bootstrap/air-gapped +--- + +## Introduction + +This guide outlines the steps to bootstrap a Cozystack cluster in an **air-gapped environment**. + +**Air-gapped** installation means that the cluster has no direct access to the Internet. +All necessary resources, such as images and metadata, must be available on the private network. + +## Configuring Talos Nodes + +{{% alert color="info" %}} +For installing with Talm, it's enough to make all mentioned changes once in `./templates/_helpers.tpl` and then build the actual node configuration files with `talm template`. + +For installing with `talosctl`, the changes should be made in `patch.yaml` and `patch-controlplane.yaml`. +{{% /alert %}} + +## 1. Configure NTP Servers + +Accurate time synchronization is critical for the cluster. +In your Talos machine configuration, set **local NTP servers** that are accessible inside your private network: + +```yaml +machine: + time: + servers: + # example values + - 192.168.0.4 + - 10.10.0.5 +``` + +Ensure that these NTP servers are reachable from the first Talos node. + +## 2. Configure Container Registry Mirrors + +Since the cluster cannot access public container registries, it needs to use their local mirrors. +Creating such mirrors is out of the scope of this guide. + +Update your machine configuration in the following way, +providing the IP addresses and ports of your local mirrors for each registry: + +```yaml +machine: + registries: + mirrors: + docker.io: + endpoints: + - http://10.0.0.1:8082 + ghcr.io: + endpoints: + - http://10.0.0.1:8083 + gcr.io: + endpoints: + - http://10.0.0.1:8084 + registry.k8s.io: + endpoints: + - http://10.0.0.1:8085 + quay.io: + endpoints: + - http://10.0.0.1:8086 + cr.fluentbit.io: + endpoints: + - http://10.0.0.1:8087 + docker-registry3.mariadb.com: + endpoints: + - http://10.0.0.1:8088 + config: + "10.0.0.1:8082": + tls: + insecureSkipVerify: true + auth: + username: myuser + password: mypass +``` + +Of course, the values for `config.[0].auth.*` are given as examples, and you need to use real credentials. +Make sure your local registry proxies mirror all required images for Talos and Kubernetes components. + +## 3. Add CA Certificate + +To use a private Certificate Authority, you need to add its certificate to the nodes. + +```yaml +# talm: nodes=["10.10.10.10"], endpoints=["10.10.10.10"], templates=["templates/controlplane.yaml"] +# THIS FILE IS AUTOGENERATED. PREFER TEMPLATE EDITS OVER MANUAL ONES. +machine: +# ... +# ... + discovery: + enabled: false + etcd: + advertisedSubnets: + - 10.4.100.10/24 + allowSchedulingOnControlPlanes: true +--- +apiVersion: v1alpha1 +kind: TrustedRootsConfig +name: my-enterprise-ca +certificates: | + -----BEGIN CERTIFICATE----- + ... + -----END CERTIFICATE----- +``` + +## 4. Apply Changes + +After you have made the changes above, you can apply the configuration and bootstrap a cluster: + +### Using Talm + +Rebuild the node configuration files and apply them to each node: + +```bash +talm template -e -n -t templates/controlplane.yaml -i > nodes/node1.yaml +talm apply -f nodes/node1.yaml +# repeat for each node +``` + +Finally, bootstrap the cluster as usual: + +```bash +talm bootstrap -f nodes/node1.yaml +``` + +Read the [Talm configuration guide]({{% ref "/docs/v0/install/kubernetes/talm" %}}) to learn more. + +### Using talosctl + +Apply the configuration to each node: + +```bash +talosctl apply -f controlplane.yaml -n -e -i +``` + +Finally, bootstrap the cluster using one of the nodes: + +```bash +talosctl bootstrap -n -e +``` + +Read the [`talosctl` configuration guide]({{% ref "/docs/v0/install/kubernetes/talosctl" %}}) to learn more. + +## 5. Configure Container Registry Mirrors for Tenant Kubernetes + +To use registry mirrors, tenant Kubernetes clusters need to be configured separately, +although in the same way as the Talos nodes. + +To perform this configuration, you first need to deploy a Cozystack cluster of +(or upgrade your cluster to) version v0.32.0 or later. +Check your current cluster version with: + +```bash +kubectl get deploy -n cozy-system cozystack -oyaml | grep installer +``` + +Generate a [Kubernetes Secret](https://kubernetes.io/docs/concepts/configuration/secret/) named `patch-containerd` using the following example: + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: patch-containerd + namespace: cozy-system +type: Opaque +stringData: + docker.io.toml: | + server = "https://registry-1.docker.io" + [host."http://10.0.0.1:8082"] + capabilities = ["pull", "resolve"] + skip_verify = true + ghcr.io.toml: | + server = "https://ghcr.io" + [host."http://10.0.0.1:8083"] + capabilities = ["pull", "resolve"] + skip_verify = true + gcr.io.toml: | + server = "https://gcr.io" + [host."http://10.0.0.1:8084"] + capabilities = ["pull", "resolve"] + skip_verify = true + registry.k8s.io.toml: | + server = "https://registry.k8s.io" + [host."http://10.0.0.1:8085"] + capabilities = ["pull", "resolve"] + skip_verify = true + quay.io.toml: | + server = "https://quay.io" + [host."http://10.0.0.1:8086"] + capabilities = ["pull", "resolve"] + skip_verify = true + cr.fluentbit.io.toml: | + server = "https://cr.fluentbit.io" + [host."http://10.0.0.1:8087"] + capabilities = ["pull", "resolve"] + skip_verify = true + docker-registry3.mariadb.com.toml: | + server = "https://docker-registry3.mariadb.com" + [host."http://10.0.0.1:8088"] + capabilities = ["pull", "resolve"] + skip_verify = true +``` + +This secret will be copied for every tenant Kubernetes cluster deployed in Cozystack. + +It's possible to configure registry mirrors for a particular tenant Kubernetes cluster: + +- The tenant cluster must be deployed with a Kubernetes package version 0.23.1 or later, which is available since Cozystack 0.32.1. +- Before deploying the tenant cluster, create a Kubernetes Secret named `kubernetes-` with the same contents as shown above. + +To learn more about registry configuration values, read the [CRI Plugin configuration guide]( +https://github.com/containerd/containerd/blob/main/docs/cri/config.md#registry-configuration) diff --git a/content/en/docs/v0/install/kubernetes/talm.md b/content/en/docs/v0/install/kubernetes/talm.md new file mode 100644 index 00000000..da77020d --- /dev/null +++ b/content/en/docs/v0/install/kubernetes/talm.md @@ -0,0 +1,330 @@ +--- +title: Use Talm to bootstrap a Cozystack cluster +linkTitle: Talm +description: "`talm` is a declarative CLI tool made by Cozystack devs and optimized for deploying Cozystack.
Recommended for infrastructure-as-code and GitOps." +weight: 5 +aliases: + - /docs/v0/operations/talos/configuration/talm + - /docs/v0/talos/bootstrap/talm + - /docs/v0/talos/configuration/talm + - /docs/install/kubernetes/talm + - /docs/operations/talos/configuration/talm + - /docs/talos/bootstrap/talm + - /docs/talos/configuration/talm +--- + +This guide explains how to install and configure Kubernetes on a Talos Linux cluster using Talm. +As a result of completing this guide you will have a Kubernetes cluster ready to install Cozystack. + +[Talm](https://github.com/cozystack/talm) is a Helm-like utility for declarative configuration management of Talos Linux. +Talm was created by Ænix to allow more declarative and customizable configurations for cluster management. +Talm comes with pre-built presets for Cozystack. + +## Prerequisites + +By the start of this guide you should have [Talos Linux installed]({{% ref "/docs/v0/install/talos" %}}), but not initialized (bootstrapped), on several nodes. +These nodes should belong to one subnet or have public IPs. + +This guide uses an example where the nodes of a cluster are located in the subnet `192.168.123.0/24`, having the following IP addresses: + +- `node1`: private `192.168.123.11` or public `12.34.56.101`. +- `node2`: private `192.168.123.12` or public `12.34.56.102`. +- `node3`: private `192.168.123.13` or public `12.34.56.103`. + +Public IPs are optional. +All you need for an installation with Talm is to have access to the nodes: directly, through VPN, bastion host, or other means. +This guide will use private IPs as a default option in examples, and public IPs in instructions and examples which are specific for the public IP setup. + +If you are using DHCP, you might not be aware of the IP addresses assigned to your nodes in the private subnet. +Nodes with Talos Linux [expose Talos API on port `50000`](https://www.talos.dev/v1.10/learn-more/talos-network-connectivity/). +You can use `nmap` to find them, providing your network mask (`192.168.123.0/24` in the example): + +```bash +nmap -Pn -n -p 50000 192.168.123.0/24 -vv | grep 'Discovered' +``` + +Example output: + +```console +Discovered open port 50000/tcp on 192.168.123.11 +Discovered open port 50000/tcp on 192.168.123.12 +Discovered open port 50000/tcp on 192.168.123.13 +``` + + +## 1. Install Dependencies + +For this guide, you need a couple of tools installed: + +- **Talm**. + To install the latest build for your platform, download and run the installer script: + + ```bash + curl -sSL https://github.com/cozystack/talm/raw/refs/heads/main/hack/install.sh | sh -s + ``` + Talm has binaries built for Linux, macOS, and Windows, both AMD and ARM. + You can also [download a binary from GitHub](https://github.com/cozystack/talm/releases) + or [build Talm from the source](https://github.com/cozystack/talm). + + +- **talosctl** is distributed as a brew package: + + ```bash + brew install siderolabs/tap/talosctl + ``` + + For more installation options, see the [`talosctl` installation guide](https://www.talos.dev/v1.9/talos-guides/install/talosctl/) + +## 2. Initialize Cluster Configuration + +The first step is to initialize configuration templates and provide configuration values for templating. + + +### 2.1 Initialize Configuration + +Start by initializing configuration for a new cluster, using the `cozystack` preset: + +```bash +mkdir -p cozystack-cluster +cd cozystack-cluster +talm init --preset cozystack --name mycluster +``` + +The structure of the project mostly mirrors an ordinary Helm chart: + +- `charts` - a directory that includes a common library chart with functions used for querying information from Talos Linux. +- `Chart.yaml` - a file containing the common information about your project; the name of the chart is used as the name for the newly created cluster. +- `templates` - a directory used to describe templates for the configuration generation. +- `secrets.yaml` - a file containing secrets for your cluster. +- `values.yaml` - a common values file used to provide parameters for the templating. +- `nodes` - an optional directory used to describe and store generated configuration for nodes. + + +### 2.2. Edit Configuration Values and Templates + +The power of Talm is in templating. +There are several files with source values and templates which you can edit: `Chart.yaml`, `values.yaml`, and `templates/*`. +Talm uses these values and templates to generate Talos configuration for all nodes in the cluster, both control plane and workers. + +All configuration values that are often changed, are placed in `values.yaml`: + +```yaml +## Used to access the cluster's control plane +endpoint: "https://192.168.100.10:6443" +## Cozystack API cluster domain — used by services and tenant K8s clusters to access the management cluster +clusterDomain: cozy.local +## Floating IP — should be an unused IP in the same subnet as nodes +floatingIP: 192.168.100.10 +## Talos source image: use the latest available version +## https://github.com/cozystack/cozystack/pkgs/container/cozystack%2Ftalos +image: "ghcr.io/cozystack/cozystack/talos:v1.10.5" +## Pod subnet — used to assign IPs to pods +podSubnets: +- 10.244.0.0/16 +## Service subnet — used to assign IPs to services +serviceSubnets: +- 10.96.0.0/16 +## Subnet with node IPs +advertisedSubnets: +- 192.168.100.0/24 +## Add OIDC issuer URL to enable OIDC — see comments below. +oidcIssuerUrl: "" +certSANs: [] +``` + +You don't need to fill in the node IPs at this step. +Instead, you will provide them later, when you generate node configurations. + + +### 2.3 Add Keycloak Configuration + +By default, the cluster will be accessible only by authentication with a token. +However, you can configure an OIDC provider to use account-based authentication. +This configuration starts at this step and continues later, after installing Cozystack. + +To configure Keycloak as an OIDC provider, apply the following changes to the templates: + +- For Talm v0.6.6 or later: in `./templates/_helpers.tpl` replace `keycloak.example.com` with `keycloak.`. + +- For Talm earlier than v0.6.6, update `./templates/_helpers.tpl` in the following way: + + ```yaml + cluster: + apiServer: + extraArgs: + oidc-issuer-url: "https://keycloak.example.com/realms/cozy" + oidc-client-id: "kubernetes" + oidc-username-claim: "preferred_username" + oidc-groups-claim: "groups" + ``` + + +## 3. Generate Node Configuration Files + +Next step is to make node configuration files from templates. +Create a `nodes` directory and collect the information from each node into a node-specific file: + +```bash +mkdir nodes +talm template -e 192.168.123.11 -n 192.168.123.11 -t templates/controlplane.yaml -i > nodes/node1.yaml +talm template -e 192.168.123.12 -n 192.168.123.12 -t templates/controlplane.yaml -i > nodes/node2.yaml +talm template -e 192.168.123.13 -n 192.168.123.13 -t templates/controlplane.yaml -i > nodes/node3.yaml +``` + +The `--insecure` (`-i`) parameter is required because Talm must retrieve configuration data +from Talos nodes that are not initialized yet, awaiting in maintenance mode, and therefore unable to accept an authenticated connection. +The nodes will be initialized only on the next step, with `talm apply`. + + +## 4. Apply Configuration and Bootstrap a Cluster + +At this point, the configuration files in `node/*.yaml` are ready for applying to nodes. + + +### 4.1 Apply Configuration Files + +Use `talm apply` to apply the configuration files to the corresponding nodes: + +```bash +talm apply -f nodes/node1.yaml -i +talm apply -f nodes/node2.yaml -i +talm apply -f nodes/node3.yaml -i +``` + +This command initializes nodes, setting up authenticated connection, so that `-i` (`--insecure`) won't be required further on. +If the command succeeded, it will return the node's IP: + +```console +$ talm apply -f nodes/node1.yaml -i +- talm: file=nodes/node1.yaml, nodes=[192.168.123.11], endpoints=[192.168.123.11] +``` + +Later on, you can also use the following options with `talm apply`: + +- `--dry-run` - dry run mode will show a diff with the existing configuration without making changes. +- `-m try` - try mode will roll back the configuration in 1 minute. + + +### 4.2 Wait for Reboot + +Wait until all nodes have rebooted. +If an installation media was used, such as a USB stick, remove it to ensure that the nodes boot from the internal disk. + +When nodes are ready, they will expose port `50000`, which is a sign that the node has completed Talos configuration and rebooted. +If you need to automate the node readiness check, consider this example: + +```bash +timeout 60 sh -c 'until \ + nc -nzv 192.168.123.11 50000 && \ + nc -nzv 192.168.123.12 50000 && \ + nc -nzv 192.168.123.13 50000; \ + do sleep 1; done' +``` + + +### 4.3. Bootstrap Kubernetes + +Bootstrap the Kubernetes cluster by running `talm bootstrap` against one of the control plane nodes: + +```bash +talm bootstrap -f nodes/node1.yaml +``` + + +## 5. Access the Kubernetes Cluster + +At this point, the Kubernetes cluster is ready to install Cozystack. + +Before this step, you were interacting with the cluster using Talos API and `talosctl`. +Further steps require Kubernetes API and `kubectl`, which require a `kubeconfig`. + + +### 5.1. Get a kubeconfig + +Use Talm to generate an administrative `kubeconfig`: + +```bash +talm kubeconfig -f nodes/node1.yaml +``` + +This command will produce a `kubeconfig` file in the current directory. + + +### 5.2. Change Cluster API URL + +The `kubeconfig` now has the Cluster API URL set to the floating IP (VIP) in the private subnet. + +If you’re using a public IP instead of floatingIP, update the endpoint accordingly. +Edit the `kubeconfig` — change the cluster URL to a public IP of one of the nodes: + +```diff + apiVersion: v1 + clusters: + - cluster: + certificate-authority-data: ... +- server: https://10.0.1.101:6443 ++ server: https://12.34.56.101:6443 +``` + + +### 5.3. Activate kubeconfig + +Finally, set up the `KUBECONFIG` variable or use other tools to make this kubeconfig +accessible to your `kubectl` client: + +```bash +export KUBECONFIG=$PWD/kubeconfig +``` + +{{% alert color="info" %}} +To make this `kubeconfig` permanently available, you can make it the default one (`~/.kube/config`), +use `kubectl config use-context`, or employ a variety of other methods. +Check out the [Kubernetes documentation on cluster access](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/). +{{% /alert %}} + + +### 5.4. Check Cluster Availability + +Check that the cluster is available: + +```bash +kubectl get ns +``` + +Example output: + +```console +NAME STATUS AGE +default Active 7m56s +kube-node-lease Active 7m56s +kube-public Active 7m56s +kube-system Active 7m56s +``` + +### 5.5. Check Node State + +Check the state of cluster nodes: + +```bash +kubectl get nodes +``` + +Output shows node status and Kubernetes version: + +```console +NAME STATUS ROLES AGE VERSION +node1 NotReady control-plane 7m56s v1.33.1 +node2 NotReady control-plane 7m56s v1.33.1 +node3 NotReady control-plane 7m56s v1.33.1 +``` + +Note that all nodes show `STATUS: NotReady`, which is normal at this step. +This happens because the default [Kubernetes CNI plugin](https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/) +was disabled in the Talos configuration to enable Cozystack installing its own CNI plugin. + + +## Further Steps + +Now you have a Kubernetes cluster bootstrapped and ready for installing Cozystack. +To complete the installation, follow the deployment guide, starting with the +[Install Cozystack]({{% ref "/docs/v0/getting-started/install-cozystack" %}}) section. diff --git a/content/en/docs/v0/install/kubernetes/talos-bootstrap.md b/content/en/docs/v0/install/kubernetes/talos-bootstrap.md new file mode 100644 index 00000000..712ddd44 --- /dev/null +++ b/content/en/docs/v0/install/kubernetes/talos-bootstrap.md @@ -0,0 +1,213 @@ +--- +title: Use talos-bootstrap script to bootstrap a Cozystack cluster +linkTitle: talos-bootstrap +description: "`talos-bootstrap` is a CLI for step-by-step cluster bootstrapping, made by Cozystack devs.
Recommended for first deployments." +weight: 10 +aliases: + - /docs/v0/talos/bootstrap/talos-bootstrap + - /docs/v0/talos/configuration/talos-bootstrap + - /docs/v0/operations/talos/configuration/talos-bootstrap + - /docs/install/kubernetes/talos-bootstrap + - /docs/talos/bootstrap/talos-bootstrap + - /docs/talos/configuration/talos-bootstrap + - /docs/operations/talos/configuration/talos-bootstrap +--- + +[talos-bootstrap](https://github.com/cozystack/talos-bootstrap/) is an interactive script for bootstrapping Kubernetes clusters on Talos OS. + +It was created by Cozystack developers to simplify the installation of Talos Linux on bare-metal nodes in a user-friendly manner. + +## 1. Install Dependencies + +Install the following dependencies + +- `talosctl` +- `dialog` +- `nmap` + +Download the latest version of `talos-bootstrap` from the [releases page](https://github.com/cozystack/talos-bootstrap/releases) or directly from the trunk: + +```bash +curl -fsSL -o /usr/local/bin/talos-bootstrap \ + https://github.com/cozystack/talos-bootstrap/raw/master/talos-bootstrap +chmod +x /usr/local/bin/talos-bootstrap +talos-bootstrap --help +``` + +## 2. Prepare Configuration Files + +1. Start by making a configuration directory for the new cluster: + + ```bash + mkdir -p cluster1 + cd cluster1 + ``` + +1. Make a configuration patch file `patch.yaml` with common node settings, using the following example: + + ```yaml + machine: + kubelet: + nodeIP: + validSubnets: + - 192.168.100.0/24 + extraConfig: + maxPods: 512 + sysctls: + net.ipv4.neigh.default.gc_thresh1: "4096" + net.ipv4.neigh.default.gc_thresh2: "8192" + net.ipv4.neigh.default.gc_thresh3: "16384" + kernel: + modules: + - name: openvswitch + - name: drbd + parameters: + - usermode_helper=disabled + - name: zfs + - name: spl + - name: vfio_pci + - name: vfio_iommu_type1 + install: + image: ghcr.io/cozystack/cozystack/talos:v1.10.3 + registries: + mirrors: + docker.io: + endpoints: + - https://mirror.gcr.io + files: + - content: | + [plugins] + [plugins."io.containerd.grpc.v1.cri"] + device_ownership_from_security_context = true + [plugins."io.containerd.cri.v1.runtime"] + device_ownership_from_security_context = true + path: /etc/cri/conf.d/20-customization.part + op: create + - op: overwrite + path: /etc/lvm/lvm.conf + permissions: 0o644 + content: | + backup { + backup = 0 + archive = 0 + } + devices { + global_filter = [ "r|^/dev/drbd.*|", "r|^/dev/dm-.*|", "r|^/dev/zd.*|" ] + } + + cluster: + network: + cni: + name: none + dnsDomain: cozy.local + podSubnets: + - 10.244.0.0/16 + serviceSubnets: + - 10.96.0.0/16 + ``` + +1. Make another configuration patch file `patch-controlplane.yaml` with settings exclusive to control plane nodes: + + ```yaml + machine: + nodeLabels: + node.kubernetes.io/exclude-from-external-load-balancers: + $patch: delete + cluster: + allowSchedulingOnControlPlanes: true + controllerManager: + extraArgs: + bind-address: 0.0.0.0 + scheduler: + extraArgs: + bind-address: 0.0.0.0 + apiServer: + certSANs: + - 127.0.0.1 + proxy: + disabled: true + discovery: + enabled: false + etcd: + advertisedSubnets: + - 192.168.100.0/24 + ``` + +1. To configure Keycloak as an OIDC provider, add the following section to `patch-controlplane.yaml`, replacing `example.com` with your domain: + + ```yaml + cluster: + apiServer: + extraArgs: + oidc-issuer-url: "https://keycloak.example.com/realms/cozy" + oidc-client-id: "kubernetes" + oidc-username-claim: "preferred_username" + oidc-groups-claim: "groups" + ``` + +## 3. Bootstrap and Access the Cluster + +Once you have the configuration files ready, run `talos-bootstrap` on each node of a cluster: + +```bash +# in the cluster config directory +talos-bootstrap install +``` + +{{% alert color="warning" %}} +:warning: If your nodes are running on an external network, you must specify each node explicitly in the argument: +```bash +talos-bootstrap install -n 1.2.3.4 +``` + +Where `1.2.3.4` is the IP-address of your remote node. +{{% /alert %}} + +{{% alert color="info" %}} +`talos-bootstrap` will enable bootstrap on the first configured node in a cluster. +If you want to re-bootstrap the etcd cluster, remove the line `BOOTSTRAP_ETCD=false` from your `cluster.conf` file. +{{% /alert %}} + +Repeat this step for the other nodes in a cluster. + +After completing the `install` command, `talos-bootstrap` saves the cluster's config as `./kubeconfig`. + +Set up `kubectl` to use this new config by exporting the `KUBECONFIG` variable: + +```bash +export KUBECONFIG=$PWD/kubeconfig +``` + +{{% alert color="info" %}} +To make this `kubeconfig` permanently available, you can make it the default one (`~/.kube/config`), +use `kubectl config use-context`, or employ a variety of other methods. +Check out the [Kubernetes documentation on cluster access](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/). +{{% /alert %}} + +Check that the cluster is available with this new `kubeconfig`: + +```bash +kubectl get ns +``` + +Example output: + +```console +NAME STATUS AGE +default Active 7m56s +kube-node-lease Active 7m56s +kube-public Active 7m56s +kube-system Active 7m56s +``` + +{{% alert color="info" %}} +:warning: All nodes will show as `READY: False`, which is normal at this step. +This happens because the default CNI plugin was disabled in the previous step to enable Cozystack installing its own CNI plugin. +{{% /alert %}} + + +## Further Steps + +Now you have a Kubernetes cluster bootstrapped and ready for installing Cozystack. +To complete the installation, follow the deployment guide, starting with the +[Install Cozystack]({{% ref "/docs/v0/getting-started/install-cozystack" %}}) section. diff --git a/content/en/docs/v0/install/kubernetes/talosctl.md b/content/en/docs/v0/install/kubernetes/talosctl.md new file mode 100644 index 00000000..8797f7bf --- /dev/null +++ b/content/en/docs/v0/install/kubernetes/talosctl.md @@ -0,0 +1,270 @@ +--- +title: Use talosctl to bootstrap a Cozystack cluster +linkTitle: talosctl +description: "`talosctl` is the default CLI of Talos Linux, requiring more boilerplate code, but giving full flexibility in configuration." +weight: 15 +aliases: + - /docs/v0/talos/bootstrap/talosctl + - /docs/v0/talos/configuration/talosctl + - /docs/v0/operations/talos/configuration/talosctl + - /docs/install/kubernetes/talosctl + - /docs/talos/bootstrap/talosctl + - /docs/talos/configuration/talosctl + - /docs/operations/talos/configuration/talosctl +--- + +This guide explains how to prepare a Talos Linux cluster for deploying Cozystack using `talosctl`, +a specialized command line tool for managing Talos. + +## Prerequisites + +By the start of this guide you should have Talos OS booted from ISO, but not initialized (bootstrapped), on several nodes. +These nodes should belong to one subnet or have public IPs. + +This guide uses an example where the nodes of a cluster are located in the subnet `192.168.123.0/24`, having the following IP addresses: + +- `192.168.123.11` +- `192.168.123.12` +- `192.168.123.13` + +IP `192.168.123.10` is an internal address which does not belong to any of these nodes, but is created by Talos. +It's used as VIP. + +{{% alert color="info" %}} +If you are using DHCP, you might not be aware of the IP addresses assigned to your nodes. +You can use `nmap` to find them, providing your network mask (`192.168.123.0/24` in the example): + +```bash +nmap -Pn -n -p 50000 192.168.123.0/24 -vv | grep 'Discovered' +``` + +Example output: + +```console +Discovered open port 50000/tcp on 192.168.123.11 +Discovered open port 50000/tcp on 192.168.123.12 +Discovered open port 50000/tcp on 192.168.123.13 +``` +{{% /alert %}} + +## 1. Prepare Configuration Files + +1. Start by making a configuration directory for the new cluster: + + ```bash + mkdir -p cluster1 + cd cluster1 + ``` + +1. Generate a secrets file. + These secrets will later be injected in the configuration and used to establish authenticated connections to Talos nodes: + + ```bash + talosctl gen secrets + ``` + +1. Make a configuration patch file `patch.yaml`: + + ```yaml + machine: + kubelet: + nodeIP: + validSubnets: + - 192.168.123.0/24 + extraConfig: + maxPods: 512 + sysctls: + net.ipv4.neigh.default.gc_thresh1: "4096" + net.ipv4.neigh.default.gc_thresh2: "8192" + net.ipv4.neigh.default.gc_thresh3: "16384" + kernel: + modules: + - name: openvswitch + - name: drbd + parameters: + - usermode_helper=disabled + - name: zfs + - name: spl + - name: vfio_pci + - name: vfio_iommu_type1 + install: + image: ghcr.io/cozystack/cozystack/talos:v1.10.3 + registries: + mirrors: + docker.io: + endpoints: + - https://mirror.gcr.io + files: + - content: | + [plugins] + [plugins."io.containerd.cri.v1.runtime"] + device_ownership_from_security_context = true + path: /etc/cri/conf.d/20-customization.part + op: create + - op: overwrite + path: /etc/lvm/lvm.conf + permissions: 0o644 + content: | + backup { + backup = 0 + archive = 0 + } + devices { + global_filter = [ "r|^/dev/drbd.*|", "r|^/dev/dm-.*|", "r|^/dev/zd.*|" ] + } + + cluster: + apiServer: + extraArgs: + oidc-issuer-url: "https://keycloak.example.org/realms/cozy" + oidc-client-id: "kubernetes" + oidc-username-claim: "preferred_username" + oidc-groups-claim: "groups" + network: + cni: + name: none + dnsDomain: cozy.local + podSubnets: + - 10.244.0.0/16 + serviceSubnets: + - 10.96.0.0/16 + ``` + +1. Make another configuration patch file `patch-controlplane.yaml` with settings exclusive to control plane nodes: + + Note that VIP address is used for `machine.network.interfaces[0].vip.ip`: + + ```yaml + machine: + nodeLabels: + node.kubernetes.io/exclude-from-external-load-balancers: + $patch: delete + network: + interfaces: + - interface: eth0 + vip: + ip: 192.168.123.10 + cluster: + allowSchedulingOnControlPlanes: true + controllerManager: + extraArgs: + bind-address: 0.0.0.0 + scheduler: + extraArgs: + bind-address: 0.0.0.0 + apiServer: + certSANs: + - 127.0.0.1 + proxy: + disabled: true + discovery: + enabled: false + etcd: + advertisedSubnets: + - 192.168.123.0/24 + ``` + + +## 2. Generate Node Configuration Files + +Once you have patch files ready, generate the configuration files for each node. +Note that it's using the three files generated in the previous step: `secrets.yaml`, `patch.yaml`, and `patch-controlplane.yaml`. + +URL `192.168.123.10:6443` is the same VIP as mentioned above, and port `6443` is a standard Kubernetes API port. + +```bash +talosctl gen config \ + cozystack https://192.168.123.10:6443 \ + --with-secrets secrets.yaml \ + --config-patch=@patch.yaml \ + --config-patch-control-plane @patch-controlplane.yaml +export TALOSCONFIG=$PWD/talosconfig +``` + +`192.168.123.11`, `192.168.123.12`, and `192.168.123.13` are nodes. +In this setup all nodes are management nodes. + +## 3. Apply Node Configuration + +Apply configuration to all nodes, not only management nodes + +``` +talosctl apply -f controlplane.yaml -n 192.168.123.11 -e 192.168.123.11 -i +talosctl apply -f controlplane.yaml -n 192.168.123.12 -e 192.168.123.12 -i +talosctl apply -f controlplane.yaml -n 192.168.123.13 -e 192.168.123.13 -i +``` + +Further on, you can also use the following options: + +- `--dry-run` - dry run mode will show a diff with the existing configuration. +- `-m try` - try mode will roll back the configuration in 1 minute. + +### 3.1. Wait for Nodes Rebooting + +Wait until all nodes have rebooted. +Remove the installation media (e.g., USB stick) to ensure that the nodes boot from the internal disk. + +Ready nodes will expose port 50000 which is a sign that the node had completed Talos configuration and rebooted. + +If you need to wait for node readiness in a script, consider this example: + +```bash +timeout 60 sh -c 'until nc -nzv 192.168.123.11 50000 && \ + nc -nzv 192.168.123.12 50000 && \ + nc -nzv 192.168.123.13 50000; \ + do sleep 1; done' +``` + +## 4. Bootstrap and Access the Cluster + +Run `talosctl bootstrap` on a single control-plane node — it is enough to bootstrap the whole cluster: + +```bash +talosctl bootstrap -n 192.168.123.11 -e 192.168.123.11 +``` + +To access the cluster, generate an administrative `kubeconfig`: + +```bash +talosctl kubeconfig -n 192.168.123.11 -e 192.168.123.11 kubeconfig +``` + +Set up `kubectl` to use this new config by exporting the `KUBECONFIG` variable: + +```bash +export KUBECONFIG=$PWD/kubeconfig +``` + +{{% alert color="info" %}} +To make this `kubeconfig` permanently available, you can make it the default one (`~/.kube/config`), +use `kubectl config use-context`, or employ a variety of other methods. +Check out the [Kubernetes documentation on cluster access](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/). +{{% /alert %}} + +Check that the cluster is available with this new `kubeconfig`: + +```bash +kubectl get ns +``` + +Example output: + +```console +NAME STATUS AGE +default Active 7m56s +kube-node-lease Active 7m56s +kube-public Active 7m56s +kube-system Active 7m56s +``` + +{{% alert color="info" %}} +:warning: All nodes will show as `READY: False`, which is normal at this step. +This happens because the default CNI plugin was disabled in the previous step to enable Cozystack installing its own CNI plugin. +{{% /alert %}} + + +## Further Steps + +Now you have a Kubernetes cluster bootstrapped and ready for installing Cozystack. +To complete the installation, follow the deployment guide, starting with the +[Install Cozystack]({{% ref "/docs/v0/getting-started/install-cozystack" %}}) section. diff --git a/content/en/docs/v0/install/kubernetes/troubleshooting.md b/content/en/docs/v0/install/kubernetes/troubleshooting.md new file mode 100644 index 00000000..9b1ef461 --- /dev/null +++ b/content/en/docs/v0/install/kubernetes/troubleshooting.md @@ -0,0 +1,92 @@ +--- +title: Troubleshooting Kubernetes Installation +linkTitle: Troubleshooting +description: "Instructions for resolving typical problems that can occur when installing Kubernetes with `talm`, `talos-bootstrap`, or `talosctl`." +weight: 40 +aliases: + - /docs/install/kubernetes/troubleshooting +--- + +This page has instructions for resolving typical problems that can occur when installing Kubernetes with `talm`, `talos-bootstrap`, or `talosctl`. + +## No Talos nodes in maintenance mode found! + +If you encounter issues with the `talos-bootstrap` script not detecting any nodes, follow these steps to diagnose and resolve the issue: + +1. Verify Network Segment + + Ensure that you are running the script within the same network segment as the nodes. This is crucial for the script to be able to communicate with the nodes. + +1. Use Nmap to Discover Nodes + + Check if `nmap` can discover your node by running the following command: + + ```bash + nmap -Pn -n -p 50000 192.168.0.0/24 + ``` + + This command scans for nodes in the network that are listening on port `50000`. + The output should list all the nodes in the network segment that are listening on this port, indicating that they are reachable. + +1. Verify talosctl Connectivity + + Next, verify that `talosctl` can connect to a specific node, especially if the node is in maintenance mode: + + ```bash + talosctl -e "${node}" -n "${node}" get machinestatus -i + ``` + + Receiving an error like the following usually means your local `talosctl` binary is outdated: + + ```console + rpc error: code = Unimplemented desc = unknown service resource.ResourceService + ``` + + Updating `talosctl` to the latest version should resolve this issue. + +1. Run talos-bootstrap in debug mode + + If the previous steps don’t help, run `talos-bootstrap` in debug mode to gain more insight. + + Execute the script with the `-x` option to enable debug mode: + + ```bash + bash -x talos-bootstrap + ``` + + Pay attention to the last command displayed before the error; it often indicates the command that failed and can provide clues for further troubleshooting. + +# fix ext-lldpd on talos nodes +Waiting a runtime service in talos cause it to stay on booting in talos console, if you want to use lldpd you can patch the nodes, +proceed if you have connectivity with `talosctl` +```bash +cat > lldpd.patch.yaml < -e +``` + +Verify which nodes have lldpd installed +```bash +node_net='192.168.100.0/24' +nmap -Pn -n -T4 -p50000 --open -oG - $node_net | awk '/50000\/open/ { system("talosctl get extensions -n "$2" -e "$2" | grep lldpd") }' +``` + +If you want to patch all nodes: +```bash +nmap -Pn -n -T4 -p50000 --open -oG - $node_net | awk '/50000\/open/ {print "talosctl patch mc -p @lldpd.patch.yaml -n "$2" -e "$2" "}' +``` + +Verify state on talos console +```bash +talosctl dashboard -n $(nmap -Pn -n -T4 -p50000 --open -oG - $node_net | awk '/50000\/open/ {print $2}' | paste -sd,) +``` \ No newline at end of file diff --git a/content/en/docs/v0/install/providers/_index.md b/content/en/docs/v0/install/providers/_index.md new file mode 100644 index 00000000..53790a2b --- /dev/null +++ b/content/en/docs/v0/install/providers/_index.md @@ -0,0 +1,18 @@ +--- +title: "Deploying Cozystack Cluster on Clouds and Hosting Providers" +linkTitle: "Provider-Specific Guides" +description: "Guides for deploying Cozystack clusters on specific cloud and hosting providers." +weight: 40 +aliases: + - /docs/v0/talos/install + - /docs/install/providers + - /docs/talos/install +--- + +This section has guides for deploying Cozystack clusters on specific cloud and hosting providers. +They explain all steps and details of the deployment process, including: + +- Specifics of the provider's infrastructure and networking +- Installation of Talos Linux with a method that suits the provider +- Configuration of the Kubernetes cluster including provider-specific settings for networking, storage, and other resources +- Installation of Cozystack on the Kubernetes cluster with provider-specific components and configurations \ No newline at end of file diff --git a/content/en/docs/v0/install/providers/hetzner.md b/content/en/docs/v0/install/providers/hetzner.md new file mode 100644 index 00000000..c4bb604a --- /dev/null +++ b/content/en/docs/v0/install/providers/hetzner.md @@ -0,0 +1,445 @@ +--- +title: How to install Cozystack in Hetzner +linkTitle: Hetzner.com +description: "How to install Cozystack in Hetzner" +weight: 30 +aliases: + - /docs/v0/operations/talos/installation/hetzner + - /docs/v0/talos/installation/hetzner + - /docs/v0/talos/install/hetzner + - /docs/install/providers/hetzner + - /docs/operations/talos/installation/hetzner + - /docs/talos/installation/hetzner + - /docs/talos/install/hetzner +--- + +This guide will help you to install Cozystack on a dedicated server from [Hetzner](https://www.hetzner.com/). +There are several steps to follow, including preparing the infrastructure, installing Talos Linux, configuring cloud-init, and bootstrapping the cluster. + + +## Prepare Infrastructure and Networking + +Installation on Hetzner includes the common [hardware requirements]({{% ref "/docs/v0/install/hardware-requirements" %}}) with several additions. + +### Networking Options + +There are two options for network connectivity between Cozystack nodes in the cluster: + +- **Creating a subnet using vSwitch.** + This option is recommended for production environments. + + For this option, dedicated servers must be deployed on [Hetzner robot](https://robot.hetzner.com/). + Hetzner also requires using its own load balancer, RobotLB, in place of Cozystack's default MetalLB. + Cozystack includes RobotLB as an optional component since release v0.35.0. + +- **Using only dedicated servers' public IPs.** + This option is valid for a proof-of-concept installation, but not recommended for production. + + +### Configure Subnet with vSwitch + +Complete the following steps to prepare your servers for installing Cozystack: + +1. Make network configuration settings in Hetzner (only for the **vSwitch subnet** option). + + Complete the steps from the [Prerequisites section](https://github.com/Intreecom/robotlb/blob/master/README.md#prerequisites) + of RobotLB's README: + + 1. Create a [vSwitch](https://docs.hetzner.com/cloud/networks/connect-dedi-vswitch/). + 2. Use it to assign IPs to your dedicated servers on Hetzner. + 3. Create a subnet to [connect your dedicated servers](https://docs.hetzner.com/cloud/networks/connect-dedi-vswitch/). + + Note that you don't need to deploy RobotLB manually. + Instead, you will configure Cozystack to install it as an optional component on the step "Installing Cozystack" of this guide. + +### Disable Secure Boot + +1. Make sure that Secure Boot is disabled. + + Secure Boot is currently not supported in Talos Linux. + If your server is configured to use Secure Boot, you need to disable this feature in your BIOS. + Otherwise, it will block the server from booting after Talos Linux installation. + + Check it with the following command: + + ```console + # mokutil --sb-state + SecureBoot disabled + Platform is in Setup Mode + ``` + +For the rest of the guide let's assume that we have the following network configuration: + +- Hetzner cloud network is `10.0.0.0/16`, named `network-1`. +- vSwitch subnet with dedicated servers is `10.0.1.0/24` +- vSwitch VLAN ID is `4000` + +- There are three dedicated servers with the following public and private IPs: + - `node1`, public IP `12.34.56.101`, vSwitch subnet IP `10.0.1.101` + - `node2`, public IP `12.34.56.102`, vSwitch subnet IP `10.0.1.102` + - `node3`, public IP `12.34.56.103`, vSwitch subnet IP `10.0.1.103` + +## 1. Install Talos Linux + +The first stage of deploying Cozystack is to install Talos Linux on the dedicated servers. + +Talos is a Linux distribution made for running Kubernetes in the most secure and efficient way. +To learn why Cozystack adopted Talos as the foundation of the cluster, +read [Talos Linux in Cozystack]({{% ref "/docs/v0/guides/talos" %}}). + +### 1.1 Install boot-to-talos in Rescue Mode + +Talos will be booted from the Hetzner rescue system using the [`boot-to-talos`](https://github.com/cozystack/boot-to-talos) utility. +Later, when you apply Talm configuration, Talos will be installed to disk. +Run these steps on each dedicated server. + +1. Switch your server into rescue mode and log in to the server using SSH. + +1. Identify the disk that will be used for Talos later (for example, `/dev/nvme0n1`). + +1. Download and install `boot-to-talos`: + + ```bash + curl -sSL https://github.com/cozystack/boot-to-talos/raw/refs/heads/main/hack/install.sh | sh -s + ``` + + After this, the `boot-to-talos` binary should be available in your `PATH`: + + ```bash + boot-to-talos -h + ``` + +### 1.2. Install Talos Linux with boot-to-talos + +1. Start the installer: + + ```bash + boot-to-talos + ``` + + When prompted: + + - Select mode `1. boot`. + - Confirm or change the Talos installer image. + The default value points to the Cozystack Talos image (the default Cozystack image is suitable), + - Provide network settings (interface name, IP address, netmask, gateway) matching the configuration you prepared earlier + (vSwitch subnet or public IPs). + - Optionally configure a serial console if you use it for remote access. + + The utility will download the Talos installer image, extract the kernel and initramfs, and boot the node into Talos Linux + (using the kexec mechanism) without modifying the disks. + +### 1.3. Boot into Talos Linux + +After `boot-to-talos` finishes, the server reboots automatically into Talos Linux in maintenance mode. + +Repeat the same procedure for all dedicated servers in the cluster. +Once all nodes are booted into Talos, proceed to the next section and configure them using Talm. + +## 2. Install Kubernetes Cluster + +Now, when Talos is booted in the maintenance mode, it should receive configuration and set up a Kubernetes cluster. +There are [several options]({{% ref "/docs/v0/install/kubernetes" %}}) to write and apply Talos configuration. +This guide will focus on [Talm](https://github.com/cozystack/talm), Cozystack's own Talos configuration management tool. + +This part of the guide is based on the generic [Talm guide]({{% ref "/docs/v0/install/kubernetes/talm" %}}), +but has instructions and examples specific to Hetzner. + +### 2.1. Prepare Node Configuration with Talm + +1. Start by installing the latest version of Talm for your OS, if you don't have it yet: + + ```bash + curl -sSL https://github.com/cozystack/talm/raw/refs/heads/main/hack/install.sh | sh -s + ``` + +1. Make a directory for cluster configuration and initialize a Talm project in it. + + Note that Talm has a built-in preset for Cozystack, which we use with `--preset cozystack`: + + ```bash + mkdir -p hetzner-cluster + cd hetzner-cluster + talm init --preset cozystack --name hetzner + ``` + + A bunch of files is now created in the `hetzner-cluster` directory. + To learn more about the role of each file, refer to the + [Talm guide]({{% ref "/docs/v0/install/kubernetes/talm#1-initialize-cluster-configuration" %}}). + +1. Edit `values.yaml`, modifying the following values: + + - `advertisedSubnets` list should have the vSwitch subnet as an item. + - `endpoint` and `floatingIP` should use an unassigned IP from this subnet. + This IP will be used to access the cluster API with `talosctl` and `kubectl`. + - `podSubnets` and `serviceSubnets` should have other subnets from the Hetzner cloud network, + which don't overlap each other and the vSwitch subnet. + + ```yaml + endpoint: "https://10.0.1.100:6443" + clusterDomain: cozy.local + # floatingIP points to the primary etcd node + floatingIP: 10.0.1.100 + image: "ghcr.io/cozystack/cozystack/talos:v1.9.5" + podSubnets: + - 10.244.0.0/16 + serviceSubnets: + - 10.96.0.0/16 + advertisedSubnets: + # vSwitch subnet + - 10.0.1.0/24 + oidcIssuerUrl: "" + certSANs: [] + ``` + +1. Create node configuration files from templates and values: + + ```bash + mkdir -p nodes + talm template -e 12.34.56.101 -n 12.34.56.101 -t templates/controlplane.yaml -i > nodes/node1.yaml + talm template -e 12.34.56.102 -n 12.34.56.102 -t templates/controlplane.yaml -i > nodes/node2.yaml + talm template -e 12.34.56.103 -n 12.34.56.103 -t templates/controlplane.yaml -i > nodes/node3.yaml + ``` + + This guide assumes that you have only three dedicated servers, so they all must be control plane nodes. + If you have more and want to separate control plane and worker nodes, use `templates/worker.yaml` to produce worker configs: + + ```bash + taml template -e 12.34.56.104 -n 12.34.56.104 -t templates/worker.yaml -i > nodes/worker1.yaml + ``` + +1. Edit each node's configuration file, adding the VLAN configuration. + + Use the following diff as an example and note that for each node its subnet IP should be used: + + ```diff + machine: + network: + interfaces: + - deviceSelector: + # ... + - vip: + - ip: 10.0.1.100 + + vlans: + + - addresses: + + # different for each node + + - 10.0.1.101/24 + + routes: + + - network: 10.0.0.0/16 + + gateway: 10.0.1.1 + + vlanId: 4000 + + vip: + + ip: 10.0.1.100 + ``` + +### 2.2. Apply Node Configuration + +1. Once the configuration files are ready, apply configuration to each node: + + ```bash + talm apply -f nodes/node1.yaml -i + talm apply -f nodes/node2.yaml -i + talm apply -f nodes/node3.yaml -i + ``` + + This command initializes nodes, setting up authenticated connection, so that `-i` (`--insecure`) won't be required further on. + If the command succeeded, it will return the node's IP: + + ```console + $ talm apply -f nodes/node1.yaml -i + - talm: file=nodes/node1.yaml, nodes=[12.34.56.101], endpoints=[12.34.56.101] + ``` + +1. Wait until all nodes have rebooted and proceed to the next step. + When nodes are ready, they will expose port `50000`, which is a sign that the node has completed Talos and rebooted. + + If you need to automate the node readiness check, consider this example: + + ```bash + timeout 60 sh -c 'until \ + nc -nzv 12.34.56.101 50000 && \ + nc -nzv 12.34.56.102 50000 && \ + nc -nzv 12.34.56.103 50000; \ + do sleep 1; done' + ``` + +1. Bootstrap the Kubernetes cluster from one of the control plane nodes: + + ```bash + talm bootstrap -f nodes/node1.yaml + ``` + +1. Generate an administrative `kubeconfig` to access the cluster using the same control plane node: + + ```bash + talm kubeconfig -f nodes/node1.yaml + ``` + +1. Edit the server URL in the `kubeconfig` to a public IP + + ```diff + apiVersion: v1 + clusters: + - cluster: + - server: https://10.0.1.101:6443 + + server: https://12.34.56.101:6443 + ``` + +1. Finally, set up the `KUBECONFIG` variable or other tools making this config + accessible to your `kubectl` client: + + ```bash + export KUBECONFIG=$PWD/kubeconfig + ``` + +1. Check that the cluster is available with this new `kubeconfig`: + + ```bash + kubectl get ns + ``` + + Example output: + + ```console + NAME STATUS AGE + default Active 7m56s + kube-node-lease Active 7m56s + kube-public Active 7m56s + kube-system Active 7m56s + ``` + +At this point you have dedicated servers with Talos Linux and a Kubernetes cluster deployed on them. +You also have a `kubeconfig` which you will use to access the cluster using `kubectl` and install Cozystack. + +## 3. Install Cozystack + +The final stage of deploying a Cozystack cluster on Hetzner is to install Cozystack on a prepared Kubernetes cluster. + +### 3.1. Start Cozystack Installer + +1. Start by making a Cozystack configuration file, **cozystack-config.yaml**. + + Note that this file is reusing the subnets for pods and services which were used in `values.yaml` before producing Talos configuration with Talm. + Also note how Cozystack's default load balancer MetalLB is replaced with RobotLB using `bundle-disable` and `bundle-enable`. + + Replace `example.org` with a routable fully-qualified domain name (FQDN) that you're going to use for your Cozystack-based platform. + If you don't have one ready, you can use [nip.io](https://nip.io/) with dash notation. + + ```yaml + apiVersion: v1 + kind: ConfigMap + metadata: + name: cozystack + namespace: cozy-system + data: + bundle-name: "paas-full" + bundle-disable: "metallb" + bundle-enable: "hetzner-robotlb" + root-host: "example.org" + api-server-endpoint: "https://api.example.org:443" + expose-services: "dashboard,api" + ## podSubnets from the node config + ipv4-pod-cidr: "10.244.0.0/16" + ipv4-pod-gateway: "10.244.0.1" + ## serviceSubnets from the node config + ipv4-svc-cidr: "10.96.0.0/16" + ``` + +1. Next, create a namespace `cozy-system` and install Cozystack system components: + + ```bash + kubectl create ns cozy-system + kubectl apply -f cozystack-config.yaml + kubectl apply -f https://github.com/cozystack/cozystack/releases/latest/download/cozystack-installer.yaml + ``` + + The last command starts Cozystack installation, which will last for some time. + You can track the logs of installer, if you wish: + + ```bash + kubectl logs -n cozy-system deploy/cozystack -f + ``` + +1. Check the status of installation: + + ```bash + kubectl get hr -A + ``` + + When installation is complete, all services will switch their state to `READY: True`: + ```console + NAMESPACE NAME AGE READY STATUS + cozy-cert-manager cert-manager 4m1s True Release reconciliation succeeded + cozy-cert-manager cert-manager-issuers 4m1s True Release reconciliation succeeded + cozy-cilium cilium 4m1s True Release reconciliation succeeded + ... + ``` + +### 3.2 Create a Load Balancer with RobotLB + +Hetzner requires using its own RobotLB instead of Cozysatck's default MetalLB. +RobotLB is already installed as a component of Cozystack and running as a service in it. +Now it needs a token to create a load balancer resource in Hetzner. + +1. Create a Hetzner API token for RobotLB. + + Navigate to the Hetzner console, open Security, and create a token with `Read` and `Write` permissions. + +1. Pass the token to RobotLB to create a load balancer in Hetzner. + + Use the Hetzner API token to create a Kubernetes secret in Cozystack. + + - If you're using a **private network** (vSwitch), specify the network name: + + ```bash + export ROBOTLB_HCLOUD_TOKEN="" + export ROBOTLB_DEFAULT_NETWORK="" + + kubectl create secret generic hetzner-robotlb-credentials \ + --namespace=cozy-hetzner-robotlb \ + --from-literal=ROBOTLB_HCLOUD_TOKEN="$ROBOTLB_HCLOUD_TOKEN" \ + --from-literal=ROBOTLB_DEFAULT_NETWORK="$ROBOTLB_DEFAULT_NETWORK" + ``` + + - If you're using **public IPs only** (no vSwitch), omit `ROBOTLB_DEFAULT_NETWORK`: + + ```bash + export ROBOTLB_HCLOUD_TOKEN="" + + kubectl create secret generic hetzner-robotlb-credentials \ + --namespace=cozy-hetzner-robotlb \ + --from-literal=ROBOTLB_HCLOUD_TOKEN="$ROBOTLB_HCLOUD_TOKEN" + ``` + + In this case, RobotLB will use nodes' public IPs (ExternalIP) as load balancer targets. + For this to work, the nodes must have ExternalIP addresses configured. + The simplest way to achieve this is by installing [local-ccm](https://github.com/cozystack/local-ccm), + which automatically assigns public IPs to nodes' `.status.addresses` field. + + Upon receiving the token, RobotLB service in Cozystack will create a load balancer in Hetzner. + +### 3.3 Configure Storage with LINSTOR + +Configuring LINSTOR in Hetzner has no difference from other infrastructure setups. +Follow the [Storage configuration guide]({{% ref "/docs/v0/getting-started/install-cozystack#3-configure-storage" %}}) from the Cozystack tutorial. + +### 3.4. Start Services in the Root Tenant + +Set up the basic services ( `etcd`, `monitoring`, and `ingress`) in the root tenant: + +```bash +kubectl patch -n tenant-root tenants.apps.cozystack.io root --type=merge -p ' +{"spec":{ + "ingress": true, + "monitoring": true, + "etcd": true +}}' +``` + +## Notes and Troubleshooting + +{{% alert color="warning" %}} +:warning: If you encounter issues booting Talos Linux on your node, it might be related to the serial console options in your GRUB configuration, +`console=tty1 console=ttyS0`. +Try rebooting into rescue mode and remove these options from the GRUB configuration on the third partition of your system's primary disk (`$DISK1`). +{{% /alert %}} diff --git a/content/en/docs/v0/install/providers/oracle-cloud.md b/content/en/docs/v0/install/providers/oracle-cloud.md new file mode 100644 index 00000000..36b37272 --- /dev/null +++ b/content/en/docs/v0/install/providers/oracle-cloud.md @@ -0,0 +1,387 @@ +--- +title: How to install Cozystack in Oracle Cloud Infrastructure +linkTitle: Oracle Cloud +description: "How to install Cozystack in Oracle Cloud Infrastructure" +weight: 25 +aliases: + - /docs/v0/operations/talos/installation/oracle-cloud + - /docs/v0/talos/install/oracle-cloud + - /docs/install/providers/oracle-cloud + - /docs/operations/talos/installation/oracle-cloud + - /docs/talos/install/oracle-cloud +--- + +## Introduction + +This guide explains how to install Talos on Oracle Cloud Infrastructure and deploy a Kubernetes cluster that is ready for Cozystack. +After completing the guide, you will be ready to proceed with +[installing Cozystack itself]({{% ref "/docs/v0/getting-started/install-cozystack" %}}). + +{{% alert color="info" %}} +This guide was created to support deployment of development clusters by the Cozystack team. +If you face any problems while going through the guide, please raise an issue in [cozystack/website](https://github.com/cozystack/website/issues) +or come and share your experience in the [Cozystack community](https://t.me/cozystack). +{{% /alert %}} + +## 1. Upload Talos Image to Oracle Cloud + +The first step is to make a Talos Linux installation image available for use in Oracle Cloud as a custom image. + +1. Download the Talos Linux image archive from the [Cozystack releases page](https://github.com/cozystack/cozystack/releases/latest/) and unpack it: + + ```bash + wget https://github.com/cozystack/cozystack/releases/latest/download/metal-amd64.raw.xz + xz -d metal-amd64.raw.xz + ``` + + As a result, you will get the file `metal-amd64.raw`, which you can then upload to OCI. + +1. Follow the OCI documentation to [upload the image to a bucket in OCI Object Storage](https://docs.oracle.com/iaas/Content/Object/Tasks/managingobjects_topic-To_upload_objects_to_a_bucket.htm). + +1. Proceed with the documentation to [import this image as a custom image](https://docs.oracle.com/en-us/iaas/Content/Compute/Tasks/importingcustomimagelinux.htm#linux). + Use the following settings: + + - **Image type**: QCOW2 + - **Launch mode**: Paravirtualized mode + +1. Finally, get the image's [OCID](https://docs.oracle.com/en-us/iaas/Content/libraries/glossary/ocid.htm) and save it for use in the next steps. + +## 2. Create Infrastructure + +The goal of this step is to prepare the infrastructure according to the +[Cozystack cluster requirements]({{% ref "/docs/v0/install/hardware-requirements" %}}). + +This can be done manually using the Oracle Cloud dashboard or with Terraform. + +### 2.1 Prepare Terraform Configuration + +If you choose to use Terraform, the first step is to build the configuration. + +{{% alert color="info" %}} +Check out [the complete example of Terraform configuration](https://github.com/cozystack/examples/tree/main/001-deploy-cozystack-oci) +for deploying several Talos nodes in Oracle Cloud Infrastructure. +{{% /alert %}} + +Below is a shorter example of Terraform configuration creating three virtual machines with the following private IPs: + +- `192.168.1.11` +- `192.168.1.12` +- `192.168.1.13` + +These VMs will also have a VLAN interface with subnet `192.168.100.0/24` used for the internal cluster communication. + +Note the part that references the Talos image OCID from the previous step: + +```hcl + source_details { + source_type = "image" + source_id = var.talos_image_id + } +``` + +Full configuration example: + +```hcl +terraform { + backend "local" {} + required_providers { + oci = { source = "oracle/oci", version = "~> 6.35" } + } +} + +resource "oci_core_vcn" "cozy_dev1" { + display_name = "cozy-dev1" + cidr_blocks = ["192.168.0.0/16"] + compartment_id = var.compartment_id +} + +resource "oci_core_network_security_group" "cozy_dev1_allow_all" { + display_name = "allow-all" + compartment_id = var.compartment_id + vcn_id = oci_core_vcn.cozy_dev1.id +} + +resource "oci_core_subnet" "test_subnet" { + display_name = "cozy-dev1" + cidr_block = "192.168.1.0/24" + compartment_id = var.compartment_id + vcn_id = oci_core_vcn.cozy_dev1.id +} + +resource "oci_core_network_security_group_security_rule" "cozy_dev1_ingress" { + network_security_group_id = oci_core_network_security_group.cozy_dev1_allow_all.id + direction = "INGRESS" + protocol = "all" + source = "0.0.0.0/0" + source_type = "CIDR_BLOCK" +} + +resource "oci_core_network_security_group_security_rule" "cozy_dev1_egress" { + network_security_group_id = oci_core_network_security_group.cozy_dev1_allow_all.id + direction = "EGRESS" + protocol = "all" + destination = "0.0.0.0/0" + destination_type = "CIDR_BLOCK" +} + +resource "oci_core_internet_gateway" "cozy_dev1" { + display_name = "cozy-dev1" + compartment_id = var.compartment_id + vcn_id = oci_core_vcn.cozy_dev1.id +} + +resource "oci_core_default_route_table" "cozy_dev1_default_rt" { + manage_default_resource_id = oci_core_vcn.cozy_dev1.default_route_table_id + + compartment_id = var.compartment_id + display_name = "cozy‑dev1‑default" + + route_rules { + destination = "0.0.0.0/0" + destination_type = "CIDR_BLOCK" + network_entity_id = oci_core_internet_gateway.cozy_dev1.id + } +} + +resource "oci_core_vlan" "cozy_dev1_vlan" { + display_name = "cozy-dev1-vlan" + compartment_id = var.compartment_id + vcn_id = oci_core_vcn.cozy_dev1.id + + cidr_block = "192.168.100.0/24" + nsg_ids = [oci_core_network_security_group.cozy_dev1_allow_all.id] +} + +variable "node_private_ips" { + type = list(string) + default = ["192.168.1.11", "192.168.1.12", "192.168.1.13"] +} + +variable "compartment_id" { + description = "OCID of the OCI compartment" + type = string +} + +variable "availability_domain" { + description = "Availability domain for the instances" + type = string +} + +variable "talos_image_id" { + description = "OCID of the imported Talos Linux image" + type = string +} + +resource "oci_core_instance" "cozy_dev1_nodes" { + count = length(var.node_private_ips) + display_name = "cozy-dev1-node-${count.index + 1}" + compartment_id = var.compartment_id + availability_domain = var.availability_domain + shape = "VM.Standard3.Flex" + preserve_boot_volume = false + preserve_data_volumes_created_at_launch = false + + create_vnic_details { + subnet_id = oci_core_subnet.test_subnet.id + nsg_ids = [oci_core_network_security_group.cozy_dev1_allow_all.id] + private_ip = var.node_private_ips[count.index] + } + + source_details { + source_type = "image" + source_id = var.talos_image_id + } + + launch_volume_attachments { + display_name = "cozy-dev1-node${count.index + 1}-data" + launch_create_volume_details { + display_name = "cozy-dev1-node${count.index + 1}-data" + compartment_id = var.compartment_id + size_in_gbs = "512" + volume_creation_type = "ATTRIBUTES" + vpus_per_gb = "10" + } + type = "paravirtualized" + } + + shape_config { + memory_in_gbs = "32" + ocpus = "4" + } +} + +resource "oci_core_vnic_attachment" "cozy_dev1_vlan_vnic" { + count = length(var.node_private_ips) + instance_id = oci_core_instance.cozy_dev1_nodes[count.index].id + + create_vnic_details { + vlan_id = oci_core_vlan.cozy_dev1_vlan.id + } +} +``` + +### 2.2 Apply Configuration + +When the configuration is ready, authenticate to OCI and apply it with Terraform: + +```bash +oci session authenticate --region us-ashburn-1 --profile-name=DEFAULT +terraform init +terraform apply +``` + +As a result of these commands, the virtual machines will be deployed and configured. + +Save the public IP addresses assigned to the VMs for the next step. In this example, the addresses are: + +- `1.2.3.4` +- `1.2.3.5` +- `1.2.3.6` + +## 3. Configure Talos and Initialize Kubernetes Cluster + +The next step is to apply the configurations and install Talos Linux. +There are several ways to do that. + +This guide uses [Talm](https://github.com/cozystack/talm), a command‑line tool for declarative management of Talos Linux. +Talm has configuration templates specialized for deploying Cozystack, which is why we will use it. + +If you do not have Talm installed, [download the latest binary](https://github.com/cozystack/talm/releases/latest) for your OS and architecture. +Make it executable and save it to `/usr/local/bin/talm`: + +```bash +# pick your preferred architecture from the release artifacts +wget -O talm https://github.com/cozystack/talm/releases/latest/download/talm-darwin-arm64 +chmod +x talm +mv talm /usr/local/bin/talm +``` + +### 3.1 Prepare Talm Configuration + +1. Create a directory for the new cluster's configuration files: + ```bash + mkdir -p cozystack-cluster + cd cozystack-cluster + ``` + +1. Initialize Talm configuration for Cozystack: + + ```bash + talm init --preset cozystack --name mycluster + ``` + +1. Generate a configuration template for each node, providing the node's IP address: + + ```bash + # Use the node's public IP assigned by OCI + talm template \ + --nodes 1.2.3.4 \ + --endpoints 1.2.3.4 \ + --template templates/controlplane.yaml \ + --insecure \ + > nodes/node0.yaml + ``` + + Repeat the same for each node using its public IP: + + ```bash + talm template ... > nodes/node1.yaml + talm template ... > nodes/node2.yaml + ``` + + Using `templates/controlplane.yaml` means the node will act as both control plane and worker. + Having three combined nodes is the preferred setup for a small PoC cluster. + + The `--insecure` (`-i`) parameter is required because Talm must retrieve configuration data from a node that is not yet initialized and therefore cannot accept an authenticated connection. + The node will be initialized only a few steps later, with `talm apply`. + + The node's public IP must be specified for both the `--nodes` (`-n`) and `--endpoints` (`-e`) parameters. + To learn more about Talos node configuration and endpoints, refer to the + [Talos documentation](https://www.talos.dev/v1.10/learn-more/talosctl/#endpoints-and-nodes) + +1. Edit the node configuration file as needed. + + - Update `hostname` to the desired name: + + ```yaml + machine: + network: + hostname: node1 + ``` + + - Add the private interface configuration to the `machine.network.interfaces` section, and move `vip` to this configuration. + This part of the configuration is not generated automatically, so you need to fill in the values: + + - `interface`: obtained from the "Discovered interfaces" by matching options for the private interface. + - `addresses`: use the address specified for Layer 2 (L2). + + Example: + + ```yaml + machine: + network: + interfaces: + - interface: eth0 + addresses: + - 1.2.3.4/29 + routes: + - network: 0.0.0.0/0 + gateway: 1.2.3.1 + - interface: eth1 + addresses: + - 192.168.100.11/24 + vip: + ip: 192.168.100.10 + ``` + +After these steps, the node configuration files are ready to be applied. + +### 3.2 Initialize Talos and Run Kubernetes Cluster + +The next stage is to initialize Talos nodes and bootstrap a Kubernetes cluster. + +1. Run `talm apply` for all nodes to apply the configurations: + + ```bash + talm apply -f nodes/node0.yaml --insecure + talm apply -f nodes/node1.yaml --insecure + talm apply -f nodes/node2.yaml --insecure + ``` + + The nodes will reboot, and Talos will be installed to disk. + The parameter `--insecure` (`-i`) is required the first time you run `talm apply` on each node. + +1. Execute `talm bootstrap` on the first node in the cluster. For example: + ```bash + talm bootstrap -f nodes/node0.yaml + ``` + +1. Get the `kubeconfig` from any control‑plane node using Talm. In this example, all three nodes are control‑plane nodes: + + ```bash + talm kubeconfig -f nodes/node0.yaml + ``` + +1. Edit the `kubeconfig` to set the server IP address to one of the control‑plane nodes, for example: + ```yaml + server: https://1.2.3.4:6443 + ``` + +1. Export the `KUBECONFIG` variable to use the kubeconfig, and check the connection to the cluster: + ```bash + export KUBECONFIG=${PWD}/kubeconfig + kubectl get nodes + ``` + + You should see that the nodes are accessible and in the `NotReady` state, which is expected at this stage: + + ```console + NAME STATUS ROLES AGE VERSION + node0 NotReady control-plane 2m21s v1.32.0 + node1 NotReady control-plane 1m47s v1.32.0 + node2 NotReady control-plane 1m43s v1.32.0 + ``` + +Now you have a Kubernetes cluster prepared for installing Cozystack. +To complete the installation, follow the deployment guide, starting with the +[Install Cozystack]({{% ref "/docs/v0/getting-started/install-cozystack" %}}) section. diff --git a/content/en/docs/v0/install/providers/servers-com/_index.md b/content/en/docs/v0/install/providers/servers-com/_index.md new file mode 100644 index 00000000..3cf5f56c --- /dev/null +++ b/content/en/docs/v0/install/providers/servers-com/_index.md @@ -0,0 +1,238 @@ +--- +title: Install Cozystack in Servers.com +linkTitle: Servers.com +description: "Install Cozystack in the Servers.com infrastructure." +weight: 40 +aliases: + - /docs/v0/operations/talos/installation/servers_com + - /docs/v0/talos/installation/servers_com + - /docs/v0/talos/install/servers_com + - /docs/install/providers/servers-com + - /docs/operations/talos/installation/servers_com + - /docs/talos/installation/servers_com + - /docs/talos/install/servers_com +--- + +## Before Installation + +### 1. Network + +1. **Set Up L2 Network** + + 1. Navigate to **Networks > L2 Segment** and click **Add Segment**. + + ![L2 Segments](img/l2_segments1.png) + + ![L2 Segments](img/l2_segments2.png) + + ![L2 Segments](img/l2_segments3.png) + + First, select **Private**, choose the region, add the servers, assign a name, and save it. + + 1. Set the type to **Native**. + Do the same for **Public**. + + ![Type](img/type_native.png) + +### 2. Access + +1. Create SSH keys for server access. + +1. Go to **Identity and Access > SSH and Keys**. + + ![SSH](img/ssh_gpg_keys1.png) + +1. Create new keys or add your own. + + ![SSH](img/ssh_gpg_keys2.png) + ![SSH](img/ssh_gpg_keys3.png) + +## Setup OS + +### 1. Operating System and Access + +{{% alert color="warning" %}} +:warning: In rescue mode only the public network is available; the private L2 network is not reachable. +For Talos installation use a regular OS (for example Ubuntu) instead of rescue mode. +{{% /alert %}} + +1. In the Servers.com control panel, install Ubuntu on the server (for example via **Dedicated Servers > Server Details > OS install**) and make sure your SSH key is selected. + +1. After the installation is complete, connect via SSH using the external IP of the server (**Details** > **Public IP**). + + ![Public IP](img/public_ip.png) + +### 2. Install Talos with boot-to-talos + +Talos will be booted from the installed Ubuntu using the [`boot-to-talos`](https://github.com/cozystack/boot-to-talos) utility. +Later, when you apply Talm configuration, Talos will be installed to disk. +Run these steps on each server. + +1. Check the information on block devices to find the disk that will be used for Talos later (for example, `/dev/sda`). + + ```console + # lsblk + NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS + sda 259:4 0 476.9G 0 disk + sdb 259:0 0 476.9G 0 disk + ``` + +1. Download and install `boot-to-talos`: + + ```bash + curl -sSL https://github.com/cozystack/boot-to-talos/raw/refs/heads/main/hack/install.sh | sudo sh -s + ``` + + After installation, verify that the binary is available: + + ```bash + boot-to-talos -h + ``` + +1. Run the installer: + + ```bash + sudo boot-to-talos + ``` + + When prompted: + + - Select mode `1. boot`. + - Confirm or change the Talos installer image (the default Cozystack image is suitable). + - Provide network settings matching the public interface (`bond0`) and default gateway. + + The utility will download the Talos installer image and boot the node into Talos Linux (using the kexec mechanism) without modifying the disks. + + For fully automated installations you can use non-interactive mode: + + ```bash + sudo boot-to-talos -yes + ``` + +### 3. Boot into Talos + +After `boot-to-talos` finishes, the server reboots automatically into Talos Linux in maintenance mode. +Repeat the same procedure for all servers, then proceed to configure them with Talm. + +## Talos Configuration + +Use [Talm](https://github.com/cozystack/talm) to apply config and install Talos Linux on the drive. + +1. [Download the latest Talm binary](https://github.com/cozystack/talm/releases/latest) and save it to `/usr/local/bin/talm` + +1. Make it executable: + + ```bash + chmod +x /usr/local/bin/talm + ``` + +### Installation with Talm + +1. Create directory for the new cluster: + + ```bash + mkdir -p cozystack-cluster + cd cozystack-cluster + ``` + +1. Run the following command to initialize Talm for Cozystack: + + ```bash + talm init --preset cozystack --name mycluster + ``` + + After initializing, generate a configuration template with the command: + + ```bash + talm -n 1.2.3.4 -e 1.2.3.4 template -t templates/controlplane.yaml -i > nodes/nodeN.yaml + ``` + +1. Edit the node configuration file as needed: + + 1. Update `hostname` to the desired name. + ```yaml + machine: + network: + hostname: node1 + ``` + + 1. Update `nameservers` to the public ones, because internal servers.com DNS is not reachable from the private network. + ```yaml + machine: + network: + nameservers: + - 8.8.8.8 + - 1.1.1.1 + ``` + + 1. Add private interface configuration, and move `vip` to this section. This section isn’t generated automatically: + - `interface` - Obtained from the "Discovered interfaces" by matching the MAC address of the private interface specified in the provider's email. + (Out of the two interfaces, select the one with the uplink). + - `addresses` - Use the address specified for Layer 2 (L2). + + ```yaml + machine: + network: + interfaces: + - interface: bond0 + addresses: + - 1.2.3.4/29 + routes: + - network: 0.0.0.0/0 + gateway: 1.2.3.1 + bond: + interfaces: + - enp1s0f1 + - enp3s0f1 + mode: 802.3ad + xmitHashPolicy: layer3+4 + lacpRate: slow + miimon: 100 + - interface: bond1 + addresses: + - 192.168.102.11/23 + bond: + interfaces: + - enp1s0f0 + - enp3s0f0 + mode: 802.3ad + xmitHashPolicy: layer3+4 + lacpRate: slow + miimon: 100 + vip: + ip: 192.168.102.10 + ``` + +**Execution steps:** + +1. Run `talm apply -f nodeN.yml` for all nodes to apply the configurations. The nodes will be rebooted and Talos will be installed on the disk. + +1. Make sure that talos get installed into disk by executing `talm get systemdisk -f nodeN.yml` for each node. The output should be similar to: + ```yaml + NODE NAMESPACE TYPE ID VERSION DISK + 1.2.3.4 runtime SystemDisk system-disk 1 sda + ``` + + If the output is empty, it means that Talos still runs in RAM and hasn't been installed on the disk yet. +1. Execute bootstrap command for the first node in the cluster, example: + ```bash + talm bootstrap -f nodes/node1.yml + ``` + +1. Get `kubeconfig` from the first node, example: + ```bash + talm kubeconfig -f nodes/node1.yml + ``` + +1. Edit `kubeconfig` to set the IP address to one of control-plane node, example: + ```yaml + server: https://1.2.3.4:6443 + ``` + +1. Export variable to use the kubeconfig, and check the connection to the Kubernetes: + ```bash + export KUBECONFIG=${PWD}/kubeconfig + kubectl get nodes + ``` + +Now follow **Get Started** guide starting from the [**Install Cozystack**](/docs/v0/getting-started/install-cozystack) section, to continue the installation. diff --git a/content/en/docs/install/providers/servers-com/img/l2_segments1.png b/content/en/docs/v0/install/providers/servers-com/img/l2_segments1.png similarity index 100% rename from content/en/docs/install/providers/servers-com/img/l2_segments1.png rename to content/en/docs/v0/install/providers/servers-com/img/l2_segments1.png diff --git a/content/en/docs/install/providers/servers-com/img/l2_segments2.png b/content/en/docs/v0/install/providers/servers-com/img/l2_segments2.png similarity index 100% rename from content/en/docs/install/providers/servers-com/img/l2_segments2.png rename to content/en/docs/v0/install/providers/servers-com/img/l2_segments2.png diff --git a/content/en/docs/install/providers/servers-com/img/l2_segments3.png b/content/en/docs/v0/install/providers/servers-com/img/l2_segments3.png similarity index 100% rename from content/en/docs/install/providers/servers-com/img/l2_segments3.png rename to content/en/docs/v0/install/providers/servers-com/img/l2_segments3.png diff --git a/content/en/docs/install/providers/servers-com/img/public_ip.png b/content/en/docs/v0/install/providers/servers-com/img/public_ip.png similarity index 100% rename from content/en/docs/install/providers/servers-com/img/public_ip.png rename to content/en/docs/v0/install/providers/servers-com/img/public_ip.png diff --git a/content/en/docs/install/providers/servers-com/img/ssh_gpg_keys1.png b/content/en/docs/v0/install/providers/servers-com/img/ssh_gpg_keys1.png similarity index 100% rename from content/en/docs/install/providers/servers-com/img/ssh_gpg_keys1.png rename to content/en/docs/v0/install/providers/servers-com/img/ssh_gpg_keys1.png diff --git a/content/en/docs/install/providers/servers-com/img/ssh_gpg_keys2.png b/content/en/docs/v0/install/providers/servers-com/img/ssh_gpg_keys2.png similarity index 100% rename from content/en/docs/install/providers/servers-com/img/ssh_gpg_keys2.png rename to content/en/docs/v0/install/providers/servers-com/img/ssh_gpg_keys2.png diff --git a/content/en/docs/install/providers/servers-com/img/ssh_gpg_keys3.png b/content/en/docs/v0/install/providers/servers-com/img/ssh_gpg_keys3.png similarity index 100% rename from content/en/docs/install/providers/servers-com/img/ssh_gpg_keys3.png rename to content/en/docs/v0/install/providers/servers-com/img/ssh_gpg_keys3.png diff --git a/content/en/docs/install/providers/servers-com/img/type_native.png b/content/en/docs/v0/install/providers/servers-com/img/type_native.png similarity index 100% rename from content/en/docs/install/providers/servers-com/img/type_native.png rename to content/en/docs/v0/install/providers/servers-com/img/type_native.png diff --git a/content/en/docs/v0/install/resource-planning.md b/content/en/docs/v0/install/resource-planning.md new file mode 100644 index 00000000..b6baf724 --- /dev/null +++ b/content/en/docs/v0/install/resource-planning.md @@ -0,0 +1,64 @@ +--- +title: "System Resource Planning Recommendations" +linkTitle: "Resource Planning" +description: "How much system resources to allocate per node depending on cluster scale." +weight: 6 +aliases: + - /docs/install/resource-planning +--- + +## System Resource Planning Recommendations + +How much system resources to allocate per node depending on cluster scale. + +These recommendations are based on real-world usage cases from production deployments. While workloads vary across different environments, these calculations should provide reasonably accurate estimates for planning purposes. + +{{% alert color="warning" %}} +**Important:** All values on this page show only the resources that need to be reserved for system components. They do not include resources for running tenant workloads (applications, databases, Kubernetes clusters, VMs, etc.). When planning your infrastructure, add the resources required for tenant workloads on top of these system resource requirements. +{{% /alert %}} + +### Simple Recommendations + +**Basic recommendation**: Allocate at least **2 CPU cores** and **5 GB memory** per node for system components. + +Scale Dependency: + +**By number of nodes:** +- Small cluster (3-5 nodes): ~2 CPU cores, ~6 GB memory per node +- Medium cluster (6-10 nodes): ~3 CPU cores, ~7 GB memory per node +- Large cluster (10+ nodes): ~3 CPU cores, ~9 GB memory per node + +**Important considerations:** +- System resource consumption may increase as the number of tenants and services within them grows. Each tenant adds load to system components (monitoring, logging, network policies, etc.). +- With a large number of tenants, increase the basic recommendation by **50-100% for CPU** and **100-300% for memory** depending on usage intensity. +- While operators managing these services run in a single instance, the overall system load increases with the number of tenants and workloads. More tenants mean more objects to monitor, more network policies to enforce, and more logs to collect and process. + +**Dependency on number of tenants:** + +The requirements vary based on the number of tenants in your cluster. Use the table below to find the exact values for your specific cluster size and tenant count combination. + +**Note:** The values provided are baseline. Actual consumption may vary depending on the number of services within tenants and their usage intensity. With a large number of active services in tenants (e.g., 5+ services per tenant), use the next category by number of tenants. + +#### What to do: + +1. **Usage**: Monitor actual resource usage and adjust as needed +2. **Reserve**: Plan for 20-30% growth when planning +3. **Monitoring**: Regularly check actual system resource consumption +4. **Tenant consideration**: Use the table above to select appropriate values based on the number of tenants + +### Resource Requirements Table + +The table below shows CPU cores and memory (RAM) requirements per node. Rows represent cluster size (number of nodes), columns represent number of tenants. Each cell shows the recommended values on separate lines. + +| Cluster Size | Number of Nodes | Up to 5 tenants | 6-14 tenants | 15-30 tenants | 30+ tenants | +|--------------|-----------------|-----------------|---------------|---------------|-------------| +| Small | 3-5 | CPU: 2 cores
RAM: 6 GB | CPU: 2 cores
RAM: 6 GB | CPU: 3 cores
RAM: 10 GB | CPU: 3 cores
RAM: 15 GB | +| Medium | 6-10 | CPU: 3 cores
RAM: 7 GB | CPU: 3 cores
RAM: 7 GB | CPU: 3 cores
RAM: 12 GB | CPU: 4 cores
RAM: 18 GB | +| Large | 10+ | CPU: 3 cores
RAM: 9 GB | CPU: 3 cores
RAM: 10 GB | CPU: 4 cores
RAM: 15 GB | CPU: 4 cores
RAM: 22 GB | + +**Calculation examples:** +- Cluster with 5 nodes and 3 tenants: **2 CPU cores**, **6 GB memory** per node (Small cluster, Up to 5 tenants) +- Cluster with 5 nodes and 10 tenants: **2 CPU cores**, **6 GB memory** per node (Small cluster, 6-14 tenants) +- Cluster with 6 nodes and 25 tenants: **3 CPU cores**, **12 GB memory** per node (Medium cluster, 15-30 tenants) +- Cluster with 6 nodes and 40 tenants: **4 CPU cores**, **18 GB memory** per node (Medium cluster, 30+ tenants) + diff --git a/content/en/docs/install/talos/_index.md b/content/en/docs/v0/install/talos/_index.md similarity index 68% rename from content/en/docs/install/talos/_index.md rename to content/en/docs/v0/install/talos/_index.md index c54304c1..15baf574 100644 --- a/content/en/docs/install/talos/_index.md +++ b/content/en/docs/v0/install/talos/_index.md @@ -4,6 +4,11 @@ linkTitle: "1. Install Talos" description: "Step 1: Installing Talos Linux on virtual machines or bare metal, ready to bootstrap Cozystack cluster." weight: 10 aliases: + - /docs/v0/talos/installation + - /docs/v0/talos/install + - /docs/v0/operations/talos/installation + - /docs/v0/operations/talos + - /docs/install/talos - /docs/talos/installation - /docs/talos/install - /docs/operations/talos/installation @@ -12,27 +17,27 @@ aliases: **The first step** in deploying a Cozystack cluster is to install Talos Linux on your bare-metal servers or virtual machines. Ensure the VMs or bare-metal servers are provisioned before you begin. -To plan the installation, see the [hardware requirements]({{% ref "/docs/install/hardware-requirements" %}}). +To plan the installation, see the [hardware requirements]({{% ref "/docs/v0/install/hardware-requirements" %}}). -If this is your first time installing Cozystack, consider [starting with the Cozystack tutorial]({{% ref "/docs/getting-started" %}}). +If this is your first time installing Cozystack, consider [starting with the Cozystack tutorial]({{% ref "/docs/v0/getting-started" %}}). ## Installation Options There are several methods to install Talos on any bare metal server or virtual machine. They have various limitations and optimal use cases: -- **Recommended:** [Boot to Talos Linux from another Linux OS using `boot-to-talos`]({{% ref "/docs/install/talos/boot-to-talos" %}}) — +- **Recommended:** [Boot to Talos Linux from another Linux OS using `boot-to-talos`]({{% ref "/docs/v0/install/talos/boot-to-talos" %}}) — a simple installation method, which can be used completely from userspace, and with no external dependencies except the Talos image. Choose this option if you are new to Talos or if you have VMs with pre-installed OS from a cloud provider. -- [Install using temporary DHCP and PXE servers running in Docker containers]({{% ref "/docs/install/talos/pxe" %}}) — +- [Install using temporary DHCP and PXE servers running in Docker containers]({{% ref "/docs/v0/install/talos/pxe" %}}) — requires an extra management machine, but allows for installing on multiple hosts at once. -- [Install using ISO image]({{% ref "/docs/install/talos/iso" %}}) — optimal for systems which can automate ISO installation. +- [Install using ISO image]({{% ref "/docs/v0/install/talos/iso" %}}) — optimal for systems which can automate ISO installation. ## Further Steps - After installing Talos Linux, you will have a number of nodes ready for the next step, which is to - [install and bootstrap a Kubernetes cluster]({{% ref "/docs/install/kubernetes" %}}). + [install and bootstrap a Kubernetes cluster]({{% ref "/docs/v0/install/kubernetes" %}}). -- Read the [Talos Linux overview]({{% ref "/docs/guides/talos" %}}) to learn why Talos Linux is the optimal OS choice for Cozystack +- Read the [Talos Linux overview]({{% ref "/docs/v0/guides/talos" %}}) to learn why Talos Linux is the optimal OS choice for Cozystack and what it brings to the platform. diff --git a/content/en/docs/v0/install/talos/boot-to-talos.md b/content/en/docs/v0/install/talos/boot-to-talos.md new file mode 100644 index 00000000..18b41144 --- /dev/null +++ b/content/en/docs/v0/install/talos/boot-to-talos.md @@ -0,0 +1,151 @@ +--- +title: "Install Talos Linux using boot-to-talos" +linkTitle: boot-to-talos +description: "Install Talos Linux using boot-to-talos, a convenient CLI application requiring nothing but a Talos image." +weight: 5 +aliases: + - /docs/v0/talos/install/kexec + - /docs/install/talos/boot-to-talos + - /docs/talos/install/kexec +--- + +This guide explains how to install Talos Linux on a host running any other Linux distribution using `boot-to-talos`. + +`boot-to-talos` was made by Cozystack team to help users and teams adopting Cozystack with installing Talos, which is the most complex step in the process. +It works entirely from userspace and has no external dependencies except the Talos installer image. + +Note that Cozystack provides its own Talos builds, which are tested and optimized for running a Cozystack cluster. + +## Modes + +`boot-to-talos` supports two installation modes: + +1. **boot** – Extract the kernel and initrd from the Talos installer and boot them directly using the kexec mechanism. +2. **install** – Prepare the environment, run the Talos installer, and then overwrite the system disk with the installed image. + +{{< note >}} +If one mode doesn't work on your system, try the other. Different methods may work better on different operating systems. +{{< /note >}} + +## Installation + +### 1. Install `boot-to-talos` + +- Use the installer script: + + ```bash + curl -sSL https://github.com/cozystack/boot-to-talos/raw/refs/heads/main/hack/install.sh | sh -s + ``` + +- Download the binary from the [GitHub releases page](https://github.com/cozystack/boot-to-talos/releases/latest): + + ```bash + wget https://github.com/cozystack/boot-to-talos/releases/latest/download/boot-to-talos-linux-amd64.tar.gz + ``` + +### 2. Run to install Talos + +Run `boot-to-talos` and provide configuration values. +Make sure to use Cozystack's own Talos build, found at [ghcr.io/cozystack/cozystack/talos](https://github.com/cozystack/cozystack/pkgs/container/cozystack%2Ftalos). + + +```console +Mode: + 1. boot – extract the kernel and initrd from the Talos installer and boot them directly using the kexec mechanism. + 2. install – prepare the environment, run the Talos installer, and then overwrite the system disk with the installed image. +Mode [1]: 2 +Target disk [/dev/sda]: +Talos installer image [ghcr.io/cozystack/cozystack/talos:v1.10.5]: +Add networking configuration? [yes]: +Interface [eth0]: +IP address [10.0.2.15]: +Netmask [255.255.255.0]: +Gateway (or 'none') [10.0.2.2]: +Configure serial console? (or 'no') [ttyS0]: + +Summary: + Image: ghcr.io/cozystack/cozystack/talos:v1.10.5 + Disk: /dev/sda + Extra kernel args: ip=10.0.2.15::10.0.2.2:255.255.255.0::eth0::::: console=ttyS0 + +WARNING: ALL DATA ON /dev/sda WILL BE ERASED! + +Continue? [yes]: + +2025/08/03 00:11:03 created temporary directory /tmp/installer-3221603450 +2025/08/03 00:11:03 pulling image ghcr.io/cozystack/cozystack/talos:v1.10.5 +2025/08/03 00:11:03 extracting image layers +2025/08/03 00:11:07 creating raw disk /tmp/installer-3221603450/image.raw (2 GiB) +2025/08/03 00:11:07 attached /tmp/installer-3221603450/image.raw to /dev/loop0 +2025/08/03 00:11:07 starting Talos installer +2025/08/03 00:11:07 running Talos installer v1.10.5 +2025/08/03 00:11:07 WARNING: config validation: +2025/08/03 00:11:07 use "worker" instead of "" for machine type +2025/08/03 00:11:07 created EFI (C12A7328-F81F-11D2-BA4B-00A0C93EC93B) size 104857600 bytes +2025/08/03 00:11:07 created BIOS (21686148-6449-6E6F-744E-656564454649) size 1048576 bytes +2025/08/03 00:11:07 created BOOT (0FC63DAF-8483-4772-8E79-3D69D8477DE4) size 1048576000 bytes +2025/08/03 00:11:07 created META (0FC63DAF-8483-4772-8E79-3D69D8477DE4) size 1048576 bytes +2025/08/03 00:11:07 formatting the partition "/dev/loop0p1" as "vfat" with label "EFI" +2025/08/03 00:11:07 formatting the partition "/dev/loop0p2" as "zeroes" with label "BIOS" +2025/08/03 00:11:07 formatting the partition "/dev/loop0p3" as "xfs" with label "BOOT" +2025/08/03 00:11:07 formatting the partition "/dev/loop0p4" as "zeroes" with label "META" +2025/08/03 00:11:07 copying from io reader to /boot/A/vmlinuz +2025/08/03 00:11:07 copying from io reader to /boot/A/initramfs.xz +2025/08/03 00:11:08 writing /boot/grub/grub.cfg to disk +2025/08/03 00:11:08 executing: grub-install --boot-directory=/boot --removable --efi-directory=/boot/EFI /dev/loop0 +2025/08/03 00:11:08 installation of v1.10.5 complete +2025/08/03 00:11:08 Talos installer finished successfully +2025/08/03 00:11:08 remounting all filesystems read-only +2025/08/03 00:11:08 copy /tmp/installer-3221603450/image.raw → /dev/sda +2025/08/03 00:11:19 installation image copied to /dev/sda +2025/08/03 00:11:19 rebooting system +``` + +## About the Application + +`boot-to-talos` is opensource and hosted on [github.com/cozystack/boot-to-talos](https://github.com/cozystack/boot-to-talos). +It includes a CLI written in Go and an installer script in Bash. +There are builds for several architectures: + +- `linux-amd64` +- `linux-arm64` +- `linux-i386` + +### How it Works + +Understanding these steps is not required to install Talos Linux. + +The workflow depends on the selected mode: + +#### Boot Mode + +When using the **boot** mode, `boot-to-talos` performs the following steps: + +1. **Unpacks Talos installer in RAM**
+ Extracts layers from the Talos‑installer container into a throw‑away `tmpfs`. + Note that Docker is not needed during this step. +2. **Extracts kernel and initrd**
+ Extracts the kernel (`vmlinuz`) and initial ramdisk (`initramfs.xz`) from the Talos installer image. +3. **Loads kernel via kexec**
+ Uses the `kexec` system call to load the Talos kernel and initrd into memory with the provided kernel command line parameters. +4. **Reboots into Talos**
+ Executes `kexec --exec` to switch to the Talos kernel without a physical reboot. After booting, you can apply Talos configuration to complete the installation. + +#### Install Mode + +When using the **install** mode, `boot-to-talos` performs the following steps: + +1. **Unpacks Talos installer in RAM**
+ Extracts layers from the Talos‑installer container into a throw‑away `tmpfs`. + Note that Docker is not needed during this step. +2. **Builds system image**
+ Creates a sparse `image.raw`, exposed via a loop device, and executes the Talos *installer* inside a chroot. + The installer then partitions, formats, and lays down GRUB and system files. +3. **Streams to disk**
+ Copies `image.raw` to the chosen block device in chunks of 4 MiB and runs `fsync` after every write, so that data is fully committed before reboot. +4. **Reboots**
+ Command `echo b > /proc/sysrq-trigger` performs an immediate reboot into the freshly installed Talos Linux. + +## Next Steps + +Once you have installed Talos, proceed by [installing and bootstrapping a Kubernetes cluster]({{% ref "/docs/v0/install/kubernetes" %}}). diff --git a/content/en/docs/v0/install/talos/iso.md b/content/en/docs/v0/install/talos/iso.md new file mode 100644 index 00000000..caf67e76 --- /dev/null +++ b/content/en/docs/v0/install/talos/iso.md @@ -0,0 +1,35 @@ +--- +title: Install Talos Linux using ISO +linkTitle: ISO +description: "How to install Talos Linux using ISO" +weight: 20 +aliases: + - /docs/v0/talos/installation/iso + - /docs/v0/talos/install/iso + - /docs/v0/operations/talos/installation/iso + - /docs/install/talos/iso + - /docs/talos/installation/iso + - /docs/talos/install/iso + - /docs/operations/talos/installation/iso +--- + +This guide explains how to install Talos Linux on bare metal servers or virtual machines. +Note that Cozystack provides its own Talos builds, which are tested and optimized for running a Cozystack cluster. + +## Installation + +1. Download Talos Linux asset from the Cozystack's [releases page](https://github.com/cozystack/cozystack/releases). + + ```bash + wget https://github.com/cozystack/cozystack/releases/latest/download/metal-amd64.iso + ``` + +1. Boot your machine with ISO attached. + +1. Click **** and fill your network settings: + + ![Cozystack for private cloud](/img/talos-network-configuration.png) + +## Next steps + +Once you have installed Talos, proceed by [installing and bootstrapping a Kubernetes cluster]({{% ref "/docs/v0/install/kubernetes" %}}). diff --git a/content/en/docs/v0/install/talos/pxe.md b/content/en/docs/v0/install/talos/pxe.md new file mode 100644 index 00000000..bee9eba1 --- /dev/null +++ b/content/en/docs/v0/install/talos/pxe.md @@ -0,0 +1,95 @@ +--- +title: Install Talos Linux using PXE +linkTitle: PXE +description: "How to install Talos Linux using temporary DHCP and PXE servers running in Docker containers." +weight: 15 +aliases: + - /docs/v0/talos/installation/pxe + - /docs/v0/talos/install/pxe + - /docs/v0/operations/talos/installation/pxe + - /docs/install/talos/pxe + - /docs/talos/installation/pxe + - /docs/talos/install/pxe + - /docs/operations/talos/installation/pxe +--- + +This guide explains how to install Talos Linux on bare metal servers or virtual machines +using temporary DHCP and PXE servers running in Docker containers. +This method requires an extra management machine, but allows for installing on multiple hosts at once. + +Note that Cozystack provides its own Talos builds, which are tested and optimized for running a Cozystack cluster. + +## Dependencies + +To install Talos using this method, you will need the following dependencies on the management host: + +- `docker` +- `kubectl` + +## Infrastructure Overview + +![Cozystack deployment](/img/cozystack-deployment.png) + +## Installation + +Start matchbox with prebuilt Talos image for Cozystack: + +```bash +sudo docker run --name=matchbox -d --net=host ghcr.io/cozystack/cozystack/matchbox:v0.30.0 \ + -address=:8080 \ + -log-level=debug +``` + +Start DHCP-Server: +```bash +sudo docker run --name=dnsmasq -d --cap-add=NET_ADMIN --net=host quay.io/poseidon/dnsmasq:v0.5.0-32-g4327d60-amd64 \ + -d -q -p0 \ + --dhcp-range=192.168.100.3,192.168.100.199 \ + --dhcp-option=option:router,192.168.100.1 \ + --enable-tftp \ + --tftp-root=/var/lib/tftpboot \ + --dhcp-match=set:bios,option:client-arch,0 \ + --dhcp-boot=tag:bios,undionly.kpxe \ + --dhcp-match=set:efi32,option:client-arch,6 \ + --dhcp-boot=tag:efi32,ipxe.efi \ + --dhcp-match=set:efibc,option:client-arch,7 \ + --dhcp-boot=tag:efibc,ipxe.efi \ + --dhcp-match=set:efi64,option:client-arch,9 \ + --dhcp-boot=tag:efi64,ipxe.efi \ + --dhcp-userclass=set:ipxe,iPXE \ + --dhcp-boot=tag:ipxe,http://192.168.100.254:8080/boot.ipxe \ + --log-queries \ + --log-dhcp +``` + +For an air-gapped installation, add NTP and DNS servers: +```bash + --dhcp-option=option:ntp-server,10.100.1.1 \ + --dhcp-option=option:dns-server,10.100.25.253,10.100.25.254 \ +``` + +Where: +- `192.168.100.3,192.168.100.199` range to allocate IPs from +- `192.168.100.1` your gateway +- `192.168.100.254` is address of your management server + +Check status of containers: + +``` +docker ps +``` + +example output: + +```console +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +06115f09e689 quay.io/poseidon/dnsmasq:v0.5.0-32-g4327d60-amd64 "/usr/sbin/dnsmasq -…" 47 seconds ago Up 46 seconds dnsmasq +6bf638f0808e ghcr.io/cozystack/cozystack/matchbox:v0.30.0 "/matchbox -address=…" 3 minutes ago Up 3 minutes matchbox +``` + +Start your servers. +Now they should automatically boot from your PXE server. + +## Next Steps + +Once you have installed Talos, proceed by [installing and bootstrapping a Kubernetes cluster]({{% ref "/docs/v0/install/kubernetes" %}}). diff --git a/content/en/docs/v0/introduction/_index.md b/content/en/docs/v0/introduction/_index.md new file mode 100644 index 00000000..2164b798 --- /dev/null +++ b/content/en/docs/v0/introduction/_index.md @@ -0,0 +1,79 @@ +--- +title: "Introduction to Cozystack" +linkTitle: "Introduction" +description: "Learn what Cozystack is and what you can build with it." +weight: 9 +aliases: + - /docs/introduction +--- + +## What is Cozystack + +Cozystack is a Kubernetes-based framework for building a private cloud environment. +It can be used by a single company to run its own [private cloud]({{% ref "/docs/v0/guides/use-cases/private-cloud" %}}) or by a service provider to offer a +[platform-as-a-service]({{% ref "/docs/v0/guides/use-cases/public-cloud" %}}) to multiple customers. + +Cozystack covers the most critical needs of a development team: + +- [Kubernetes clusters]({{% ref "/docs/v0/cozystack-api" %}}) for running applications in development and production +- Standard [managed applications]({{% ref "/docs/v0/applications" %}}): databases, queue managers, caches, and more +- [Virtual machines]({{% ref "/docs/v0/virtualization" %}}) +- Reliable distributed storage + +[Cozystack platform stack]({{% ref "/docs/v0/guides/platform-stack" %}}) includes reliable components that are typically installed +in Kubernetes clusters separately. +Here they're bundled and tested to work together seamlessly. +The virtualization platform is also built-in and does not require additional hardware. +Instead, virtual machines run directly inside Kubernetes. + +Another powerful feature is the [tenant system]({{% ref "/docs/v0/guides/concepts#tenant-system" %}}). +It allows you to isolate individual developers, teams, or even entire companies in their own fully functional spaces—all on the same hardware. + +## Key features + +### Multi-User, Multi-Tenant, with SSO included + +Cozystack is designed for use by multiple teams, departments, or even companies. +The traditional approach of assigning each team a dedicated namespace can be too limiting. +Teams may need multiple environments with identical namespace names, +or they may lack the root permissions required to manage their own access models. + +Cozystack's [tenant system]({{% ref "/docs/v0/guides/concepts#tenant-system" %}}) solves these issues +by allowing users to deploy a Kubernetes-in-Kubernetes environment with a single app. +Users of nested Kubernetes clusters have full access and control. +The quota system ensures optimal hardware utilization while isolating resources to prevent the “noisy neighbor” problem. +Platform users can also generate detailed usage reports for each tenant. + +The [single sign-on system]({{% ref "/docs/v0/operations/oidc" %}}) in Cozystack is powered by Keycloak. +The Kubernetes API—both in the root tenant and in nested tenants—supports SSO out of the box. + +### Replicated Storage System + +Not all businesses can afford dedicated hardware SAN or NAS devices. +Cozystack includes a reliable distributed storage system that enables the creation of disaster-resilient, replicated volumes. +It's even possible to replicate volumes across multiple data centers. + +### Virtualization System + +Typically, you must choose between virtualization and containerization. +Cozystack combines both in a single platform. +There's no need to maintain a separate virtualization infrastructure. +In Cozystack, [virtual machines]({{% ref "/docs/v0/virtualization" %}}) +run directly in Kubernetes and consume CPU, memory, GPU, and storage from the same Kubernetes resource pool. + +### Managed Databases Without Overhead + +Even though Linux-on-Linux virtualization is highly efficient, it still introduces some overhead. +Cozystack avoids this by running [managed databases]({{% ref "/docs/v0/applications" %}}) +directly in containers on the host hardware. +You can spin up multiple high-availability databases with dedicated IP addresses, +all on limited hardware—yet each runs with direct access to CPU and storage. + +### Kubernetes ecosystem + +We’re not aware of any other Kubernetes distribution with more built-in infrastructure components. +(Seriously—send us a link if you find one!) +Rather than manually installing components and controllers, you simply choose +a [Cozystack bundle]({{% ref "/docs/v0/operations/configuration/bundles" %}}) that fits your needs. +All components are pre-configured, tested for compatibility, and updated alongside the Cozystack framework. + diff --git a/content/en/docs/v0/kubernetes/_include/_index.md b/content/en/docs/v0/kubernetes/_include/_index.md new file mode 100644 index 00000000..54626281 --- /dev/null +++ b/content/en/docs/v0/kubernetes/_include/_index.md @@ -0,0 +1,8 @@ +--- +title: "Managed (Tenant) Kubernetes" +linkTitle: "Managed Kubernetes" +description: "Learn to deploy and use isolated managed Kubernetes clusters in Cozystack." +weight: 40 +aliases: + - /docs/v0/reference/applications/kubernetes +--- diff --git a/content/en/docs/v0/kubernetes/_index.md b/content/en/docs/v0/kubernetes/_index.md new file mode 100644 index 00000000..f307cc0e --- /dev/null +++ b/content/en/docs/v0/kubernetes/_index.md @@ -0,0 +1,377 @@ +--- +title: "Managed (Tenant) Kubernetes" +linkTitle: "Managed Kubernetes" +description: "Learn to deploy and use isolated managed Kubernetes clusters in Cozystack." +weight: 40 +aliases: + - /docs/v0/reference/applications/kubernetes + - /docs/kubernetes + - /docs/reference/applications/kubernetes +--- + + + +## Managed Kubernetes in Cozystack + +Whenever you want to deploy a custom containerized application in Cozystack, it's best to deploy it to a managed Kubernetes cluster. + +Cozystack deploys and manages Kubernetes-as-a-service as standalone applications within each tenant’s isolated environment. +In Cozystack, such clusters are named tenant Kubernetes clusters, while the base Cozystack cluster is called a management or root cluster. +Tenant clusters are fully separated from the management cluster and are intended for deploying tenant-specific or customer-developed applications. + +Within a tenant cluster, users can take advantage of LoadBalancer services and easily provision physical volumes as needed. +The control-plane operates within containers, while the worker nodes are deployed as virtual machines, all seamlessly managed by the application. + +Kubernetes version in tenant clusters is independent of Kubernetes in the management cluster. +Users can select the latest patch versions from 1.28 to 1.33. + +## Why Use a Managed Kubernetes Cluster? + +Kubernetes has emerged as the industry standard, providing a unified and accessible API, primarily utilizing YAML for configuration. +This means that teams can easily understand and work with Kubernetes, streamlining infrastructure management. + +Kubernetes leverages robust software design patterns, enabling continuous recovery in any scenario through the reconciliation method. +Additionally, it ensures seamless scaling across a multitude of servers, +addressing the challenges posed by complex and outdated APIs found in traditional virtualization platforms. +This managed service eliminates the need for developing custom solutions or modifying source code, saving valuable time and effort. + +The Managed Kubernetes Service in Cozystack offers a streamlined solution for efficiently managing server workloads. + +## Starting Work + +Once the tenant Kubernetes cluster is ready, you can get a kubeconfig file to work with it. +It can be done via UI or a `kubectl` request: + +- Open the Cozystack dashboard, switch to your tenant, find and open the application page. Copy one of the config files from the **Secrets** section. +- Run the following command (using the management cluster kubeconfig): + + ```bash + kubectl get secret -n tenant- kubernetes--admin-kubeconfig -o go-template='{{ printf "%s\n" (index .data "admin.conf" | base64decode) }}' > admin.conf + ``` + +There are several kubeconfig options available: + +- `admin.conf` — The standard kubeconfig for accessing your new cluster. + You can create additional Kubernetes users using this configuration. +- `admin.svc` — Same token as `admin.conf`, but with the API server address set to the internal service name. + Use it for applications running inside the cluster that need API access. +- `super-admin.conf` — Similar to `admin.conf`, but with extended administrative permissions. + Intended for troubleshooting and cluster maintenance tasks. +- `super-admin.svc` — Same as `super-admin.conf`, but pointing to the internal API server address. + +## Implementation Details + +A tenant Kubernetes cluster in Cozystack is essentially Kubernetes-in-Kubernetes. +Deploying it involves the following components: + +- **Kamaji Control Plane**: [Kamaji](https://kamaji.clastix.io/) is an open-source project that facilitates the deployment + of Kubernetes control planes as pods within a root cluster. + Each control plane pod includes essential components like `kube-apiserver`, `controller-manager`, and `scheduler`, + allowing for efficient multi-tenancy and resource utilization. + +- **Etcd Cluster**: A dedicated etcd cluster is deployed using Ænix's [etcd-operator](https://github.com/aenix-io/etcd-operator). + It provides reliable and scalable key-value storage for the Kubernetes control plane. + +- **Worker Nodes**: Virtual Machines are provisioned to serve as worker nodes using KubeVirt. + These nodes are configured to join the tenant Kubernetes cluster, enabling the deployment and management of workloads. + +- **Cluster API**: Cozystack is using the [Kubernetes Cluster API](https://cluster-api.sigs.k8s.io/) to provision the components of a cluster. + +This architecture ensures isolated, scalable, and efficient tenant Kubernetes environments. + +See the reference for components utilized in this service: + +- [Kamaji Control Plane](https://kamaji.clastix.io) +- [Kamaji — Cluster API](https://kamaji.clastix.io/cluster-api/) +- [github.com/clastix/kamaji](https://github.com/clastix/kamaji) +- [KubeVirt](https://kubevirt.io/) +- [github.com/kubevirt/kubevirt](https://github.com/kubevirt/kubevirt) +- [github.com/aenix-io/etcd-operator](https://github.com/aenix-io/etcd-operator) +- [Kubernetes Cluster API](https://cluster-api.sigs.k8s.io/) +- [github.com/kubernetes-sigs/cluster-api-provider-kubevirt](https://github.com/kubernetes-sigs/cluster-api-provider-kubevirt) +- [github.com/kubevirt/csi-driver](https://github.com/kubevirt/csi-driver) + +## Parameters + +### Common Parameters + +| Name | Description | Type | Value | +| -------------- | ------------------------------------ | -------- | ------------ | +| `storageClass` | StorageClass used to store the data. | `string` | `replicated` | + + +### Application-specific Parameters + +| Name | Description | Type | Value | +| ----------------------------------- | ---------------------------------------------------------------------------------------------- | ------------------- | ----------- | +| `nodeGroups` | Worker nodes configuration map. | `map[string]object` | `{...}` | +| `nodeGroups[name].minReplicas` | Minimum number of replicas. | `int` | `0` | +| `nodeGroups[name].maxReplicas` | Maximum number of replicas. | `int` | `10` | +| `nodeGroups[name].instanceType` | Virtual machine instance type. | `string` | `u1.medium` | +| `nodeGroups[name].ephemeralStorage` | Ephemeral storage size. | `quantity` | `20Gi` | +| `nodeGroups[name].roles` | List of node roles. | `[]string` | `[]` | +| `nodeGroups[name].resources` | CPU and memory resources for each worker node. | `object` | `{}` | +| `nodeGroups[name].resources.cpu` | CPU available. | `quantity` | `""` | +| `nodeGroups[name].resources.memory` | Memory (RAM) available. | `quantity` | `""` | +| `nodeGroups[name].gpus` | List of GPUs to attach (NVIDIA driver requires at least 4 GiB RAM). | `[]object` | `[]` | +| `nodeGroups[name].gpus[i].name` | Name of GPU, such as "nvidia.com/AD102GL_L40S". | `string` | `""` | +| `version` | Kubernetes major.minor version to deploy | `string` | `v1.33` | +| `host` | External hostname for Kubernetes cluster. Defaults to `.` if empty. | `string` | `""` | + + +### Cluster Addons + +| Name | Description | Type | Value | +| --------------------------------------------- | --------------------------------------------------------------------------- | ---------- | --------- | +| `addons` | Cluster addons configuration. | `object` | `{}` | +| `addons.certManager` | Cert-manager addon. | `object` | `{}` | +| `addons.certManager.enabled` | Enable cert-manager. | `bool` | `false` | +| `addons.certManager.valuesOverride` | Custom Helm values overrides. | `object` | `{}` | +| `addons.cilium` | Cilium CNI plugin. | `object` | `{}` | +| `addons.cilium.valuesOverride` | Custom Helm values overrides. | `object` | `{}` | +| `addons.gatewayAPI` | Gateway API addon. | `object` | `{}` | +| `addons.gatewayAPI.enabled` | Enable Gateway API. | `bool` | `false` | +| `addons.ingressNginx` | Ingress-NGINX controller. | `object` | `{}` | +| `addons.ingressNginx.enabled` | Enable the controller (requires nodes labeled `ingress-nginx`). | `bool` | `false` | +| `addons.ingressNginx.exposeMethod` | Method to expose the controller. Allowed values: `Proxied`, `LoadBalancer`. | `string` | `Proxied` | +| `addons.ingressNginx.hosts` | Domains routed to this tenant cluster when `exposeMethod` is `Proxied`. | `[]string` | `[]` | +| `addons.ingressNginx.valuesOverride` | Custom Helm values overrides. | `object` | `{}` | +| `addons.gpuOperator` | NVIDIA GPU Operator. | `object` | `{}` | +| `addons.gpuOperator.enabled` | Enable GPU Operator. | `bool` | `false` | +| `addons.gpuOperator.valuesOverride` | Custom Helm values overrides. | `object` | `{}` | +| `addons.fluxcd` | FluxCD GitOps operator. | `object` | `{}` | +| `addons.fluxcd.enabled` | Enable FluxCD. | `bool` | `false` | +| `addons.fluxcd.valuesOverride` | Custom Helm values overrides. | `object` | `{}` | +| `addons.monitoringAgents` | Monitoring agents. | `object` | `{}` | +| `addons.monitoringAgents.enabled` | Enable monitoring agents. | `bool` | `false` | +| `addons.monitoringAgents.valuesOverride` | Custom Helm values overrides. | `object` | `{}` | +| `addons.verticalPodAutoscaler` | Vertical Pod Autoscaler. | `object` | `{}` | +| `addons.verticalPodAutoscaler.valuesOverride` | Custom Helm values overrides. | `object` | `{}` | +| `addons.velero` | Velero backup/restore addon. | `object` | `{}` | +| `addons.velero.enabled` | Enable Velero. | `bool` | `false` | +| `addons.velero.valuesOverride` | Custom Helm values overrides. | `object` | `{}` | +| `addons.coredns` | CoreDNS addon. | `object` | `{}` | +| `addons.coredns.valuesOverride` | Custom Helm values overrides. | `object` | `{}` | + + +### Kubernetes Control Plane Configuration + +| Name | Description | Type | Value | +| --------------------------------------------------- | ------------------------------------------------ | ---------- | ------- | +| `controlPlane` | Kubernetes control-plane configuration. | `object` | `{}` | +| `controlPlane.replicas` | Number of control-plane replicas. | `int` | `2` | +| `controlPlane.apiServer` | API Server configuration. | `object` | `{}` | +| `controlPlane.apiServer.resources` | CPU and memory resources for API Server. | `object` | `{}` | +| `controlPlane.apiServer.resources.cpu` | CPU available. | `quantity` | `""` | +| `controlPlane.apiServer.resources.memory` | Memory (RAM) available. | `quantity` | `""` | +| `controlPlane.apiServer.resourcesPreset` | Preset if `resources` omitted. | `string` | `large` | +| `controlPlane.controllerManager` | Controller Manager configuration. | `object` | `{}` | +| `controlPlane.controllerManager.resources` | CPU and memory resources for Controller Manager. | `object` | `{}` | +| `controlPlane.controllerManager.resources.cpu` | CPU available. | `quantity` | `""` | +| `controlPlane.controllerManager.resources.memory` | Memory (RAM) available. | `quantity` | `""` | +| `controlPlane.controllerManager.resourcesPreset` | Preset if `resources` omitted. | `string` | `micro` | +| `controlPlane.scheduler` | Scheduler configuration. | `object` | `{}` | +| `controlPlane.scheduler.resources` | CPU and memory resources for Scheduler. | `object` | `{}` | +| `controlPlane.scheduler.resources.cpu` | CPU available. | `quantity` | `""` | +| `controlPlane.scheduler.resources.memory` | Memory (RAM) available. | `quantity` | `""` | +| `controlPlane.scheduler.resourcesPreset` | Preset if `resources` omitted. | `string` | `micro` | +| `controlPlane.konnectivity` | Konnectivity configuration. | `object` | `{}` | +| `controlPlane.konnectivity.server` | Konnectivity Server configuration. | `object` | `{}` | +| `controlPlane.konnectivity.server.resources` | CPU and memory resources for Konnectivity. | `object` | `{}` | +| `controlPlane.konnectivity.server.resources.cpu` | CPU available. | `quantity` | `""` | +| `controlPlane.konnectivity.server.resources.memory` | Memory (RAM) available. | `quantity` | `""` | +| `controlPlane.konnectivity.server.resourcesPreset` | Preset if `resources` omitted. | `string` | `micro` | + + +## Parameter examples and reference + +### resources and resourcesPreset + +`resources` sets explicit CPU and memory configurations for each replica. +When left empty, the preset defined in `resourcesPreset` is applied. + +```yaml +resources: + cpu: 4000m + memory: 4Gi +``` + +`resourcesPreset` sets named CPU and memory configurations for each replica. +This setting is ignored if the corresponding `resources` value is set. + +| Preset name | CPU | memory | +|-------------|--------|---------| +| `nano` | `250m` | `128Mi` | +| `micro` | `500m` | `256Mi` | +| `small` | `1` | `512Mi` | +| `medium` | `1` | `1Gi` | +| `large` | `2` | `2Gi` | +| `xlarge` | `4` | `4Gi` | +| `2xlarge` | `8` | `8Gi` | + +### instanceType Resources + +The following instanceType resources are provided by Cozystack: + +| Name | vCPUs | Memory | +|---------------|-------|--------| +| `cx1.2xlarge` | 8 | 16Gi | +| `cx1.4xlarge` | 16 | 32Gi | +| `cx1.8xlarge` | 32 | 64Gi | +| `cx1.large` | 2 | 4Gi | +| `cx1.medium` | 1 | 2Gi | +| `cx1.xlarge` | 4 | 8Gi | +| `gn1.2xlarge` | 8 | 32Gi | +| `gn1.4xlarge` | 16 | 64Gi | +| `gn1.8xlarge` | 32 | 128Gi | +| `gn1.xlarge` | 4 | 16Gi | +| `m1.2xlarge` | 8 | 64Gi | +| `m1.4xlarge` | 16 | 128Gi | +| `m1.8xlarge` | 32 | 256Gi | +| `m1.large` | 2 | 16Gi | +| `m1.xlarge` | 4 | 32Gi | +| `n1.2xlarge` | 16 | 32Gi | +| `n1.4xlarge` | 32 | 64Gi | +| `n1.8xlarge` | 64 | 128Gi | +| `n1.large` | 4 | 8Gi | +| `n1.medium` | 4 | 4Gi | +| `n1.xlarge` | 8 | 16Gi | +| `o1.2xlarge` | 8 | 32Gi | +| `o1.4xlarge` | 16 | 64Gi | +| `o1.8xlarge` | 32 | 128Gi | +| `o1.large` | 2 | 8Gi | +| `o1.medium` | 1 | 4Gi | +| `o1.micro` | 1 | 1Gi | +| `o1.nano` | 1 | 512Mi | +| `o1.small` | 1 | 2Gi | +| `o1.xlarge` | 4 | 16Gi | +| `rt1.2xlarge` | 8 | 32Gi | +| `rt1.4xlarge` | 16 | 64Gi | +| `rt1.8xlarge` | 32 | 128Gi | +| `rt1.large` | 2 | 8Gi | +| `rt1.medium` | 1 | 4Gi | +| `rt1.micro` | 1 | 1Gi | +| `rt1.small` | 1 | 2Gi | +| `rt1.xlarge` | 4 | 16Gi | +| `u1.2xlarge` | 8 | 32Gi | +| `u1.2xmedium` | 2 | 4Gi | +| `u1.4xlarge` | 16 | 64Gi | +| `u1.8xlarge` | 32 | 128Gi | +| `u1.large` | 2 | 8Gi | +| `u1.medium` | 1 | 4Gi | +| `u1.micro` | 1 | 1Gi | +| `u1.nano` | 1 | 512Mi | +| `u1.small` | 1 | 2Gi | +| `u1.xlarge` | 4 | 16Gi | + +### U Series: Universal + +The U Series is quite neutral and provides resources for +general purpose applications. + +*U* is the abbreviation for "Universal", hinting at the universal +attitude towards workloads. + +VMs of instance types will share physical CPU cores on a +time-slice basis with other VMs. + +#### U Series Characteristics + +Specific characteristics of this series are: +- *Burstable CPU performance* - The workload has a baseline compute + performance but is permitted to burst beyond this baseline, if + excess compute resources are available. +- *vCPU-To-Memory Ratio (1:4)* - A vCPU-to-Memory ratio of 1:4, for less + noise per node. + +### O Series: Overcommitted + +The O Series is based on the U Series, with the only difference +being that memory is overcommitted. + +*O* is the abbreviation for "Overcommitted". + +#### O Series Characteristics + +Specific characteristics of this series are: +- *Burstable CPU performance* - The workload has a baseline compute + performance but is permitted to burst beyond this baseline, if + excess compute resources are available. +- *Overcommitted Memory* - Memory is over-committed in order to achieve + a higher workload density. +- *vCPU-To-Memory Ratio (1:4)* - A vCPU-to-Memory ratio of 1:4, for less + noise per node. + +### CX Series: Compute Exclusive + +The CX Series provides exclusive compute resources for compute +intensive applications. + +*CX* is the abbreviation of "Compute Exclusive". + +The exclusive resources are given to the compute threads of the +VM. In order to ensure this, some additional cores (depending +on the number of disks and NICs) will be requested to offload +the IO threading from cores dedicated to the workload. +In addition, in this series, the NUMA topology of the used +cores is provided to the VM. + +#### CX Series Characteristics + +Specific characteristics of this series are: +- *Hugepages* - Hugepages are used in order to improve memory + performance. +- *Dedicated CPU* - Physical cores are exclusively assigned to every + vCPU in order to provide fixed and high compute guarantees to the + workload. +- *Isolated emulator threads* - Hypervisor emulator threads are isolated + from the vCPUs in order to reduce emaulation related impact on the + workload. +- *vNUMA* - Physical NUMA topology is reflected in the guest in order to + optimize guest sided cache utilization. +- *vCPU-To-Memory Ratio (1:2)* - A vCPU-to-Memory ratio of 1:2. + +### M Series: Memory + +The M Series provides resources for memory intensive +applications. + +*M* is the abbreviation of "Memory". + +#### M Series Characteristics + +Specific characteristics of this series are: +- *Hugepages* - Hugepages are used in order to improve memory + performance. +- *Burstable CPU performance* - The workload has a baseline compute + performance but is permitted to burst beyond this baseline, if + excess compute resources are available. +- *vCPU-To-Memory Ratio (1:8)* - A vCPU-to-Memory ratio of 1:8, for much + less noise per node. + +### RT Series: RealTime + +The RT Series provides resources for realtime applications, like Oslat. + +*RT* is the abbreviation for "realtime". + +This series of instance types requires nodes capable of running +realtime applications. + +#### RT Series Characteristics + +Specific characteristics of this series are: +- *Hugepages* - Hugepages are used in order to improve memory + performance. +- *Dedicated CPU* - Physical cores are exclusively assigned to every + vCPU in order to provide fixed and high compute guarantees to the + workload. +- *Isolated emulator threads* - Hypervisor emulator threads are isolated + from the vCPUs in order to reduce emaulation related impact on the + workload. +- *vCPU-To-Memory Ratio (1:4)* - A vCPU-to-Memory ratio of 1:4 starting from + the medium size. diff --git a/content/en/docs/v0/kubernetes/backup-and-recovery.md b/content/en/docs/v0/kubernetes/backup-and-recovery.md new file mode 100644 index 00000000..be1652c8 --- /dev/null +++ b/content/en/docs/v0/kubernetes/backup-and-recovery.md @@ -0,0 +1,304 @@ +--- +title: Backup and Recovery +linkTitle: Backup and Recovery +description: "How to back up and restore resources in a Cozystack cluster." +weight: 40 +aliases: + - /docs/v0/guides/backups + - /docs/kubernetes/backup-and-recovery + - /docs/guides/backups +--- + +{{% alert color="warning" %}} +:warning: **Warning**: Backup and restore functionality is currently under development and will be exposed via user‑friendly API interfaces in future releases. +The instructions below require manual configuration and are recommended for advanced users only. +{{% /alert %}} + +Cozystack uses [Velero](https://velero.io/docs/v1.17/) to manage Kubernetes resource backups and restores, including volume snapshots. +This guide explains how to configure one‑off and scheduled backups and how to perform restores, with practical examples. + +The Velero add‑on is disabled by default. To enable it: + +- For the **management cluster**, add `velero` to the `bundle-enable` option in the `cozystack` ConfigMap in the `cozy-system` namespace. +- For **tenant clusters**, set `spec.addons.velero.enabled` to `true` in the `Kubernetes` resource. + +## Prerequisites + +- Cozystack v0.37.0 or later. +- Administrator access to the Cozystack cluster. PVC backups require creating Kubernetes secrets in the management cluster, which can only be done by an administrator. +- External S3‑compatible storage. +- Velero CLI installed: [https://velero.io/docs/v1.17/basic-install/#install-the-cli](https://velero.io/docs/v1.17/basic-install/#install-the-cli). + +## 1. Set up Storage Credentials and Configuration + +To enable backups, the first step is to provide Cozystack with access to an S3-compatible storage. +It will require creating a number of Kubernetes secrets in the `cozy-velero` namespace of the management cluster. + +### 1.1 Create a Secret with S3 credentials + +Create a secret containing credentials for your S3‑compatible storage where backups will be saved. + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: s3-credentials + namespace: cozy-velero +type: Opaque +stringData: + cloud: | + [default] + aws_access_key_id= + aws_secret_access_key= + + services = seaweed-s3 + [services seaweed-s3] + s3 = + endpoint_url = https://s3.tenant-name.cozystack.example.com +``` + +### 1.2 Configure BackupStorageLocation + +This resource defines where Velero stores backups (S3 bucket). + +```yaml +apiVersion: velero.io/v1 +kind: BackupStorageLocation +metadata: + name: default + namespace: cozy-velero +spec: + # provider name can have any value + provider: + objectStorage: + bucket: + config: + checksumAlgorithm: '' + profile: "default" + s3ForcePathStyle: "true" + s3Url: https://s3.tenant-name.cozystack.example.com + credential: + name: s3-credentials + key: cloud +``` + +For more information, see the [`BackupStorageLocation` API documentation](https://velero.io/docs/v1.17/api-types/backupstoragelocation/). + + +### 1.3 Configure VolumeSnapshotLocation + +This resource defines the configuration for volume snapshots. + +```yaml +apiVersion: velero.io/v1 +kind: VolumeSnapshotLocation +metadata: + name: default + namespace: cozy-velero +spec: + provider: aws + credential: + name: s3-credentials + key: cloud + config: + region: "us-west-2" + profile: "default" +``` + +For more information, see the [`VolumeSnapshotLocation` API documentation](https://velero.io/docs/v1.17/api-types/volumesnapshotlocation/). + +## 2. Create Backups + +Once storage is configured, you can create backups manually or set up a schedule. + + +## 2.1 Create a manual backup + +To create a backup manually, run: + +``` +velero -n cozy-velero backup create tenant-backupexample-backup1 \ + --include-namespaces tenant-backupexample \ + --snapshot-move-data \ + --wait +``` + +Alternatively, apply the following resource to the cluster: + +```yaml +apiVersion: velero.io/v1 +kind: Backup +metadata: + # unique backup name used for recovery and other operations + name: manual-backup + namespace: cozy-velero +spec: + snapshotVolumes: true + snapshotMoveData: true + includedNamespaces: + # change to the actual namespace name + - tenant-backupexample + labelSelector: + matchLabels: + # change to the actual application name + app: test-pod + ttl: 720h0m0s # Backup retention (30 days) +``` + +Check upload progress with: + +```bash +kubectl get datauploads.velero.io +``` + +Check the backup status with: + +```bash +velero -n cozy-velero backup get +``` + +Check snapshot upload status with: + +```bash +kubectl -n cozy-velero get datauploads.velero.io +``` + +For more information, see the [`Backup` API documentation](https://velero.io/docs/v1.17/api-types/backup/). + + +## 2.2 Create scheduled backups + +To set up a schedule, apply the following resource to the cluster: + +```yaml +apiVersion: velero.io/v1 +kind: Schedule +metadata: + # unique backup name used for recovery and other operations + name: backup-schedule + namespace: cozy-velero +spec: + schedule: "*/5 * * * *" # Every 5 minutes (example) + template: + ttl: 720h0m0s # Backup retention (30 days) + snapshotVolumes: true + snapshotMoveData: true + includedNamespaces: + # change to the actual tenant name + - tenant-backupexample + labelSelector: + matchLabels: + # change to the actual application name + app: test-pod +``` + +Check scheduled backups with: +```bash +velero -n cozy-velero schedule get +velero -n cozy-velero schedule describe backup-schedule +``` + +For more information, see the [`Schedule` API documentation](https://velero.io/docs/v1.17/api-types/schedule/). + + +## 3. Restore from a backup (all resources) + +{{% alert color="warning" %}} +:warning: **Warning**: This operation attempts to restore all resources from the backup and may lead to conflicts with webhooks and other controllers. +Consider using a partial restore as described in the next section. +{{% /alert %}} + +To restore data from a backup, apply the following resource to the cluster: + +```yaml +apiVersion: velero.io/v1 +kind: Restore +metadata: + creationTimestamp: null + name: restore-example + namespace: cozy-velero +spec: + backupName: + hooks: {} + includedNamespaces: + - '*' + itemOperationTimeout: 0s + uploaderConfig: {} +status: {} +``` + +Here `` is the name assigned to the backup, as shown in the output of `velero -n cozy-velero backup get`. +In the examples above, backups were named `manual-backup` and those created by `backup-schedule`. + +Check restore status with: + +```bash +velero -n cozy-velero restore get +``` + +To see the progress of data downloads: +```bash +kubectl -n cozy-velero get datadownloads.velero.io +``` + +For more information, see the [`Restore` API documentation](https://velero.io/docs/v1.17/api-types/restore/). + +## 4. Restore from a backup (partial) + +{{% alert color="warning" %}} +:warning: **Warning**: Before restoring a backup, make sure that the resources to be restored are not already present in the cluster. Otherwise, they will be skipped. +{{% /alert %}} + +Use this approach in the management cluster, as restoring all resources may lead to conflicts with webhooks and other controllers. + +List available backups: + +```bash +velero -n cozy-velero backup get +``` + +Restore PVCs only: + +```bash +velero -n cozy-velero restore create manual-backup-restore-pvc \ + --from-backup manual-backup \ + --include-resources persistentvolumeclaims \ + --include-namespaces tenant-backupexample --restore-volumes=true \ + --wait +``` + +To see the progress of data downloads: +```bash +kubectl -n cozy-velero get datadownloads.velero.io +``` + +If you have virtual machine volumes, you must mark them to allow adoption by `DataVolume` resources. +The following command annotates all matching PVCs in the `tenant-backupexample` namespace with the required annotations: +```bash +kubectl -n tenant-backupexample get pvc -l app=containerized-data-importer --no-headers -o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name \ + | awk '{print "kubectl annotate -n " $1 " pvc " $2 " cdi.kubevirt.io/storage.populatedFor=" $2 " cdi.kubevirt.io/allowClaimAdoption=true --overwrite"}' \ + | sh -x +``` + +Restore underlying Services, ConfigMaps, Secrets, and DataVolumes: +```bash +velero -n cozy-velero restore create manual-backup-restore-resources \ + --from-backup manual-backup \ + --include-resources services,configmaps,secrets,datavolumes.cdi.kubevirt.io \ + --include-namespaces tenant-backupexample \ + --wait +``` + +Restore `HelmRelease` resources (these represent Cozystack apps): +```bash +velero -n cozy-velero restore create manual-backup-restore-helmreleases \ + --from-backup manual-backup \ + --include-resources helmreleases.helm.toolkit.fluxcd.io \ + --include-namespaces tenant-backupexample \ + --wait +``` + +Verify that your HelmReleases and apps are restored: +```bash +kubectl -n tenant-backupexample get helmreleases +``` diff --git a/content/en/docs/v0/kubernetes/relocate-etcd.md b/content/en/docs/v0/kubernetes/relocate-etcd.md new file mode 100644 index 00000000..c4d6de0f --- /dev/null +++ b/content/en/docs/v0/kubernetes/relocate-etcd.md @@ -0,0 +1,48 @@ +--- +title: How to relocate etcd replicas in tenant clusters +linkTitle: How to relocate etcd replicas +description: "Learn how to relocate replicas of tenant etcd clusters, which are used by tenant Kubernetes clusters." +weight: 100 +aliases: + - /docs/kubernetes/relocate-etcd +--- + +Tenant Kubernetes clusters are using their own etcd clusters, not the one that is used by the management cluster. +Such etcd clusters are deployed in tenants and are available to managed Kubernetes clusters deployed in the tenant and its sub-tenants. + +Replicas of a tenant etcd cluster can be relocated between nodes for maintenance reasons. +Currently, management operations for tenant etcd clusters are not automated, +but such a task can be done manually. + +First, you need to install the `kubectl-etcd` plugin for `kubectl`: + +```bash +go install github.com/aenix-io/etcd-operator/cmd/kubectl-etcd@latest +``` + +Now you can manage etcd replicas. +The example script shown below removes the `etcd-2` replica from the etcd cluster and then add it back. + +```bash +# tenant which the etcd cluster belongs to +NAMESPACE=tenant-demo +# etcd replica +RM=etcd-2 +POD=$(kubectl get pod -n "$NAMESPACE" -l app.kubernetes.io/name=etcd --no-headers | awk '$2 == "1/1" && $1 != "'$RM'" {print $1; exit;}') +RMID=$(kubectl etcd -n $NAMESPACE -p $POD members | awk '$2 == "'$RM'" {print $1}') + +# delete the replica +kubectl delete -n $NAMESPACE pvc/data-$RM pod/$RM +if [ -n $RMID ]; then + kubectl etcd -n $NAMESPACE -p $POD remove-member "$RMID" +fi + +# add the replica back +kubectl etcd -n $NAMESPACE -p $POD add-member "https://$RM.etcd-headless.$NAMESPACE.svc:2380" + +kubectl wait --for=condition=ready pod -n $NAMESPACE $RM --timeout=2m + +kubectl etcd -n $NAMESPACE -p $RM members +``` + +To learn more about tenant nesting and shared services, read the [Tenants guide]({{% ref "/docs/v0/guides/tenants" %}}). diff --git a/content/en/docs/v0/networking/_include/http-cache.md b/content/en/docs/v0/networking/_include/http-cache.md new file mode 100644 index 00000000..3b62a074 --- /dev/null +++ b/content/en/docs/v0/networking/_include/http-cache.md @@ -0,0 +1,9 @@ +--- +title: "Managed Nginx-based HTTP Cache Service" +linkTitle: "HTTP Cache" +description: "The Nginx-based HTTP caching service is designed to optimize web traffic and enhance web application performance." +weight: 20 +aliases: + - /docs/v0/reference/applications/http-cache +--- + diff --git a/content/en/docs/v0/networking/_include/tcp-balancer.md b/content/en/docs/v0/networking/_include/tcp-balancer.md new file mode 100644 index 00000000..2206d1bd --- /dev/null +++ b/content/en/docs/v0/networking/_include/tcp-balancer.md @@ -0,0 +1,9 @@ +--- +title: "Managed TCP Load Balancer Service" +linkTitle: "TCP Load Balancer" +description: "The Managed TCP Load Balancer Service simplifies the deployment and management of load balancers." +weight: 30 +aliases: + - /docs/v0/reference/applications/tcp-balancer +--- + diff --git a/content/en/docs/v0/networking/_include/vpc.md b/content/en/docs/v0/networking/_include/vpc.md new file mode 100644 index 00000000..0b4716c0 --- /dev/null +++ b/content/en/docs/v0/networking/_include/vpc.md @@ -0,0 +1,9 @@ +--- +title: "VPC" +linkTitle: "VPC" +description: "Dedicated subnets" +weight: 10 +aliases: + - /docs/v0/reference/applications/vpc +--- + diff --git a/content/en/docs/v0/networking/_include/vpn.md b/content/en/docs/v0/networking/_include/vpn.md new file mode 100644 index 00000000..69350fdf --- /dev/null +++ b/content/en/docs/v0/networking/_include/vpn.md @@ -0,0 +1,9 @@ +--- +title: "Managed VPN Service" +linkTitle: "VPN" +description: "Managed VPN Service simplifies the deployment and management of VPN server, enabling you to establish secure connections with ease." +weight: 10 +aliases: + - /docs/v0/reference/applications/vpn +--- + diff --git a/content/en/docs/v0/networking/_index.md b/content/en/docs/v0/networking/_index.md new file mode 100644 index 00000000..7987f38f --- /dev/null +++ b/content/en/docs/v0/networking/_index.md @@ -0,0 +1,10 @@ +--- +title: "Networking Capabilities" +linkTitle: "Networking" +description: "Network configuration, virtual routers, load balancers, and other networking capabilities in Cozystack." +weight: 60 +aliases: + - /docs/networking +--- + +This documentation section explains network configuration, virtual routers, load balancers, and other networking capabilities in Cozystack. diff --git a/content/en/docs/v0/networking/http-cache.md b/content/en/docs/v0/networking/http-cache.md new file mode 100644 index 00000000..2b85975b --- /dev/null +++ b/content/en/docs/v0/networking/http-cache.md @@ -0,0 +1,156 @@ +--- +title: "Managed Nginx-based HTTP Cache Service" +linkTitle: "HTTP Cache" +description: "The Nginx-based HTTP caching service is designed to optimize web traffic and enhance web application performance." +weight: 20 +aliases: + - /docs/v0/reference/applications/http-cache + - /docs/networking/http-cache + - /docs/reference/applications/http-cache +--- + + + + +The Nginx-based HTTP caching service is designed to optimize web traffic and enhance web application performance. +This service combines custom-built Nginx instances with HAProxy for efficient caching and load balancing. + +## Deployment information + +The Nginx instances include the following modules and features: + +- VTS module for statistics +- Integration with ip2location +- Integration with ip2proxy +- Support for 51Degrees +- Cache purge functionality + +HAproxy plays a vital role in this setup by directing incoming traffic to specific Nginx instances based on a consistent hash calculated from the URL. Each Nginx instance includes a Persistent Volume Claim (PVC) for storing cached content, ensuring fast and reliable access to frequently used resources. + +## Deployment Details + +The deployment architecture is illustrated in the diagram below: + +``` + + ┌─────────┐ + │ metallb │ arp announce + └────┬────┘ + │ + │ + ┌───────▼───────────────────────────┐ + │ kubernetes service │ node + │ (externalTrafficPolicy: Local) │ level + └──────────┬────────────────────────┘ + │ + │ + ┌────▼────┐ ┌─────────┐ + │ haproxy │ │ haproxy │ loadbalancer + │ (active)│ │ (backup)│ layer + └────┬────┘ └─────────┘ + │ + │ balance uri whole + │ hash-type consistent + ┌──────┴──────┬──────────────┐ + ┌───▼───┐ ┌───▼───┐ ┌───▼───┐ caching + │ nginx │ │ nginx │ │ nginx │ layer + └───┬───┘ └───┬───┘ └───┬───┘ + │ │ │ + ┌────┴───────┬─────┴────┬─────────┴──┐ + │ │ │ │ + ┌───▼────┐ ┌────▼───┐ ┌───▼────┐ ┌────▼───┐ + │ origin │ │ origin │ │ origin │ │ origin │ + └────────┘ └────────┘ └────────┘ └────────┘ + +``` + +## Known issues + +- VTS module shows wrong upstream response time, [github.com/vozlt/nginx-module-vts#198](https://github.com/vozlt/nginx-module-vts/issues/198) + +## Parameters + +### Common parameters + +| 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 | Type | Value | +| ----------- | ------------------------------------------------ | ---------- | ----- | +| `endpoints` | Endpoints configuration, as a list of . | `[]string` | `[]` | + + +### HAProxy parameters + +| Name | Description | Type | Value | +| -------------------------- | -------------------------------------------------------------------------------------------------------- | ---------- | ------ | +| `haproxy` | HAProxy configuration. | `object` | `{}` | +| `haproxy.replicas` | Number of HAProxy replicas. | `int` | `2` | +| `haproxy.resources` | Explicit CPU and memory configuration. When omitted, the preset defined in `resourcesPreset` is applied. | `object` | `{}` | +| `haproxy.resources.cpu` | CPU available to each replica. | `quantity` | `""` | +| `haproxy.resources.memory` | Memory (RAM) available to each replica. | `quantity` | `""` | +| `haproxy.resourcesPreset` | Default sizing preset used when `resources` is omitted. | `string` | `nano` | + + +### Nginx parameters + +| Name | Description | Type | Value | +| ------------------------ | -------------------------------------------------------------------------------------------------------- | ---------- | ------ | +| `nginx` | Nginx configuration. | `object` | `{}` | +| `nginx.replicas` | Number of Nginx replicas. | `int` | `2` | +| `nginx.resources` | Explicit CPU and memory configuration. When omitted, the preset defined in `resourcesPreset` is applied. | `object` | `{}` | +| `nginx.resources.cpu` | CPU available to each replica. | `quantity` | `""` | +| `nginx.resources.memory` | Memory (RAM) available to each replica. | `quantity` | `""` | +| `nginx.resourcesPreset` | Default sizing preset used when `resources` is omitted. | `string` | `nano` | + + +## Parameter examples and reference + +### resources and resourcesPreset + +`resources` sets explicit CPU and memory configurations for each replica. +When left empty, the preset defined in `resourcesPreset` is applied. + +```yaml +resources: + cpu: 4000m + memory: 4Gi +``` + +`resourcesPreset` sets named CPU and memory configurations for each replica. +This setting is ignored if the corresponding `resources` value is set. + +| Preset name | CPU | memory | +|-------------|--------|---------| +| `nano` | `250m` | `128Mi` | +| `micro` | `500m` | `256Mi` | +| `small` | `1` | `512Mi` | +| `medium` | `1` | `1Gi` | +| `large` | `2` | `2Gi` | +| `xlarge` | `4` | `4Gi` | +| `2xlarge` | `8` | `8Gi` | + + +### endpoints + +`endpoints` is a flat list of IP addresses: + +```yaml +endpoints: + - 10.100.3.1:80 + - 10.100.3.11:80 + - 10.100.3.2:80 + - 10.100.3.12:80 + - 10.100.3.3:80 + - 10.100.3.13:80 +``` diff --git a/content/en/docs/v0/networking/tcp-balancer.md b/content/en/docs/v0/networking/tcp-balancer.md new file mode 100644 index 00000000..ebd73757 --- /dev/null +++ b/content/en/docs/v0/networking/tcp-balancer.md @@ -0,0 +1,79 @@ +--- +title: "Managed TCP Load Balancer Service" +linkTitle: "TCP Load Balancer" +description: "The Managed TCP Load Balancer Service simplifies the deployment and management of load balancers." +weight: 30 +aliases: + - /docs/v0/reference/applications/tcp-balancer + - /docs/networking/tcp-balancer + - /docs/reference/applications/tcp-balancer +--- + + + + +The Managed TCP Load Balancer Service simplifies the deployment and management of load balancers. It efficiently distributes incoming TCP traffic across multiple backend servers, ensuring high availability and optimal resource utilization. + +## Deployment Details + +Managed TCP Load Balancer Service efficiently utilizes HAProxy for load balancing purposes. HAProxy is a well-established and reliable solution for distributing incoming TCP traffic across multiple backend servers, ensuring high availability and efficient resource utilization. This deployment choice guarantees the seamless and dependable operation of your load balancing infrastructure. + +- Docs: https://www.haproxy.com/documentation/ + +## Parameters + +### Common parameters + +| Name | Description | Type | Value | +| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------- | ---------- | ------- | +| `replicas` | Number of HAProxy replicas. | `int` | `2` | +| `resources` | Explicit CPU and memory configuration for each TCP Balancer replica. When omitted, the preset defined in `resourcesPreset` is applied. | `object` | `{}` | +| `resources.cpu` | CPU available to each replica. | `quantity` | `""` | +| `resources.memory` | Memory (RAM) available to each replica. | `quantity` | `""` | +| `resourcesPreset` | Default sizing preset used when `resources` is omitted. | `string` | `nano` | +| `external` | Enable external access from outside the cluster. | `bool` | `false` | + + +### Application-specific parameters + +| Name | Description | Type | Value | +| -------------------------------- | ------------------------------------------------------------- | ---------- | ------- | +| `httpAndHttps` | HTTP and HTTPS configuration. | `object` | `{}` | +| `httpAndHttps.mode` | Mode for balancer. | `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 (default: false). | `bool` | `false` | +| `whitelist` | List of allowed client networks. | `[]string` | `[]` | + + +## Parameter examples and reference + +### resources and resourcesPreset + +`resources` sets explicit CPU and memory configurations for each replica. +When left empty, the preset defined in `resourcesPreset` is applied. + +```yaml +resources: + cpu: 4000m + memory: 4Gi +``` + +`resourcesPreset` sets named CPU and memory configurations for each replica. +This setting is ignored if the corresponding `resources` value is set. + +| Preset name | CPU | memory | +|-------------|--------|---------| +| `nano` | `250m` | `128Mi` | +| `micro` | `500m` | `256Mi` | +| `small` | `1` | `512Mi` | +| `medium` | `1` | `1Gi` | +| `large` | `2` | `2Gi` | +| `xlarge` | `4` | `4Gi` | +| `2xlarge` | `8` | `8Gi` | diff --git a/content/en/docs/v0/networking/virtual-router.md b/content/en/docs/v0/networking/virtual-router.md new file mode 100644 index 00000000..ad438161 --- /dev/null +++ b/content/en/docs/v0/networking/virtual-router.md @@ -0,0 +1,70 @@ +--- +title: "Virtual Routers" +linkTitle: "Virtual Routers" +description: "Deploy a virtual router in a VM" +weight: 40 +aliases: + - /docs/v0/operations/virtualization/virtual-router + - /docs/networking/virtual-router + - /docs/operations/virtualization/virtual-router +--- + +Starting with version [v0.27.0](https://github.com/cozystack/cozystack/releases/tag/v0.27.0), +Cozystack can deploy virtual routers (also known as "router appliances" or "middlebox appliances"). +This feature allows you to create a virtual router based on a virtual machine instance. +The virtual router can route traffic between different networks. + +## Creating a Virtual Router + +Creating a virtual router requires a Cozystack administrator account. + +1. **Create a VM Instance**
+ Use the standard `vm-instance` and `virtual-machine` packages to create a virtual machine instance. + +1. **Disable Anti-Spoofing Protection**
+ To act as a virtual router, the VM instance should have anti-spoofing protection disabled: + + ```bash + kubectl patch virtualmachines.kubevirt.io virtual-machine-example --type=merge \ + -p '{"spec":{"template":{"metadata":{"annotations":{"ovn.kubernetes.io/port_security": "false"}}}}}' + ``` + +1. **Restart the Virtual Machine** + + ```bash + virtctl stop virtual-machine-example + virtctl start virtual-machine-example + ``` + +1. **Retrieve the IP Address of the VM** + + ```bash + kubectl get vmi + ``` + + The output will have a line with the new VM's IP address: + + ```console + NAME AGE PHASE IP NODENAME READY + virtual-machine-example 3d4h Running 10.244.8.56 gld-csxhk-003 True + ``` + +1. **Configure Custom Routes for a Tenant**
+ Edit the tenant namespace: + + ```bash + kubectl edit namespace tenant-example + ``` + + Add the following annotation using the router IP you found earlier as `gw` + and the subnet mask for the router to handle as `dst`: + + ```yaml + ovn.kubernetes.io/routes: | + [{ + "gw": "10.244.8.56", + "dst": "10.10.13.0/24" + }] + ``` + +These custom routes will now be applied to all pods within the tenant namespace. diff --git a/content/en/docs/v0/networking/vpc.md b/content/en/docs/v0/networking/vpc.md new file mode 100644 index 00000000..eb240900 --- /dev/null +++ b/content/en/docs/v0/networking/vpc.md @@ -0,0 +1,66 @@ +--- +title: "VPC" +linkTitle: "VPC" +description: "Dedicated subnets" +weight: 10 +aliases: + - /docs/v0/reference/applications/vpc + - /docs/networking/vpc + - /docs/reference/applications/vpc +--- + + + + +VPC offers a subset of dedicated subnets with networking services related to it. +As the service evolves, it will provide more ways to isolate your workloads. + +## Service details + +To function, the service requires kube-ovn and multus CNI to be present, so by default it will only work on `paas-full` bundle. +Kube-ovn provides VPC and Subnet resources and performs isolation and networking maintenance such as DHCP. Under the hood it uses ovn virtual routers and virtual switches. +Multus enables a multi-nic capability, so a pod or a VM could have two or more network interfaces. + +Currently every workload will have a connection to a default management network which will also have a default gateway, and the majority of traffic will go through it. +VPC subnets are for now an additional dedicated networking spaces. + +## Deployment notes + +VPC name must be unique within a tenant. +Subnet name and ip address range must be unique within a VPC. +Subnet ip address space must not overlap with the default management network ip address range, subsets of 172.16.0.0/12 are recommended. +Currently there are no fail-safe checks, however they are planned for the future. + +Different VPCs may have subnets with overlapping ip address ranges. + +A VM or a pod may be connected to multiple secondary Subnets at once. Each secondary connection will be represented as an additional network interface. + +## Parameters + +### Common parameters + +| Name | Description | Type | Value | +| -------------------- | -------------------------------- | ------------------- | ------- | +| `subnets` | Subnets of a VPC | `map[string]object` | `{...}` | +| `subnets[name].cidr` | Subnet CIDR, e.g. 192.168.0.0/24 | `cidr` | `{}` | + + +## Examples +```yaml +apiVersion: apps.cozystack.io/v1alpha1 +kind: VirtualPrivateCloud +metadata: + name: vpc00 +spec: + subnets: + sub00: + cidr: 172.16.0.0/24 + sub01: + cidr: 172.16.1.0/24 + sub02: + cidr: 172.16.2.0/24 +``` diff --git a/content/en/docs/v0/networking/vpn.md b/content/en/docs/v0/networking/vpn.md new file mode 100644 index 00000000..17891153 --- /dev/null +++ b/content/en/docs/v0/networking/vpn.md @@ -0,0 +1,102 @@ +--- +title: "Managed VPN Service" +linkTitle: "VPN" +description: "Managed VPN Service simplifies the deployment and management of VPN server, enabling you to establish secure connections with ease." +weight: 10 +aliases: + - /docs/v0/reference/applications/vpn + - /docs/networking/vpn + - /docs/reference/applications/vpn +--- + + + + +A Virtual Private Network (VPN) is a critical tool for ensuring secure and private communication over the internet. +Managed VPN Service simplifies the deployment and management of VPN server, enabling you to establish secure connections with ease. + +- VPN client applications: https://shadowsocks5.github.io/en/download/clients.html + +## Deployment Details + +The VPN Service is powered by the Outline Server, an advanced and user-friendly VPN solution. +Internally known as "Shadowbox", which simplifies the process of setting up and sharing Shadowsocks servers. +It operates by launching Shadowsocks instances on demand. +Furthermore, Shadowbox is compatible with standard Shadowsocks clients, providing flexibility and ease of use for your VPN requirements. + +- Docs: https://shadowsocks.org/ +- Docs: https://github.com/Jigsaw-Code/outline-server/tree/master/src/shadowbox + +## Parameters + +### Common parameters + +| Name | Description | Type | Value | +| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ---------- | ------- | +| `replicas` | Number of VPN server replicas. | `int` | `2` | +| `resources` | Explicit CPU and memory configuration for each VPN server replica. When omitted, the preset defined in `resourcesPreset` is applied. | `object` | `{}` | +| `resources.cpu` | CPU available to each replica. | `quantity` | `""` | +| `resources.memory` | Memory (RAM) available to each replica. | `quantity` | `""` | +| `resourcesPreset` | Default sizing preset used when `resources` is omitted. | `string` | `nano` | +| `external` | Enable external access from outside the cluster. | `bool` | `false` | + + +### Application-specific parameters + +| Name | Description | Type | Value | +| ---------------------- | ------------------------------------------------------------------------------------------------------ | ------------------- | ----- | +| `host` | Host used to substitute into generated URLs. | `string` | `""` | +| `users` | Users configuration map. | `map[string]object` | `{}` | +| `users[name].password` | Password for the user (autogenerated if not provided). | `string` | `""` | +| `externalIPs` | List of externalIPs for service. Optional. If not specified, will use LoadBalancer service by default. | `[]string` | `[]` | + + +## Parameter examples and reference + +### resources and resourcesPreset + +`resources` sets explicit CPU and memory configurations for each replica. +When left empty, the preset defined in `resourcesPreset` is applied. + +```yaml +resources: + cpu: 4000m + memory: 4Gi +``` + +`resourcesPreset` sets named CPU and memory configurations for each replica. +This setting is ignored if the corresponding `resources` value is set. + +| Preset name | CPU | memory | +|-------------|--------|---------| +| `nano` | `250m` | `128Mi` | +| `micro` | `500m` | `256Mi` | +| `small` | `1` | `512Mi` | +| `medium` | `1` | `1Gi` | +| `large` | `2` | `2Gi` | +| `xlarge` | `4` | `4Gi` | +| `2xlarge` | `8` | `8Gi` | + + +### users + +```yaml +users: + user1: + password: hackme + user2: {} # autogenerated password +``` + + +### externalIPs + +```yaml +externalIPs: + - "11.22.33.44" + - "11.22.33.45" + - "11.22.33.46" +``` diff --git a/content/en/docs/v0/operations/_index.md b/content/en/docs/v0/operations/_index.md new file mode 100644 index 00000000..8f7c3922 --- /dev/null +++ b/content/en/docs/v0/operations/_index.md @@ -0,0 +1,10 @@ +--- +title: "Cluster Configuration and Management Guide" +linkTitle: "Operations Guide" +description: "Configure, monitor, secure, and upgrade a Cozystack cluster." +weight: 35 +aliases: + - /docs/operations +--- + +Configure, monitor, secure, and upgrade a Cozystack cluster. \ No newline at end of file diff --git a/content/en/docs/v0/operations/cluster/_index.md b/content/en/docs/v0/operations/cluster/_index.md new file mode 100644 index 00000000..77eb8b69 --- /dev/null +++ b/content/en/docs/v0/operations/cluster/_index.md @@ -0,0 +1,10 @@ +--- +title: "Cluster Maintenance Guides" +linkTitle: "Cluster Maintenance" +description: "Guides for the regular cluster operations: adding and removing nodes, upgrading Talos, etc." +weight: 20 +aliases: + - /docs/operations/cluster +--- + +Guides for the regular cluster operations: adding and removing nodes, upgrading Talos, etc. diff --git a/content/en/docs/v0/operations/cluster/rotate-ca.md b/content/en/docs/v0/operations/cluster/rotate-ca.md new file mode 100644 index 00000000..60e922b9 --- /dev/null +++ b/content/en/docs/v0/operations/cluster/rotate-ca.md @@ -0,0 +1,99 @@ +--- +title: "How to Rotate Certificate Authority" +linkTitle: "How to rotate CA" +description: "How to Rotate Certificate Authority" +weight: 110 +aliases: + - /docs/operations/cluster/rotate-ca +--- + + +Talos sets up root certificate authorities with a lifetime of 10 years, +and all Talos and Kubernetes API certificates are issued by these root CAs. +In general, you almost never need to rotate the root CA certificate and key for the Talos API and Kubernetes API. + +Rotation of the root CA is only needed: + +- when you suspect that the private key has been compromised; +- when you want to revoke access to the cluster for a leaked `talosconfig` or `kubeconfig`; +- once in 10 years. + +### Rotate CA for the Management Kubernetes Cluster: + +See: https://www.talos.dev/v1.9/advanced/ca-rotation/#kubernetes-api + +```bash +git clone https://github.com/cozystack/cozystack.git +cd packages/core/testing +make apply +make exec +``` + +Add this to your talosconfig in a pod: + +```yaml +client-aenix-new: + endpoints: + - 12.34.56.77 + - 12.34.56.78 + - 12.34.56.79 + nodes: + - 12.34.56.77 + - 12.34.56.78 + - 12.34.56.79 +``` + +Execute in a pod: +```bash +talosctl rotate-ca -e 12.34.56.77,12.34.56.78,12.34.56.79 \ + --control-plane-nodes 12.34.56.77,12.34.56.78,12.34.56.79 \ + --talos=false \ + --dry-run=false & +``` + +Get a new kubeconfig: +```bash +talm kubeconfig -f nodes/srv1.yaml +``` + +### Rotate CA for Talos API + +See: https://www.talos.dev/v1.9/advanced/ca-rotation/#talos-api + +All commands are like for the management k8s cluster, but with `talosctl` command: + +```bash +talosctl rotate-ca -e 12.34.56.77,12.34.56.78,12.34.56.79 \ + --control-plane-nodes 12.34.56.77,12.34.56.78,12.34.56.79 \ + --kubernetes=false \ + --dry-run=false & +``` + +### Rotate CA for a Tenant Kubernetes Cluster + +See: https://kamaji.clastix.io/guides/certs-lifecycle/ + +```bash +export NAME=k8s-cluster-name +export NAMESPACE=k8s-cluster-namespace + +kubectl -n ${NAMESPACE} delete secret ${NAME}-ca +kubectl -n ${NAMESPACE} delete secret ${NAME}-sa-certificate + +kubectl -n ${NAMESPACE} delete secret ${NAME}-api-server-certificate +kubectl -n ${NAMESPACE} delete secret ${NAME}-api-server-kubelet-client-certificate +kubectl -n ${NAMESPACE} delete secret ${NAME}-datastore-certificate +kubectl -n ${NAMESPACE} delete secret ${NAME}-front-proxy-client-certificate +kubectl -n ${NAMESPACE} delete secret ${NAME}-konnectivity-certificate + +kubectl -n ${NAMESPACE} delete secret ${NAME}-admin-kubeconfig +kubectl -n ${NAMESPACE} delete secret ${NAME}-controller-manager-kubeconfig +kubectl -n ${NAMESPACE} delete secret ${NAME}-konnectivity-kubeconfig +kubectl -n ${NAMESPACE} delete secret ${NAME}-scheduler-kubeconfig + +kubectl delete po -l app.kubernetes.io/name=kamaji -n cozy-kamaji +kubectl delete po -l app=${NAME}-kcsi-driver +``` + +Wait for the `virt-launcher-kubernetes-*` pods to restart. +After that, download the new Kubernetes certificate. diff --git a/content/en/docs/v0/operations/cluster/scaling.md b/content/en/docs/v0/operations/cluster/scaling.md new file mode 100644 index 00000000..e4b9a5ef --- /dev/null +++ b/content/en/docs/v0/operations/cluster/scaling.md @@ -0,0 +1,126 @@ +--- +title: "Cluster Scaling: Adding and Removing Nodes" +linkTitle: "Cluster Scaling" +description: "Adding and removing nodes in a Cozystack cluster." +weight: 20 +aliases: + - /docs/operations/cluster/scaling +--- + +## How to add a node to a Cozystack cluster + +Adding a node is done in a way similar to regular Cozystack installation. + +1. [Install Talos on the node]({{% ref "/docs/v0/install/talos" %}}), using the Cozystack's custom-built Talos image. + +1. Generate the configuration for the new node, using the [Talm]({{% ref "/docs/v0/install/kubernetes/talm#3-generate-node-configuration-files" %}}) + or [talosctl]({{% ref "/docs/v0/install/kubernetes/talosctl#2-generate-node-configuration-files" %}}) guide. + + For example, configuring a control plane node: + + ```bash + talm template -e 192.168.123.20 -n 192.168.123.20 -t templates/controlplane.yaml -i > nodes/nodeN.yaml + ``` + + and for a worker node: + ```bash + talm template -e 192.168.123.20 -n 192.168.123.20 -t templates/worker.yaml -i > nodes/nodeN.yaml + ``` + +1. Apply the generated configuration to the node, using the [Talm]({{% ref "/docs/v0/install/kubernetes/talm#41-apply-configuration-files" %}}) + or [talosctl]({{% ref "/docs/v0/install/kubernetes/talosctl#3-apply-node-configuration" %}}) guide. + For example: + + ```bash + talm apply -f nodes/nodeN.yaml -i + ``` + +1. Wait for the node to reboot and bootstrap itself to the cluster. + You don't need to bootstrap it manually or to install Cozystack on it, as it is all done automatically. + + You can check the result with `kubectl get nodes`. + + +## How to remove a node from a Cozystack cluster + +When a cluster node fails, Cozystack automatically handles high availability by recreating replicated PVCs and workloads on other nodes. +However, there can be issues that require removing the node to resolve: + +- Local storage PVs may remain bound to the failed node, which can cause issues with new pods. + These need to be cleaned up manually. + +- The failed node will still exist in the cluster, which can lead to inconsistencies in the cluster state and affect pod scheduling. + + +### Step 1: Remove the Node from the Cluster + +Run the following command to remove the failed node (replace mynode with the actual node name): + +```bash +kubectl delete node mynode +``` + +If the failed node is a control-plane node, you must also remove its etcd member from the etcd cluster: + +```bash +talm -f nodes/node1.yaml etcd member list +``` + +Example output: + +```console +NODE ID HOSTNAME PEER URLS CLIENT URLS LEARNER +37.27.60.28 2ba6e48b8cf1a0c1 node1 https://192.168.100.11:2380 https://192.168.100.11:2379 false +37.27.60.28 b82e2194fb76ee42 node2 https://192.168.100.12:2380 https://192.168.100.12:2379 false +37.27.60.28 f24f4de3d01e5e88 node3 https://192.168.100.13:2380 https://192.168.100.13:2379 false +``` + +Then remove the corresponding member (replace the ID with the one for your failed node): + +```bash +talm -f nodes/node1.yaml etcd remove-member f24f4de3d01e5e88 +``` + +### Step 2: Remove PVCs and Pods Bound to the Failed Node + +Here are few commands to help you clean up the failed node: + +- **Delete PVCs** bound to the failed node:
+ (Replace `mynode` with the name of your failed node) + + ```bash + kubectl get pv -o json | jq -r '.items[] | select(.spec.nodeAffinity.required.nodeSelectorTerms[0].matchExpressions[0].values[0] == "mynode").spec.claimRef | "kubectl delete pvc -n \(.namespace) \(.name)"' | sh -x + ``` + +- **Delete pods** stuck in `Pending` state across all namespaces: + + ```bash + kubectl get pod -A | awk '/Pending/ {print "kubectl delete pod -n " $1 " " $2}' | sh -x + ``` + +### Step 3: Check Resource Status + +After cleanup, check for any resource issues using `linstor advise`: + +```console +# linstor advise resource +╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ +┊ Resource ┊ Issue ┊ Possible fix ┊ +╞═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╡ +┊ pvc-02b0c0a1-e0b6-4e98-9384-60ff24f3b3b6 ┊ Resource expected to have 3 replicas, got only 2. ┊ linstor rd ap --place-count 3 pvc-02b0c0a1-e0b6-4e98-9384-60ff24f3b3b6 ┊ +┊ pvc-06e3b406-23f0-4f10-8b03-84063c1b2a12 ┊ Resource expected to have 3 replicas, got only 2. ┊ linstor rd ap --place-count 3 pvc-06e3b406-23f0-4f10-8b03-84063c1b2a12 ┊ +┊ pvc-a0b8aeaf-076e-4bd9-93ed-c4db09c04d0b ┊ Resource expected to have 3 replicas, got only 2. ┊ linstor rd ap --place-count 3 pvc-a0b8aeaf-076e-4bd9-93ed-c4db09c04d0b ┊ +┊ pvc-a523ebeb-c3b6-468d-abe5-f6afbbf31081 ┊ Resource expected to have 3 replicas, got only 2. ┊ linstor rd ap --place-count 3 pvc-a523ebeb-c3b6-468d-abe5-f6afbbf31081 ┊ +┊ pvc-cf7e87b5-3e6d-4034-903d-4625830fb5b4 ┊ Resource expected to have 1 replicas, got only 0. ┊ linstor rd ap --place-count 1 pvc-cf7e87b5-3e6d-4034-903d-4625830fb5b4 ┊ +┊ pvc-d344bc83-97fd-4489-bbe7-5399eea57165 ┊ Resource expected to have 3 replicas, got only 2. ┊ linstor rd ap --place-count 3 pvc-d344bc83-97fd-4489-bbe7-5399eea57165 ┊ +┊ pvc-d39345a9-5446-4c64-a5ba-957ff7c7a31f ┊ Resource expected to have 3 replicas, got only 2. ┊ linstor rd ap --place-count 3 pvc-d39345a9-5446-4c64-a5ba-957ff7c7a31f ┊ +┊ pvc-db6d4236-93bd-4268-9dcc-0ed275b17067 ┊ Resource expected to have 1 replicas, got only 0. ┊ linstor rd ap --place-count 1 pvc-db6d4236-93bd-4268-9dcc-0ed275b17067 ┊ +┊ pvc-ebb412c3-083c-4eee-93dc-70917ea6d87e ┊ Resource expected to have 1 replicas, got only 0. ┊ linstor rd ap --place-count 1 pvc-ebb412c3-083c-4eee-93dc-70917ea6d87e ┊ +┊ pvc-f107aacb-78d7-4ac6-97f8-8ed529a9c292 ┊ Resource expected to have 3 replicas, got only 2. ┊ linstor rd ap --place-count 3 pvc-f107aacb-78d7-4ac6-97f8-8ed529a9c292 ┊ +┊ pvc-f347d71a-b646-45e5-a717-f0a745061beb ┊ Resource expected to have 1 replicas, got only 0. ┊ linstor rd ap --place-count 1 pvc-f347d71a-b646-45e5-a717-f0a745061beb ┊ +┊ pvc-f6e96c83-6144-4510-b0ab-61936db52391 ┊ Resource expected to have 3 replicas, got only 2. ┊ linstor rd ap --place-count 3 pvc-f6e96c83-6144-4510-b0ab-61936db52391 ┊ +╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ +``` + +Run the `linstor rd ap` commands suggested in the "Possible fix" column to restore the desired replica count. + diff --git a/content/en/docs/v0/operations/cluster/upgrade.md b/content/en/docs/v0/operations/cluster/upgrade.md new file mode 100644 index 00000000..0ff1bd06 --- /dev/null +++ b/content/en/docs/v0/operations/cluster/upgrade.md @@ -0,0 +1,95 @@ +--- +title: "Upgrading Cozystack and Post-upgrade Checks" +linkTitle: "Upgrading Cozystack" +description: "Upgrade Cozystack system components." +weight: 10 +aliases: + - /docs/v0/upgrade + - /docs/v0/operations/upgrade + - /docs/operations/cluster/upgrade + - /docs/upgrade + - /docs/operations/upgrade +--- + +## About Cozystack Versions + +Cozystack uses a staged release process to ensure stability and flexibility during development. + +There are three types of releases: + +- **Alpha, Beta, and Release Candidates (RC)** – Preview versions (such as `v0.42.0-alpha.1` or `v0.42.0-rc.1`) used for final testing and validation. +- **Stable Releases** – Regular versions (e.g., `v0.42.0`) that are feature-complete and thoroughly tested. + Such versions usually introduce new features, update dependencies, and may have API changes. +- **Patch Releases** – Bugfix-only updates (e.g., `v0.42.1`) made after a stable release, based on a dedicated release branch. + +It's highly recommended to install only stable and patch releases in production environments. + +For a full list of releases, see the [Releases page](https://github.com/cozystack/cozystack/releases) on GitHub. + +To learn more about Cozystack release process, read the [Cozystack Release Workflow](https://github.com/cozystack/cozystack/blob/main/docs/release.md). + +## Upgrading Cozystack + +### 1. Check the cluster status + +Before upgrading, check the current status of your Cozystack cluster by following steps from + +- [Troubleshooting Checklist]({{% ref "/docs/v0/operations/troubleshooting/#troubleshooting-checklist" %}}) + +Make sure that the Cozystack ConfigMap contains all the necessary variables: +If there are missing keys in `data.*`, add them. + +```bash +kubectl get configmap -n cozy-system cozystack -oyaml +``` +Example output: +```yaml +apiVersion: v1 +kind: ConfigMap +data: + api-server-endpoint: https://33.44.55.66:6443 + bundle-name: paas-full + ipv4-join-cidr: 100.64.0.0/16 + ipv4-pod-cidr: 10.244.0.0/16 + ipv4-pod-gateway: 10.244.0.1 + ipv4-svc-cidr: 10.96.0.0/16 + root-host: example.org + ... +``` + +Learn more about this file and its contents from the [Cozystack ConfigMap reference]({{% ref "/docs/v0/operations/configuration/configmap" %}}). + +### 2. Apply the new manifest file + +Each Cozystack release includes a manifest file `cozystack-installer.yml`. +Download and apply it, or apply directly from GitHub: + +```bash +# note the 'v' before version numbers +version=vX.Y.Z +kubectl apply -f https://github.com/cozystack/cozystack/releases/download/$version/cozystack-installer.yaml +``` + +You can read the logs of the main installer: + +```bash +kubectl logs -n cozy-system deploy/cozystack -f +``` + +### 3. Check the cluster status after upgrading + +```bash +kubectl get pods -n cozy-system +kubectl get hr -A | grep -v "True" +``` + +If pod status shows a failure, check the logs: + +```bash +kubectl logs -n cozy-system deploy/cozystack --previous +``` + +To make sure everything works as expected, repeat the steps from + + - [Troubleshooting Checklist]({{% ref "/docs/v0/operations/troubleshooting/#troubleshooting-checklist" %}}) + diff --git a/content/en/docs/v0/operations/configuration/_index.md b/content/en/docs/v0/operations/configuration/_index.md new file mode 100644 index 00000000..7bd48755 --- /dev/null +++ b/content/en/docs/v0/operations/configuration/_index.md @@ -0,0 +1,10 @@ +--- +title: "Cozystack Cluster Configuration" +linkTitle: "Configuration" +description: "Learn how to configure your Cozystack cluster, including bundles, components, and other key settings" +weight: 10 +aliases: + - /docs/operations/configuration +--- + +This section of the documentation explains everything about Cozystack cluster configuration. diff --git a/content/en/docs/operations/configuration/bundles.md b/content/en/docs/v0/operations/configuration/bundles.md similarity index 83% rename from content/en/docs/operations/configuration/bundles.md rename to content/en/docs/v0/operations/configuration/bundles.md index d9bbd780..3dc49723 100644 --- a/content/en/docs/operations/configuration/bundles.md +++ b/content/en/docs/v0/operations/configuration/bundles.md @@ -4,6 +4,14 @@ linkTitle: "Bundles" description: "Cozystack bundles reference: composition, configuration, and troubleshooting." weight: 20 aliases: + - /docs/v0/guides/bundles + - /docs/v0/operations/bundles/ + - /docs/v0/operations/bundles/paas-full + - /docs/v0/operations/bundles/paas-hosted + - /docs/v0/operations/bundles/distro-full + - /docs/v0/operations/bundles/distro-hosted + - /docs/v0/install/cozystack/bundles + - /docs/operations/configuration/bundles - /docs/guides/bundles - /docs/operations/bundles/ - /docs/operations/bundles/paas-full @@ -42,17 +50,17 @@ or just need a minimal Kubernetes cluster. * Bundle `iaas-full` is currently on the roadmap, see [cozystack/cozystack#730][iaas-full-gh]. -[apps]: {{% ref "/docs/applications" %}} -[vm]: {{% ref "/docs/virtualization" %}} -[k8s]: {{% ref "/docs/kubernetes" %}} -[api]: {{% ref "/docs/cozystack-api" %}} -[monitoring subsystem]: {{% ref "/docs/guides/platform-stack#victoria-metrics" %}} -[linstor]: {{% ref "/docs/guides/platform-stack#drbd" %}} -[kube-ovn]: {{% ref "/docs/guides/platform-stack#kube-ovn" %}} -[cilium]: {{% ref "/docs/guides/platform-stack#cilium" %}} -[kubevirt]: {{% ref "/docs/guides/platform-stack#kubevirt" %}} -[talos linux]: {{% ref "/docs/guides/platform-stack#talos-linux" %}} -[kubernetes]: {{% ref "/docs/guides/platform-stack#kubernetes" %}} +[apps]: {{% ref "/docs/v0/applications" %}} +[vm]: {{% ref "/docs/v0/virtualization" %}} +[k8s]: {{% ref "/docs/v0/kubernetes" %}} +[api]: {{% ref "/docs/v0/cozystack-api" %}} +[monitoring subsystem]: {{% ref "/docs/v0/guides/platform-stack#victoria-metrics" %}} +[linstor]: {{% ref "/docs/v0/guides/platform-stack#drbd" %}} +[kube-ovn]: {{% ref "/docs/v0/guides/platform-stack#kube-ovn" %}} +[cilium]: {{% ref "/docs/v0/guides/platform-stack#cilium" %}} +[kubevirt]: {{% ref "/docs/v0/guides/platform-stack#kubevirt" %}} +[talos linux]: {{% ref "/docs/v0/guides/platform-stack#talos-linux" %}} +[kubernetes]: {{% ref "/docs/v0/guides/platform-stack#kubernetes" %}} [kubernetes operators]: https://github.com/cozystack/cozystack/blob/c0f742595f1e942a9bf4921e9655142cc9040551/packages/core/platform/bundles/paas-full.yaml#L185-L243 [paas-full-gh]: https://github.com/cozystack/cozystack/blob/main/packages/core/platform/bundles/paas-full.yaml @@ -61,11 +69,11 @@ or just need a minimal Kubernetes cluster. [distro-full-gh]: https://github.com/cozystack/cozystack/blob/main/packages/core/platform/bundles/distro-full.yaml [distro-hosted-gh]: https://github.com/cozystack/cozystack/blob/main/packages/core/platform/bundles/distro-hosted.yaml -[paas-full]: {{% ref "/docs/operations/configuration/bundles#paas-full" %}} +[paas-full]: {{% ref "/docs/v0/operations/configuration/bundles#paas-full" %}} [iaas-full]: https://github.com/cozystack/cozystack/issues/730 -[paas-hosted]: {{% ref "/docs/operations/configuration/bundles#paas-hosted" %}} -[distro-full]: {{% ref "/docs/operations/configuration/bundles#distro-full" %}} -[distro-hosted]: {{% ref "/docs/operations/configuration/bundles#distro-hosted" %}} +[paas-hosted]: {{% ref "/docs/v0/operations/configuration/bundles#paas-hosted" %}} +[distro-full]: {{% ref "/docs/v0/operations/configuration/bundles#distro-full" %}} +[distro-hosted]: {{% ref "/docs/v0/operations/configuration/bundles#distro-hosted" %}} ## Choosing the Right Bundle @@ -194,12 +202,12 @@ See [cozystack/cozystack#730][iaas-full-gh]. ## Learn More For a full list of configuration options for each bundle, refer to the -[ConfigMap reference]({{% ref "/docs/operations/configuration/configmap" %}}). +[ConfigMap reference]({{% ref "/docs/v0/operations/configuration/configmap" %}}). To see the full list of components, how to enable and disable them, refer to the -[Components reference]({{% ref "/docs/operations/configuration/components" %}}). +[Components reference]({{% ref "/docs/v0/operations/configuration/components" %}}). -To deploy a selected bundle, follow the [Cozystack installation guide]({{% ref "/docs/install/cozystack" %}}) -or [provider-specific guides]({{% ref "/docs/install/providers" %}}). +To deploy a selected bundle, follow the [Cozystack installation guide]({{% ref "/docs/v0/install/cozystack" %}}) +or [provider-specific guides]({{% ref "/docs/v0/install/providers" %}}). However, if this your first time installing Cozystack, it's best to use the complete bundle `paas-full` and -go through the [Cozystack tutorial]({{% ref "/docs/getting-started" %}}). +go through the [Cozystack tutorial]({{% ref "/docs/v0/getting-started" %}}). diff --git a/content/en/docs/v0/operations/configuration/components.md b/content/en/docs/v0/operations/configuration/components.md new file mode 100644 index 00000000..1ed47bb5 --- /dev/null +++ b/content/en/docs/v0/operations/configuration/components.md @@ -0,0 +1,67 @@ +--- +title: "Cozystack Components Reference" +linkTitle: "Components" +description: "Full reference for Cozystack components." +weight: 30 +aliases: + - /docs/v0/install/cozystack/components + - /docs/operations/configuration/components + - /docs/install/cozystack/components +--- + +### Overwriting Component Parameters + +You might want to override specific options for the components. +To achieve this, you must specify values in JSON or YAML format using the `data.values-` option +in the [Cozystack ConfigMap]({{% ref "/docs/v0/operations/configuration/configmap" %}}). + +For example, if you want to overwrite `k8sServiceHost` and `k8sServicePort` for cilium, +take a look at its [values.yaml](https://github.com/cozystack/cozystack/blob/238061efbc0da61d60068f5de31d6eaa35c4d994/packages/system/cilium/values.yaml#L18-L19) file. + +Then specify these options in the `values-cilium` section of your Cozystack configuration, as shown below: + +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: cozystack + namespace: cozy-system +data: + bundle-name: "distro-full" + ipv4-pod-cidr: "10.244.0.0/16" + ipv4-svc-cidr: "10.96.0.0/16" + values-cilium: | + cilium: + k8sServiceHost: 11.22.33.44 + k8sServicePort: 6443 +``` + +### Enabling and Disabling Components + +Bundles have optional components that need to be explicitly enabled (included) in the installation. +Regular bundle components can, on the other hand, be disabled (excluded) from the installation, when you don't need them. + +Use options `bundle-enable` and `bundle-disable`, providing comma-separated lists of the components. +For example, [installing Cozystack in Hetzner]({{% ref "/docs/v0/install/providers/hetzner" %}}) +requires swapping default load balancer, MetalLB, with one made specifically for Hetzner, called RobotLB: + +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: cozystack + namespace: cozy-system +data: + bundle-name: "paas-full" + bundle-disable: "metallb" + bundle-enable: "hetzner-robotlb" + # rest of the config +``` + +Disabling components must be done before installing Cozystack. +Applying updated configuration with `bundle-disable` will not remove components that are already installed. +To remove already installed components, delete the Helm release manually using this command: + +```bash +kubectl delete hr -n +``` diff --git a/content/en/docs/v0/operations/configuration/configmap.md b/content/en/docs/v0/operations/configuration/configmap.md new file mode 100644 index 00000000..cbadc0e0 --- /dev/null +++ b/content/en/docs/v0/operations/configuration/configmap.md @@ -0,0 +1,68 @@ +--- +title: "Cozystack ConfigMap Reference" +linkTitle: "ConfigMap" +description: "Reference for the Cozystack ConfigMap, which defines key configuration values for a Cozystack installation and operations." +weight: 10 +aliases: + - /docs/v0/install/cozystack/configmap + - /docs/operations/configuration/configmap + - /docs/install/cozystack/configmap +--- + +This page explains the role of Cozystack's main ConfigMap and provides a full reference for its values. + +Cozystack's main configuration is defined by a single [Kubernetes ConfigMap](https://kubernetes.io/docs/concepts/configuration/configmap/). +This ConfigMap includes [Cozystack bundle]({{% ref "/docs/v0/operations/configuration/bundles" %}}) and [components setup]({{% ref "/docs/v0/operations/configuration/components" %}}), +key network settings, exposed services, and other options. + + +## Example + +Here's an example of configuration for installing Cozystack with bundle `paas-full`, with root host "example.org", +and Cozystack Dashboard and API exposed and available to users: + +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: cozystack + namespace: cozy-system +data: + bundle-name: "paas-full" + root-host: "example.org" + api-server-endpoint: "https://api.example.org:443" + expose-services: "dashboard,api" + ipv4-pod-cidr: "10.244.0.0/16" + ipv4-pod-gateway: "10.244.0.1" + ipv4-svc-cidr: "10.96.0.0/16" + ipv4-join-cidr: "100.64.0.0/16" +``` + + +## Reference + +| Value (`data.*`) | Bundles | Description | +|------------------------|----------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `bundle-name` | all | Name of bundle to use for installation. | +| `bundle-enable` | all | Optional bundle components included in the installation. Read more about this option in ["How to enable and disable bundle components"][enable-disable]. | +| `bundle-disable` | all | Bundle components excluded (disabled) from the installation. Read more about this option in ["How to enable and disable bundle components"][enable-disable]. | +| `values-` | all | JSON or YAML formatted values passed to specific component installation. Read more about this option in ["how to overwrite parameters for specific components"][overwrite-parameters]. | +| `root-host` | all | The main domain for all services created under Cozystack, such as the dashboard, Grafana, Keycloak, etc. | +| `api-server-endpoint` | all | Used for generating kubeconfig files for your users. It is recommended to use a routable FQDN or IP address instead of local-only addresses. | +| `telemetry-enabled` | all | Enable [telemetry] feature in Cozystack (default: `true`). | +| `expose-services` | all | Comma-separated list of services to expose to the internet. Possible values: `api,dashboard,cdi-uploadproxy,vm-exportproxy`. | +| `expose-ingress` | all | Ingress controller to use for exposing services. (default: `tenant-root`) | +| `expose-external-ips` | all | Comma-separated list of external IPs used for the specified ingress controller. If not specified, a LoadBalancer service is used by default. | +| `ipv4-pod-cidr` | `paas-full`, `distro-full` | The pod subnet used by Pods to assign IPs | +| `ipv4-pod-gateway` | `paas-full` | The gateway address for the pod subnet | +| `ipv4-svc-cidr` | `paas-full`, `distro-full` | The pod subnet used by Services to assign IPs | +| `ipv4-join-cidr` | `paas-full` | The `join` subnet, as a special subnet for network communication between the Node and Pod. Follow the [kube-ovn] documentation to learn more about these options. | +| `oidc-enabled` | `paas-full`, `paas-hosted` | Enable [oidc] feature in Cozystack (default: `false`) | +| `cpu-allocation-ratio` | `paas-full`, `paas-hosted` | CPU allocation ratio: `1/cpu-allocation-ratio` CPU requested per 1 vCPU. Defaults to 10. See [Resource Management] for detailed explanation and examples. | + +[enable-disable]: {{% ref "/docs/v0/operations/configuration/components#enabling-and-disabling-components" %}} +[overwrite-parameters]: {{% ref "/docs/v0/operations/configuration/components#overwriting-component-parameters" %}} +[Resource Management]: {{% ref "/docs/v0/guides/resource-management#cpu-allocation-ratio" %}} +[oidc]: {{% ref "/docs/v0/operations/oidc" %}} +[telemetry]: {{% ref "/docs/v0/operations/configuration/telemetry" %}} +[kube-ovn]: https://kubeovn.github.io/docs/en/guide/subnet/#join-subnet diff --git a/content/en/docs/v0/operations/configuration/telemetry.md b/content/en/docs/v0/operations/configuration/telemetry.md new file mode 100644 index 00000000..13359f87 --- /dev/null +++ b/content/en/docs/v0/operations/configuration/telemetry.md @@ -0,0 +1,82 @@ +--- +title: "Telemetry" +linkTitle: "Telemetry" +description: "Cozystack Telemetry" +weight: 60 +aliases: + - /docs/v0/telemetry + - /docs/v0/operations/telemetry + - /docs/operations/configuration/telemetry + - /docs/telemetry + - /docs/operations/telemetry +--- + +This document outlines the telemetry feature within the Cozystack project, detailing the rationale behind data collection, the nature of the data collected, data handling practices, and instructions for opting out. + +## Why We Collect Telemetry + +Cozystack, as an open source project, thrives on community feedback and usage insights. Telemetry data allows maintainers to understand how Cozystack is being used in real-world scenarios. This data informs decisions related to feature prioritization, testing strategies, bug fixes, and overall project evolution. Without telemetry, decisions would rely on guesswork or limited feedback, which might slow down improvement cycles or introduce features that don’t align with users’ needs. Telemetry ensures that development is guided by actual usage patterns and community requirements, fostering a more robust and user-centric platform. + +## What We Collect and How + +Cozystack strives to comply with the [LF Telemetry Data Policy](https://www.linuxfoundation.org/legal/telemetry-data-policy), ensuring responsible data collection practices that respect user privacy and transparency. + +Our focus is on gathering non-personal usage metrics about Cozystack components rather than personal user information. We specifically collect information about cluster infrastructure (nodes, storage, networking), installed packages, and application instances. This collected data helps us gain insights into prevalent configurations and usage trends across installations. + +Telemetry is collected by two components: +- **cozystack-operator** — collects cluster-level metrics (nodes, storage, packages) +- **cozystack-controller** — collects application-level metrics (deployed application instances) + +For a detailed view of what data is collected, you can review the telemetry implementation: +- [Telemetry Client](https://github.com/cozystack/cozystack/tree/main/internal/telemetry) +- [Telemetry Server](https://github.com/cozystack/cozystack-telemetry-server/) + +### Example of Telemetry Payload: + +Below is how a typical telemetry payload looks like in Cozystack. + +**From cozystack-operator** (cluster infrastructure): + +```prometheus +cozy_cluster_info{cozystack_version="v1.0.0",kubernetes_version="v1.31.4"} 1 +cozy_nodes_count{os="linux (Talos (v1.8.4))",kernel="6.6.64-talos"} 3 +cozy_cluster_capacity{resource="cpu"} 168 +cozy_cluster_capacity{resource="memory"} 811020009472 +cozy_cluster_capacity{resource="nvidia.com/TU104GL_TESLA_T4"} 3 +cozy_loadbalancers_count 1 +cozy_pvs_count{driver="linstor.csi.linbit.com",size="5Gi"} 7 +cozy_pvs_count{driver="linstor.csi.linbit.com",size="10Gi"} 6 +cozy_package_info{name="cozystack.core",variant="default"} 1 +cozy_package_info{name="cozystack.storage",variant="linstor"} 1 +cozy_package_info{name="cozystack.monitoring",variant="default"} 1 +``` + +**From cozystack-controller** (application instances): + +```prometheus +cozy_application_count{kind="Tenant"} 2 +cozy_application_count{kind="Postgres"} 5 +cozy_application_count{kind="Redis"} 3 +cozy_application_count{kind="Kubernetes"} 2 +cozy_application_count{kind="VirtualMachine"} 0 +``` + +Data is collected by components running within Cozystack that periodically gather and transmit usage statistics to our secure backend. The telemetry system ensures that data is anonymized, aggregated, and stored securely, with strict controls on access to protect user privacy. + +## Telemetry Opt-Out + +We respect your privacy and choice regarding telemetry. If you prefer not to participate in telemetry data collection, Cozystack provides a straightforward way to opt out. + +Opting Out: + +To disable telemetry reporting, execute the following command: + +```bash +kubectl patch -n cozy-system configmap cozystack --type=merge -p '{"data":{"telemetry-enabled": "false"}}' +``` + +This command updates the Cozystack configuration to disable telemetry data collection. If you wish to re-enable telemetry in the future, reverse the change by setting `telemetry-enabled` back to `true`. + +## Conclusion + +Telemetry in Cozystack is designed to support a data-informed development process that responds to the community’s needs and ensures continuous improvement. Your participation—or choice to opt out—helps shape the future of Cozystack, making it a more effective and user-focused platform for everyone. diff --git a/content/en/docs/v0/operations/faq/_index.md b/content/en/docs/v0/operations/faq/_index.md new file mode 100644 index 00000000..5b4f3829 --- /dev/null +++ b/content/en/docs/v0/operations/faq/_index.md @@ -0,0 +1,80 @@ +--- +title: "Frequently asked questions and How-to guides" +linkTitle: "FAQ / How-tos" +description: "Knowledge base with FAQ and advanced configurations" +weight: 100 +aliases: + - /docs/v0/faq + - /docs/v0/guides/faq + - /docs/operations/faq + - /docs/faq + - /docs/guides/faq +--- + +{{% alert title="Troubleshooting" %}} +Troubleshooting advice can be found on our [Troubleshooting Cheatsheet](/docs/v0/operations/troubleshooting/). +{{% /alert %}} + + +## Deploying Cozystack + +### How to allocate space on system disk for user storage + +Deploying Cozystack, [How to install Talos on a single-disk machine]({{% ref "/docs/v0/install/how-to/single-disk" %}}) + +### How to Enable KubeSpan + +Deploying Cozystack, [How to Enable KubeSpan]({{% ref "/docs/v0/install/how-to/kubespan" %}}) + +### How to enable Hugepages + +Deploying Cozystack, [How to enable Hugepages]({{% ref "/docs/v0/install/how-to/hugepages" %}}). + + +### What if my cloud provider does not support MetalLB + +Most cloud providers don't support MetalLB. +Instead of using it, you can expose the main ingress controller using the external IPs method. + +For deploying on Hetzner, follow the specialized [Hetzner installation guide]({{% ref "/docs/v0/install/providers/hetzner" %}}). +For other providers, follow the [Cozystack installation guide, Public IP Setup]({{% ref "/docs/v0/install/cozystack#4b-public-ip-setup" %}}). + +### Public-network Kubernetes deployment + +Deploying Cozystack, [Deploy with public networks]({{% ref "/docs/v0/install/how-to/public-ip" %}}). + +## Operations + +### How to enable access to dashboard via ingress-controller + +Update your `ingress` application and enable `dashboard: true` option in it. +Dashboard will become available under: `https://dashboard.` + + +### How to configure Cozystack using FluxCD or ArgoCD + +Here you can find reference repository to learn how to configure Cozystack services using GitOps approach: + +- https://github.com/aenix-io/cozystack-gitops-example + +### How to generate kubeconfig for tenant users + +Moved to [How to generate kubeconfig for tenant users]({{% ref "/docs/v0/operations/faq/generate-kubeconfig" %}}). + +### How to Rotate Certificate Authority + +Moved to Cluster Maintenance, [How to Rotate Certificate Authority]({{% ref "/docs/v0/operations/cluster/rotate-ca" %}}). + +### How to cleanup etcd state + +Moved to Troubleshooting: [How to clean up etcd state]({{% ref "/docs/v0/operations/troubleshooting/etcd#how-to-clean-up-etcd-state" %}}). + +## Bundles + +### How to overwrite parameters for specific components + +Moved to Cluster configuration, [Components reference]({{% ref "/docs/v0/operations/configuration/components#overwriting-component-parameters" %}}). + +### How to disable some components from bundle + +Moved to Cluster configuration, [Components reference]({{% ref "/docs/v0/operations/configuration/components#enabling-and-disabling-components" %}}). diff --git a/content/en/docs/v0/operations/faq/generate-kubeconfig.md b/content/en/docs/v0/operations/faq/generate-kubeconfig.md new file mode 100644 index 00000000..51836ffe --- /dev/null +++ b/content/en/docs/v0/operations/faq/generate-kubeconfig.md @@ -0,0 +1,37 @@ +--- +title: "How to generate kubeconfig for tenant users" +linkTitle: "Generate tenant kubeconfig" +description: "A guide on how to generate a kubeconfig file for tenant users in Cozystack." +aliases: + - /docs/operations/faq/generate-kubeconfig +--- + +To generate a `kubeconfig` for tenant users, use the following script. +As a result, you’ll receive the tenant-kubeconfig file, which you can provide to the user. + + +```bash +SERVER=$(kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}') +kubectl get secret tenant-root -n tenant-root -o go-template=' +apiVersion: v1 +kind: Config +clusters: +- name: tenant-root + cluster: + server: '"$SERVER"' + certificate-authority-data: {{ index .data "ca.crt" }} +contexts: +- name: tenant-root + context: + cluster: tenant-root + namespace: {{ index .data "namespace" | base64decode }} + user: tenant-root +current-context: tenant-root +users: +- name: tenant-root + user: + token: {{ index .data "token" | base64decode }} +' \ +> tenant-root.kubeconfig +``` + diff --git a/content/en/docs/v0/operations/oidc/_index.md b/content/en/docs/v0/operations/oidc/_index.md new file mode 100644 index 00000000..18073e35 --- /dev/null +++ b/content/en/docs/v0/operations/oidc/_index.md @@ -0,0 +1,10 @@ +--- +title: "Using OpenID Connect with Cozystack" +linkTitle: "OpenID Connect" +description: "OIDC in Cozystack" +weight: 36 +aliases: + - /docs/v0/oidc + - /docs/operations/oidc + - /docs/oidc +--- diff --git a/content/en/docs/v0/operations/oidc/enable_oidc.md b/content/en/docs/v0/operations/oidc/enable_oidc.md new file mode 100644 index 00000000..c8032713 --- /dev/null +++ b/content/en/docs/v0/operations/oidc/enable_oidc.md @@ -0,0 +1,134 @@ +--- +title: "Enable OIDC Server" +linkTitle: "OIDC Server" +description: "How to enable OIDC Server" +weight: 36 +aliases: + - /docs/v0/oidc/enable_oidc + - /docs/operations/oidc/enable_oidc + - /docs/oidc/enable_oidc +--- + +## Prerequisites + +1. **OIDC Configuration** + Your API server must be configured to use OIDC. If you are using Talos Linux, your machine configuration should include the following parameters: + + ```yaml + cluster: + apiServer: + extraArgs: + oidc-issuer-url: "https://keycloak.example.org/realms/cozy" + oidc-client-id: "kubernetes" + oidc-username-claim: "preferred_username" + oidc-groups-claim: "groups" + ``` + + **For Talm** + Add to your `values.yaml` in talm repo: + ```yaml + oidcIssuerUrl: "https://keycloak./realms/cozy" + ``` + +2. **Domain Reachability** + Ensure that the domain `keycloak.example.org` is accessible from the cluster and resolves to your root ingress controller. + +3. **Storage Configuration** + Storage must be properly configured. + +## Configuration + +If all prerequisites are met, you can proceed with the configuration steps. + +### Step 1: Enable OIDC in Cozystack + +Edit your Cozystack ConfigMap to enable OIDC, this also will expose keycloak service automatically: + +```bash +kubectl patch -n cozy-system configmap cozystack --type=merge -p '{ + "data": { + "oidc-enabled": "true" + } +}' +``` + +If you need to add extra redirect URLs for the dashboard client (for example, when accessing the dashboard via port-forwarding), edit your Cozystack ConfigMap. +Multiple redirect URLs should be separated by commas. + +```bash +kubectl patch -n cozy-system configmap cozystack --type=merge -p '{"data":{"extra-keycloak-redirect-uri-for-dashboard": "http://127.0.0.1:8080/oauth2/callback/*,http://localhost:8080/oauth2/callback/*"}}' +``` + +Within one minute, CozyStack will reconcile the ConfigMap and create three new `HelmRelease` resources: + +```bash +# kubectl get hr -n cozy-keycloak +cozy-keycloak keycloak 26s Unknown Running 'install' action with a timeout of 5m0s +cozy-keycloak keycloak-configure 26s False dependency 'cozy-keycloak/keycloak-operator' is not ready +cozy-keycloak keycloak-operator 26s False dependency 'cozy-keycloak/keycloak' is not ready +``` + +### Step 2: Wait for Installation Completion + +Wait until all resources are successfully installed and reach the `Ready` state: + +```bash +NAME AGE READY STATUS +keycloak 2m19s True Release reconciliation succeeded +keycloak-configure 2m19s True Release reconciliation succeeded +keycloak-operator 2m19s True Release reconciliation succeeded +``` + + +Reconcile tenants: + +``` +kubectl annotate -n tenant-root hr/tenant-root reconcile.fluxcd.io/forceAt=$(date +"%Y-%m-%dT%H:%M:%SZ") --overwrite +``` + +### Step 3: Access Keycloak + +You can now access Keycloak at `https://keycloak.example.org` (replace `example.org` with your infrastructure domain). + +To get the Keycloak credentials for default user `admin`, run the following command: + +```bash +kubectl get secret -o yaml -n cozy-keycloak keycloak-credentials -o go-template='{{ printf "%s\n" (index .data "password" | base64decode) }}' +``` + +1. Switch realm to `cozy`. +2. Create a user in the realm `cozy`. + + Follow the [Keycloak documentation](https://www.keycloak.org/docs/latest/server_admin/index.html#proc-creating-user_server_administration_guide) to create a user in the realm `cozy`. + +3. After a user is created, go to the user details in Keycloak admin console and turn on the "Verified email" toggle. This is needed for OIDC authentication to work properly. + +4. Add the user to the `cozystack-cluster-admin` group. + +5. Now you should be able to login to the dashboard using your OIDC credentials. + + {{% alert color="warning" %}} + If the dashboard is still requesting a token instead of login/password, manually reconcile it: + + ```bash + kubectl annotate -n cozy-dashboard hr/dashboard reconcile.fluxcd.io/forceAt=$(date +"%Y-%m-%dT%H:%M:%SZ") --overwrite + ``` + {{% /alert %}} + +### Step 4: Retrieve Kubeconfig + +To access the cluster through the Dashboard, download your kubeconfig by selecting the deployed tenant and copying the secret from the resource map. + +This kubeconfig will be automatically configured to use OIDC authentication and the namespace dedicated to the tenant. + +Setup [kubelogin](https://github.com/int128/kubelogin) which is necessary to use an OIDC-enabled kubeconfig. +```bash +# Homebrew (macOS and Linux) +brew install int128/kubelogin/kubelogin + +# Krew (macOS, Linux, Windows and ARM) +kubectl krew install oidc-login + +# Chocolatey (Windows) +choco install kubelogin +``` diff --git a/content/en/docs/v0/operations/oidc/identity_providers/_index.md b/content/en/docs/v0/operations/oidc/identity_providers/_index.md new file mode 100644 index 00000000..5c56f8fc --- /dev/null +++ b/content/en/docs/v0/operations/oidc/identity_providers/_index.md @@ -0,0 +1,10 @@ +--- +title: "Identity providers" +linkTitle: "Identity providers" +description: "Identity providers managment." +weight: 70 +aliases: + - /docs/v0/oidc/identity_providers + - /docs/operations/oidc/identity_providers + - /docs/oidc/identity_providers +--- diff --git a/content/en/docs/v0/operations/oidc/identity_providers/gitlab.md b/content/en/docs/v0/operations/oidc/identity_providers/gitlab.md new file mode 100644 index 00000000..e3599003 --- /dev/null +++ b/content/en/docs/v0/operations/oidc/identity_providers/gitlab.md @@ -0,0 +1,53 @@ +--- +title: How to configure GitLab as an Identity Provider +linkTitle: Gitlab +description: "How to configure GitLab as an Identity Provider" +weight: 30 +aliases: + - /docs/v0/oidc/identity_providers/gitlab + - /docs/operations/oidc/identity_providers/gitlab + - /docs/oidc/identity_providers/gitlab +--- + +You can use Gitlab identity provider for Keycloak + +### Overview + +## Create Application in Gitlab + +- Open `https://gitlab.com/groups//-/settings/applications` +- Click `Add new application` +- Name: cozy, Redirect URI: `https://keycloak./realms/cozy/broker/gitlab/endpoint` +- Enable Confidential, api, read_api, read_user, openid, profile, email +- Copy and save Secret + + +## Configure Keycloak Identity Provider +Create a `KeycloakRealmIdentityProvider` resource with the following configuration: + +```yaml +apiVersion: v1.edp.epam.com/v1 +kind: KeycloakRealmIdentityProvider +metadata: + name: gitlab +spec: + realmRef: + name: keycloakrealm-cozy + kind: ClusterKeycloakRealm + alias: gitlab + authenticateByDefault: false + enabled: true + providerId: "gitlab" + config: + clientId: "YOUR GITLAB APP ID" + clientSecret: "YOUR GITLAB APP SECRET" + syncMode: "IMPORT" + mappers: + - name: "username" + identityProviderMapper: "oidc-username-idp-mapper" + identityProviderAlias: "gitlab" + config: + target: "LOCAL" + syncMode: "INHERIT" + template: "${ALIAS}---${CLAIM.preferred_username}" +``` diff --git a/content/en/docs/v0/operations/oidc/identity_providers/google.md b/content/en/docs/v0/operations/oidc/identity_providers/google.md new file mode 100644 index 00000000..5251b6e6 --- /dev/null +++ b/content/en/docs/v0/operations/oidc/identity_providers/google.md @@ -0,0 +1,76 @@ +--- +title: How to configure Google as an Identity Provider +linkTitle: Google +description: "How to configure Google as an Identity Provider" +weight: 30 +aliases: + - /docs/v0/oidc/identity_providers/google + - /docs/operations/oidc/identity_providers/google + - /docs/oidc/identity_providers/google +--- + +## Configure Google + +- Head over to [Google Console](https://console.cloud.google.com/apis/dashboard), login in to the console using Google account and you will see Google Developer Console. Once logged in, head over the top left drop-down to create new project. +![1](/img/oidc/identity_providers/google/1.jpeg) + +- Click on "New Project" to proceed. +![2](/img/oidc/identity_providers/google/2.jpeg) + +- Enter the project name of your choice and select the Organisation if you have multiple organisations. Once done click on "Create" +![3](/img/oidc/identity_providers/google/3.jpeg) + +- Once the project is created you will get a pop-up suggesting to configure the consent screen. If not then head over to the Dashboard and head over to "Explore and enable APIs" options. Then Click on "Credentials" > "Configure Consent Screen" and head over to the next step. +![4](/img/oidc/identity_providers/google/4.jpeg) + +- Click on "External" as we want to allow any Google account to be able to sign in to our application and hit "Create". +![5](/img/oidc/identity_providers/google/5.jpeg) + +- After this, we will be redirected to pages where we will have to configure different things + - Application type: Public + - Application name: Your application name + - Authorised domains: Your application top-level domain name + - Application Homepage link: Your application homepage + - Application Privacy Policy link: Your application privacy policy link + +- Now head over to the Create Credentials option in the navbar and click on "OAuth Client ID". +![6](/img/oidc/identity_providers/google/6.jpeg) + +- Select Application type as a "Web application" and name the application according to your choice. Next, Add the link provided in the Keycloak tab under "Authorized Redirect URIs" and click "Create". The link should look something like this +```bash +https://YOUR_KEYCLOAK_DOMAIN/auth/realms/cozy/broker/google/endpoint +``` +![7](/img/oidc/identity_providers/google/7.jpeg) + +- As it is done, you will see a pop up with the information required in the next step. You will need to "Client ID" and "Client secret" in next step so make sure you make a safe copy of it. +![8](/img/oidc/identity_providers/google/8.jpeg) + +## Configure Keycloak Identity Provider +Create a `KeycloakRealmIdentityProvider` resource with the following configuration: + +```yaml +apiVersion: v1.edp.epam.com/v1 +kind: KeycloakRealmIdentityProvider +metadata: + name: google +spec: + realmRef: + name: keycloakrealm-cozy + kind: ClusterKeycloakRealm + alias: google + authenticateByDefault: false + enabled: true + providerId: "google" + config: + clientId: "YOUR GOOGLE APP ID" + clientSecret: "YOUR GOOGLE APP SECRET" + syncMode: "IMPORT" + mappers: + - name: "username" + identityProviderMapper: "oidc-username-idp-mapper" + identityProviderAlias: "google" + config: + target: "LOCAL" + syncMode: "INHERIT" + template: "${ALIAS}---${CLAIM.email}" +``` diff --git a/content/en/docs/v0/operations/oidc/users_and_roles.md b/content/en/docs/v0/operations/oidc/users_and_roles.md new file mode 100644 index 00000000..dfb94e6e --- /dev/null +++ b/content/en/docs/v0/operations/oidc/users_and_roles.md @@ -0,0 +1,78 @@ +--- +title: Creating users and add roles for them +linkTitle: Users and roles +description: "How to create users and add roles for them" +weight: 50 +aliases: + - /docs/v0/oidc/users_and_roles + - /docs/operations/oidc/users_and_roles + - /docs/oidc/users_and_roles +--- + +Creating users and add roles for them + +### Overview + +When a tenant is created in Cozy (starting with version 1.6.0), roles, RoleBindings and keycloak groups will automatically be created in the Kubernetes cluster. + +To create a user, refer to the following documentation: +[Keycloak Admin Console Documentation](https://www.keycloak.org/docs/latest/server_admin/#using-the-admin-console) + +## Assigning a Role to a User for a Tenant + +1. **Access Keycloak**: + To retrieve login credentials, check the secret by running the following command: + ```bash + kubectl get secret keycloak-credentials -n cozy-keycloak -o yaml + ``` + **Keycloak Address**: + The Keycloak address will match the value specified in the cozystack ConfigMap. For example, if your ConfigMap looks like this: + ```yaml + apiVersion: v1 + kind: ConfigMap + metadata: + name: cozystack + namespace: cozy-system + data: + root-host: infra.example.org + api-server-adress: 55.21.33.22 + bundle-name: "paas-full" + ipv4-pod-cidr: "10.244.0.0/16" + ipv4-pod-gateway: "10.244.0.1" + ipv4-svc-cidr: "10.96.0.0/16" + ipv4-join-cidr: "100.64.0.0/16" + ``` + Then Keycloak will be available at: `keycloak.infra.example.org` + + {{% alert color="warning" %}} + If you are planning to integrate with external services either as clients or as IdPs, your Keycloak address needs to be publicly accessible and reachable by these services. + {{% /alert %}} + + +## Configure Roles for Each Tenant in Cozy: + +### Cluster wide +- **`cozystack-cluster-admin`** + - Allow all. + +- **`cozystack-cluster-admin`** + - Allow all in "" api group + - Allow all for helmreleases in helm.toolkit.fluxcd.io and apps.cozystack.io + +### Tenant wide +- **`tenant-abc-view`** + - Read-only access to resources from our API. + - Ability to view logs. + +- **`tenant-abc-use`** + - All previous permissions + - VNC access for virtual machines. + +- **`tenant-abc-admin`** + - All previous permissions + - Ability to delete pods, along with all permissions from `tenant-abc-use`. + - Ability to create, update, and delete resources from our API (excluding `tenant`, `monitoring`, `etcd`, `ingress`). + +- **`tenant-abc-super-admin`** + - All previous permissions + - Ability to create, update, and delete `tenant`, `monitoring`, `etcd`, and `ingress`. diff --git a/content/en/docs/operations/services/_include/bootbox.md b/content/en/docs/v0/operations/services/_include/bootbox.md similarity index 100% rename from content/en/docs/operations/services/_include/bootbox.md rename to content/en/docs/v0/operations/services/_include/bootbox.md diff --git a/content/en/docs/operations/services/_include/etcd.md b/content/en/docs/v0/operations/services/_include/etcd.md similarity index 100% rename from content/en/docs/operations/services/_include/etcd.md rename to content/en/docs/v0/operations/services/_include/etcd.md diff --git a/content/en/docs/operations/services/_include/ingress.md b/content/en/docs/v0/operations/services/_include/ingress.md similarity index 100% rename from content/en/docs/operations/services/_include/ingress.md rename to content/en/docs/v0/operations/services/_include/ingress.md diff --git a/content/en/docs/operations/services/_include/monitoring-overview.md b/content/en/docs/v0/operations/services/_include/monitoring-overview.md similarity index 100% rename from content/en/docs/operations/services/_include/monitoring-overview.md rename to content/en/docs/v0/operations/services/_include/monitoring-overview.md diff --git a/content/en/docs/operations/services/_include/parameters.md b/content/en/docs/v0/operations/services/_include/parameters.md similarity index 72% rename from content/en/docs/operations/services/_include/parameters.md rename to content/en/docs/v0/operations/services/_include/parameters.md index 143a0ede..1ecb0872 100644 --- a/content/en/docs/operations/services/_include/parameters.md +++ b/content/en/docs/v0/operations/services/_include/parameters.md @@ -3,8 +3,4 @@ title: "Monitoring Parameters" linkTitle: "Parameters" description: "Configure and manage monitoring parameters in Cozystack." weight: 1 -menu: - docs: - parent: "Monitoring" - weight: 10 --- diff --git a/content/en/docs/operations/services/_include/seaweedfs.md b/content/en/docs/v0/operations/services/_include/seaweedfs.md similarity index 100% rename from content/en/docs/operations/services/_include/seaweedfs.md rename to content/en/docs/v0/operations/services/_include/seaweedfs.md diff --git a/content/en/docs/v0/operations/services/_index.md b/content/en/docs/v0/operations/services/_index.md new file mode 100644 index 00000000..fcc2b1cb --- /dev/null +++ b/content/en/docs/v0/operations/services/_index.md @@ -0,0 +1,36 @@ +--- +title: "Cluster Services Reference" +linkTitle: "Cluster Services" +description: "Learn about middleware system packages, deployed to tenants and providing major functionality to user apps." +weight: 35 +aliases: + - /docs/operations/services +--- + +## Monitoring + +The monitoring system in Cozystack provides comprehensive observability for both system-level and tenant-level resources. It operates at two primary levels: system-wide monitoring for infrastructure components and tenant-specific monitoring for user applications and services. + +### Architecture Overview + +- **System Level**: Monitors core Cozystack components, Kubernetes clusters, and underlying infrastructure. +- **Tenant Level**: Provides isolated monitoring stacks for each tenant, allowing them to monitor their own applications without interference. + +### Key Components + +- **VMAgent**: Collects metrics from various sources and forwards them to VictoriaMetrics. +- **VMCluster**: VictoriaMetrics cluster for storing and querying metrics. +- **Grafana**: Visualization and dashboarding tool for metrics and logs. +- **Alerta**: Alerting system for notifications based on metrics thresholds. + +### Data Flows + +Metrics flow from exporters (e.g., node-exporters, kube-state-metrics) to VMAgent, which then writes to VMCluster. Grafana queries VMCluster for visualization, and Alerta processes alerts from VMCluster or other sources. + +For detailed configuration, see [Monitoring Hub Reference]({{% ref "/docs/v0/operations/services/monitoring" %}}). + +Cozystack includes a number of cluster services. +They are deployed through tenant settings, and not through the application catalog. + +Each tenant can have its own copy of cluster service or use the parent tenant's services. +Read more about the services sharing mechanism in [Tenant System]({{% ref "/docs/v0/guides/tenants#sharing-cluster-services" %}}) diff --git a/content/en/docs/v0/operations/services/bootbox.md b/content/en/docs/v0/operations/services/bootbox.md new file mode 100644 index 00000000..711c9ab6 --- /dev/null +++ b/content/en/docs/v0/operations/services/bootbox.md @@ -0,0 +1,36 @@ +--- +title: "BootBox Service Reference" +linkTitle: "BootBox" +aliases: + - /docs/operations/services/bootbox +--- + + + + +## Parameters + +### Common parameters + +| Name | Description | Type | Value | +| ------------------------- | ----------------------------------------------------- | ---------- | ------- | +| `whitelistHTTP` | Secure HTTP by enabling client networks whitelisting. | `bool` | `true` | +| `whitelist` | List of client networks. | `[]string` | `[]` | +| `machines` | Configuration of physical machine instances. | `[]object` | `[]` | +| `machines[i].hostname` | Hostname. | `string` | `""` | +| `machines[i].arch` | Architecture. | `string` | `""` | +| `machines[i].ip` | IP address configuration. | `object` | `{}` | +| `machines[i].ip.address` | IP address. | `string` | `""` | +| `machines[i].ip.gateway` | IP gateway. | `string` | `""` | +| `machines[i].ip.netmask` | Netmask. | `string` | `""` | +| `machines[i].leaseTime` | Lease time. | `int` | `0` | +| `machines[i].mac` | MAC addresses. | `[]string` | `[]` | +| `machines[i].nameServers` | Name servers. | `[]string` | `[]` | +| `machines[i].timeServers` | Time servers. | `[]string` | `[]` | +| `machines[i].uefi` | UEFI. | `bool` | `false` | + + diff --git a/content/en/docs/v0/operations/services/etcd.md b/content/en/docs/v0/operations/services/etcd.md new file mode 100644 index 00000000..4808d3c4 --- /dev/null +++ b/content/en/docs/v0/operations/services/etcd.md @@ -0,0 +1,28 @@ +--- +title: "Etcd Service Reference" +linkTitle: "Etcd" +aliases: + - /docs/operations/services/etcd +--- + + + + +## Parameters + +### 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` | `{}` | +| `resources.cpu` | Number of CPU cores allocated. | `quantity` | `1000m` | +| `resources.memory` | Amount of memory allocated. | `quantity` | `512Mi` | + + diff --git a/content/en/docs/v0/operations/services/ingress.md b/content/en/docs/v0/operations/services/ingress.md new file mode 100644 index 00000000..80b9b267 --- /dev/null +++ b/content/en/docs/v0/operations/services/ingress.md @@ -0,0 +1,29 @@ +--- +title: "Ingress-NGINX Controller Reference" +linkTitle: "Ingress" +aliases: + - /docs/operations/services/ingress +--- + + + + +## Parameters + +### Common parameters + +| Name | Description | Type | Value | +| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------- | ---------- | ------- | +| `replicas` | Number of ingress-nginx replicas. | `int` | `2` | +| `whitelist` | List of client networks. | `[]string` | `[]` | +| `cloudflareProxy` | Restoring original visitor IPs when Cloudflare proxied is enabled. | `bool` | `false` | +| `resources` | Explicit CPU and memory configuration for each ingress-nginx replica. When omitted, the preset defined in `resourcesPreset` is applied. | `object` | `{}` | +| `resources.cpu` | CPU available to each replica. | `quantity` | `""` | +| `resources.memory` | Memory (RAM) available to each replica. | `quantity` | `""` | +| `resourcesPreset` | Default sizing preset used when `resources` is omitted. | `string` | `micro` | + + diff --git a/content/en/docs/v0/operations/services/monitoring/_index.md b/content/en/docs/v0/operations/services/monitoring/_index.md new file mode 100644 index 00000000..fca54e75 --- /dev/null +++ b/content/en/docs/v0/operations/services/monitoring/_index.md @@ -0,0 +1,7 @@ +--- +title: "Monitoring Hub Reference" +linkTitle: "Monitoring" +aliases: + - /docs/operations/services/monitoring +--- +{{< include "docs/v0/operations/services/_include/monitoring-overview.md" >}} \ No newline at end of file diff --git a/content/en/docs/v0/operations/services/monitoring/alerting.md b/content/en/docs/v0/operations/services/monitoring/alerting.md new file mode 100644 index 00000000..ab74808d --- /dev/null +++ b/content/en/docs/v0/operations/services/monitoring/alerting.md @@ -0,0 +1,362 @@ +--- +title: "Monitoring Alerting" +linkTitle: "Alerting" +description: "Configure and manage alerts in Cozystack monitoring system using Alerta and Alertmanager." +weight: 36 +aliases: + - /docs/operations/services/monitoring/alerting +--- + +## Overview + +The alerting system in Cozystack integrates Prometheus, Alertmanager, and Alerta to provide comprehensive monitoring and notification capabilities. Alerts are generated based on metrics collected by VMAgent and stored in VMCluster, then routed through Alertmanager for grouping and deduplication, and finally managed by Alerta for notifications via various channels like Telegram and Slack. + +### Alerting Flow + +```mermaid +sequenceDiagram + participant P as Prometheus + participant AM as Alertmanager + participant A as Alerta + participant T as Telegram + participant S as Slack + P->>AM: Send Alert + AM->>A: Forward Alert + A->>T: Send Notification + A->>S: Send Notification +``` + +## Configuring Alerts in Alerta + +Alerta is the alerting system integrated into Cozystack's monitoring stack. It processes alerts from various sources and provides notifications through multiple channels. + +### Alert Rules + +Alerts are generated based on Prometheus rules defined in the monitoring configuration. You can configure custom alert rules by modifying the PrometheusRule resources in your tenant's namespace. + +To create custom alerts, define PrometheusRule manifests with expressions that evaluate to true when the alert condition is met. Each rule includes: + +- **expr**: The PromQL expression to evaluate. +- **for**: Duration the condition must be true before firing the alert. +- **labels**: Metadata like severity. +- **annotations**: Descriptive information for notifications. + +Example of a custom alert rule: + +```yaml +apiVersion: monitoring.coreos.com/v1 +kind: PrometheusRule +metadata: + name: custom-alerts + namespace: tenant-name +spec: + groups: + - name: custom.rules + rules: + - alert: HighCPUUsage + expr: (1 - avg(rate(node_cpu_seconds_total{mode="idle"}[5m]))) * 100 > 80 + for: 5m + labels: + severity: warning + annotations: + summary: "High CPU usage detected" + description: "CPU usage is above 80% for more than 5 minutes" +``` + +### Severity Levels + +Alerta supports the following severity levels: + +- **informational**: Low-priority information +- **warning**: Potential issues that require attention +- **critical**: Urgent issues that need immediate action +- **major**: Significant problems affecting operations +- **minor**: Minor issues + +You can configure which severities trigger notifications in the Alerta configuration. + +### Integrations + +#### Telegram Integration + +To enable Telegram notifications, configure the following in your monitoring settings: + +```yaml +alerta: + alerts: + telegram: + token: "your-telegram-bot-token" + chatID: "chat-id-1,chat-id-2" + disabledSeverity: + - informational +``` + +#### Slack Integration + +For Slack notifications: + +```yaml +alerta: + alerts: + slack: + url: "https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK" + disabledSeverity: + - informational + - warning +``` + +#### Email Integration + +To enable email notifications: + +```yaml +alerta: + alerts: + email: + smtpHost: "smtp.example.com" + smtpPort: 587 + smtpUser: "alerts@example.com" + smtpPassword: "your-password" + fromAddress: "alerts@example.com" + toAddress: "team@example.com" + disabledSeverity: + - informational +``` + +#### PagerDuty Integration + +For PagerDuty notifications: + +```yaml +alerta: + alerts: + pagerduty: + serviceKey: "YOUR_PAGERDUTY_INTEGRATION_KEY" + disabledSeverity: + - informational + - warning +``` + +For detailed configuration options, see [Monitoring Hub Reference]({{% ref "/docs/v0/operations/services/monitoring" %}}). + +## Alert Examples + +Here are common alert examples for system monitoring: + +### CPU Usage Alert + +```yaml +- alert: HighCPUUsage + expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80 + for: 5m + labels: + severity: warning + annotations: + summary: "High CPU usage on {{ $labels.instance }}" + description: "CPU usage is {{ $value }}% for more than 5 minutes" +``` + +### Memory Usage Alert + +```yaml +- alert: HighMemoryUsage + expr: (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100 > 90 + for: 5m + labels: + severity: critical + annotations: + summary: "High memory usage on {{ $labels.instance }}" + description: "Memory usage is {{ $value }}% for more than 5 minutes" +``` + +### Disk Space Alert + +```yaml +- alert: LowDiskSpace + expr: (node_filesystem_avail_bytes / node_filesystem_size_bytes) * 100 < 10 + for: 5m + labels: + severity: critical + annotations: + summary: "Low disk space on {{ $labels.instance }}" + description: "Disk space available is {{ $value }}% for more than 5 minutes" +``` + +### WorkloadNotOperational Alert + +```yaml +- alert: WorkloadNotOperational + expr: up{job="workload-monitor"} == 0 + for: 1m + labels: + severity: critical + annotations: + summary: "Workload {{ $labels.workload }} is not operational" + description: "Workload monitor reports the workload is down" +``` + +### Network Interface Down Alert + +```yaml +- alert: NetworkInterfaceDown + expr: node_network_up{device!~"lo"} == 0 + for: 2m + labels: + severity: critical + annotations: + summary: "Network interface {{ $labels.device }} is down on {{ $labels.instance }}" + description: "Network interface has been down for more than 2 minutes" +``` + +### Kubernetes Pod Crash Alert + +```yaml +- alert: KubernetesPodCrashLooping + expr: rate(kube_pod_container_status_restarts_total[10m]) > 0.5 + for: 5m + labels: + severity: warning + annotations: + summary: "Pod {{ $labels.pod }} is crash looping" + description: "Pod is restarting more than once every 2 minutes" +``` + +### High Network Latency Alert + +```yaml +- alert: HighNetworkLatency + expr: node_network_receive_bytes_total / node_network_receive_packets_total > 1500 + for: 5m + labels: + severity: warning + annotations: + summary: "High network latency on {{ $labels.instance }}" + description: "Average packet size exceeds 1500 bytes, indicating potential latency issues" +``` + +## Managing Alerts + +### Escalation + +Alerts can be escalated based on duration and severity. Configure escalation policies in Alerta to automatically increase severity or notify additional channels if an alert remains unresolved. + +Escalation helps ensure that critical issues are addressed promptly. You can define escalation rules based on: + +- Time thresholds (e.g., escalate after 15 minutes) +- Severity levels +- Alert attributes (e.g., specific services or environments) + +Example escalation configuration: + +- Warning alerts escalate to critical after 30 minutes +- Critical alerts trigger immediate notifications to on-call personnel +- Major alerts notify management after 1 hour + +To configure escalation in Alerta, use the web interface or API to set up escalation policies for different alert types. + +### Suppression + +You can suppress alerts temporarily using Alerta's silencing feature. This is useful during maintenance windows, planned outages, or when investigating known issues without triggering notifications. + +Silences can be created for specific alerts or based on filters like environment, resource, or event type. Silenced alerts are still visible in the Alerta dashboard but do not generate notifications. + +To create a silence: + +1. Go to the Alerta web interface +2. Navigate to the Alerts section +3. Select the alert to silence or use filters to silence multiple alerts +4. Choose "Silence" and set the duration and reason + +Alternatively, use the API: + +```bash +curl -X POST https://alerta.example.com/api/v2/silences \ + -H "Authorization: Bearer YOUR_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "environment": "production", + "resource": "server-01", + "event": "HighCPUUsage", + "startTime": "2023-12-01T00:00:00Z", + "duration": 3600, + "comment": "Scheduled maintenance" + }' +``` + +Silences can also be managed via Alertmanager for more advanced routing-based suppression. + +## Alertmanager Configuration + +Alertmanager handles routing, grouping, and deduplication of alerts before sending notifications. It acts as an intermediary between Prometheus and notification systems like Alerta. + +### Grouping + +Alerts can be grouped by labels to reduce noise and prevent alert fatigue. Configure grouping in the Alertmanager configuration: + +```yaml +route: + group_by: ['alertname', 'cluster', 'namespace'] + group_wait: 10s + group_interval: 10s + repeat_interval: 1h + receiver: 'default' +``` + +- **group_by**: Labels to group alerts by +- **group_wait**: Time to wait before sending the first notification +- **group_interval**: Interval between notifications for the same group +- **repeat_interval**: Minimum time between notifications + +### Routing + +Route alerts to different receivers based on labels, allowing for targeted notifications: + +```yaml +route: + receiver: 'default' + routes: + - match: + severity: critical + receiver: 'critical-alerts' + - match: + team: devops + receiver: 'devops-team' + - match_re: + namespace: 'kube-.*' + receiver: 'kubernetes-alerts' + +receivers: +- name: 'default' + slack_configs: + - api_url: 'https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK' + channel: '#alerts' +- name: 'critical-alerts' + pagerduty_configs: + - service_key: 'YOUR_PAGERDUTY_KEY' +- name: 'devops-team' + email_configs: + - to: 'devops@example.com' + from: 'alertmanager@example.com' + smarthost: 'smtp.example.com:587' + auth_username: 'alertmanager@example.com' + auth_password: 'password' +- name: 'kubernetes-alerts' + webhook_configs: + - url: 'http://alerta.example.com/api/webhooks/prometheus' + send_resolved: true +``` + +### Inhibition + +Use inhibition rules to suppress certain alerts when other related alerts are firing: + +```yaml +inhibit_rules: +- source_match: + alertname: 'NodeDown' + target_match: + alertname: 'PodCrashLooping' + equal: ['node'] +``` + +For more information on Alertmanager configuration, refer to the [official documentation](https://prometheus.io/docs/alerting/latest/alertmanager/). \ No newline at end of file diff --git a/content/en/docs/v0/operations/services/monitoring/dashboards.md b/content/en/docs/v0/operations/services/monitoring/dashboards.md new file mode 100644 index 00000000..c03dc481 --- /dev/null +++ b/content/en/docs/v0/operations/services/monitoring/dashboards.md @@ -0,0 +1,156 @@ +--- +title: "Monitoring Dashboards" +linkTitle: "Dashboards" +description: "Learn how to visualize metrics and create custom dashboards in Grafana for monitoring Cozystack clusters and applications." +weight: 10 +aliases: + - /docs/operations/services/monitoring/dashboards +--- + +## Overview + +Cozystack integrates Grafana as the primary visualization tool for monitoring metrics collected by VictoriaMetrics (VM). This section covers accessing pre-built dashboards, creating custom visualizations, and integrating external data sources to provide comprehensive observability for your Cozystack clusters and applications. + +## Accessing Grafana + +To access Grafana and explore dashboards: + +1. Navigate to the Grafana URL: `https://grafana.`, where `` is your tenant's domain. +2. Log in using your tenant credentials (OIDC or token-based authentication). +3. Once logged in, you can browse pre-configured dashboards in the "Dashboards" section. + +For initial setup and configuration details, refer to [Monitoring Setup]({{% ref "/docs/v0/operations/services/monitoring/setup" %}}). + +## Pre-built Dashboards + +Cozystack provides a set of pre-configured dashboards in Grafana, automatically deployed and updated via the monitoring stack. These dashboards are defined in the `packages/extra/monitoring/dashboards.list` file and offer out-of-the-box insights into system and application performance. + +### Cluster Infrastructure Dashboards + +- **Kubernetes Cluster Overview**: Provides a high-level view of the entire Kubernetes cluster, including node status, pod health, cluster-wide CPU/memory/disk utilization, and API server performance. Useful for quick health checks and identifying resource bottlenecks across the cluster. +- **Node Metrics**: Detailed per-node metrics such as CPU usage, memory consumption, disk I/O, network traffic, and system load. Includes panels for individual nodes and aggregated views. Ideal for diagnosing node-specific issues. +- **ETCD Metrics**: Monitors ETCD cluster health, including latency, storage usage, leader elections, and database operations. Essential for ensuring the reliability of Kubernetes control plane data. +- **Storage Metrics**: Insights into storage components like Linstor and SeaweedFS, covering volume usage, I/O operations, replication status, and performance metrics. Helps in managing storage resources and troubleshooting storage-related problems. + +### Application and Service Dashboards + +- **Tenant Applications**: Customizable dashboards for user-deployed applications, displaying metrics such as request rates, error rates, response times, and throughput. Supports applications like web services, APIs, and microservices running in tenant namespaces. +- **Service Mesh**: Metrics for networking components, including ingress controllers (e.g., NGINX, Traefik), load balancers, and service mesh proxies. Covers traffic patterns, latency, error rates, and connectivity health. +- **Database Metrics**: Specialized dashboards for supported databases such as PostgreSQL, MySQL, Redis, and others. Includes query performance, connection counts, cache hit rates, and storage metrics. For example, the PostgreSQL dashboard shows active connections, slow queries, and replication status. + +These dashboards are regularly updated with new releases. For screenshots and visual examples, check the [Cozystack blog](https://cozystack.io/blog/) for release notes featuring dashboard previews. + +## Creating Custom Dashboards + +If the pre-built dashboards do not meet your needs, you can create custom dashboards in Grafana to visualize specific metrics or combine data from multiple sources. + +### Steps to Create a Custom Dashboard + +1. **Access Grafana**: Log in to Grafana using your tenant credentials. +2. **Create a New Dashboard**: Click the "+" icon in the sidebar and select "Dashboard". +3. **Add Panels**: Click "Add new panel" to create visualizations. Choose from various panel types and configure data sources. +4. **Configure Queries**: Use MetricsQL (VictoriaMetrics query language) to fetch and transform data. +5. **Customize Layout**: Arrange panels, set time ranges, and add annotations or variables for interactivity. +6. **Save and Share**: Save the dashboard, set permissions, and optionally export it for reuse. + + +### Example Queries + +Here are some common MetricsQL queries for custom panels: + +- **Pod CPU Usage**: + ```promql + rate(container_cpu_usage_seconds_total{pod=~"$pod"}[5m]) + ``` + Displays CPU usage rate for selected pods over time. + +- **Memory Usage Percentage**: + ```promql + (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100 + ``` + Shows memory utilization as a percentage for nodes. + +- **Network Traffic**: + ```promql + rate(node_network_receive_bytes_total[5m]) + rate(node_network_transmit_bytes_total[5m]) + ``` + Monitors incoming and outgoing network traffic. + +- **Application Response Time**: + ```promql + histogram_quantile(0.95, rate(http_request_duration_seconds_bucket{job="my-app"}[5m])) + ``` + Calculates the 95th percentile response time for an application. + +### Panel Types and Best Practices + +- **Time Series (Graph)**: Ideal for trends over time, such as CPU usage or request rates. Use for historical data visualization. +- **Stat**: Displays single values, like current CPU percentage or total requests. Good for at-a-glance metrics. +- **Table**: Shows tabular data, such as top processes or alert summaries. Useful for detailed listings. +- **Heatmap**: Visualizes density, like error rates across time intervals. Effective for spotting patterns. +- **Gauge**: Represents values on a scale, such as disk usage percentage. + +When creating panels, consider: +- Use appropriate time ranges and refresh intervals. +- Add thresholds and alerts directly in panels for proactive monitoring. +- Leverage variables for dynamic filtering (e.g., by namespace or pod name). + +For advanced querying and functions, refer to the [VictoriaMetrics MetricsQL documentation](https://docs.victoriametrics.com/MetricsQL.html). + +## Integrating External Data Sources + +Cozystack allows integration with external monitoring systems to centralize observability. + +### Adding External Prometheus + +To integrate an external Prometheus instance: + +1. In Grafana, go to "Configuration" > "Data Sources" > "Add data source". +2. Select "Prometheus" as the type. +3. Enter the external Prometheus URL, authentication details (if required), and scrape interval. +4. Test the connection and save. +5. Use PromQL in your dashboards to query the external data. + +### Custom Application Metrics + +For applications exposing custom metrics: + +- Ensure your application exposes metrics in Prometheus format (e.g., via `/metrics` endpoint). +- Configure VMAgent in Cozystack to scrape these endpoints by updating the monitoring configuration. +- Metrics will be ingested into VM and available for querying in Grafana. + +Follow Prometheus [metric naming conventions](https://prometheus.io/docs/practices/naming/) to ensure compatibility. For configuration examples, see [Monitoring Hub Reference]({{% ref "/docs/v0/operations/services/monitoring" %}}). + +### Grafana Data Sources Integration + +This diagram shows how external data sources are integrated into Grafana for centralized monitoring. + +```mermaid +graph TD + A[VictoriaMetrics
VM Data Source
MetricsQL Queries] --> B[Grafana] + C[VLogs
Log Data Source
Log Queries] --> B + D[External Prometheus
PromQL Queries] --> B + E[Custom Application Metrics
Prometheus Format] --> B + B --> F[Dashboards
Pre-built and Custom] + F --> G[Visualization
Metrics + Logs Correlation] +``` + +## Data Sources Configuration + +Grafana in Cozystack is pre-configured with optimized data sources for seamless integration. + +### VictoriaMetrics (VM) Data Source + +- **Type**: Prometheus-compatible (MetricsQL). +- **URL**: Internal VM cluster endpoint within the tenant namespace. +- **Authentication**: Automatic via service account tokens. +- **Usage**: Primary source for time-series metrics. Supports high-performance querying and aggregation. + +### VLogs Data Source + +- **Type**: Custom plugin for log querying. +- **Purpose**: Enables log visualization and correlation with metrics. +- **Configuration**: Automatically set up for tenant-specific log streams. +- **Usage**: Add log panels to dashboards to combine metrics and logs, e.g., for troubleshooting application issues. + +To modify data source settings, access the Grafana admin panel (admin privileges required) or update the monitoring configuration via the Cozystack API. For detailed parameters, refer to [Monitoring Hub Reference]({{% ref "/docs/v0/operations/services/monitoring" %}}). \ No newline at end of file diff --git a/content/en/docs/v0/operations/services/monitoring/logs.md b/content/en/docs/v0/operations/services/monitoring/logs.md new file mode 100644 index 00000000..75082952 --- /dev/null +++ b/content/en/docs/v0/operations/services/monitoring/logs.md @@ -0,0 +1,157 @@ +--- +title: "Monitoring Logs" +linkTitle: "Logs" +description: "Learn how to collect, store, search, and analyze logs in Cozystack using Fluent Bit and VictoriaLogs for comprehensive observability." +weight: 11 +aliases: + - /docs/operations/services/monitoring/logs +--- + +## Collecting and Storing Logs + +Cozystack uses Fluent Bit for log collection and VictoriaLogs for log storage and querying. Logs are collected from various sources within the cluster and stored in dedicated log storages configured per tenant. + +### Configuring Logs Storages + +Log storages are configured through the monitoring hub parameters. Each tenant can have multiple log storage instances with customizable retention periods and storage sizes. + +| Parameter | Description | Type | Default | +|-----------|-------------|------|---------| +| `logsStorages` | Array of log storage configurations | `[]object` | `[]` | +| `logsStorages[i].name` | Name of the storage instance | `string` | `""` | +| `logsStorages[i].retentionPeriod` | Retention period for logs (e.g., "30d") | `string` | `"1"` | +| `logsStorages[i].storage` | Persistent volume size | `string` | `"10Gi"` | +| `logsStorages[i].storageClassName` | StorageClass for data persistence | `string` | `"replicated"` | + +For detailed configuration options, see [Monitoring Hub Reference]({{% ref "/docs/v0/operations/services/monitoring" %}}). + +### Fluent Bit Inputs and Outputs + +Fluent Bit is configured to collect logs from: + +- **Kubernetes Pods**: Container logs from all namespaces +- **System Logs**: Node-level logs and system services +- **Application Logs**: Custom log sources via sidecar containers + +#### Example Fluent Bit Input Configuration + +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: fluent-bit-config +data: + fluent-bit.conf: | + [INPUT] + Name tail + Path /var/log/containers/*.log + Parser docker + Tag kube.* + Refresh_Interval 5 + + [OUTPUT] + Name vlogs + Match kube.* + Host vlogs-cluster + Port 9428 +``` + +Logs are forwarded to VictoriaLogs for storage and indexing. The output plugin ensures logs are enriched with metadata like pod names, namespaces, and timestamps. + +## Logging Architecture + +The following diagram illustrates the logging architecture in Cozystack, showing how logs flow from various sources to storage and visualization tools. + +```mermaid +graph TD + A[Kubernetes Pods] --> B[Fluent Bit] + C[System Logs] --> B + D[Application Logs] --> B + B --> E[VictoriaLogs] + E --> F[Grafana] + F --> G[Log Analysis and Dashboards] +``` + +## Searching and Analyzing Logs + +VictoriaLogs (VLogs) provides powerful querying capabilities for stored logs. Access VLogs through Grafana or directly via API for advanced log analysis. + +### Using VictoriaLogs + +- **Query Language**: Use VLogs query syntax to filter logs by fields, time ranges, and patterns. +- **Integration with Grafana**: Visualize logs alongside metrics in dashboards. + +#### Example VLogs Query + +To search for error logs from a specific pod: + +``` +_level:ERROR pod_name:my-app-pod +``` + +### Filters and Metadata + +Logs in Cozystack include rich metadata for effective filtering: + +- **Pod Metadata**: `pod_name`, `namespace`, `container_name` +- **Log Levels**: `_level` (INFO, WARN, ERROR, etc.) +- **Timestamps**: Automatic timestamp parsing +- **Custom Labels**: Application-specific labels added during collection + +#### Advanced Filtering + +Use complex queries to correlate logs: + +``` +namespace:kube-system AND _level:WARN AND message:*timeout* +``` + +For more on VLogs querying, refer to the [VictoriaLogs documentation](https://docs.victoriametrics.com/VictoriaLogs/). + +## Integrating with Applications + +To maximize log observability, integrate structured logging and label enrichment in your applications. + +### Structured Logs + +Use structured logging formats like JSON for better parsing and querying: + +```json +{ + "timestamp": "2023-10-01T12:00:00Z", + "level": "INFO", + "message": "User login successful", + "user_id": "12345", + "action": "login" +} +``` + +### Enriching Logs with Labels + +Add custom labels to logs for enhanced filtering: + +- **Tenant Labels**: Automatically added for multi-tenancy +- **Application Labels**: Custom labels like `app_version`, `environment` +- **Business Labels**: Domain-specific metadata + +#### Example Application Configuration + +In your application, configure logging to include structured data: + +```python +import logging +import json + +logger = logging.getLogger(__name__) + +def log_event(level, message, **kwargs): + log_entry = { + "timestamp": datetime.utcnow().isoformat(), + "level": level, + "message": message, + **kwargs + } + logger.info(json.dumps(log_entry)) +``` + +Ensure Fluent Bit parsers are configured to handle your log format. For setup details, see [Monitoring Setup]({{% ref "/docs/v0/operations/services/monitoring/setup" %}}). \ No newline at end of file diff --git a/content/en/docs/v0/operations/services/monitoring/parameters.md b/content/en/docs/v0/operations/services/monitoring/parameters.md new file mode 100644 index 00000000..d916d419 --- /dev/null +++ b/content/en/docs/v0/operations/services/monitoring/parameters.md @@ -0,0 +1,117 @@ +--- +title: "Monitoring Parameters" +linkTitle: "Parameters" +description: "Configure and manage monitoring parameters in Cozystack." +weight: 1 +aliases: + - /docs/operations/services/monitoring/parameters +--- + + + +## Parameters + +### Common parameters + +| Name | Description | Type | Value | +| ------ | ----------------------------------------------------------------------------------------------------- | -------- | ----- | +| `host` | The hostname used to access Grafana externally (defaults to 'grafana' subdomain for the tenant host). | `string` | `""` | + + +### Metrics storage configuration + +| Name | Description | Type | Value | +| ------------------------------------------------ | ------------------------------------------- | ---------- | ------- | +| `metricsStorages` | Configuration of metrics storage instances. | `[]object` | `[...]` | +| `metricsStorages[i].name` | Name of the storage instance. | `string` | `""` | +| `metricsStorages[i].retentionPeriod` | Retention period for metrics. | `string` | `""` | +| `metricsStorages[i].deduplicationInterval` | Deduplication interval for metrics. | `string` | `""` | +| `metricsStorages[i].storage` | Persistent volume size. | `string` | `10Gi` | +| `metricsStorages[i].storageClassName` | StorageClass used for the data. | `string` | `""` | +| `metricsStorages[i].vminsert` | Configuration for vminsert. | `object` | `{}` | +| `metricsStorages[i].vminsert.minAllowed` | Minimum guaranteed resources. | `object` | `{}` | +| `metricsStorages[i].vminsert.minAllowed.cpu` | CPU request. | `quantity` | `""` | +| `metricsStorages[i].vminsert.minAllowed.memory` | Memory request. | `quantity` | `""` | +| `metricsStorages[i].vminsert.maxAllowed` | Maximum allowed resources. | `object` | `{}` | +| `metricsStorages[i].vminsert.maxAllowed.cpu` | CPU limit. | `quantity` | `""` | +| `metricsStorages[i].vminsert.maxAllowed.memory` | Memory limit. | `quantity` | `""` | +| `metricsStorages[i].vmselect` | Configuration for vmselect. | `object` | `{}` | +| `metricsStorages[i].vmselect.minAllowed` | Minimum guaranteed resources. | `object` | `{}` | +| `metricsStorages[i].vmselect.minAllowed.cpu` | CPU request. | `quantity` | `""` | +| `metricsStorages[i].vmselect.minAllowed.memory` | Memory request. | `quantity` | `""` | +| `metricsStorages[i].vmselect.maxAllowed` | Maximum allowed resources. | `object` | `{}` | +| `metricsStorages[i].vmselect.maxAllowed.cpu` | CPU limit. | `quantity` | `""` | +| `metricsStorages[i].vmselect.maxAllowed.memory` | Memory limit. | `quantity` | `""` | +| `metricsStorages[i].vmstorage` | Configuration for vmstorage. | `object` | `{}` | +| `metricsStorages[i].vmstorage.minAllowed` | Minimum guaranteed resources. | `object` | `{}` | +| `metricsStorages[i].vmstorage.minAllowed.cpu` | CPU request. | `quantity` | `""` | +| `metricsStorages[i].vmstorage.minAllowed.memory` | Memory request. | `quantity` | `""` | +| `metricsStorages[i].vmstorage.maxAllowed` | Maximum allowed resources. | `object` | `{}` | +| `metricsStorages[i].vmstorage.maxAllowed.cpu` | CPU limit. | `quantity` | `""` | +| `metricsStorages[i].vmstorage.maxAllowed.memory` | Memory limit. | `quantity` | `""` | + + +### Logs storage configuration + +| Name | Description | Type | Value | +| ---------------------------------- | ---------------------------------------- | ---------- | ------------ | +| `logsStorages` | Configuration of logs storage instances. | `[]object` | `[...]` | +| `logsStorages[i].name` | Name of the storage instance. | `string` | `""` | +| `logsStorages[i].retentionPeriod` | Retention period for logs. | `string` | `1` | +| `logsStorages[i].storage` | Persistent volume size. | `string` | `10Gi` | +| `logsStorages[i].storageClassName` | StorageClass used to store the data. | `string` | `replicated` | + + +### Alerta configuration + +| Name | Description | Type | Value | +| ----------------------------------------- | --------------------------------------------------------------------- | ---------- | ------- | +| `alerta` | Configuration for the Alerta service. | `object` | `{}` | +| `alerta.storage` | Persistent volume size for the database. | `string` | `10Gi` | +| `alerta.storageClassName` | StorageClass used for the database. | `string` | `""` | +| `alerta.resources` | Resource configuration. | `object` | `{}` | +| `alerta.resources.requests` | Resource requests. | `object` | `{}` | +| `alerta.resources.requests.cpu` | CPU request. | `quantity` | `100m` | +| `alerta.resources.requests.memory` | Memory request. | `quantity` | `256Mi` | +| `alerta.resources.limits` | Resource limits. | `object` | `{}` | +| `alerta.resources.limits.cpu` | CPU limit. | `quantity` | `1` | +| `alerta.resources.limits.memory` | Memory limit. | `quantity` | `1Gi` | +| `alerta.alerts` | Alert routing configuration. | `object` | `{}` | +| `alerta.alerts.telegram` | Configuration for Telegram alerts. | `object` | `{}` | +| `alerta.alerts.telegram.token` | Telegram bot token. | `string` | `""` | +| `alerta.alerts.telegram.chatID` | Telegram chat ID(s), separated by commas. | `string` | `""` | +| `alerta.alerts.telegram.disabledSeverity` | List of severities without alerts (e.g. ["informational","warning"]). | `[]string` | `[]` | +| `alerta.alerts.slack` | Configuration for Slack alerts. | `object` | `{}` | +| `alerta.alerts.slack.url` | Configuration uri for Slack alerts. | `string` | `""` | +| `alerta.alerts.slack.disabledSeverity` | List of severities without alerts (e.g. ["informational","warning"]). | `[]string` | `[]` | + + +### Grafana configuration + +| Name | Description | Type | Value | +| ----------------------------------- | ---------------------------------------- | ---------- | ------- | +| `grafana` | Configuration for Grafana. | `object` | `{}` | +| `grafana.db` | Database configuration. | `object` | `{}` | +| `grafana.db.size` | Persistent volume size for the database. | `string` | `10Gi` | +| `grafana.resources` | Resource configuration. | `object` | `{}` | +| `grafana.resources.requests` | Resource requests. | `object` | `{}` | +| `grafana.resources.requests.cpu` | CPU request. | `quantity` | `100m` | +| `grafana.resources.requests.memory` | Memory request. | `quantity` | `256Mi` | +| `grafana.resources.limits` | Resource limits. | `object` | `{}` | +| `grafana.resources.limits.cpu` | CPU limit. | `quantity` | `1` | +| `grafana.resources.limits.memory` | Memory limit. | `quantity` | `1Gi` | + + +### Vmagent configuration + +| Name | Description | Type | Value | +| ------------------------ | ---------------------------------------- | -------- | ----- | +| `vmagent` | Configuration for VictoriaMetrics Agent. | `object` | `{}` | +| `vmagent.externalLabels` | External labels applied to all metrics. | `object` | `{}` | +| `vmagent.remoteWrite` | Remote write configuration. | `object` | `{}` | + + diff --git a/content/en/docs/v0/operations/services/monitoring/setup.md b/content/en/docs/v0/operations/services/monitoring/setup.md new file mode 100644 index 00000000..1a0879ea --- /dev/null +++ b/content/en/docs/v0/operations/services/monitoring/setup.md @@ -0,0 +1,447 @@ +--- +title: "Monitoring Setup" +linkTitle: "Setup" +description: "Guide to setting up and configuring monitoring in Cozystack" +weight: 2 +aliases: + - /docs/operations/services/monitoring/setup +--- + +## Overview + +Cozystack provides a comprehensive monitoring and alerting system for Kubernetes clusters and applications. The system is based on Victoria Metrics for storing metrics and logs, Grafana for visualization, Alerta for alerting, and WorkloadMonitor for monitoring application states. + +The architecture is divided into two levels: + +- **System level**: Monitoring of cluster infrastructure +- **Tenant-specific level**: Isolated monitoring for each tenant + +## Installation of Monitoring + +### System Monitoring + +System monitoring is installed automatically during platform deployment through the HelmRelease `monitoring-agents` in `packages/apps/kubernetes/templates/helmreleases/monitoring-agents.yaml`. + +To install manually via local chart: + +```bash +helm install monitoring-agents ./packages/system/monitoring-agents -n cozy-monitoring --create-namespace +``` + +### Tenant Monitoring + +Monitoring for a specific tenant is activated by patching the Tenant resource (CRD `apps.cozystack.io/v1alpha1/Tenant`). + +#### Via Dashboard UI + +1. Open the Cozystack dashboard +2. Go to tenant management +3. Select the tenant and set `monitoring: true` in values + +#### Programmatically + +```bash +kubectl patch tenant --type merge -p '{"spec":{"values":{"monitoring": true}}}' +``` + +After activation, FluxCD automatically deploys the HelmRelease `monitoring` in the tenant's namespace from the template `packages/apps/tenant/templates/monitoring.yaml`. + +## Component Architecture + +### System Level + +#### VMAgent +- **Role**: Agent for collecting cluster metrics +- **Configuration**: + - Scrape interval: 30 seconds + - External labels: `cluster: cozystack, tenant: tenant-root` + - Remote write: To VMCluster tenant-root (shortterm and longterm) +- **Metrics sources**: + - Kubernetes API (Pods, Services, Deployments) + - kube-state-metrics + - Node Exporter + - cAdvisor (via kubelet) + +#### VMRule +- **Recording Rules**: Aggregated metrics + - `container_memory:kmem` - Kernel memory of containers + - `kube_persistentvolume_is_local` - Local PVs + - `kube_controller_pod` - Pod connections to controllers +- **Alerting Rules**: Standard Prometheus alerts + - `TargetDown` - Unavailable targets + - `Watchdog` - Test alert + - Kubernetes-specific alerts (apiserver, etcd, nodes, pods) + +#### Fluent Bit +- **Role**: Collection and aggregation of logs +- **Inputs**: + - Container logs: `/var/log/containers/*.log` + - Kubernetes events + - Audit logs: `/var/log/audit/kube/*.log` +- **Outputs**: Victoria Logs (`vlogs-generic.tenant-root.svc:9428`) +- **Parsers**: docker, cri, kubernetes metadata + +#### Alertmanager +- **Role**: Alert routing +- **Configuration**: + - Grouping by `alertname`, `namespace`, `cluster` + - Routes: Alerta webhook, blackhole for `severity="none"` +- **Integration**: Webhook to Alerta for notifications + +### Tenant-specific Level + +#### Victoria Metrics Cluster +- **Components**: + - `vminsert`: Metric ingestion (2 replicas) + - `vmselect`: Metric queries (2 replicas, 2Gi cache) + - `vmstorage`: Storage (2 replicas, 10Gi PVC) +- **Storage**: + - Shortterm: 3 days retention, 15s deduplication + - Longterm: 14 days retention, 5m deduplication + - Replication: Factor 2 + +#### Victoria Logs +- **Role**: Storage of structured logs +- **Configuration**: 1 year retention, 10Gi PVC + +#### Grafana +- **Role**: Visualization of metrics and logs +- **Database**: PostgreSQL (10Gi PVC) +- **Datasources**: + - Victoria Metrics (metrics) + - Victoria Logs (logs) +- **Ingress**: `grafana.{tenant-host}` +- **Resources**: 2 replicas, limits 1 CPU/1Gi RAM +- **Dashboards**: Pre-configured for all Cozystack components + +#### Alerta +- **Role**: Centralized alerting +- **Database**: PostgreSQL (10Gi PVC) +- **Notifications**: Telegram, Slack +- **API**: Protected by API key +- **Ingress**: `alerta.{tenant-host}` + +#### VMAlert (tenant) +- **Role**: Alert evaluation for tenant +- **Datasource**: vmselect shortterm +- **Remote write**: Back to vminsert shortterm +- **Evaluation interval**: 15 seconds + +#### VMAgent (tenant) +- **Role**: Collection of metrics from tenant namespace +- **Selector**: `namespace.cozystack.io/monitoring` +- **External labels**: `cluster: cozystack, tenant: {namespace}` +- **Remote write**: vminsert shortterm and longterm + +## Application Monitoring + +### WorkloadMonitor CRD + +WorkloadMonitor (`cozystack.io/v1alpha1/WorkloadMonitor`) is primarily used for billing, tracking workload states, and collecting resource metrics. Alerting is an additional function. + +#### Specification + +```yaml +apiVersion: cozystack.io/v1alpha1 +kind: WorkloadMonitor +metadata: + name: mysql-instance +spec: + replicas: 1 + minReplicas: 1 + kind: mysql + type: mysql + selector: + app.kubernetes.io/instance: mysql-instance + version: "10.11" +``` + +#### Status + +```yaml +status: + operational: true # true if AvailableReplicas >= MinReplicas + availableReplicas: 1 + observedReplicas: 1 +``` + +### WorkloadMonitor Controller + +- Tracks Pods, PVCs, Services by selector +- Creates CRD Workload with aggregated metrics for billing +- Exports metrics via kube-state-metrics + +### Alerting Integration + +Although WorkloadMonitor is intended for billing, it also integrates with alerting. An alert triggers on `cozy_workload_status_operational{operational="false"} == 1`: + +1. VMAlert evaluates the rule +2. Sends alert to Alertmanager +3. Alertmanager routes to Alerta +4. Alerta sends notifications (Telegram/Slack) + +### Examples for Applications + +#### MySQL + +```yaml +apiVersion: cozystack.io/v1alpha1 +kind: WorkloadMonitor +metadata: + name: {{ .Release.Name }} +spec: + replicas: {{ .Values.replicas }} + minReplicas: 1 + kind: mysql + type: mysql + selector: + app.kubernetes.io/instance: {{ .Release.Name }} + version: {{ .Chart.Version }} +``` + +#### Kafka + +For Kafka: + +```yaml +apiVersion: cozystack.io/v1alpha1 +kind: WorkloadMonitor +metadata: + name: {{ .Release.Name }}-kafka +spec: + replicas: {{ .Values.kafka.replicas }} + minReplicas: 1 + kind: kafka + type: kafka + selector: + app.kubernetes.io/name: kafka + app.kubernetes.io/instance: {{ .Release.Name }} + version: {{ .Chart.Version }} +``` + +For Zookeeper: + +```yaml +apiVersion: cozystack.io/v1alpha1 +kind: WorkloadMonitor +metadata: + name: {{ .Release.Name }}-zookeeper +spec: + replicas: {{ .Values.zookeeper.replicas }} + minReplicas: 1 + kind: zookeeper + type: zookeeper + selector: + app.kubernetes.io/name: zookeeper + app.kubernetes.io/instance: {{ .Release.Name }} + version: {{ .Chart.Version }} +``` + +Similar configurations apply for PostgreSQL, Redis, ClickHouse, RabbitMQ, NATS, and other applications. + +## Data Flow + +```mermaid +graph TD + subgraph "System Level (tenant-root)" + SYS_VMA[VMAgent System] + SYS_FB[Fluent Bit] + SYS_VM[VMCluster tenant-root] + SYS_VL[VLogs tenant-root] + SYS_AM[Alertmanager] + end + + subgraph "Tenant Level" + T_VMA[VMAgent Tenant] + T_VM[VMCluster Tenant
shortterm + longterm] + T_VL[VLogs Tenant] + T_VA[VMAlert Tenant] + T_AM[Alertmanager Tenant] + T_AL[Alerta Tenant] + T_G[Grafana Tenant] + T_WM[WorkloadMonitor] + end + + SYS_VMA -->|metrics| SYS_VM + SYS_FB -->|logs| SYS_VL + SYS_AM -->|alerts| T_AL + + T_VMA -->|metrics| T_VM + T_VA -->|read| T_VM + T_VA -->|write| T_VM + T_VA -->|alerts| T_AM + T_AM -->|webhook| T_AL + T_AL -->|Telegram/Slack| Users + T_G -->|datasources| T_VM + T_G -->|datasources| T_VL + T_WM -->|metrics| T_VMA + + Apps[Applications
MySQL, Kafka, etc.] --> T_WM + Infra[Infrastructure
Pods, Nodes, etc.] --> SYS_VMA + Infra --> SYS_FB +``` + +## Configuration and Setup + +### values.yaml Parameters + +#### System Monitoring (`packages/system/monitoring-agents/values.yaml`) + +```yaml +# VMAgent +vmagent: + shardCount: 1 + externalLabels: + cluster: cozystack + tenant: tenant-root + remoteWrite: + - url: "http://vminsert-shortterm.tenant-root.svc:8480/insert/0/prometheus" + - url: "http://vminsert-longterm.tenant-root.svc:8480/insert/0/prometheus" + +# Fluent Bit +fluent-bit: + inputs: + - tail: + path: /var/log/containers/*.log + - kubernetes_events: + kube_url: https://kubernetes.default.svc:443 + outputs: + - vlogs: + url: http://vlogs-generic.tenant-root.svc:9428 +``` + +#### Tenant Monitoring (`packages/extra/monitoring/values.yaml`) + +```yaml +# VMCluster +metricsStorages: + shortterm: + retention: "3d" + deduplication: "15s" + longterm: + retention: "14d" + deduplication: "5m" + +# Grafana +grafana: + host: grafana.example.com + resources: + limits: + cpu: 1 + memory: 1Gi + +# Alerta +alerta: + host: alerta.example.com + telegram: + token: "your-telegram-token" + slack: + webhook: "your-slack-webhook" +``` + +### Grafana Dashboards + +Cozystack includes pre-configured dashboards for: + +- **Kubernetes**: nodes, pods, control-plane +- **Victoria Metrics**: cluster, agent, alert +- **Applications**: nginx, postgres, redis, kafka, mysql, etc. +- **Flux**: control-plane, stats +- **Storage**: linstor, seaweedfs + +Dashboards are defined in `packages/extra/monitoring/dashboards.list`. + +To access Grafana: + +1. Navigate to `https://grafana.{tenant-host}` +2. Log in with default credentials (admin/admin) or configured ones +3. Explore pre-configured dashboards in the Dashboards section + +## Security and Scalability + +### Security + +- **RBAC**: Minimal rights for service accounts +- **Network Policies**: Traffic restriction between components +- **TLS**: Ingress with TLS certificates +- **API Keys**: Authentication for Alerta + +### Scalability + +- **Horizontal Pod Autoscaling**: For VM components +- **Resource Limits**: Configurable CPU/Memory +- **Storage**: PVC with configurable storageClass +- **Sharding**: VMAgent supports load distribution + +## Integrations + +- **Alertmanager**: Webhook, email, PagerDuty, Slack +- **Grafana**: Plugins for Victoria Metrics, Loki +- **External Storage**: Remote write to external VM instances +- **GitOps**: Management via FluxCD + +## Diagnostics and Troubleshooting + +### Status Checks + +To verify the monitoring setup: + +```bash +# Check VMCluster status +kubectl get vmcluster -n + +# Check VMAgent pods +kubectl get pods -n cozy-monitoring -l app.kubernetes.io/name=vmagent + +# Check Grafana pods +kubectl get pods -n -l app.kubernetes.io/name=grafana + +# Check Alerta pods +kubectl get pods -n -l app.kubernetes.io/name=alerta + +# Check WorkloadMonitor status +kubectl get workloadmonitor -n +``` + +### Viewing Logs + +```bash +# VMAgent logs +kubectl logs -n cozy-monitoring deployment/vmagent + +# VMAlert logs +kubectl logs -n deployment/vmalert + +# Fluent Bit logs +kubectl logs -n cozy-monitoring daemonset/fluent-bit + +# Grafana logs +kubectl logs -n deployment/grafana +``` + +### Common Issues + +- **Metrics not being collected**: Check selectors in VMServiceScrape resources +- **Alerts not triggering**: Verify rules in VMRule resources and Alertmanager configuration +- **Logs not arriving**: Inspect Fluent Bit configuration and outputs +- **WorkloadMonitor not working**: Check selector labels and CRD status +- **Grafana not accessible**: Verify ingress configuration and TLS certificates +- **Alerta notifications failing**: Check API keys and webhook URLs + +### Additional Troubleshooting Commands + +```bash +# Check VMCluster health +kubectl describe vmcluster -n + +# List active alerts +kubectl get prometheusrules -n + +# Check network policies +kubectl get networkpolicies -n + +# Verify RBAC permissions +kubectl auth can-i get pods --as=system:serviceaccount:: +``` + +This documentation covers all aspects of monitoring and alerting in Cozystack based on analysis of the real project code. \ No newline at end of file diff --git a/content/en/docs/v0/operations/services/seaweedfs.md b/content/en/docs/v0/operations/services/seaweedfs.md new file mode 100644 index 00000000..1bb23579 --- /dev/null +++ b/content/en/docs/v0/operations/services/seaweedfs.md @@ -0,0 +1,71 @@ +--- +title: "SeaweedFS Service Reference" +linkTitle: "SeaweedFS" +aliases: + - /docs/operations/services/seaweedfs +--- + + + + +## Parameters + +### Common parameters + +| Name | Description | Type | Value | +| ------------------- | -------------------------------------------------------------------------------------------------- | -------- | -------- | +| `host` | The hostname used to access SeaweedFS externally (defaults to 's3' subdomain for the tenant host). | `string` | `""` | +| `topology` | The topology of the SeaweedFS cluster. | `string` | `Simple` | +| `replicationFactor` | Replication factor: number of replicas for each volume in the SeaweedFS cluster. | `int` | `2` | + + +### SeaweedFS Components Configuration + +| Name | Description | Type | Value | +| ----------------------------- | -------------------------------------------------------------------------------------------------------- | ------------------- | ------- | +| `db` | Database configuration. | `object` | `{}` | +| `db.replicas` | Number of database replicas. | `int` | `2` | +| `db.size` | Persistent Volume size. | `quantity` | `10Gi` | +| `db.storageClass` | StorageClass used to store the data. | `string` | `""` | +| `db.resources` | Explicit CPU and memory configuration. When omitted, the preset defined in `resourcesPreset` is applied. | `object` | `{}` | +| `db.resources.cpu` | Number of CPU cores allocated. | `quantity` | `""` | +| `db.resources.memory` | Amount of memory allocated. | `quantity` | `""` | +| `db.resourcesPreset` | Default sizing preset used when `resources` is omitted. | `string` | `small` | +| `master` | Master service configuration. | `object` | `{}` | +| `master.replicas` | Number of master replicas. | `int` | `3` | +| `master.resources` | Explicit CPU and memory configuration. When omitted, the preset defined in `resourcesPreset` is applied. | `object` | `{}` | +| `master.resources.cpu` | Number of CPU cores allocated. | `quantity` | `""` | +| `master.resources.memory` | Amount of memory allocated. | `quantity` | `""` | +| `master.resourcesPreset` | Default sizing preset used when `resources` is omitted. | `string` | `small` | +| `filer` | Filer service configuration. | `object` | `{}` | +| `filer.replicas` | Number of filer replicas. | `int` | `2` | +| `filer.resources` | Explicit CPU and memory configuration. When omitted, the preset defined in `resourcesPreset` is applied. | `object` | `{}` | +| `filer.resources.cpu` | Number of CPU cores allocated. | `quantity` | `""` | +| `filer.resources.memory` | Amount of memory allocated. | `quantity` | `""` | +| `filer.resourcesPreset` | Default sizing preset used when `resources` is omitted. | `string` | `small` | +| `filer.grpcHost` | The hostname used to expose or access the filer service externally. | `string` | `""` | +| `filer.grpcPort` | The port used to access the filer service externally. | `int` | `443` | +| `filer.whitelist` | A list of IP addresses or CIDR ranges that are allowed to access the filer service. | `[]string` | `[]` | +| `volume` | Volume service configuration. | `object` | `{}` | +| `volume.replicas` | Number of volume replicas. | `int` | `2` | +| `volume.size` | Persistent Volume size. | `quantity` | `10Gi` | +| `volume.storageClass` | StorageClass used to store the data. | `string` | `""` | +| `volume.resources` | Explicit CPU and memory configuration. When omitted, the preset defined in `resourcesPreset` is applied. | `object` | `{}` | +| `volume.resources.cpu` | Number of CPU cores allocated. | `quantity` | `""` | +| `volume.resources.memory` | Amount of memory allocated. | `quantity` | `""` | +| `volume.resourcesPreset` | Default sizing preset used when `resources` is omitted. | `string` | `small` | +| `volume.zones` | A map of zones for MultiZone topology. Each zone can have its own number of replicas and size. | `map[string]object` | `{}` | +| `volume.zones[name].replicas` | Number of replicas in the zone. | `int` | `0` | +| `volume.zones[name].size` | Zone storage size. | `quantity` | `""` | +| `s3` | S3 service configuration. | `object` | `{}` | +| `s3.replicas` | Number of S3 replicas. | `int` | `2` | +| `s3.resources` | Explicit CPU and memory configuration. When omitted, the preset defined in `resourcesPreset` is applied. | `object` | `{}` | +| `s3.resources.cpu` | Number of CPU cores allocated. | `quantity` | `""` | +| `s3.resources.memory` | Amount of memory allocated. | `quantity` | `""` | +| `s3.resourcesPreset` | Default sizing preset used when `resources` is omitted. | `string` | `small` | + + diff --git a/content/en/docs/v0/operations/stretched/_index.md b/content/en/docs/v0/operations/stretched/_index.md new file mode 100644 index 00000000..cd73003f --- /dev/null +++ b/content/en/docs/v0/operations/stretched/_index.md @@ -0,0 +1,12 @@ +--- +title: "Multi Datacenter guides" +linkTitle: "Multi Datacenter" +description: "How to run Cozystack on stretched Kubernetes cluster" +weight: 37 +aliases: + - /docs/v0/stretched + - /docs/operations/stretched + - /docs/stretched +--- + +These guides will show you how to configure your cluster to run Cozystack on the nodes residing in different datacenters. diff --git a/content/en/docs/v0/operations/stretched/drbd-tuning.md b/content/en/docs/v0/operations/stretched/drbd-tuning.md new file mode 100644 index 00000000..900ef9ce --- /dev/null +++ b/content/en/docs/v0/operations/stretched/drbd-tuning.md @@ -0,0 +1,55 @@ +--- +title: "LINSTOR DRBD Configuration" +linkTitle: "LINSTOR DRBD" +description: "Parameters required to make Linstor work in a stretched cluster" +weight: 30 +aliases: + - /docs/v0/stretched/linstor + - /docs/v0/operations/stretched/linstor + - /docs/operations/stretched/drbd-tuning + - /docs/stretched/linstor + - /docs/operations/stretched/linstor +--- + +## Introduction + +This guide explains the configuration needed to use LINSTOR storage in a stretched (distributed) Cozystack cluster. + +DRBD (Distributed Replicated Block Device) is a kernel-level block device replication system that works over the network. +LINSTOR server manages DRBD volumes, including their creation, deletion, and orchestration across nodes. + +## Challenges of using DRBD + +DRBD only considers data as written once it reaches a quorum of nodes. +But as it presents itself as a block device to the end user, it must return an error within a given timeout if there are not enough nodes to establish a quorum. + +The potential problem is that the default timeouts are tuned for local-area networks with high bandwidth and low latency. +In the case of cross-datacenter communication, the acknowledgement from the remote node can take a long time due to network congestion. +This is similar to how `etcd` behaves under stretched conditions, where default timeouts can lead to false quorum failures. + +If a single DRBD device is reported as having lost quorum, the Piraeus HA controller will fence the node to prevent other workloads from failing. +This can lead to non-schedulable workloads and even a rebalance storm. + +## Configuration + +The most efficient approach is to set global connection parameters for the LINSTOR cluster, +using the `linstor controller drbd-options` command. +It applies settings to all existing DRBD resources immediately, without the need for individual adjustments or restarts: + +```bash +# Applies to existing DRBD resources as well +linstor controller drbd-options --connect-int 15 --ping-int 15 --ping-timeout 20 --drbd-timeout 120 +``` + +These values are tuned for inter-datacenter environments with higher latency than a typical local network. + +| Parameter | Meaning | Default Value | Recommended Value | +|------------------|-----------------------------------------------------------------------------------------------|---------------|-------------------| +| `--connect-int` | Interval in seconds between TCP connection attempts (in seconds). | 10 | 15 | +| `--ping-int` | Interval in seconds between keepalive pings (in seconds). | 10 | 15 | +| `--ping-timeout` | Time to wait for a ping response before considering the peer dead (in tenths of a second). | 5 | 20 | +| `--drbd-timeout` | Maximum time to wait for a network reply before triggering a timeout (in tenths of a second). | 60 | 120 | + +Adjusting these settings helps avoid unnecessary fencing and workload disruption in stretched clusters. + +Also note the guide on [generic DRBD tuning]({{% ref "/docs/v0/storage/drbd-tuning" %}}). diff --git a/content/en/docs/v0/operations/stretched/etcd.md b/content/en/docs/v0/operations/stretched/etcd.md new file mode 100644 index 00000000..2fff053d --- /dev/null +++ b/content/en/docs/v0/operations/stretched/etcd.md @@ -0,0 +1,46 @@ +--- +title: "Tune etcd timeouts" +linkTitle: "etcd configuration" +description: "Parameters required to make etcd work in a stretched cluster" +weight: 10 +aliases: + - /docs/v0/stretched/etcd + - /docs/operations/stretched/etcd + - /docs/stretched/etcd +--- + +## Potential problems + +**etcd** is a reliable key-value store for critical data, the place where the Kubernetes API server stores its data. +Values are not considered written until a quorum of nodes reports that data has been written. Also, etcd constantly +checks that there is a leader and every node is aware which one it is. Usually, an etcd cluster is run on nodes in the +same datacenter (where latency is low) and default timeouts are tuned for the quickest error reporting possible. In a +stretched cluster, where nodes are in different datacenters, the RTT is much higher and default timeouts can cause false +alarms as if the network was partitioned. In this case, the data is still consistent, but etcd will enter readonly mode +to prevent split-brain. This could happen so frequently that many other components of Kubernetes would start to fail +with non-descriptive and unhelpful error messages. + +## Configuration + +To prevent frequent leader re-elections, you need to tune the following parameters in the etcd configuration: + +* `heartbeat-interval` - the time between heartbeats +* `election-timeout` - the time to wait for a heartbeat before starting an election + +An example of command-line arguments for etcd: + +``` +--election-timeout=10000 --heartbeat-interval=1000 +``` + +## Talos example + +When using `talm` to manage your Talos nodes, add parameters to the `cluster.etcd` section of the template: + +```yaml +cluster: + etcd: + extraArgs: + heartbeat-interval: "1000" + election-timeout: "10000" +``` diff --git a/content/en/docs/v0/operations/stretched/kubeSchedulerConfiguration.md b/content/en/docs/v0/operations/stretched/kubeSchedulerConfiguration.md new file mode 100644 index 00000000..52cd914e --- /dev/null +++ b/content/en/docs/v0/operations/stretched/kubeSchedulerConfiguration.md @@ -0,0 +1,64 @@ +--- +title: "Kube scheduler configuration" +linkTitle: "Kube scheduler configuration" +description: "Kube scheduler configuration" +weight: 20 +aliases: + - /docs/v0/stretched/kubeSchedulerConfiguration + - /docs/operations/stretched/kubeSchedulerConfiguration + - /docs/stretched/kubeSchedulerConfiguration +--- + +## Label nodes + +```bash +kubectl label node topology.kubernetes.io/zone=A +``` + +## Create global app topology spread constraints +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: cozystack-scheduling + namespace: cozy-system +data: + globalAppTopologySpreadConstraints: | + topologySpreadConstraints: + - maxSkew: 1 + topologyKey: topology.kubernetes.io/zone + whenUnsatisfiable: DoNotSchedule +``` + +## Configure PodTopologySpread + +See: https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/#cluster-level-default-constraints + +For Talm installation: +Add to `templates/_helpers.tpl`. + +```yaml +cluster: +... + scheduler: + config: + apiVersion: kubescheduler.config.k8s.io/v1beta3 + kind: KubeSchedulerConfiguration + profiles: + - schedulerName: default-scheduler + pluginConfig: + - name: PodTopologySpread + args: + defaultConstraints: + - maxSkew: 1 + topologyKey: topology.kubernetes.io/zone + whenUnsatisfiable: ScheduleAnyway + defaultingType: List +``` + +Apply changes: + +```bash +talm template -f nodes/node1.yaml -I +talm apply -f nodes/node1.yaml +``` diff --git a/content/en/docs/v0/operations/stretched/labels.md b/content/en/docs/v0/operations/stretched/labels.md new file mode 100644 index 00000000..26341052 --- /dev/null +++ b/content/en/docs/v0/operations/stretched/labels.md @@ -0,0 +1,51 @@ +--- +title: "Node labels" +linkTitle: "Topology node labels" +description: "Label your nodes to help the workloads to be scheduled correctly" +weight: 20 +aliases: + - /docs/v0/stretched/labels + - /docs/operations/stretched/labels + - /docs/stretched/labels +--- + +## How topology labels work + +When running a Kubernetes cluster in multiple datacenters, it's important to know when you want to schedule workloads +close to each other (for example, a database and a backend application) or when you want to spread them out (for +example, multiple replicas of frontend, or database replicas, or volume replicas). The first step to achieving this is +to label Kubernetes nodes. Public clouds typically use the `zone` and `region` terms. In Kubernetes, the most common way +to designate a geographical location is to use `topology.kubernetes.io/zone` and `topology.kubernetes.io/region` +labels (or only the zone one). + +## Talos example + +While labels are usually set manually in other Kubernetes distributions, with Talos you can describe the topology as +code. + +Example `talm` configuration: + +`values.yaml`: + +```yaml +nodes: + node1: + labels: + topology.kubernetes.io/zone: "us-west-1" + topology.kubernetes.io/region: "us-west" + node2: + labels: + topology.kubernetes.io/zone: "us-east-1" + topology.kubernetes.io/region: "us-east" +``` + +`_helpers.tpl`: + +```helm +{{- $nodeLabels := .Values.nodes | dig (include "talm.discovered.hostname" .) "labels" nil }} +machine: + {{- with $nodeLabels }} + nodeLabels: + {{- toYaml . | nindent 4 }} + {{- end }} +``` diff --git a/content/en/docs/v0/operations/stretched/linstor-dedicated-network.md b/content/en/docs/v0/operations/stretched/linstor-dedicated-network.md new file mode 100644 index 00000000..ce54e1d8 --- /dev/null +++ b/content/en/docs/v0/operations/stretched/linstor-dedicated-network.md @@ -0,0 +1,115 @@ +--- +title: "Configuring a Dedicated Network for Distributed Storage with LINSTOR" +linkTitle: "Distributed Storage Network" +description: "Configure LINSTOR to prefer local links for storage and fall back to inter-datacenter connections" +weight: 40 +aliases: + - /docs/operations/stretched/linstor-dedicated-network +--- + +## Introduction + +This guide explains how to improve storage reliability and performance in distributed Cozystack clusters. + +In hyper-converged clusters, it’s common to dedicate a network to storage traffic. +However, it’s not always possible to provision separate storage links between datacenters. + +If you lack dedicated inter-datacenter links for storage, you have two options: + +- make storage nodes in each datacenter isolated, +- make storage traffic share the existing uplinks with other workloads. + +This guide shows how to configure LINSTOR to use a dedicated network for storage traffic within each datacenter, +while falling back to shared links between datacenters when needed. + + +## Prerequisites + +This guide builds on the [Dedicated Network for LINSTOR]({{% ref "/docs/v0/storage/dedicated-network" %}}) guide, +adding additional methods and configuration patterns specific to multi-datacenter environments. +To apply the patterns in this guide, it's important to understand how node interfaces and connection paths work. +Be sure to review the previous guide first, as it explains these concepts in detail. + +To apply different node connection settings depending on node location, you’ll need to label your nodes accordingly. +Refer to the [Topology node labels guide]({{% ref "/docs/v0/operations/stretched/labels" %}}) for instructions. +This guide uses the `topology.kubernetes.io/zone` label to distinguish datacenters. + +## Connection configuration + +In this example, we have three datacenters: `dc1`, `dc2`, and `dc3`. The datacenters are interconnected with direct +optical lines, and the interface is named `region10g`. The nodes inside datacenters `dc1` and `dc2` have a separate +network switch and network interfaces named `san` for storage traffic only. The datacenter `dc3` does not have a +dedicated network switch for storage, and all traffic between nodes in `dc3` is routed through the default network. To +connect to other datacenters, there is a VPN server connected to the optical lines. The nodes in `dc3` have a VLAN +interface with an IP from the `region10g` subnet. + +Consider a scenario with three datacenters: `dc1`, `dc2`, and `dc3`: + +- The datacenters are linked via direct optical lines, exposed to the nodes as an interface named `region10g`. +- Nodes in `dc1` and `dc2` are connected to a dedicated network switch for storage, + and use a separate interface named `san` exclusively for storage traffic. +- Datacenter `dc3` lacks a dedicated storage network. + All intra-datacenter traffic in `dc3` uses the default network. + +Based on this setup, the optimal storage traffic routing is: + +- Nodes in `dc1` and `dc2` use the `san` interface for local storage replication. +- Nodes in `dc3` use their default network interface for local storage replication, avoiding unnecessary hops through the VPN server. +- Cross-datacenter storage traffic flows over the `region10g` interface. + +Here’s the LINSTOR custom resource definition (CRD) to implement this logic: + +```yaml +--- +apiVersion: piraeus.io/v1 +kind: LinstorNodeConnection +metadata: + name: intra-datacenter +spec: + selector: + - matchLabels: + - key: topology.kubernetes.io/zone + op: Same + - key: topology.kubernetes.io/zone + op: In + values: + # Only these datacenters have the `san` interface + - dc1 + - dc2 + paths: + - name: intra-datacenter + interface: san + +# Nodes in `dc3` use the default network. +# No special connection is needed for replication within that datacenter. + +--- +apiVersion: piraeus.io/v1 +kind: LinstorNodeConnection +metadata: + name: cross-datacenter +spec: + selector: + - matchLabels: + - key: topology.kubernetes.io/zone + op: NotSame + paths: + - name: cross-datacenter + interface: region10g +``` + +After applying this configuration, you can inspect the resulting connection paths: + +```console +LINSTOR ==> node-connection list +╭─────────────────────────────────────────────────────╮ +┊ Node A ┊ Node B ┊ Properties ┊ +╞═════════════════════════════════════════════════════╡ +┊ node01 ┊ node02 ┊ last-applied=["Paths/intra-dat... ┊ +┊ node01 ┊ node03 ┊ last-applied=["Paths/cross-dat... ┊ +┊ node01 ┊ node04 ┊ last-applied=["Paths/cross-dat... ┊ +.... +``` + +Node pairs inside the `dc3` datacenter will not have any custom node connection configured, +and will use the default interface instead. diff --git a/content/en/docs/v0/operations/stretched/seaweedfs-multidc.md b/content/en/docs/v0/operations/stretched/seaweedfs-multidc.md new file mode 100644 index 00000000..d9913d7e --- /dev/null +++ b/content/en/docs/v0/operations/stretched/seaweedfs-multidc.md @@ -0,0 +1,165 @@ +--- +title: "SeaweedFS Multi-DC Configuration" +linkTitle: "SeaweedFS Multi-DC" +description: "How to deploy SeaweedFS across multiple data-centres" +weight: 175 +aliases: + - /docs/operations/stretched/seaweedfs-multidc +--- + +This guide explains how to deploy SeaweedFS over several data centers ("multi-DC"). +Multi-zone configuration for SeaweedFS is available since Cozystack v0.34.0. + +## SeaweedFS Multi-DC Configuration + +To span SeaweedFS over several DCs, create a new cluster in multi-DC mode. + +By default, SeaweedFS runs in a single data centre (DC), and a running single-DC deployment cannot be switched to multi-DC mode. +If you need to change the topology, delete the current SeaweedFS instance and create a new one with the desired mode. + +A convenient workflow is: + +1. Deploy a tenant with `seaweedfs: false`. +2. Create a new SeaweedFS instance in the tenant’s namespace, using the required topology. +3. Patch the tenant with `seaweedfs: true`. + +### 1. Create a Tenant without SeaweedFS + +```yaml +apiVersion: apps.cozystack.io/v1alpha1 +kind: Tenant +metadata: + name: dev + namespace: tenant-root +spec: + etcd: false + host: "" + ingress: false + isolated: true + monitoring: false + seaweedfs: false +``` + +### 2. Deploy SeaweedFS in Multi-Zone Mode + +```yaml +apiVersion: apps.cozystack.io/v1alpha1 +kind: SeaweedFS +metadata: + name: seaweedfs + namespace: tenant-dev +spec: + host: dev.s3.example.org + replicas: 4 + size: 100Gi + topology: MultiZone + zones: + dc1: {} + dc2: {} + dc3: {} +``` + +In this example, SeaweedFS starts 12 volume servers (4 replicas × 3 zones). + +Parameter `zones` lists each data-centre. +Any setting omitted inside a zone inherits the top-level values (replicas, size, etc.). + +### 3. Enable SeaweedFS in the tenant + +After the SeaweedFS instance is ready, enable it in the tenant. +Apply the following updated resource definition: + +```yaml +apiVersion: apps.cozystack.io/v1alpha1 +kind: Tenant +metadata: + name: dev + namespace: tenant-root +spec: + etcd: false + host: "" + ingress: false + isolated: true + monitoring: false + seaweedfs: true +``` + +Bucket creation is now available for everything under this tenant tree. + +## Using a Remote SeaweedFS Instance + +You can expose one SeaweedFS deployment to other CozyStack clusters and let them connect in Client mode. + +### 1. Export SeaweedFS + +Set the filer's gRPC endpoint and whitelist the networks that may connect: + +```yaml +apiVersion: apps.cozystack.io/v1alpha1 +kind: SeaweedFS +metadata: + name: seaweedfs + namespace: tenant-dev +spec: + host: dev.s3.example.org + replicas: 4 + size: 100Gi + topology: MultiZone + zones: + dc1: {} + dc2: {} + dc3: {} + filer: + grpcHost: filer-dev.s3.example.org + whitelist: + - 0.0.0.0/0 # expose to all networks (adjust for production) +``` + +### 2. Configure Remote SeaweedFS + +Consume the remote SeaweedFS instance from another cluster: + +```yaml +apiVersion: apps.cozystack.io/v1alpha1 +kind: SeaweedFS +metadata: + name: seaweedfs +spec: + host: dev.s3.example.org + topology: Client + filer: + grpcHost: filer-dev.s3.example.org +``` + +### 3. Enable Access to Remote SeaweedFS + +To let your local cluster authenticate to the remote SeaweedFS filer, export the `seaweedfs-client-cert` secret from the remote cluster: + +```bash +kubectl get secret seaweedfs-client-cert -n tenant-dev -o yaml \ + > seaweedfs-client-cert.yaml +``` + +Open `seaweedfs-client-cert.yaml` and delete the `namespace`, `labels`, and `annotations` fields. +They belong to the remote cluster and must not be re-applied locally. +After cleanup the manifest should look roughly like this: + +```yaml +apiVersion: v1 +kind: Secret +type: kubernetes.io/tls +metadata: + name: seaweedfs-client-cert +data: + tls.crt: ... + tls.key: ... +``` + +Apply the secret to the target namespace in your local cluster: + +```bash +kubectl apply -f seaweedfs-client-cert.yaml -n tenant-root +``` + +> **Note:** +> In Client mode the cluster creates no volume servers; it simply re-uses the remote SeaweedFS instance for all bucket operations. diff --git a/content/en/docs/v0/operations/troubleshooting/_index.md b/content/en/docs/v0/operations/troubleshooting/_index.md new file mode 100644 index 00000000..459a331f --- /dev/null +++ b/content/en/docs/v0/operations/troubleshooting/_index.md @@ -0,0 +1,129 @@ +--- +title: "Cozystack Troubleshooting Guide" +linkTitle: "Troubleshooting" +description: "This guide shows the initial steps to check your cluster's health and discover problems." +weight: 110 +aliases: + - /docs/v0/troubleshooting + - /docs/operations/troubleshooting + - /docs/troubleshooting +--- + +This guide shows the initial steps to check your cluster's health and discover problems. +In the bottom of the page you will find links to troubleshooting guides for various Cozystack components and aspects of cluster operations. + +## Troubleshooting Checklist + +You can use the following commands to check the health of your cluster. + +```bash +# === Flux CD === +# broken Helm Releases are missing +kubectl get hr -A | grep -v True + +# === Kubernetes === +# you have no Nodes that are not in Ready state +kubectl get node + +# === LINSTOR === +alias linstor='kubectl exec -n cozy-linstor deploy/linstor-controller -ti -- linstor' + +# LINSTOR nodes are online +linstor node list + +# LINSTOR storage-pools are Ok +linstor storage-pool list + +# You have no broken resources +linstor resource list --faulty + +# === Kube-OVN === +alias ovn-appctl='kubectl -n cozy-kubeovn exec deploy/ovn-central -c ovn-central -- ovn-appctl' + +# Check Northbound database +ovn-appctl -t /var/run/ovn/ovnnb_db.ctl cluster/status OVN_Northbound + +# Check Southbound database +ovn-appctl -t /var/run/ovn/ovnsb_db.ctl cluster/status OVN_Southbound + +# make sure that you have +# 1. Same amount of Servers as your control-plane nodes +# 2. IPs are correct +# 3. There are no duplicates (eg. two servers with the same IP) + +# to list your control-plane nodes +kubectl get node -o wide -l node-role.kubernetes.io/control-plane= + +# Check that you are not hitting namespace quotas and have resources for an update +kubectl get resourcequota --all-namespaces +``` + +Additionally, you can check if there are any non-running pods in your cluster: +```bash +kubectl get pod -A | grep -v 'Running\|Completed' +``` + +## Getting basic information + +You can see the logs of main installer by executing: + +```bash +kubectl logs -n cozy-system deploy/cozystack -f +``` + +All the platform components are installed using Flux CD HelmReleases. + +You can get all installed HelmReleases: + +```console +# kubectl get hr -A +NAMESPACE NAME AGE READY STATUS +cozy-cert-manager cert-manager 4m1s True Release reconciliation succeeded +cozy-cert-manager cert-manager-issuers 4m1s True Release reconciliation succeeded +cozy-cilium cilium 4m1s True Release reconciliation succeeded +cozy-cluster-api capi-operator 4m1s True Release reconciliation succeeded +cozy-cluster-api capi-providers 4m1s True Release reconciliation succeeded +cozy-dashboard dashboard 4m1s True Release reconciliation succeeded +cozy-fluxcd cozy-fluxcd 4m1s True Release reconciliation succeeded +cozy-grafana-operator grafana-operator 4m1s True Release reconciliation succeeded +cozy-kamaji kamaji 4m1s True Release reconciliation succeeded +cozy-kubeovn kubeovn 4m1s True Release reconciliation succeeded +cozy-kubevirt-cdi kubevirt-cdi 4m1s True Release reconciliation succeeded +cozy-kubevirt-cdi kubevirt-cdi-operator 4m1s True Release reconciliation succeeded +cozy-kubevirt kubevirt 4m1s True Release reconciliation succeeded +cozy-kubevirt kubevirt-operator 4m1s True Release reconciliation succeeded +cozy-linstor linstor 4m1s True Release reconciliation succeeded +cozy-linstor piraeus-operator 4m1s True Release reconciliation succeeded +cozy-mariadb-operator mariadb-operator 4m1s True Release reconciliation succeeded +cozy-metallb metallb 4m1s True Release reconciliation succeeded +cozy-monitoring monitoring 4m1s True Release reconciliation succeeded +cozy-postgres-operator postgres-operator 4m1s True Release reconciliation succeeded +cozy-rabbitmq-operator rabbitmq-operator 4m1s True Release reconciliation succeeded +cozy-redis-operator redis-operator 4m1s True Release reconciliation succeeded +cozy-telepresence telepresence 4m1s True Release reconciliation succeeded +cozy-victoria-metrics-operator victoria-metrics-operator 4m1s True Release reconciliation succeeded +tenant-root tenant-root 4m1s True Release reconciliation succeeded +``` + +Normally all of them should be `Ready` and `Release reconciliation succeeded` + +## Specific Troubleshooting Guides + +### Cluster Bootstrapping + +See the [Kubernetes installation troubleshooting]({{% ref "/docs/v0/install/kubernetes/troubleshooting" %}}). + +### Cluster Maintenance + +#### Remove a failed node from the cluster + +See the [Cluster Maintenance > Cluster Scaling]({{% ref "/docs/v0/operations/cluster/scaling" %}}). + +### Flux CD + +[Flux CD troubleshooting]({{% ref "/docs/v0/operations/troubleshooting/flux-cd" %}}). + +### Kube-OVN + +[Kube-OVN troubleshooting]({{% ref "/docs/v0/operations/troubleshooting/kube-ovn" %}}). + diff --git a/content/en/docs/v0/operations/troubleshooting/etcd.md b/content/en/docs/v0/operations/troubleshooting/etcd.md new file mode 100644 index 00000000..bf015242 --- /dev/null +++ b/content/en/docs/v0/operations/troubleshooting/etcd.md @@ -0,0 +1,36 @@ +--- +title: "Troubleshooting etcd" +linkTitle: "etcd" +description: "Explains how to resolve etcd problems and errors." +weight: 10 +aliases: + - /docs/operations/troubleshooting/etcd +--- + + +## How to clean up etcd state + +To flush the etcd state from a node, you can use `talm` or `talosctl` with the following commands: + +{{< tabs name="etcd reset tools" >}} +{{% tab name="Talm" %}} + +Replace `nodeN` with the name of the failed node, for instance, `node0.yaml`: + +```bash +talm reset -f nodes/nodeN.yaml --system-labels-to-wipe=EPHEMERAL --graceful=false --reboot +``` + +{{% /tab %}} + +{{% tab name="talosctl" %}} +```bash +talosctl reset --system-labels-to-wipe=EPHEMERAL --graceful=false --reboot +``` + +{{% /tab %}} +{{< /tabs >}} + +{{% alert color="warning" %}} +:warning: This command will remove the state from the specified node. Use it with caution. +{{% /alert %}} diff --git a/content/en/docs/v0/operations/troubleshooting/flux-cd.md b/content/en/docs/v0/operations/troubleshooting/flux-cd.md new file mode 100644 index 00000000..c1bbc2b6 --- /dev/null +++ b/content/en/docs/v0/operations/troubleshooting/flux-cd.md @@ -0,0 +1,37 @@ +--- +title: "Troubleshooting Flux CD" +linkTitle: "Flux CD" +description: "Explains how to resolve Flux CD errors." +weight: 10 +aliases: + - /docs/operations/troubleshooting/flux-cd +--- + +## Diagnosing `install retries exhausted` error + +Sometimes you can face with the error: + +```console +# kubectl get hr -A -n cozy-dashboard dashboard +NAMESPACE NAME AGE READY STATUS +cozy-dashboard dashboard 15m False install retries exhausted +``` + +You can try to figure out by checking events: + +```bash +kubectl describe hr -n cozy-dashboard dashboard +``` + +if `Events: ` then suspend and resume the release: + +```bash +kubectl patch hr -n cozy-dashboard dashboard -p '{"spec": {"suspend": true}}' --type=merge +kubectl patch hr -n cozy-dashboard dashboard -p '{"spec": {"suspend": null}}' --type=merge +``` + +and check the events again: + +```bash +kubectl describe hr -n cozy-dashboard dashboard +``` diff --git a/content/en/docs/v0/operations/troubleshooting/kube-ovn.md b/content/en/docs/v0/operations/troubleshooting/kube-ovn.md new file mode 100644 index 00000000..e0cb99b7 --- /dev/null +++ b/content/en/docs/v0/operations/troubleshooting/kube-ovn.md @@ -0,0 +1,163 @@ +--- +title: "Troubleshooting Kube-OVN" +linkTitle: "Kube-OVN" +description: "Explains how to resolve Kube-OVN crashes caused by a corrupted OVN database." +weight: 20 +aliases: + - /docs/operations/troubleshooting/kube-ovn +--- + + +## Getting information about Kube-OVN database state + +```bash +# Northbound DB +kubectl -n cozy-kubeovn exec deploy/ovn-central -c ovn-central -- ovn-appctl \ + -t /var/run/ovn/ovnnb_db.ctl cluster/status OVN_Northbound +# Southbound DB +kubectl -n cozy-kubeovn exec deploy/ovn-central -c ovn-central -- ovn-appctl \ + -t /var/run/ovn/ovnsb_db.ctl cluster/status OVN_Southbound +``` + +Example output: + +```console +Name: OVN_Northbound +Cluster ID: abf6 (abf66f15-9382-4b2b-b14c-355d64ae1bda) +Server ID: 8d8a (8d8a2985-c444-43bb-99f6-21c82f05b58d) +Address: ssl:[10.200.1.22]:6643 +Status: cluster member +Role: leader +Term: 3 +Leader: self +Vote: self + +Last Election started 146211 ms ago, reason: leadership_transfer +Last Election won: 146202 ms ago +Election timer: 5000 +Log: [2, 1569] +Entries not yet committed: 0 +Entries not yet applied: 0 +Connections: ->2a66 ->c23f <-2a66 <-c23f +Disconnections: 30 +Servers: + 2a66 (2a66 at ssl:[10.200.1.18]:6643) next_index=1569 match_index=1568 last msg 17 ms ago + 8d8a (8d8a at ssl:[10.200.1.22]:6643) (self) next_index=1471 match_index=1568 + c23f (c23f at ssl:[10.200.1.1]:6643) next_index=1569 match_index=1568 last msg 18 ms ago +``` + + +To kick a node out of the cluster (for example, if it is down, and you want to remove it from the cluster), use: + +```bash +# Northbound DB +kubectl -n cozy-kubeovn exec deploy/ovn-central -c ovn-central -- ovn-appctl -t /var/run/ovn/ovnnb_db.ctl cluster/kick OVN_Northbound +# Southbound DB +kubectl -n cozy-kubeovn exec deploy/ovn-central -c ovn-central -- ovn-appctl -t /var/run/ovn/ovnsb_db.ctl cluster/kick OVN_Southbound +``` + +## Resolving Kube-OVN Pods Crashing + +In complex cases, you may encounter issues where the Kube-OVN DaemonSet pods crash or fail to start properly. +This usually indicates a corrupted OVN database. +You can confirm this by checking the logs of the Kube-OVN CNI pods. + +Get the list of pods in `cozy-kubeovn` namespace: + +```console +# kubectl get pod -n cozy-kubeovn +NAME READY STATUS RESTARTS AGE +kube-ovn-cni-5rsvz 0/1 Running 5 (35s ago) 4m37s +kube-ovn-cni-jq2zz 0/1 Running 5 (33s ago) 4m39s +kube-ovn-cni-p4gz2 0/1 Running 3 (23s ago) 4m38s +``` + +Read the logs of a pod by its name (`kube-ovn-cni-jq2zz` in this example): + +```console +# kubectl logs -n cozy-kubeovn kube-ovn-cni-jq2zz +W0725 08:21:12.479452 87678 ovs.go:35] 100.64.0.4 network not ready after 3 ping to gateway 100.64.0.1 +W0725 08:21:15.479600 87678 ovs.go:35] 100.64.0.4 network not ready after 6 ping to gateway 100.64.0.1 +W0725 08:21:18.479628 87678 ovs.go:35] 100.64.0.4 network not ready after 9 ping to gateway 100.64.0.1 +W0725 08:21:21.479355 87678 ovs.go:35] 100.64.0.4 network not ready after 12 ping to gateway 100.64.0.1 +W0725 08:21:24.479322 87678 ovs.go:35] 100.64.0.4 network not ready after 15 ping to gateway 100.64.0.1 +W0725 08:21:27.479664 87678 ovs.go:35] 100.64.0.4 network not ready after 18 ping to gateway 100.64.0.1 +W0725 08:21:30.478907 87678 ovs.go:35] 100.64.0.4 network not ready after 21 ping to gateway 100.64.0.1 +W0725 08:21:33.479738 87678 ovs.go:35] 100.64.0.4 network not ready after 24 ping to gateway 100.64.0.1 +W0725 08:21:36.479607 87678 ovs.go:35] 100.64.0.4 network not ready after 27 ping to gateway 100.64.0.1 +W0725 08:21:39.479753 87678 ovs.go:35] 100.64.0.4 network not ready after 30 ping to gateway 100.64.0.1 +W0725 08:21:42.479480 87678 ovs.go:35] 100.64.0.4 network not ready after 33 ping to gateway 100.64.0.1 +W0725 08:21:45.478754 87678 ovs.go:35] 100.64.0.4 network not ready after 36 ping to gateway 100.64.0.1 +W0725 08:21:48.479396 87678 ovs.go:35] 100.64.0.4 network not ready after 39 ping to gateway 100.64.0.1 +``` + +To resolve this issue, you can clean up the OVN database. +This involves running a DaemonSet that removes the OVN configuration files from each node. +It is safe to perform this cleanup — the Kube-OVN DaemonSet will automatically recreate the necessary files from the Kubernetes API. + +Apply the following YAML to deploy the cleanup DaemonSet: + +```yaml +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: ovn-cleanup + namespace: cozy-kubeovn +spec: + selector: + matchLabels: + app: ovn-cleanup + template: + metadata: + labels: + app: ovn-cleanup + component: network + type: infra + spec: + affinity: + podAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchLabels: + app: ovn-central + topologyKey: "kubernetes.io/hostname" + containers: + - name: cleanup + image: busybox + command: ["/bin/sh", "-xc", "rm -rf /host-config-ovn/*; rm -rf /host-config-ovn/.*; exec sleep infinity"] + volumeMounts: + - name: host-config-ovn + mountPath: /host-config-ovn + nodeSelector: + kubernetes.io/os: linux + node-role.kubernetes.io/control-plane: "" + tolerations: + - operator: "Exists" + volumes: + - name: host-config-ovn + hostPath: + path: /var/lib/ovn + type: "" + hostNetwork: true + restartPolicy: Always + terminationGracePeriodSeconds: 1 +``` + +Verify that the DaemonSet is running: + +```console +# kubectl get pod -n cozy-kubeovn +ovn-cleanup-hjzxb 1/1 Running 0 6s +ovn-cleanup-wmzdv 1/1 Running 0 6s +ovn-cleanup-ztm86 1/1 Running 0 6s +``` + +Once the cleanup is complete, delete the `ovn-cleanup` DaemonSet and restart the Kube-OVN CNI pods to apply the new configuration: + +```bash +# Delete the cleanup DaemonSet +kubectl -n cozy-kubeovn delete ds ovn-cleanup + +# Restart Kube-OVN pods by deleting them +kubectl -n cozy-kubeovn delete pod -l app!=ovs +``` diff --git a/content/en/docs/v0/operations/troubleshooting/linstor-controller.md b/content/en/docs/v0/operations/troubleshooting/linstor-controller.md new file mode 100644 index 00000000..d0317689 --- /dev/null +++ b/content/en/docs/v0/operations/troubleshooting/linstor-controller.md @@ -0,0 +1,65 @@ +--- +title: "Troubleshooting LINSTOR controller crash loops" +linkTitle: "LINSTOR: controller problems" +description: "Explains how to resolve LINSTOR controller problems." +weight: 100 +aliases: + - /docs/operations/troubleshooting/linstor-controller +--- + +## Restarting the controller + +If the controller is running but appears idle/unresponsive, try restarting it. +This operation is idempotent and safe: pending (unfinished) work will resume after the restart. + + +## LINSTOR controller crash loop + +If linstor-controller can't start, but logs do not contain any useful information, you can increase the log level +(maximum level is `TRACE`). + +Example of `LINSTORCluster` CR with increased log level: + +```yaml +apiVersion: piraeus.io/v1 +kind: LINSTORCluster +spec: + controller: + podTemplate: + spec: + containers: + - name: linstor-controller + env: + # both settings are used by linstor-controller + - name: LS_LOG_LEVEL + value: TRACE + - name: LS_LOG_LEVEL_LINSTOR + value: TRACE +``` + +Note: if linstor-controller is not in a crash loop, but you need to increase log level, +you can do so *temporarily* in the runtime using the following command: + +```bash +linstor controller set-log-level --global TRACE +``` + +This setting will be reset to initial value when the controller restarts. + + +## LINSTOR plays dead after certificate expiration + +If you had configured LINSTOR with internal TLS communication, certificates will be created and rotated automatically. +But there is an open issue [piraeusdatastore/piraeus-operator#701](https://github.com/piraeusdatastore/piraeus-operator/issues/701) +about components not picking up new certificates after rotation. +The workaround is to restart all LINSTOR components manually. + +Follow these steps in order: + +1. Restart the `linstor-controller`. +2. Restart each satellite one by one. Do not restart them all at once. + After each satellite restart, check its logs for errors before proceeding to the next one. +3. Restart the `linstor-controller` again. + This is necessary because the controller also initiates connections to satellites and may not automatically reconnect + to a satellite that has been restarted. +4. Restart all remaining LINSTOR components. \ No newline at end of file diff --git a/content/en/docs/v0/operations/troubleshooting/linstor-database.md b/content/en/docs/v0/operations/troubleshooting/linstor-database.md new file mode 100644 index 00000000..be7fbf6d --- /dev/null +++ b/content/en/docs/v0/operations/troubleshooting/linstor-database.md @@ -0,0 +1,424 @@ +--- +title: "Troubleshooting LINSTOR CrashLoopBackOff related to a broken database" +linkTitle: "LINSTOR: broken database" +description: "Explains how to resolve LINSTOR CrashLoopBackOff related to a broken database." +weight: 110 +aliases: + - /docs/operations/troubleshooting/linstor-database +--- + +{{% alert color="warning" %}} +:warning: **Advanced Users Only** + +This guide is intended for experienced users who are comfortable with low-level troubleshooting and data recovery operations. +Corrupted LINSTOR databases are rare and typically indicate a serious underlying issue. + +**If you encounter this situation in a production environment, we strongly recommend contacting qualified support** +rather than attempting to fix it yourself. Incorrect actions can lead to permanent data loss. +{{% /alert %}} + +## Introduction + +When running outside of Kubernetes, LINSTOR controller uses some kind of SQL database (various kinds). +In Kubernetes, `linstor-controller` does not require a persistent volume or external database. +Instead, it stores all its information as custom resources (CRs) right in the Kubernetes control plane. +Upon startup, LINSTOR controller reads all CRs and creates an in-memory database. + +These CRs are listed under the `internal.linstor.linbit.com` API group: + +```bash +kubectl get crds | grep internal.linstor.linbit.com +``` + +Example output: +```console +ebsremotes.internal.linstor.linbit.com 2024-12-28T00:39:50Z +files.internal.linstor.linbit.com 2024-12-28T00:39:24Z +keyvaluestore.internal.linstor.linbit.com 2024-12-28T00:39:24Z +layerbcachevolumes.internal.linstor.linbit.com 2024-12-28T00:39:24Z +layercachevolumes.internal.linstor.linbit.com 2024-12-28T00:39:25Z +layerdrbdresourcedefinitions.internal.linstor.linbit.com 2024-12-28T00:39:24Z +... +``` + +If CRs somehow get corrupted, linstor-controller will exit with error and go into CrashLoopBackOff. +While controller pod is crashing, others still work. +Even if the satellites crash, drbd on nodes still work too. +But creation and deletion of volumes is not possible. + +Those CRs are not very human-readable, but it's possible to understand what's missing or broken. +You can set `TRACE` log level to see the resource loading process in the logs and make sure that the problem is related to CRs. + +CR database could be corrupted in case linstor-controller was restarted during very long create or delete operation. +Very long could also mean "hung up". +If you see that something could not delete properly, it's better to investigate and help it to finish, not restarting the controller. + + +## Example of logs + +LINSTOR controller is in a crash loop: + +```bash +# kubectl get pod -n cozy-linstor +linstor-controller-6574668cf9-kjtq5 0/1 CrashLoopBackOff 2 (25s ago) 15d +``` + +Viewing logs: + +```bash +# kubectl logs -n cozy-linstor linstor-controller-6574668cf9-kjtq5 +... +2025-10-31 13:08:36.016 [Main] INFO LINSTOR/Controller/ffffff SYSTEM - Initializing the k8s crd database connector +2025-10-31 13:08:36.016 [Main] INFO LINSTOR/Controller/ffffff SYSTEM - Kubernetes-CRD connection URL is "k8s" +2025-10-31 13:08:37.674 [Main] INFO LINSTOR/Controller/ffffff SYSTEM - Starting service instance 'K8sCrdDatabaseService' of type K8sCrdDatabaseService +2025-10-31 13:08:37.690 [Main] INFO LINSTOR/Controller/ffffff SYSTEM - Security objects load from database is in progress +2025-10-31 13:08:37.960 [Main] INFO LINSTOR/Controller/ffffff SYSTEM - Security objects load from database completed +2025-10-31 13:08:37.961 [Main] INFO LINSTOR/Controller/ffffff SYSTEM - Core objects load from database is in progress +2025-10-31 13:08:38.446 [Main] ERROR LINSTOR/Controller/ffffff SYSTEM - Unknown error during loading data from DB [Report number 6904B4D1-00000-000000] + +... +time="2025-10-31T13:08:38Z" level=fatal msg="failed to run" err="exit status 199" +``` + +This indicates a corrupted CRD database. + +## Obtain the error report + +LINSTOR controller creates a file in the `/var/log/linstor-controller/` directory inside container with verbose stack trace. +Unfortunately, it's hard to see it since it gets deleted immediately when the container restarts. +To work around this, you need to stop the Piraeus operator controller and modify the entrypoint of the linstor-controller container. + +To be able to see the error report: + +1. Stop the Piraeus operator controller (scale its deployment to zero). +2. Stop the linstor-controller deployment (scale it to zero). +3. Modify the linstor-controller deployment entrypoint to run `sleep infinity`. +4. Remove probes to avoid restarting the container. +5. Wait until the container starts, `exec` into it and run the controller manually. +6. After the controller crashes, read the error report. + +```bash +kubectl scale deployment -n cozy-linstor piraeus-operator-controller-manager --replicas 0 +kubectl scale deployment -n cozy-linstor linstor-controller --replicas 0 +kubectl edit deploy -n cozy-linstor linstor-controller +``` + +An editor will open. +Delete the whole `livenessProbe`, `readinessProbe` and `startupProbe` sections. +Find the `linstor-controller` container section (the main container). +There, replace `args:` section with: +```yaml +command: + - sleep + - infinity +``` +After saving and exiting, scale the deployment to 1 replica and wait for the pod to start: + +```bash +kubectl scale deployment -n cozy-linstor linstor-controller --replicas 1 +``` + +Start the controller from inside the container: +```bash +kubectl exec -ti -n cozy-linstor deploy/linstor-controller -- bash +``` + +```bash +root@linstor-controller-85fd6d6496-cdhbc:/# piraeus-entry.sh startController +``` + +You'll see the error report with the report number: +``` +2025-10-31 13:19:46.765 [Main] ERROR LINSTOR/Controller/ffffff SYSTEM - Unknown error during loading data from DB [Report number 6904B76C-00000-000000] +``` + +Now read the error report: +```bash +root@linstor-controller-85fd6d6496-cdhbc:/# ls -l /var/log/linstor-controller/ +root@linstor-controller-85fd6d6496-cdhbc:/# cat /var/log/linstor-controller/ErrorReport-6904B76C-00000-000000.log +``` + +Example error report: +``` +ERROR REPORT 6904B76C-00000-000000 + +============================================================ + +Application: LINBIT? LINSTOR +Module: Controller +Version: 1.31.3 +Build ID: 3734cb10b55e71a97b4c3004877e43641e820f9e +Build time: 2025-07-10T06:00:07+00:00 +Error time: 2025-10-31 13:19:46 +Node: linstor-controller-85fd6d6496-cdhbc +Thread: Main + +============================================================ + +Reported error: +=============== + +Category: Error +Class name: ImplementationError +Class canonical name: com.linbit.ImplementationError +Generated at: Method 'loadCoreObjects', Source file 'DatabaseLoader.java', Line #680 + +Error message: Unknown error during loading data from DB + +Call backtrace: + + Method Native Class:Line number + loadCoreObjects N com.linbit.linstor.dbdrivers.DatabaseLoader:680 + loadCoreObjects N com.linbit.linstor.core.DbDataInitializer:169 + initialize N com.linbit.linstor.core.DbDataInitializer:101 + startSystemServices N com.linbit.linstor.core.ApplicationLifecycleManager:91 + start N com.linbit.linstor.core.Controller:379 + main N com.linbit.linstor.core.Controller:635 + +Caused by: +========== + +Category: LinStorException +Class name: DatabaseException +Class canonical name: com.linbit.linstor.dbdrivers.DatabaseException +Generated at: Method 'getInstance', Source file 'ObjectProtectionFactory.java', Line #89 + +Error message: ObjProt (/resources/GLD-CSXHK-006/PVC-91C1486F-CFE9-41E2-80E1-86477B187F2D) not found! + +ErrorContext: + + +Call backtrace: + + Method Native Class:Line number + getInstance N com.linbit.linstor.security.ObjectProtectionFactory:89 + getObjectProtection N com.linbit.linstor.dbdrivers.AbsDatabaseDriver:288 + load N com.linbit.linstor.core.objects.ResourceDbDriver:173 + load N com.linbit.linstor.core.objects.ResourceDbDriver:47 + loadAll N com.linbit.linstor.dbdrivers.k8s.crd.K8sCrdEngine:237 + loadAll N com.linbit.linstor.dbdrivers.AbsDatabaseDriver:180 + loadCoreObjects N com.linbit.linstor.dbdrivers.DatabaseLoader:444 + loadCoreObjects N com.linbit.linstor.core.DbDataInitializer:169 + initialize N com.linbit.linstor.core.DbDataInitializer:101 + startSystemServices N com.linbit.linstor.core.ApplicationLifecycleManager:91 + start N com.linbit.linstor.core.Controller:379 + main N com.linbit.linstor.core.Controller:635 + + +END OF ERROR REPORT. +``` + +You are looking for messages like this one: + +```console +Error message: ObjProt (/resources/GLD-CSXHK-006/PVC-91C1486F-CFE9-41E2-80E1-86477B187F2D) not found! +``` + +or + +```console +Error message: Database entry of table LAYER_DRBD_VOLUMES could not be restored. +ErrorContext: Details: Primary key: LAYER_RESOURCE_ID = '4804', VLM_NR = '0' +``` + +These tell us what resource is missing or broken. + + +## Backup and analyze + +Before making any changes, save all CRs for analysis and recovery: + +```bash +kubectl get crds | grep -o ".*.internal.linstor.linbit.com" | \ + xargs kubectl get crds -ojson > crds.json + +kubectl get crds | grep -o ".*.internal.linstor.linbit.com" | \ + xargs -I{} sh -xc "kubectl get {} -ojson > {}.json" + +tar czvf backup-$(date +%d.%m.%Y).tgz *.json +``` + +CRs have cryptic names, so it's convenient to download all of them as JSON and explore them with convenient tools on your workstation. + + +## Fix the database + +{{% alert color="warning" %}} +:warning: DESTRUCTIVE ACTION! + +If you can't fix broken CRs other way than deleting it, you may delete offending ones using plain `kubectl delete`. Keep in +mind that when you delete CRs, the physical volumes will remain as orphan volumes on the storage nodes. They won't be +automatically managed by LINSTOR anymore. You should manually clean them up later if needed. +{{% /alert %}} + +### Method 1: Using a helper script + +A helper script `linstor-find-db.sh` can be used to find resources by different criteria: + +```bash +#!/usr/bin/env bash +set -euo pipefail + +layer_resource_id="" +vlm_nr="" +resource_name="" +node_name="" + +for kv in "$@"; do + k="${kv%%=*}" + v="${kv#*=}" + case "$k" in + layer_resource_id) layer_resource_id="$v" ;; + vlm_nr) vlm_nr="$v" ;; + resource_name) resource_name="$v" ;; + node_name) node_name="$v" ;; + *) echo "Unknown key: $k" >&2; exit 2 ;; + esac +done + +shopt -s nullglob +files=(*.internal.linstor.linbit.com.json) +if ((${#files[@]}==0)); then + echo "No *.internal.linstor.linbit.com.json files found" >&2 + exit 1 +fi + +if [[ -n "$layer_resource_id" && -n "$vlm_nr" ]]; then + cat "${files[@]}" \ + | jq -r --arg lrid "$layer_resource_id" --arg vlnr "$vlm_nr" ' + .items[]? + | select(.spec.layer_resource_id == ($lrid|tonumber) and .spec.vlm_nr == ($vlnr|tonumber)) + | "\(.kind).\(.apiVersion|split("/")[0])/\(.metadata.name)" + ' + exit 0 +fi + +if [[ -n "$resource_name" && -n "$node_name" ]]; then + cat "${files[@]}" \ + | jq -r --arg res "$resource_name" --arg node "$node_name" ' + .items[]? + | select((.spec.resource_name|tostring|ascii_upcase) == ($res|tostring|ascii_upcase) + and (.spec.node_name|tostring|ascii_upcase) == ($node|tostring|ascii_upcase)) + | "\(.kind).\(.apiVersion|split("/")[0])/\(.metadata.name)" + ' + exit 0 +fi + +echo "Usage: + $(basename "$0") layer_resource_id=NUM vlm_nr=NUM + $(basename "$0") resource_name=NAME node_name=NAME" >&2 +exit 2 +``` + +Save it as `linstor-find-db.sh`, make it executable and use it to find problematic resources. + +#### Example 1: Missing ObjProt + +If the error is about missing ObjProt for a specific resource: + +```console +Error message: ObjProt (/resources/GLD-CSXHK-006/PVC-91C1486F-CFE9-41E2-80E1-86477B187F2D) not found! +``` + +Find all resources for that resource and node: +```bash +chmod +x linstor-find-db.sh +./linstor-find-db.sh resource_name=PVC-91C1486F-CFE9-41E2-80E1-86477B187F2D node_name=GLD-CSXHK-006 +``` + +Example output: +``` +LayerResourceIds.internal.linstor.linbit.com/b3e34e9fe5a79d4e8753d0ad4107d0af969d8faaefb88fbd68316950fa2a9242 +LayerResourceIds.internal.linstor.linbit.com/dcbff8f66de95d7c6148b3fbb3a9934d226ffb6dfd405c8394ae5454dc87d348 +Resources.internal.linstor.linbit.com/43319bec4ca2bbc21324663a9b716c3e4a7ba2607f0fa513dcc59172a1b37270 +Volumes.internal.linstor.linbit.com/4ef559b8fe14b58647c99a76a2d3a11f9bbf2b413a448eaf3771777f673c0b4c +``` + +Delete them all at once: +```bash +kubectl delete $(./linstor-find-db.sh resource_name=PVC-91C1486F-CFE9-41E2-80E1-86477B187F2D node_name=GLD-CSXHK-006) +``` + +#### Example 2: Missing LayerDRBD volume + +If the error is about missing LayerDRBD volume: + +```console +Error message: Database entry of table LAYER_DRBD_VOLUMES could not be restored. +ErrorContext: Details: Primary key: LAYER_RESOURCE_ID = '4804', VLM_NR = '0' +``` + +Find resources by layer_resource_id and vlm_nr: +```bash +./linstor-find-db.sh layer_resource_id=4804 vlm_nr=0 +``` + +Example output: +``` +LayerStorageVolumes.internal.linstor.linbit.com/5b597f878f6bb586ddd7d7dc3bbddacbdabedf511861a411712440f66cc61a52 +``` + +Delete it: +```bash +kubectl delete $(./linstor-find-db.sh layer_resource_id=4804 vlm_nr=0) +``` + +### Iterative fixing + +After deleting the problematic resources, try to start the controller again from inside the container: + +```bash +piraeus-entry.sh startController +``` + +If it crashes again, you'll get a new error report with a different resource. Repeat the process: +1. Read the error report to identify the problematic resource +2. Find and delete it +3. Try to start the controller again + +Continue until the controller starts successfully: + +```console +2025-10-31 13:42:17.483 [Main] INFO LINSTOR/Controller/ffffff SYSTEM - Core objects load from database is in progress +2025-10-31 13:42:19.190 [Main] INFO LINSTOR/Controller/ffffff SYSTEM - Core objects load from database completed +... +2025-10-31 13:42:27.309 [Main] INFO LINSTOR/Controller/ffffff SYSTEM - Controller initialized +``` + + +## Restart controller + +After you've fixed the CR-based database, you need to restore the linstor-controller deployment to its original state. +Exit from the container and delete the modified deployment so the Piraeus operator recreates it: + +```bash +kubectl delete deployment -n cozy-linstor linstor-controller +``` + +Bring the piraeus operator controller back: + +```bash +kubectl scale deployment -n cozy-linstor piraeus-operator-controller-manager --replicas 1 +``` + +It will reconcile the linstor-controller deployment and start it with the original entrypoint. + +## Restore to the original state + +If something went wrong, and you are lost, it's possible to restore at least what you had before the fixing. + +```bash +# get saved files in another directory +mkdir restore; cd restore +tar xzf ../backup-*.tgz + +# drop ALL CRs by CRD names, using json definitions for that (all CRs are removed when you delete CRD) +kubectl delete -f crds.json +# restore definitions (please notice `create` instead of usual `apply` +kubectl create -f crds.json + +# restore all resources +kubectl get crds | grep -o ".*.internal.linstor.linbit.com" | xargs -I{} sh -xc "kubectl create -f {}.json" +``` + +Now you can start again. diff --git a/content/en/docs/v0/operations/troubleshooting/monitoring-troubleshooting.md b/content/en/docs/v0/operations/troubleshooting/monitoring-troubleshooting.md new file mode 100644 index 00000000..d55ce772 --- /dev/null +++ b/content/en/docs/v0/operations/troubleshooting/monitoring-troubleshooting.md @@ -0,0 +1,204 @@ +--- +title: "Monitoring Troubleshooting" +linkTitle: "Troubleshooting" +description: "Guide to diagnosing and resolving issues with monitoring components in Cozystack" +weight: 10 +aliases: + - /docs/operations/troubleshooting/monitoring-troubleshooting +--- + +This guide provides troubleshooting steps for common issues with monitoring components in Cozystack, including metrics collection, alerting, visualization, and log collection. + +## Diagnosing Missing Metrics + +If metrics are not appearing in Grafana or VictoriaMetrics, follow these steps: + +### Check VMAgent Status + +Ensure VMAgent is running and collecting metrics: + +```bash +kubectl get pods -n cozy-monitoring -l app.kubernetes.io/name=vmagent +kubectl logs -n cozy-monitoring -l app.kubernetes.io/name=vmagent --tail=50 +``` + +### Verify Targets + +Check if VMAgent can scrape targets: + +```bash +kubectl exec -n cozy-monitoring -c vmagent deploy/vmagent -- curl -s http://localhost:8429/targets | jq . +``` + +Look for targets with `health: "up"`. If targets are down, check network connectivity and RBAC permissions. + +### Resource Limits + +If VMAgent is resource-constrained, increase limits in the monitoring configuration: + +```yaml +vmagent: + resources: + limits: + cpu: 500m + memory: 1Gi + requests: + cpu: 100m + memory: 256Mi +``` + +### Security Considerations + +Ensure TLS is enabled for secure metric collection: + +- Verify certificates in the VMAgent configuration. +- Check RBAC roles allow VMAgent to access required endpoints. + +For more details, see [Monitoring Setup]({{% ref "/docs/v0/operations/services/monitoring/setup" %}}). + +## Alerts Not Arriving + +If alerts are not being received, investigate Alertmanager and Alerta. + +### Check Alertmanager + +Verify Alertmanager is processing alerts: + +```bash +kubectl get pods -n cozy-monitoring -l app.kubernetes.io/name=alertmanager +kubectl logs -n cozy-monitoring -l app.kubernetes.io/name=alertmanager --tail=50 +``` + +Check alert rules: + +```bash +kubectl get prometheusrules -n cozy-monitoring +``` + +### Verify Alerta Configuration + +Ensure Alerta is configured correctly: + +```bash +kubectl get pods -n cozy-monitoring -l app.kubernetes.io/name=alerta +kubectl logs -n cozy-monitoring -l app.kubernetes.io/name=alerta --tail=50 +``` + +Check routing configuration in the monitoring spec: + +```yaml +alerta: + alerts: + telegram: + token: "your-token" + chatID: "your-chat-id" +``` + +### Scalability Issues + +If alerts are delayed due to high volume, adjust resource limits: + +```yaml +alerta: + resources: + limits: + cpu: 2 + memory: 2Gi +``` + +### Security + +- Use RBAC to restrict alert access. +- Enable TLS for alert endpoints. + +See [Monitoring Alerting]({{% ref "/docs/v0/operations/services/monitoring/alerting" %}}) for configuration details. + +## Grafana Issues + +Troubleshoot access and data source problems in Grafana. + +### Access Problems + +If you cannot access Grafana: + +- Check the service and ingress: + +```bash +kubectl get svc,ingress -n cozy-monitoring -l app.kubernetes.io/name=grafana +``` + +- Verify RBAC permissions for your user. + +### Data Source Configuration + +Ensure data sources are connected: + +1. Log into Grafana. +2. Go to Configuration > Data Sources. +3. Check VictoriaMetrics data source is healthy. + +If not, update the URL and credentials. + +### Resource Limits + +For performance issues, increase Grafana resources: + +```yaml +grafana: + resources: + limits: + cpu: 1 + memory: 1Gi +``` + +### Security + +- Enable authentication and authorization. +- Use TLS for Grafana access. + +Refer to [Monitoring Dashboards]({{% ref "/docs/v0/operations/services/monitoring/dashboards" %}}) for dashboard setup. + +## Log Collection Problems + +Address issues with Fluent Bit and VLogs. + +### Check Fluent Bit + +Verify Fluent Bit is collecting logs: + +```bash +kubectl get pods -n cozy-monitoring -l app.kubernetes.io/name=fluent-bit +kubectl logs -n cozy-monitoring -l app.kubernetes.io/name=fluent-bit --tail=50 +``` + +### Verify VLogs + +Ensure VLogs is storing logs: + +```bash +kubectl get pods -n cozy-monitoring -l app.kubernetes.io/name=vlogs +kubectl logs -n cozy-monitoring -l app.kubernetes.io/name=vlogs --tail=50 +``` + +Check log ingestion: + +```bash +kubectl exec -n cozy-monitoring -c vlogs deploy/vlogs -- curl -s http://localhost:9428/health +``` + +### Scalability + +If logs are not being collected due to load, adjust resources: + +```yaml +logsStorages: +- name: default + storage: 50Gi # Increase storage +``` + +### Security + +- Use RBAC for log access. +- Enable TLS for log shipping. + +For more information, see [Monitoring Logs]({{% ref "/docs/v0/operations/services/monitoring/logs" %}}). \ No newline at end of file diff --git a/content/en/docs/v0/operations/troubleshooting/piraeus-custom-resources.md b/content/en/docs/v0/operations/troubleshooting/piraeus-custom-resources.md new file mode 100644 index 00000000..48bce573 --- /dev/null +++ b/content/en/docs/v0/operations/troubleshooting/piraeus-custom-resources.md @@ -0,0 +1,70 @@ +--- +title: "Troubleshooting Piraeus custom resources" +linkTitle: "Piraeus: custom resources got stuck" +description: "Explains how to resolve issues with stuck Piraeus custom resources." +weight: 150 +aliases: + - /docs/operations/troubleshooting/piraeus-custom-resources +--- + +## Introduction + +Piraeus custom resources are the following: + +* `LinstorCluster` +* `LinstorSatellite` +* `LinstorSatelliteConfiguration` +* `LinstorNodeConnection` + +The Piraeus controller protects these resources from unintended changes and deletion. +When you delete the resource, controller will first make sure that all downstream resources are deleted. + +But the default setting of the webhook is to reject any changes if something goes wrong with the webhook itself. +And, in a disturbed system, webhook may go down a lot, without useful stacktraces. + +## Disabling webhook + +If you are fixing the CRs and they are "not editable", you need to disable the webhook and maybe operator itself too. + +A couple of useful ways how to disable the webhook: + +- If you have a GitOps system that manages piraeus installation, you can stop it for this release and just delete the + webhook configuration. + When you unpause the GitOps system, it will recreate the webhook configuration. +- If you don't want to delete the webhook configuration as it was installed manually, you can "break" its selector. + +Example: + +```bash +kubectl edit validatingwebhookconfigurations/piraeus-operator-validating-webhook-configuration +``` + +In the editor, replace all `- linstor*` with `- xlinstor`. +When you are finished, revert the configuration the same way: +Example Vim commands are: `%s/- linstor/- xlinstor/g` and `%s/- xlinstor/- linstor/g`. + +Note: do not disable the webhook permanently. It's there for a reason. + +## Disabling controller + +The Piraeus controller not only watches its own CRs, it also updates them when necessary. +In most cases you should disable it as well. +Notably, in continuously reconstructs `LinstorSatellite` from `LinstorSatelliteConfiguration` +continuously. + +To disable the controller, scale its deployment to zero: + +```bash +kubectl -n storage scale deployment piraeus-operator-controller-manager --replicas=0 +``` + +When you finish maintenance, scale it back to one replica: + +```bash +kubectl -n storage scale deployment piraeus-operator-controller-manager --replicas=1 +``` + +## Drop finalizers + +Each Piraeus CR has a finalizer that obviously does not work anyway since you disabled the controller. +If you are going to delete the CR, you need to remove the finalizers section as usual. diff --git a/content/en/docs/v0/operations/vpc/_index.md b/content/en/docs/v0/operations/vpc/_index.md new file mode 100644 index 00000000..b66a79f1 --- /dev/null +++ b/content/en/docs/v0/operations/vpc/_index.md @@ -0,0 +1,30 @@ +--- +title: "VPCs and Subnets" +linkTitle: "VPCs and Subnets" +description: "How to use VPCs and Subnets" +weight: 20 +aliases: + - /docs/operations/vpc +--- + +## Attaching Workloads to Subnets + +After you've created a VPC with a number of Subnets, it is time to attach workloads to it. +Currently, only virtual machines support subnets attachment. + +### 1. Get Subnet IDs + +First, you need to determine IDs of subnets. IDs are auto-generated from resource names you specified during creation. +Check it on the Details tab of your VPC. + +![VPC Subnets](vpc-subnets.png) + +### 2. Specify Subnet IDs during resource creation + +While creating a VM, fill in subnets IDs in Subnets part of a resource settings. + +![VM Subnets](vm-subnets.png) + +Each subnet will be represented as a secondary network interface. +For some guest operating system distributions, you will need to add network interface configuration to the virtual machine's user-data. +You can also bring secondary interfaces up manually, getting IP addresses from DHCP. diff --git a/content/en/docs/operations/vpc/vm-subnets.png b/content/en/docs/v0/operations/vpc/vm-subnets.png similarity index 100% rename from content/en/docs/operations/vpc/vm-subnets.png rename to content/en/docs/v0/operations/vpc/vm-subnets.png diff --git a/content/en/docs/operations/vpc/vpc-subnets.png b/content/en/docs/v0/operations/vpc/vpc-subnets.png similarity index 100% rename from content/en/docs/operations/vpc/vpc-subnets.png rename to content/en/docs/v0/operations/vpc/vpc-subnets.png diff --git a/content/en/docs/roadmap.html b/content/en/docs/v0/roadmap.html similarity index 100% rename from content/en/docs/roadmap.html rename to content/en/docs/v0/roadmap.html diff --git a/content/en/docs/v0/storage/_index.md b/content/en/docs/v0/storage/_index.md new file mode 100644 index 00000000..e669a225 --- /dev/null +++ b/content/en/docs/v0/storage/_index.md @@ -0,0 +1,12 @@ +--- +title: "Storage Subsystem Guides" +linkTitle: "Storage" +description: "Operational guides on the storage subsystem" +weight: 55 +aliases: + - /docs/v0/operations/storage + - /docs/storage + - /docs/operations/storage +--- + +These guides will show you how to perform typical tasks related to the LINSTOR storage system in Cozystack. diff --git a/content/en/docs/v0/storage/dedicated-network.md b/content/en/docs/v0/storage/dedicated-network.md new file mode 100644 index 00000000..93c9d013 --- /dev/null +++ b/content/en/docs/v0/storage/dedicated-network.md @@ -0,0 +1,386 @@ +--- +title: "Configuring a Dedicated Network for LINSTOR" +linkTitle: "Dedicated Network" +description: "Redirect LINSTOR replication traffic to a dedicated network interface for better reliability and performance." +weight: 10 +aliases: + - /docs/v0/operations/storage/dedicated-network + - /docs/storage/dedicated-network + - /docs/operations/storage/dedicated-network +--- + +This guide explains how to improve storage reliability and performance by redirecting LINSTOR replication traffic +to a dedicated network interface. + +## Introduction + +The Cozystack platform is built to support high-availability (HA) workloads, +which means the system must continue operating even if one or more nodes go offline. +Kubernetes handles this well for stateless workloads. +However, stateful workloads, such as file storage or virtual machine disks, require a reliable storage backend. + +When you choose the `replicated` storage class for a PersistentVolumeClaim (PVC) or DataVolume, +LINSTOR creates multiple synchronous replicas of the data across different nodes. +This ensures that if a node fails (due to a power outage, hardware issue, etc.), +the data remains instantly available on another node. + +This level of reliability comes with a trade-off: storage replication can generate significant network traffic, +depending on workload intensity. + +If your nodes have multiple network interfaces, you can improve performance by dedicating one of them to storage traffic. +This isolates replication traffic from other workloads, preventing potential network bottlenecks. + +## When is a dedicated storage network required? + +It is not always necessary to set up a dedicated network for storage traffic from the start. +In small-scale or proof-of-concept (PoC) clusters, the default network configuration is typically sufficient. +Premature optimization can lead to unnecessary complexity. + +However, in larger clusters, storage replication traffic often becomes a performance bottleneck. +This traffic can saturate available bandwidth and interfere with other workloads sharing the same network. + +If your nodes have only one network interface, and you're unsure whether a dedicated interface is required, +start by observing actual storage traffic under realistic workloads. +One practical approach is to assign a VLAN on the existing interface for storage replication traffic. +This allows you to monitor bandwidth usage without adding hardware. + +If traffic levels remain consistently high or affect application performance, +migrating to a dedicated network becomes a worthwhile optimization. + + +## Terms and definitions + +Before continuing, it's helpful to clarify the terminology used for network interfaces in a LINSTOR-based setup: + +- **Kubernetes node default route**
+ This is the default route used for outgoing traffic from the node. + You can view it with `ip route show default`. + +- **Kubernetes node default source IP**
+ This is the IP address associated with the default route. + It is typically the source IP for all outbound traffic and can be verified with the same command. + +- **Kubernetes node internal IP**
+ This is the address used by Kubernetes for internal communication. + It is often the same as the default source IP, but not always. + You can check it with `kubectl get nodes -o wide`. + +- **LINSTOR satellite default interface**
+ This is where configuration becomes less obvious. + When the Piraeus Operator starts the LINSTOR Satellite, it sets one or two default interfaces: `default-ipv4` and `default-ipv6`. + Typically, only IPv4 is available. + The default interface is set to the node’s default source IP at startup and remains unchanged until the Satellite is restarted. + You can modify this interface while the Satellite is running, but the Piraeus Operator will reset it on the next restart. + +- **LINSTOR satellite additional interfaces**
+ You can manually add more interfaces to a LINSTOR Satellite. + These are stored in the LINSTOR Controller database and persist across restarts. + The Piraeus Operator will not modify or delete them. + At the time of writing, the Piraeus Operator does not support declaring additional interfaces via Kubernetes custom resources. + +- **LINSTOR active satellite connection**
+ Exactly one interface is used by the LINSTOR Controller to communicate with each Satellite. + By default, this is the `default-ipv4` interface. + While the LINSTOR CLI allows changing it, the Piraeus Operator will revert it at the next Satellite restart. + +- **LINSTOR node connection (path)**
+ This defines how LINSTOR Satellites communicate with each other for synchronous replication. + This is the setting we will configure in this guide. + Node connections can be defined using either Piraeus CRDs or CLI commands. + The Piraeus Operator does not manage or override them. + However, the most recently applied configuration takes precedence. + + +## Understanding default IP assignment + +Here’s a typical `node list` output from LINSTOR: + +``` +LINSTOR ==> node list +╭───────────────────────────────────────────────────────╮ +┊ Node ┊ NodeType ┊ Addresses ┊ State ┊ +╞═══════════════════════════════════════════════════════╡ +┊ node01 ┊ SATELLITE ┊ 10.78.22.146:3367 (SSL) ┊ Online ┊ +┊ node02 ┊ SATELLITE ┊ 10.78.22.37:3367 (SSL) ┊ Online ┊ +┊ node03 ┊ SATELLITE ┊ 10.78.22.53:3367 (SSL) ┊ Online ┊ +┊ node04 ┊ SATELLITE ┊ 10.78.22.230:3367 (SSL) ┊ Online ┊ +┊ node05 ┊ SATELLITE ┊ 10.78.22.150:3367 (SSL) ┊ Online ┊ +╰───────────────────────────────────────────────────────╯ +``` + +These IP addresses usually match the Kubernetes node internal IPs and the default route IPs. +By default, they are used for storage replication traffic. + +You might consider changing them to redirect storage traffic to a different interface. +However, this will not work. + +The Piraeus Operator retrieves the Satellite pod's current IP address on each restart. +It then uses this IP—typically the Kubernetes node internal address—to configure the default LINSTOR interface. + +Even if you try to change the Kubernetes internal IP, the storage replication traffic will not move to a different interface. +Moreover, such a change would affect **all** traffic from the node, not just LINSTOR replication. + +To properly isolate storage traffic from other workloads, use **node connections**, as described in the next section. + +## Satellite interfaces + +By default, LINSTOR configures only one interface per satellite: the `default-ipv4`, +derived from the Kubernetes node’s default IP. +Here is an example of how a Linstor satellite default interface list looks: + +``` +LINSTOR ==> node interface list node01 +╭─────────────────────────────────────────────────────────────────╮ +┊ node01 ┊ NetInterface ┊ IP ┊ Port ┊ EncryptionType ┊ +╞═════════════════════════════════════════════════════════════════╡ +┊ + StltCon ┊ default-ipv4 ┊ 10.78.22.146 ┊ 3367 ┊ SSL ┊ +╰─────────────────────────────────────────────────────────────────╯ +``` + +This IP is taken from the Kubernetes node at Satellite startup. +If additional interfaces exist on the node, they are not added automatically. + +To enable storage traffic over another network, you can manually add a second interface: + +``` +LINSTOR ==> node interface create node01 optic-san 10.78.24.201 +SUCCESS: +Description: + New netInterface 'optic-san' on node 'node01' registered. +Details: + NetInterface 'optic-san' on node 'node01' UUID is: aa28f583-ca91-4cac-b749-67fe54e72c10 + +LINSTOR ==> node interface list node01 +╭─────────────────────────────────────────────────────────────────╮ +┊ node01 ┊ NetInterface ┊ IP ┊ Port ┊ EncryptionType ┊ +╞═════════════════════════════════════════════════════════════════╡ +┊ + StltCon ┊ default-ipv4 ┊ 10.78.22.146 ┊ 3367 ┊ SSL ┊ +┊ + ┊ optic-san ┊ 10.78.24.201 ┊ ┊ ┊ +╰─────────────────────────────────────────────────────────────────╯ +``` + +You don’t need to know the name of the underlying Linux network interface. +You can use any name you like—LINSTOR does not validate whether the IP is actually assigned to the node. + +Only the `default-ipv4` interface is marked with the `StltCon` flag. +This indicates it is used by the LINSTOR Controller to communicate with the Satellite. + +While you can manually change the active Satellite connection using the LINSTOR CLI, +the Piraeus Operator will reset it on the next restart. +This behavior applies to non-Kubernetes installations only. + +To use the new interface for storage replication, you’ll need to define node connections. +But first, repeat the interface creation for the other nodes: + +``` +LINSTOR ==> node interface create node02 optic-san 10.78.24.202 +LINSTOR ==> node interface create node03 optic-san 10.78.24.203 +LINSTOR ==> node interface create node04 optic-san 10.78.24.204 +LINSTOR ==> node interface create node05 optic-san 10.78.24.205 +``` + +## Node connections + +LINSTOR node connections define how satellites communicate with each other to replicate data synchronously. +Each pair of satellites should have a connection path defined between them. + +Unlike satellite interfaces, node connections can be defined either manually using the CLI +or declaratively via Kubernetes Custom Resources. +For small clusters, creating connections manually is usually manageable. +However, as your cluster grows, it's more efficient to use a naming convention and describe +all connection paths in a single resource definition. + +The following sections explain both approaches. + + +### Manual method + +You can create node connections manually using the LINSTOR CLI. +Here’s how to check the command syntax: + +``` +LINSTOR ==> node-connection path create -h +usage: linstor node-connection path create [-h] + node_a node_b path_name + netinterface_a netinterface_b +Creates a new node connection path. + +positional arguments: + node_a 1. Node of the connection + node_b 2. Node of the connection + path_name Name of the created path + netinterface_a Netinterface name to use for 1. node + netinterface_b Netinterface name to use for the 2. node +``` + +Example: create a connection between `node01` and `node02`, using the `optic-san` interface on both sides: + +``` +LINSTOR ==> node-connection path create node01 node02 node01-02 optic-san optic-san +SUCCESS: + Successfully set property key(s): Paths/node01-02/node01,Paths/node01-02/node02 +SUCCESS: +Description: + Node connection between nodes 'node01' and 'node02' modified. +Details: + Node connection between nodes 'node01' and 'node02' UUID is: c1f4ee6a-776e-46ba-9e74-99afce38d90f +SUCCESS: + (node02) Node changes applied. +SUCCESS: + (node02) Resource '`pvc-6f535d3a-82c1-46ab-80fe-5a59ee8bff44`' [DRBD] adjusted. +.... +``` + +When the connection is created, LINSTOR immediately updates all affected DRBD resources to use the new path. + +A path is created once per each pair of nodes. +There is no need to define a separate reverse path. + +You can verify the configuration: + +``` +LINSTOR ==> node-connection path list node01 node02 +╭────────────────────────────────────╮ +┊ Key ┊ Value ┊ +╞════════════════════════════════════╡ +┊ Paths/node01-02/node01 ┊ optic-san ┊ +┊ Paths/node01-02/node02 ┊ optic-san ┊ +╰────────────────────────────────────╯ + +LINSTOR ==> node-connection path list node02 node01 +╭────────────────────────────────────╮ +┊ Key ┊ Value ┊ +╞════════════════════════════════════╡ +┊ Paths/node01-02/node01 ┊ optic-san ┊ +┊ Paths/node01-02/node02 ┊ optic-san ┊ +╰────────────────────────────────────╯ + +LINSTOR ==> node-connection list node01 node02 +╭─────────────────────────────────────────────────────╮ +┊ Node A ┊ Node B ┊ Properties ┊ +╞═════════════════════════════════════════════════════╡ +┊ node01 ┊ node02 ┊ node01=optic-san,node02=optic-... ┊ +╰─────────────────────────────────────────────────────╯ + +LINSTOR ==> node-connection list node02 node01 +╭─────────────────────────────────────────────────────╮ +┊ Node A ┊ Node B ┊ Properties ┊ +╞═════════════════════════════════════════════════════╡ +┊ node01 ┊ node02 ┊ node01=optic-san,node02=optic-... ┊ +╰─────────────────────────────────────────────────────╯ +``` + +### CRD method + +Let's observe the method using Kubernetes CRD (Custom Resource Definition). + +{{% alert color="warning" %}} +At the time of writing, the Piraeus Operator has a known issue with handling missing interfaces. +There is no backoff between reconciliation attempts. +If even one interface is missing, the controller may consume 100% of its CPU limit. + +Always verify that all required interfaces exist before applying the CRD. +Monitor the controller pod to make sure it is not overloaded after the change. +{{% /alert %}} + +As the number of nodes increases, the number of required node connections grows rapidly. +With 3 nodes, you need 3 connections. +With 5 nodes, you need 10. +With 10 nodes, you need 45, and so on. + +Instead of creating each connection manually, you can define all paths once using a single `LinstorNodeConnection` custom resource. + +To use this method, the following conditions must be met: + +- All involved nodes must have the same interface name. +- The interface must already be created on all nodes before applying the CRD. + +Here is an example of LinstorNodeConnection CR: + +```yaml +apiVersion: piraeus.io/v1 +kind: LinstorNodeConnection +metadata: + name: dedicated +spec: + paths: + - name: dedicated + interface: optic-san +``` + +Apply the CRD using: + +```bash +kubectl apply -f linstor-node-connections.yaml +``` + +After applying, you can verify the connections: + +``` +LINSTOR ==> node-connection list +╭─────────────────────────────────────────────────────╮ +┊ Node A ┊ Node B ┊ Properties ┊ +╞═════════════════════════════════════════════════════╡ +┊ node01 ┊ node02 ┊ last-applied=["Paths/dedicated... ┊ +┊ node01 ┊ node03 ┊ last-applied=["Paths/dedicated... ┊ +┊ node01 ┊ node04 ┊ last-applied=["Paths/dedicated... ┊ +┊ node01 ┊ node05 ┊ last-applied=["Paths/dedicated... ┊ +┊ node02 ┊ node03 ┊ last-applied=["Paths/dedicated... ┊ +┊ node02 ┊ node04 ┊ last-applied=["Paths/dedicated... ┊ +┊ node02 ┊ node05 ┊ last-applied=["Paths/dedicated... ┊ +┊ node03 ┊ node04 ┊ last-applied=["Paths/dedicated... ┊ +┊ node03 ┊ node05 ┊ last-applied=["Paths/dedicated... ┊ +┊ node04 ┊ node05 ┊ last-applied=["Paths/dedicated... ┊ +╰─────────────────────────────────────────────────────╯ +``` + +You may still see the old manual paths. +The most recently applied connection takes precedence. + +In this example the old paths for `node01` and `node02` are seen: + +``` +LINSTOR ==> node-connection path list node01 node02 +╭────────────────────────────────────╮ +┊ Key ┊ Value ┊ +╞════════════════════════════════════╡ +┊ Paths/dedicated/node01 ┊ optic-san ┊ +┊ Paths/dedicated/node02 ┊ optic-san ┊ +┊ Paths/node01-02/node01 ┊ optic-san ┊ +┊ Paths/node01-02/node02 ┊ optic-san ┊ +╰────────────────────────────────────╯ + +LINSTOR ==> node-connection path list node01 node03 +╭────────────────────────────────────╮ +┊ Key ┊ Value ┊ +╞════════════════════════════════════╡ +┊ Paths/dedicated/node01 ┊ optic-san ┊ +┊ Paths/dedicated/node03 ┊ optic-san ┊ +╰────────────────────────────────────╯ +``` + +To keep the configuration clean, you can remove the old manual path: + +``` +LINSTOR ==> linstor node-connection path delete node01 node02 node01-02 +SUCCESS: + Successfully deleted property key(s): Paths/node01-02/node02,Paths/node01-02/node01 +.... +``` + +After deletion: + +```console +LINSTOR ==> node-connection path list node01 node02 +╭────────────────────────────────────╮ +┊ Key ┊ Value ┊ +╞════════════════════════════════════╡ +┊ Paths/dedicated/node01 ┊ optic-san ┊ +┊ Paths/dedicated/node02 ┊ optic-san ┊ +╰────────────────────────────────────╯ +``` + +### Advanced CRD method + +See the example in +[Multi Datacenter dedicated storage network guide]({{% ref "/docs/v0/operations/stretched/linstor-dedicated-network" %}}) diff --git a/content/en/docs/v0/storage/disk-encryption.md b/content/en/docs/v0/storage/disk-encryption.md new file mode 100644 index 00000000..75323131 --- /dev/null +++ b/content/en/docs/v0/storage/disk-encryption.md @@ -0,0 +1,76 @@ +--- +title: "Creating Encrypted Storage on LINSTOR" +linkTitle: "Encrypted Storage" +description: "Learn how to configure and use at-rest volume encryption for persistent volumes with LINSTOR" +weight: 100 +aliases: + - /docs/v0/operations/storage/disk-encryption + - /docs/storage/disk-encryption + - /docs/operations/storage/disk-encryption +--- + +Cozystack administrators can enable encrypted storage by creating a custom StorageClass. +This guide explains how to set up encryption passphrase, create an encrypted storage class, and use it in applications. + +LINSTOR provides at-rest encryption for persistent volumes using [LUKS](https://linbit.com/drbd-user-guide/linstor-guide-1_0-en/#s-linstor-encrypted-volumes). +This ensures that data stored on disk is encrypted and can only be accessed when the volume is mounted and unlocked. + +## Set Up Encryption in LINSTOR + +To start using encryption, set up an encryption passphrase in LINSTOR. + +```bash +kubectl exec -i -t -n cozy-linstor deploy/linstor-controller -- linstor encryption create-passphrase +``` + +{{% alert color="warning" %}} +:warning: Save the passphrase securely.
+If you lose the encryption passphrase, all encrypted data will be permanently lost. +{{% /alert %}} + +You will need to enter the passphrase each time after restarting the LINSTOR Controller. +To enter the passphrase, use the following command: + +```bash +kubectl exec -i -t -n cozy-linstor deploy/linstor-controller -- linstor encryption enter-passphrase +``` + +## Create Encrypted Storage Class + +Create a `StorageClass` for encrypted storage: + +```yaml +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: local-encrypted +provisioner: linstor.csi.linbit.com +parameters: + linstor.csi.linbit.com/storagePool: "data" + linstor.csi.linbit.com/layerList: "luks storage" + linstor.csi.linbit.com/encryption: "true" + linstor.csi.linbit.com/allowRemoteVolumeAccess: "false" +volumeBindingMode: WaitForFirstConsumer +allowVolumeExpansion: true +--- +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: replicated-encrypted +provisioner: linstor.csi.linbit.com +parameters: + linstor.csi.linbit.com/storagePool: "data" + linstor.csi.linbit.com/autoPlace: "3" + linstor.csi.linbit.com/layerList: "drbd luks storage" + linstor.csi.linbit.com/encryption: "true" + linstor.csi.linbit.com/allowRemoteVolumeAccess: "true" + property.linstor.csi.linbit.com/DrbdOptions/auto-quorum: suspend-io + property.linstor.csi.linbit.com/DrbdOptions/Resource/on-no-data-accessible: suspend-io + property.linstor.csi.linbit.com/DrbdOptions/Resource/on-suspended-primary-outdated: force-secondary + property.linstor.csi.linbit.com/DrbdOptions/Net/rr-conflict: retry-connect +volumeBindingMode: Immediate +allowVolumeExpansion: true +``` + +Now you can use the `StorageClass` to create `PersistentVolumeClaims` (PVCs) for encrypted storage. + diff --git a/content/en/docs/v0/storage/disk-preparation.md b/content/en/docs/v0/storage/disk-preparation.md new file mode 100644 index 00000000..87da7142 --- /dev/null +++ b/content/en/docs/v0/storage/disk-preparation.md @@ -0,0 +1,241 @@ +--- +title: "Preparing Disks for LINSTOR Storage Pools" +linkTitle: "Disk Preparation" +description: "How to clean disk metadata and prepare physical storage for LINSTOR" +weight: 5 +aliases: + - /docs/operations/storage/disk-preparation + - /docs/storage/disk-preparation +--- + +This guide explains how to prepare physical disks for use with LINSTOR when they contain old metadata that prevents automatic detection. + +## Problem Description + +When setting up storage on new or repurposed nodes, physical disks may contain remnants from previous installations: + +- RAID superblocks +- Partition tables +- LVM signatures +- Filesystem metadata + +This old metadata prevents LINSTOR from detecting disks as available storage. + +### Symptoms + +1. `linstor physical-storage list` shows empty output or missing disks +2. Disks appear with unexpected filesystem types (e.g., `linux_raid_member`) +3. Storage pools only show `DfltDisklessStorPool` without actual storage + +## Diagnostics + +### Set up LINSTOR alias + +For easier access to LINSTOR commands, set up an alias: + +```bash +alias linstor='kubectl exec -n cozy-linstor deploy/linstor-controller -- linstor' +``` + +### Check LINSTOR nodes + +List your nodes and check their readiness: +```bash +linstor node list +``` + +Expected output should show all nodes in `Online` state. + +### Check storage pools + +Check current storage pools: +```bash +linstor storage-pool list +``` + +### Check available physical storage + +Check what physical disks LINSTOR can see: +```bash +linstor physical-storage list +``` + +If this command shows empty output or is missing expected disks, the disks likely contain old metadata and need to be wiped. + +### Check disk state on node + +Check disk state on a specific node via satellite pod: +```bash +# List LINSTOR satellite pods +kubectl get pod -n cozy-linstor -l app.kubernetes.io/component=linstor-satellite + +# Check disk state +kubectl exec -n cozy-linstor -c linstor-satellite -- \ + lsblk -f +``` + +Expected output for clean disks should show no `FSTYPE`: +``` +NAME FSTYPE LABEL UUID MOUNTPOINT +nvme0n1 +nvme1n1 +``` + +If you see `linux_raid_member`, `LVM2_member`, or other filesystem types, the disks need to be wiped. + +## Solution: Wiping Disk Metadata + +{{< alert color="warning" >}} +**WARNING**: Wiping disks destroys all data on the specified devices. +Only wipe disks that are **NOT** used for the operating system or Talos installation. +{{< /alert >}} + +### Step 1: Identify System Disks + +Before wiping, identify which disk contains your Talos installation. +Check your Talos configuration in `nodes/.yaml`: + +```yaml +# In nodes/.yaml +machine: + install: + disk: /dev/sda # This disk should NOT be wiped +``` + +Typically, the system disk is `/dev/sda`, `/dev/vda`, or similar. + +### Step 2: Locate Node Configuration + +If you used [Talm]({{% ref "/docs/v0/install/kubernetes/talm" %}}) to bootstrap your cluster, your node configurations are stored in `nodes/*.yaml` files in your cluster configuration directory. + +Each file corresponds to a specific node (e.g., `nodes/node1.yaml`, `nodes/node2.yaml`). + +### Step 3: Wipe Disks + +List all disks on the node: +```bash +talm -f nodes/.yaml get disks +``` + +Wipe all non-system disks: +```bash +talm -f nodes/.yaml wipe disk nvme0n1 nvme1n1 nvme2n1 ... +``` + +{{< note >}} +List all disks you want to wipe in a single command. +Do NOT include the system disk (e.g., `sda` if that's where Talos is installed). +{{< /note >}} + +### Step 4: Verify Disks are Clean + +After wiping, verify that disks are now visible to LINSTOR: + +```bash +linstor physical-storage list +``` + +Expected output should now show your disks: +``` ++----------------------------------------------------------------+ +| Device | Size | Rotational | +|================================================================| +| /dev/nvme0n1 | 3.49 TiB | False | +| /dev/nvme1n1 | 3.49 TiB | False | +| ... | ... | ... | ++----------------------------------------------------------------+ +``` + +You can also check directly on the node: +```bash +kubectl exec -n cozy-linstor -c linstor-satellite -- \ + lsblk -f +``` + +Clean disks should show no `FSTYPE`. + +## Creating Storage Pools + +Once disks are clean, create a LINSTOR storage pool. + +For ZFS storage pools with multiple disks: +```bash +linstor physical-storage create-device-pool zfs \ + /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 ... \ + --pool-name data \ + --storage-pool data +``` + +{{< note >}} +Specify all disks in a single command to create one unified ZFS pool. +Running the command multiple times with the same pool name will fail. +{{< /note >}} + +Verify the storage pool was created: +```bash +linstor storage-pool list +``` + +Expected output: +``` ++-----------------------------------------------------------------------+ +| StoragePool | Node | Driver | PoolName | FreeCapacity | TotalCapacity | State | +|=======================================================================| +| data | node1 | ZFS | data | 47.34 TiB | 47.62 TiB | Ok | +| data | node2 | ZFS | data | 47.34 TiB | 47.62 TiB | Ok | ++-----------------------------------------------------------------------+ +``` + +## Troubleshooting + +### Disks Still Show Old Metadata After Wipe + +Try wiping with the ZEROES method for more thorough cleaning: +```bash +talm -f nodes/.yaml wipe disk --method ZEROES nvme0n1 +``` + +This writes zeros to the disk, which takes longer but ensures complete removal of metadata. + +### "Zpool name already used" Error + +If you need to recreate a storage pool: + +1. Delete from LINSTOR: + ```bash + linstor storage-pool delete + ``` + +2. Destroy ZFS pool on the node: + ```bash + kubectl exec -n cozy-linstor -c linstor-satellite -- \ + zpool destroy + ``` + +3. Recreate the pool with all disks in one command. + +### Permission Denied on Worker Nodes + +Worker nodes may not allow direct Talos API access. Use the satellite pod to check disk state: +```bash +kubectl exec -n cozy-linstor -c linstor-satellite -- lsblk -f +``` + +If you need to wipe disks on worker nodes, ensure your node configuration allows access or consult your cluster administrator. + +## Quick Reference + +| Command | Description | +|---------|-------------| +| `linstor sp l` | List storage pools | +| `linstor ps l` | List available physical storage | +| `linstor ps cdp zfs --pool-name --storage-pool ` | Create ZFS storage pool | +| `talm -f nodes/.yaml wipe disk ` | Wipe disk metadata | +| `talm -f nodes/.yaml get disks` | List disks on node | + +## Related Documentation + +- [Using Talm to Bootstrap Cozystack]({{% ref "/docs/v0/install/kubernetes/talm" %}}) +- [Configuring a Dedicated Network for LINSTOR]({{% ref "/docs/v0/storage/dedicated-network" %}}) +- [Configuring DRBD Resync Controller]({{% ref "/docs/v0/storage/drbd-tuning" %}}) +- [LINSTOR Troubleshooting]({{% ref "/docs/v0/operations/troubleshooting/linstor-controller" %}}) diff --git a/content/en/docs/v0/storage/drbd-tuning.md b/content/en/docs/v0/storage/drbd-tuning.md new file mode 100644 index 00000000..ce4deba0 --- /dev/null +++ b/content/en/docs/v0/storage/drbd-tuning.md @@ -0,0 +1,37 @@ +--- +title: "Configuring DRBD Resync Controller in LINSTOR" +linkTitle: "Configuring DRBD" +description: "Learn how to tune DRBD resync controller parameters in LINSTOR for faster synchronization" +weight: 20 +aliases: + - /docs/storage/drbd-tuning +--- + +Cozystack administrators can adjust DRBD synchronization performance by setting tuning parameters +for the LINSTOR Controller. + +This allows you to optimize the speed of resynchronization without overloading the replication network or storage backend. + +For detailed explanations of all available parameters and tuning recommendations, please refer to the official LINBIT guide: +[Tuning the DRBD Resync Controller](https://kb.linbit.com/drbd/tuning-the-drbd-resync-controller/). + +For a multi-datacenter setup, also read the [Multi-DC DRBD configuration]({{% ref "/docs/v0/operations/stretched/drbd-tuning" %}}). + +## Recommended Settings for 10G Networks + +We consider the following values to be optimal for clusters connected with a 10-Gigabit network: + +```bash +linstor controller set-property DrbdOptions/Net/max-buffers 36864 +linstor controller set-property DrbdOptions/Net/rcvbuf-size 10485760 +linstor controller set-property DrbdOptions/Net/sndbuf-size 10485760 +linstor controller set-property DrbdOptions/PeerDevice/c-fill-target 2048 +linstor controller set-property DrbdOptions/PeerDevice/c-max-rate 737280 +linstor controller set-property DrbdOptions/PeerDevice/c-min-rate 245760 +linstor controller set-property DrbdOptions/PeerDevice/resync-rate 245760 +linstor controller set-property DrbdOptions/PeerDevice/c-plan-ahead 10 +``` + +- `c-max-rate` is specified in KiB/s and should match the maximum sustained throughput of your disks or the network throughput (whichever is lower). + The example value of `737280` corresponds to 720 MiB/s. +- `c-min-rate` and `resync-rate` are also in KiB/s and should be set to roughly one third of `c-max-rate`. diff --git a/content/en/docs/v0/storage/nfs.md b/content/en/docs/v0/storage/nfs.md new file mode 100644 index 00000000..c9a551a8 --- /dev/null +++ b/content/en/docs/v0/storage/nfs.md @@ -0,0 +1,70 @@ +--- +title: "Using NFS shares with Cozystack" +linkTitle: "Using NFS" +description: "Configure optional module `nfs-driver` to order volumes from NFS shares in Cozystack" +weight: 30 +aliases: + - /docs/v0/operations/storage/nfs + - /docs/storage/nfs + - /docs/operations/storage/nfs +--- + +## Enable NFS driver + +Add `bundle-enable: nfs-driver` to your Cozystack configuration: + +```yaml +bundle-enable: nfs-driver +``` + +Wait a minute for the platform chart to reconcile, then verify the HelmRelease has been created: + +```bash +kubectl get helmrelease --namespace cozy-nfs-driver nfs-driver +``` + +## Export share + +```bash +apt install nfs-server +mkdir /data +chmod 777 /data +echo '/data *(rw,sync,no_subtree_check)' >> /etc/exports +exportfs -a +``` + +## Configure connection + +```yaml +--- +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: nfs +provisioner: nfs.csi.k8s.io +parameters: + server: 10.244.57.210 + share: /data +reclaimPolicy: Delete +volumeBindingMode: Immediate +allowVolumeExpansion: true +mountOptions: + - nfsvers=4.1 +``` + + +## Order volume + +```yaml +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: task-pv-claim +spec: + storageClassName: nfs + accessModes: + - ReadWriteMany + resources: + requests: + storage: 3Gi +``` diff --git a/content/en/docs/v0/virtualization/_include/virtual-machine.md b/content/en/docs/v0/virtualization/_include/virtual-machine.md new file mode 100644 index 00000000..3e7d8e65 --- /dev/null +++ b/content/en/docs/v0/virtualization/_include/virtual-machine.md @@ -0,0 +1,8 @@ +--- +title: "Virtual Machine (simple)" +linkTitle: "Virtual Machine (simple)" +weight: 30 +aliases: + - /docs/v0/reference/applications/virtual-machine +--- + diff --git a/content/en/docs/v0/virtualization/_include/vm-disk.md b/content/en/docs/v0/virtualization/_include/vm-disk.md new file mode 100644 index 00000000..1dc78284 --- /dev/null +++ b/content/en/docs/v0/virtualization/_include/vm-disk.md @@ -0,0 +1,8 @@ +--- +title: "Virtual Machine Disk" +linkTitle: "Virtual Machine Disk" +weight: 20 +aliases: + - /docs/v0/reference/applications/vm-disk +--- + diff --git a/content/en/docs/v0/virtualization/_include/vm-instance.md b/content/en/docs/v0/virtualization/_include/vm-instance.md new file mode 100644 index 00000000..12ea48fc --- /dev/null +++ b/content/en/docs/v0/virtualization/_include/vm-instance.md @@ -0,0 +1,8 @@ +--- +title: "Virtual Machine" +linkTitle: "Virtual Machine" +weight: 10 +aliases: + - /docs/v0/reference/applications/vm-instance +--- + diff --git a/content/en/docs/v0/virtualization/_index.md b/content/en/docs/v0/virtualization/_index.md new file mode 100644 index 00000000..6d4ee1f5 --- /dev/null +++ b/content/en/docs/v0/virtualization/_index.md @@ -0,0 +1,138 @@ +--- +title: "Virtualization Features in Cozystack" +linkTitle: "Virtualization" +description: "Everything about deploying, configuring, and using virtual machines in Cozystack." +weight: 50 +aliases: + - /docs/v0/operations/virtualization + - /docs/v0/operations/virtualization/virtual-machines + - /docs/virtualization + - /docs/operations/virtualization + - /docs/operations/virtualization/virtual-machines +--- + +This guide explains how virtualization works within Cozystack. + +## Virtualization Packages + +The Cozystack catalog includes three packages related to virtualization: + +- `virtual-machine` - Virtual Machine (simple) +- `vm-disk` - Virtual Machine disk +- `vm-instance` - Virtual Machine instance + +### Virtual Machine (simple) + +This package provides a quick way to create a simple virtual machine. +It allows you to specify the bare minimum parameters to run a VM, but it only supports a single-disk virtual machine. + +For production workloads, it is recommended to use `vm-disk` and `vm-instance` instead. + +See the application reference: [`virtual-machine`]({{% ref "/docs/v0/virtualization/virtual-machine" %}}). + +### Virtual Machine Disk + +Before creating a Virtual Machine instance, you need to create a disk from which the VM will boot. + +This package defines a virtual machine disk used to store data. +You can use a prepared image (also known as golden image), download an image to the disk via HTTP or upload it from a local image. +You can also create an empty image. + +1. **Golden Image**: + + ```yaml + ## @param source The source image location used to create a disk + source: + image: + name: ubuntu + ``` + + +1. **HTTP:** + + ```yaml + source: + http: + url: "https://download.cirros-cloud.net/0.6.2/cirros-0.6.2-x86_64-disk.img" + ``` + +3. **Upload:** + + ```yaml + source: + upload: {} + ``` + After the disk is created, it will generate a command for uploading using the virtctl tool. + + {{< note >}} + If you want to let virtctl know about right endpoint for uploading images, you need to configure a cluster to specify an endpoint for it: + 1. Modify your cozystack config map, to enable cdi-uploadproxy along with the dashboard: + ```bash + kubectl patch cm -n cozy-system cozystack --type merge -p='{"data":{ + "expose-services": "dashboard,cdi-uploadproxy" + }}' + ``` + + + 2. Modify your cozystack config to provide a valid CDI uploadproxy endpoint: + ```yaml + values-cdi: | + uploadProxyURL: https://cdi-uploadproxy.example.org + ``` + {{< /note >}} + +4. **Empty:** + + ```yaml + source: {} + ``` + + +Optionally, you can specify that the disk is an optical CD-ROM: + +```yaml +optical: true +``` + +Created disks can be attached to a Virtual Machine instance. + +See the application reference: [`vm-disk`]({{% ref "/docs/v0/virtualization/vm-disk" %}}). + +### Virtual Machine Instance + +This package defines a Virtual Machine instance, which requires specifying the previously created vm-disk. +The first disk is always bootable, and the VM will attempt to boot from it. + +```yaml +disks: +- name: example-system +- name: example-data +``` + +The rest parameters are similar to Virtual Machine (simple). + +See the application reference: [`vm-instance`]({{% ref "/docs/v0/virtualization/vm-instance" %}}). + +## Accessing Virtual Machines + +You can access the virtual machine using the virtctl tool: +- [KubeVirt User Guide - Virtctl Client Tool](https://kubevirt.io/user-guide/user_workloads/virtctl_client_tool/) + +To access the serial console: + +``` +virtctl console +``` + +To access the VM using VNC: + +``` +virtctl vnc +``` + +To SSH into the VM: + +``` +virtctl ssh @ +``` + diff --git a/content/en/docs/v0/virtualization/cloneable-vms.md b/content/en/docs/v0/virtualization/cloneable-vms.md new file mode 100644 index 00000000..f2660ba3 --- /dev/null +++ b/content/en/docs/v0/virtualization/cloneable-vms.md @@ -0,0 +1,156 @@ +--- +title: "Cloneable Virtual Machines" +linkTitle: "Cloneable Virtual Machines" +description: "Creating cloneable virtual machines" +weight: 40 +aliases: + - /docs/virtualization/cloneable-vms +--- + +To create a cloneable VM, you will need to create a `VMDisk` and a `VMInstance`. This guide uses an `ubuntu` base image +as an example. + +1. **Create VMDisk** + + ```yaml + apiVersion: apps.cozystack.io/v1alpha1 + kind: VMDisk + metadata: + name: ubuntu-source + namespace: tenant-root + spec: + optical: false + source: + http: + url: https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img + storage: 20Gi + storageClass: replicated + ``` + + {{% alert color="info" %}} + Since expanding a disk can be complicated, we recommend creating it with extra space to accommodate future growth. + {{% /alert %}} + +2. **Create VMInstance** + + Since the `VirtualMachine` custom resource does not provide an easy way to work with multiple disks, use `VMInstance` + instead. + + Create `VMInstance` using the following template: + + ```yaml + apiVersion: apps.cozystack.io/v1alpha1 + kind: VMInstance + metadata: + name: sourcevm + namespace: tenant-root + spec: + externalMethod: PortList + disks: + - name: ubuntu-source + externalPorts: + - 22 + instanceProfile: ubuntu + instanceType: "" + running: true + sshKeys: + - + external: true + resources: + cpu: "2" + memory: 4Gi + ``` + + When VM is created, it will get load balancer external IP address. You can get it using: + + ```bash + kubectl get svc -n tenant-root vm-instance-sourcevm + ``` + +3. **SSH into VM** + + Now you can SSH into VM using the external IP address. Default user for `ubuntu` base image is `ubuntu`. + ```bash + ssh ubuntu@ + ``` + + Configure the virtual machine before cloning. + +4. **Delete VMInstance** + + Data on the disk will be preserved. + ```bash + kubectl delete vminstance -n tenant-root sourcevm + ``` + +5. **Create disk image** + ```yaml + apiVersion: cdi.kubevirt.io/v1beta1 + kind: DataVolume + metadata: + name: "vm-image-sourcevm" # prefix vm-image is necessary + namespace: cozy-public # do not change + annotations: + cdi.kubevirt.io/storage.bind.immediate.requested: "true" + spec: + source: + pvc: + name: vm-disk-ubuntu-source + namespace: tenant-root + storage: + resources: + requests: + storage: 20Gi + storageClassName: replicated + ``` + + It will take some time to complete. Wait before continuing. + You can check the progress using: + ```bash + kubectl get datavolume -n cozy-public vm-image-sourcevm + ``` + Example output when ready: + + ```text + NAME PHASE PROGRESS RESTARTS AGE + vm-image-sourcevm Succeeded 100.0% 7m32s + ``` + +6. **Create VMDisk from cloned image** + ```yaml + apiVersion: apps.cozystack.io/v1alpha1 + kind: VMDisk + metadata: + name: ubuntu-cloned-1 + namespace: tenant-root + spec: + optical: false + source: + image: + name: sourcevm # image name without prefix + storage: 20Gi # size greater or equal to the disk image size + storageClass: replicated + ``` + +7. **Create VMInstance from cloned disk** + ```yaml + apiVersion: apps.cozystack.io/v1alpha1 + kind: VMInstance + metadata: + name: cloned-vm + namespace: tenant-root + spec: + external: true + externalMethod: PortList + cloudInit: "hostname: my-cloned-vm" + cloudInitSeed: "1" + disks: + - name: ubuntu-cloned-1 + externalPorts: + - 22 + instanceProfile: ubuntu + running: true + ``` + + To ensure the cloned VM's network functions correctly, you must override its `hostname` via `.spec.cloudInit` and + provide a unique `.spec.cloudInitSeed` to prevent conflicts with the source VM. diff --git a/content/en/docs/v0/virtualization/gpu.md b/content/en/docs/v0/virtualization/gpu.md new file mode 100644 index 00000000..76a39e21 --- /dev/null +++ b/content/en/docs/v0/virtualization/gpu.md @@ -0,0 +1,229 @@ +--- +title: "Running VMs with GPU Passthrough" +linkTitle: "GPU Passthrough" +description: "Running VMs with GPU Passthrough" +weight: 40 +aliases: + - /docs/v0/operations/virtualization/gpu + - /docs/virtualization/gpu + - /docs/operations/virtualization/gpu +--- + +This section demonstrates how to deploy virtual machines (VMs) with GPU passthrough using Cozystack. +First, we’ll deploy the GPU Operator to configure the worker node for GPU passthrough +Then we will deploy a [KubeVirt](https://kubevirt.io/) VM that requests a GPU. + +By default, to provision a GPU Passthrough, the GPU Operator will deploy the following components: + +- **VFIO Manager** to bind `vfio-pci` driver to all GPUs on the node. +- **Sandbox Device Plugin** to discover and advertise the passthrough GPUs to kubelet. +- **Sandbox Validator** to validate the other operands. + +## Prerequisites + +- A Cozystack cluster with at least one GPU-enabled node. +- kubectl installed and cluster access credentials configured. + +## 1. Install the GPU Operator + +Follow these steps: + +1. Label the worker node explicitly for GPU passthrough workloads: + + ```bash + kubectl label node --overwrite nvidia.com/gpu.workload.config=vm-passthrough + ``` + +2. Enable the GPU Operator bundle in your Cozystack configuration: + + ```bash + kubectl edit -n cozy-system configmap cozystack + ``` + +3. Add `gpu-operator` to the list of bundle-enabled packages: + + ```yaml + bundle-enable: gpu-operator + ``` + This will deploy the components (operands). + +4. Ensure all pods are in a running state and all validations succeed with the sandbox-validator component: + + ```bash + kubectl get pods -n cozy-gpu-operator + ``` + + Example output (your pod names may vary): + + ```console + NAME READY STATUS RESTARTS AGE + ... + nvidia-sandbox-device-plugin-daemonset-4mxsc 1/1 Running 0 40s + nvidia-sandbox-validator-vxj7t 1/1 Running 0 40s + nvidia-vfio-manager-thfwf 1/1 Running 0 78s + ``` + +To verify the GPU binding, access the node using `kubectl node-shell -n cozy-system -x` or `kubectl debug node` and run: + +```bash +lspci -nnk -d 10de: +``` + +The vfio-manager pod will bind all GPUs on the node to the vfio-pci driver. Example output: + +```console +3b:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:2236] (rev a1) + Subsystem: NVIDIA Corporation Device [10de:1482] + Kernel driver in use: vfio-pci +86:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:2236] (rev a1) + Subsystem: NVIDIA Corporation Device [10de:1482] + Kernel driver in use: vfio-pci +``` + +The sandbox-device-plugin will discover and advertise these resources to kubelet. +In this example, the node shows two A10 GPUs as available resources: + +```bash +kubectl describe node +``` + +Example output: + +```console +... +Capacity: + ... + nvidia.com/GA102GL_A10: 2 + ... +Allocatable: + ... + nvidia.com/GA102GL_A10: 2 +... +``` + +{{% alert color="info" %}} +**Note:** Resource names are constructed by combining the `device` and `device_name` columns from the [PCI IDs database](https://pci-ids.ucw.cz/v2.2/pci.ids). +For example, the database entry for A10 reads `2236 GA102GL [A10]`, which results in a resource name `nvidia.com/GA102GL_A10`. +{{% /alert %}} + +## 2. Update the KubeVirt Custom Resource + +Next, we will update the KubeVirt Custom Resource, as documented in the +[KubeVirt user guide](https://kubevirt.io/user-guide/virtual_machines/host-devices/#listing-permitted-devices), +so that the passthrough GPUs are permitted and can be requested by a KubeVirt VM. + +Adjust the `pciVendorSelector` and `resourceName` values to match your specific GPU model. +Setting `externalResourceProvider=true` indicates that this resource is provided by an external device plugin, +in this case the `sandbox-device-plugin` which is deployed by the Operator. + +```bash +kubectl edit kubevirt -n cozy-kubevirt +``` +example config: +```yaml + ... + spec: + configuration: + permittedHostDevices: + pciHostDevices: + - externalResourceProvider: true + pciVendorSelector: 10DE:2236 + resourceName: nvidia.com/GA102GL_A10 + ... +``` + +## 3. Create a Virtual Machine + +We are now ready to create a VM. + +1. Create a sample virtual machine using the following VMI specification that requests the `nvidia.com/GA102GL_A10` resource. + + **vmi-gpu.yaml**: + + ```yaml + --- + apiVersion: apps.cozystack.io/v1alpha1 + appVersion: '*' + kind: VirtualMachine + metadata: + name: gpu + namespace: tenant-example + spec: + running: true + instanceProfile: ubuntu + instanceType: u1.medium + systemDisk: + image: ubuntu + storage: 5Gi + storageClass: replicated + gpus: + - name: nvidia.com/GA102GL_A10 + cloudInit: | + #cloud-config + password: ubuntu + chpasswd: { expire: False } + ``` + + ```bash + kubectl apply -f vmi-gpu.yaml + ``` + + Example output: + ```console + virtualmachines.apps.cozystack.io/gpu created + ``` + +2. Verify the VM status: + + ```bash + kubectl get vmi + ``` + + ```console + NAME AGE PHASE IP NODENAME READY + virtual-machine-gpu 73m Running 10.244.3.191 luc-csxhk-002 True + ``` + +3. Log in to the VM and confirm that it has access to GPU: + + ```bash + virtctl console virtual-machine-gpu + ``` + + Example output: + ```console + Successfully connected to vmi-gpu console. The escape sequence is ^] + + vmi-gpu login: ubuntu + Password: + + ubuntu@virtual-machine-gpu:~$ lspci -nnk -d 10de: + 08:00.0 3D controller [0302]: NVIDIA Corporation GA102GL [A10] [10de:26b9] (rev a1) + Subsystem: NVIDIA Corporation GA102GL [A10] [10de:1851] + Kernel driver in use: nvidia + Kernel modules: nvidiafb, nvidia_drm, nvidia + ``` + +## GPU Sharing for Virtual Machines + +GPU passthrough assigns an entire physical GPU to a single VM. To share one GPU between multiple VMs, you need **NVIDIA vGPU**. + +### vGPU (Virtual GPU) + +NVIDIA vGPU uses mediated devices (mdev) to create virtual GPUs assignable to VMs. This is the only production-ready solution for GPU sharing between VMs. + +**Requirements:** +- NVIDIA vGPU license (commercial, purchased from NVIDIA) +- NVIDIA vGPU Manager installed on host nodes + +{{% alert color="info" %}} +**Why not MIG?** MIG (Multi-Instance GPU) partitions a GPU into isolated instances, but these are logical divisions within a single PCIe device. VFIO cannot pass them to VMs — MIG only works with containers. To use MIG with VMs, you need vGPU on top of MIG partitions (still requires a license). +{{% /alert %}} + +### Open-Source vGPU (Experimental) + +NVIDIA is developing open-source vGPU support for the Linux kernel. Once merged, this could enable GPU sharing without a license. + +- Status: RFC stage, not merged into mainline kernel +- Supports Ada Lovelace and newer (L4, L40, etc.) +- References: [Phoronix announcement](https://www.phoronix.com/news/NVIDIA-Open-GPU-Virtualization), [kernel patches](https://lore.kernel.org/all/20240922124951.1946072-1-zhiw@nvidia.com/) diff --git a/content/en/docs/v0/virtualization/mikrotik.md b/content/en/docs/v0/virtualization/mikrotik.md new file mode 100644 index 00000000..84a34593 --- /dev/null +++ b/content/en/docs/v0/virtualization/mikrotik.md @@ -0,0 +1,98 @@ +--- +title: "Running MikroTik RouterOS in Cozystack" +linkTitle: "MikroTik RouterOS" +description: "Deploying MikroTik RouterOS (CHR) as a virtual appliance on Cozystack" +weight: 60 +aliases: + - /docs/v0/operations/virtualization/mikrotik + - /docs/v0/networking/mikrotik + - /docs/virtualization/mikrotik + - /docs/operations/virtualization/mikrotik + - /docs/networking/mikrotik +--- + +## Prerequisites + +- MikroTik RouterOS ISO (CHR or NPK install image), for example, `mikrotik-7.19.3.iso`. +- A free static IP or DHCP on the connected tenant network. +- KubeVirt client `virtctl` [installed in your local environment](https://kubevirt.io/user-guide/user_workloads/virtctl_client_tool/) + and configured for your tenant's namespace. +- Cozystack version v0.34.2 or later. + +## Installation + +### 1. Prepare disks + +You need **two disks**: + +1. **Installation ISO** – optical. +2. **System disk** – non‑optical. + +```yaml +apiVersion: apps.cozystack.io/v1alpha1 +kind: VMDisk +metadata: + name: mikrotik-iso +spec: + source: + http: + url: https://download.mikrotik.com/routeros/7.19.3/mikrotik-7.19.3.iso + optical: true + storage: 1Gi + storageClass: replicated +--- +apiVersion: apps.cozystack.io/v1alpha1 +kind: VMDisk +metadata: + name: mikrotik-system +spec: + optical: false + storage: 1Gi + storageClass: replicated +``` + +### 2. Create the VMInstance + +RouterOS does not require a special instance profile. +Use a lightweight Linux profile such as `ubuntu` with a small instance type such as `u1.medium`: + +```yaml +apiVersion: apps.cozystack.io/v1alpha1 +kind: VMInstance +metadata: + name: mikrotik-demo +spec: + running: true + instanceType: "u1.medium" + instanceProfile: ubuntu + disks: + - name: mikrotik-system + bus: sata + - name: mikrotik-iso + bus: sata +``` + +### 3. Install RouterOS + +1. Launch a console: + + ```bash + virtctl vnc mikrotik-demo -n tenant-test + ``` + +2. When prompted for package selection, choose the desired bundle (usually *system*, *routing*, *security*). + Confirm formatting the system disk. + +3. After installation completes, remove the installation ISO. + +### 4. Adjust MTU (optional) + +Cozystack’s virtual network interfaces default to **MTU 1400**. +RouterOS respects this automatically on Virtio‑Net adapters, but you can verify or change it: + +```bash +/interface ethernet print detail +/interface ethernet set [find default-name~"ether1"] mtu=1400 +``` + +Avoid the legacy `e1000/vmxnet` drivers because they ignore non‑1500 MTUs and may drop large packets. diff --git a/content/en/docs/v0/virtualization/proxmox-migration.md b/content/en/docs/v0/virtualization/proxmox-migration.md new file mode 100644 index 00000000..a9ba30b5 --- /dev/null +++ b/content/en/docs/v0/virtualization/proxmox-migration.md @@ -0,0 +1,214 @@ +--- +title: "Migrating Virtual Machines from Proxmox" +linkTitle: "Proxmox Migration" +description: "Step-by-step guide to migrating virtual machines from Proxmox VE to Cozystack" +weight: 65 +aliases: + - /docs/virtualization/proxmox-migration +--- + +This guide describes the process of migrating virtual machines from Proxmox VE to Cozystack by exporting VM disk images and uploading them to the target environment. + +{{< note >}} +Migration is performed by exporting VM disks to files and uploading them to Cozystack. +VM state and snapshots are not preserved during migration. +{{< /note >}} + +## Prerequisites + +Before starting the migration, ensure you have: + +1. **KubeVirt client `virtctl`** installed on your local machine: + - Installation guide: [KubeVirt User Guide - Virtctl Client Tool](https://kubevirt.io/user-guide/user_workloads/virtctl_client_tool/) + +2. **Upload proxy access configured** in your Cozystack cluster: + - Modify your Cozystack ConfigMap to enable `cdi-uploadproxy`: + ```bash + kubectl patch cm -n cozy-system cozystack --type merge -p='{"data":{ + "expose-services": "dashboard,cdi-uploadproxy" + }}' + ``` + - Configure the CDI upload proxy endpoint in your Cozystack values: + ```yaml + values-cdi: | + uploadProxyURL: https://cdi-uploadproxy.example.org + ``` + +3. **DNS or hosts file configuration** for upload proxy access: + - If needed, add an entry to `/etc/hosts` on your local machine: + ``` + cdi-uploadproxy.example.org + ``` + +## Step 1: Export VM Disks from Proxmox + +Before exporting, ensure the virtual machines are stopped in Proxmox. + +Export the VM disk to a file in qcow2 format (or another format supported by KubeVirt): + +```bash +# Example: Export VM disk from Proxmox storage +qm disk export /tmp/vm-disk.qcow2 +``` + +The output should be a disk image file (e.g., `vm-disk.qcow2`) ready for upload. + +{{< note >}} +Specific commands for exporting disks may vary depending on your Proxmox storage backend and configuration. +Refer to [Proxmox VE documentation](https://pve.proxmox.com/wiki/Qm_status) for details. +{{< /note >}} + +## Step 2: Create a VMDisk for Upload + +Create a `VMDisk` resource in Cozystack with `source.upload` to prepare for image upload: + +```yaml +apiVersion: apps.cozystack.io/v1alpha1 +kind: VMDisk +metadata: + name: proxmox-vm-disk + namespace: tenant-root +spec: + source: + upload: {} + storage: 10Gi + storageClass: replicated +``` + +Apply the manifest: + +```bash +kubectl apply -f vmdisk-upload.yaml +``` + +Monitor the disk creation status: + +```bash +kubectl get vmdisk -n tenant-root +kubectl describe vmdisk proxmox-vm-disk -n tenant-root +``` + +## Step 3: Upload the Disk Image + +Once the VMDisk is created and ready for upload, use `virtctl` to upload the disk image: + +```bash +virtctl image-upload dv vm-disk-proxmox-vm-disk \ + -n tenant-root \ + --image-path=./vm-disk.qcow2 \ + --uploadproxy-url https://cdi-uploadproxy.example.org \ + --insecure +``` + +{{< note >}} +The DataVolume name follows the pattern `vm-disk-`. +If your VMDisk is named `proxmox-vm-disk`, the DataVolume will be `vm-disk-proxmox-vm-disk`. +{{< /note >}} + +Wait for the upload to complete. You can monitor the progress: + +```bash +kubectl get dv -n tenant-root +kubectl describe dv vm-disk-proxmox-vm-disk -n tenant-root +``` + +The upload is complete when the status shows `Succeeded`. + +## Step 4: Create a VMInstance + +After the disk upload is complete, create a VMInstance to boot from the uploaded disk: + +```yaml +apiVersion: apps.cozystack.io/v1alpha1 +kind: VMInstance +metadata: + name: migrated-vm + namespace: tenant-root +spec: + running: true + instanceType: u1.medium + disks: + - name: proxmox-vm-disk + # Optional: configure network, cloud-init, etc. +``` + +Apply the manifest: + +```bash +kubectl apply -f vminstance.yaml +``` + +Verify the VM is running: + +```bash +kubectl get vm -n tenant-root +kubectl get vmi -n tenant-root +``` + +## Step 5: Access the Migrated VM + +Access the VM console using virtctl: + +```bash +# Serial console +virtctl console vm-instance-migrated-vm -n tenant-root + +# VNC access +virtctl vnc vm-instance-migrated-vm -n tenant-root + +# SSH (if configured) +virtctl ssh user@vm-instance-migrated-vm -n tenant-root +``` + +## Migration Checklist + +Use this checklist to track your migration progress: + +- [ ] Export VM disks from Proxmox (qcow2 or compatible format) +- [ ] Install `virtctl` on your local machine +- [ ] Configure upload proxy access in Cozystack +- [ ] Add DNS/hosts entry for upload proxy (if needed) +- [ ] Create VMDisk with `source.upload` in Cozystack +- [ ] Upload disk image using `virtctl image-upload` +- [ ] Wait for upload to complete (status: Succeeded) +- [ ] Create VMInstance with the uploaded disk +- [ ] Verify VM boots successfully +- [ ] Test VM connectivity and functionality + +## Troubleshooting + +### Upload Fails with Connection Error + +**Problem:** `virtctl image-upload` fails with connection refused or timeout. + +**Solution:** +- Verify upload proxy is accessible: `curl -k https://cdi-uploadproxy.example.org` +- Check `/etc/hosts` entry matches the upload proxy IP +- Ensure Cozystack ConfigMap has `expose-services: "dashboard,cdi-uploadproxy"` + +### Upload Stuck at 0% + +**Problem:** Upload starts but never progresses. + +**Solution:** +- Check DataVolume status: `kubectl describe dv vm-disk- -n tenant-root` +- Verify storage class has available capacity +- Check CDI pod logs: `kubectl logs -n cozy-system -l app=cdi-uploadproxy` + +### VM Fails to Boot After Migration + +**Problem:** VM boots but fails to start properly. + +**Solution:** +- Check VM disk is attached as the first disk in VMInstance spec +- Verify disk format is compatible (qcow2, raw) +- Review VM logs: `virtctl console vm-instance- -n tenant-root` +- Ensure VM drivers are compatible with KubeVirt (VirtIO recommended) + +## Next Steps + +After successful migration: + +- Configure [cloud-init]({{% ref "/docs/v0/virtualization/virtual-machine" %}}) for automated VM setup +- Review [instance types and profiles]({{% ref "/docs/v0/virtualization/resources" %}}) for optimal resource allocation +- Consider creating [golden images]({{% ref "/docs/v0/virtualization/vm-image" %}}) for future VM deployments diff --git a/content/en/docs/v0/virtualization/resources.md b/content/en/docs/v0/virtualization/resources.md new file mode 100644 index 00000000..9e30f7c9 --- /dev/null +++ b/content/en/docs/v0/virtualization/resources.md @@ -0,0 +1,227 @@ +--- +title: "Virtual Machine Resources" +linkTitle: "Resources Reference" +description: "Reference for VM Instance Types and Instance Profiles" +weight: 100 +aliases: + - /docs/v0/operations/virtualization/resources + - /docs/virtualization/resources + - /docs/operations/virtualization/resources +--- + +Each virtual machine has these two configuration settings: + +- `instanceType` defines the resourced provided to the Virtual Machine. +- `instanceProfile` defines the set of preferences for Virtual Machines, according to the OS being used. + +## Instance Type Resources + +### Reference table + +The following instancetype resources are provided by Cozystack: + +Name | vCPUs | Memory +-----|-------|------- +cx1.2xlarge | 8 | 16Gi +cx1.4xlarge | 16 | 32Gi +cx1.8xlarge | 32 | 64Gi +cx1.large | 2 | 4Gi +cx1.medium | 1 | 2Gi +cx1.xlarge | 4 | 8Gi +gn1.2xlarge | 8 | 32Gi +gn1.4xlarge | 16 | 64Gi +gn1.8xlarge | 32 | 128Gi +gn1.xlarge | 4 | 16Gi +m1.2xlarge | 8 | 64Gi +m1.4xlarge | 16 | 128Gi +m1.8xlarge | 32 | 256Gi +m1.large | 2 | 16Gi +m1.xlarge | 4 | 32Gi +n1.2xlarge | 16 | 32Gi +n1.4xlarge | 32 | 64Gi +n1.8xlarge | 64 | 128Gi +n1.large | 4 | 8Gi +n1.medium | 4 | 4Gi +n1.xlarge | 8 | 16Gi +o1.2xlarge | 8 | 32Gi +o1.4xlarge | 16 | 64Gi +o1.8xlarge | 32 | 128Gi +o1.large | 2 | 8Gi +o1.medium | 1 | 4Gi +o1.micro | 1 | 1Gi +o1.nano | 1 | 512Mi +o1.small | 1 | 2Gi +o1.xlarge | 4 | 16Gi +rt1.2xlarge | 8 | 32Gi +rt1.4xlarge | 16 | 64Gi +rt1.8xlarge | 32 | 128Gi +rt1.large | 2 | 8Gi +rt1.medium | 1 | 4Gi +rt1.micro | 1 | 1Gi +rt1.small | 1 | 2Gi +rt1.xlarge | 4 | 16Gi +u1.2xlarge | 8 | 32Gi +u1.2xmedium | 2 | 4Gi +u1.4xlarge | 16 | 64Gi +u1.8xlarge | 32 | 128Gi +u1.large | 2 | 8Gi +u1.medium | 1 | 4Gi +u1.micro | 1 | 1Gi +u1.nano | 1 | 512Mi +u1.small | 1 | 2Gi +u1.xlarge | 4 | 16Gi + + +### U Series + +The U Series is quite neutral and provides resources for +general purpose applications. + +*U* is the abbreviation for "Universal", hinting at the universal +attitude towards workloads. + +VMs of instance types will share physical CPU cores on a +time-slice basis with other VMs. + +Specific characteristics of this series are: +- *Burstable CPU performance* - The workload has a baseline compute + performance but is permitted to burst beyond this baseline, if + excess compute resources are available. +- *vCPU-To-Memory Ratio (1:4)* - A vCPU-to-Memory ratio of 1:4, for less + noise per node. + +### O Series + +The O Series is based on the U Series, with the only difference +being that memory is overcommitted. + +*O* is the abbreviation for "Overcommitted". + +Specific characteristics of this series are: +- *Burstable CPU performance* - The workload has a baseline compute + performance but is permitted to burst beyond this baseline, if + excess compute resources are available. +- *Overcommitted Memory* - Memory is over-committed in order to achieve + a higher workload density. +- *vCPU-To-Memory Ratio (1:4)* - A vCPU-to-Memory ratio of 1:4, for less + noise per node. + +### CX Series + +The CX Series provides exclusive compute resources for compute +intensive applications. + +*CX* is the abbreviation of "Compute Exclusive". + +The exclusive resources are given to the compute threads of the +VM. In order to ensure this, some additional cores (depending +on the number of disks and NICs) will be requested to offload +the IO threading from cores dedicated to the workload. +In addition, in this series, the NUMA topology of the used +cores is provided to the VM. + +Specific characteristics of this series are: +- *Hugepages* - Hugepages are used in order to improve memory + performance. +- *Dedicated CPU* - Physical cores are exclusively assigned to every + vCPU in order to provide fixed and high compute guarantees to the + workload. +- *Isolated emulator threads* - Hypervisor emulator threads are isolated + from the vCPUs in order to reduce emaulation related impact on the + workload. +- *vNUMA* - Physical NUMA topology is reflected in the guest in order to + optimize guest sided cache utilization. +- *vCPU-To-Memory Ratio (1:2)* - A vCPU-to-Memory ratio of 1:2. + +### M Series + +The M Series provides resources for memory intensive +applications. + +*M* is the abbreviation of "Memory". + +Specific characteristics of this series are: +- *Hugepages* - Hugepages are used in order to improve memory + performance. +- *Burstable CPU performance* - The workload has a baseline compute + performance but is permitted to burst beyond this baseline, if + excess compute resources are available. +- *vCPU-To-Memory Ratio (1:8)* - A vCPU-to-Memory ratio of 1:8, for much + less noise per node. + +### RT Series + +The RT Series provides resources for realtime applications, like Oslat. + +*RT* is the abbreviation for "realtime". + +This series of instance types requires nodes capable of running +realtime applications. + +Specific characteristics of this series are: +- *Hugepages* - Hugepages are used in order to improve memory + performance. +- *Dedicated CPU* - Physical cores are exclusively assigned to every + vCPU in order to provide fixed and high compute guarantees to the + workload. +- *Isolated emulator threads* - Hypervisor emulator threads are isolated + from the vCPUs in order to reduce emaulation related impact on the + workload. +- *vCPU-To-Memory Ratio (1:4)* - A vCPU-to-Memory ratio of 1:4 starting from + the medium size. + +## Instance Profile Resources + +The following preference resources are provided by Cozystack: + +Name | Guest OS +-----|--------- +alpine | Alpine +centos.7 | CentOS 7 +centos.7.desktop | CentOS 7 +centos.stream10 | CentOS Stream 10 +centos.stream10.desktop | CentOS Stream 10 +centos.stream8 | CentOS Stream 8 +centos.stream8.desktop | CentOS Stream 8 +centos.stream8.dpdk | CentOS Stream 8 +centos.stream9 | CentOS Stream 9 +centos.stream9.desktop | CentOS Stream 9 +centos.stream9.dpdk | CentOS Stream 9 +cirros | Cirros +fedora | Fedora (amd64) +fedora.arm64 | Fedora (arm64) +opensuse.leap | OpenSUSE Leap +opensuse.tumbleweed | OpenSUSE Tumbleweed +rhel.10 | Red Hat Enterprise Linux 10 Beta (amd64) +rhel.10.arm64 | Red Hat Enterprise Linux 10 Beta (arm64) +rhel.7 | Red Hat Enterprise Linux 7 +rhel.7.desktop | Red Hat Enterprise Linux 7 +rhel.8 | Red Hat Enterprise Linux 8 +rhel.8.desktop | Red Hat Enterprise Linux 8 +rhel.8.dpdk | Red Hat Enterprise Linux 8 +rhel.9 | Red Hat Enterprise Linux 9 (amd64) +rhel.9.arm64 | Red Hat Enterprise Linux 9 (arm64) +rhel.9.desktop | Red Hat Enterprise Linux 9 Desktop (amd64) +rhel.9.dpdk | Red Hat Enterprise Linux 9 DPDK (amd64) +rhel.9.realtime | Red Hat Enterprise Linux 9 Realtime (amd64) +sles | SUSE Linux Enterprise Server +ubuntu | Ubuntu +windows.10 | Microsoft Windows 10 +windows.10.virtio | Microsoft Windows 10 (virtio) +windows.11 | Microsoft Windows 11 +windows.11.virtio | Microsoft Windows 11 (virtio) +windows.2k16 | Microsoft Windows Server 2016 +windows.2k16.virtio | Microsoft Windows Server 2016 (virtio) +windows.2k19 | Microsoft Windows Server 2019 +windows.2k19.virtio | Microsoft Windows Server 2019 (virtio) +windows.2k22 | Microsoft Windows Server 2022 +windows.2k22.virtio | Microsoft Windows Server 2022 (virtio) +windows.2k25 | Microsoft Windows Server 2025 +windows.2k25.virtio | Microsoft Windows Server 2025 (virtio) + + +## Developing Instance Types and Profiles + +To get started with customizing or creating your own instancetypes and preferences +see [the development guide](/docs/v0/development/development.md). + diff --git a/content/en/docs/v0/virtualization/virtual-machine.md b/content/en/docs/v0/virtualization/virtual-machine.md new file mode 100644 index 00000000..ce25c44d --- /dev/null +++ b/content/en/docs/v0/virtualization/virtual-machine.md @@ -0,0 +1,293 @@ +--- +title: "Virtual Machine (simple)" +linkTitle: "Virtual Machine (simple)" +weight: 30 +aliases: + - /docs/v0/reference/applications/virtual-machine + - /docs/virtualization/virtual-machine + - /docs/reference/applications/virtual-machine +--- + + + + +A Virtual Machine (VM) simulates computer hardware, enabling various operating systems and applications to run in an isolated environment. + +## Deployment Details + +The virtual machine is managed and hosted through KubeVirt, allowing you to harness the benefits of virtualization within your Kubernetes ecosystem. + +- Docs: [KubeVirt User Guide](https://kubevirt.io/user-guide/) +- GitHub: [KubeVirt Repository](https://github.com/kubevirt/kubevirt) + +## Accessing virtual machine + +You can access the virtual machine using the virtctl tool: +- [KubeVirt User Guide - Virtctl Client Tool](https://kubevirt.io/user-guide/user_workloads/virtctl_client_tool/) + +To access the serial console: + +``` +virtctl console +``` + +To access the VM using VNC: + +``` +virtctl vnc +``` + +To SSH into the VM: + +``` +virtctl ssh @ +``` + +## Parameters + +### Common parameters + +| Name | Description | Type | Value | +| ------------------------- | ------------------------------------------------------- | ---------- | ------------ | +| `external` | Enable external access from outside the cluster. | `bool` | `false` | +| `externalMethod` | Method to pass through traffic to the VM. | `string` | `PortList` | +| `externalPorts` | Ports to forward from outside the cluster. | `[]int` | `[22]` | +| `running` | Whether the virtual machine should be running. | `bool` | `true` | +| `instanceType` | Virtual Machine instance type. | `string` | `u1.medium` | +| `instanceProfile` | Virtual Machine preferences profile. | `string` | `ubuntu` | +| `systemDisk` | System disk configuration. | `object` | `{}` | +| `systemDisk.image` | The base image for the virtual machine. | `string` | `ubuntu` | +| `systemDisk.storage` | The size of the disk allocated for the virtual machine. | `string` | `5Gi` | +| `systemDisk.storageClass` | StorageClass used to store the data. | `string` | `replicated` | +| `subnets` | Additional subnets | `[]object` | `[]` | +| `subnets[i].name` | Subnet name | `string` | `""` | +| `gpus` | List of GPUs to attach. | `[]object` | `[]` | +| `gpus[i].name` | The name of the GPU resource to attach. | `string` | `""` | +| `resources` | Resource configuration for the virtual machine. | `object` | `{}` | +| `resources.cpu` | Number of CPU cores allocated. | `quantity` | `""` | +| `resources.sockets` | Number of CPU sockets (vCPU topology). | `quantity` | `""` | +| `resources.memory` | Amount of memory allocated. | `quantity` | `""` | +| `sshKeys` | List of SSH public keys for authentication. | `[]string` | `[]` | +| `cloudInit` | Cloud-init user data. | `string` | `""` | +| `cloudInitSeed` | Seed string to generate SMBIOS UUID for the VM. | `string` | `""` | + + +## U Series + +The U Series is quite neutral and provides resources for +general purpose applications. + +*U* is the abbreviation for "Universal", hinting at the universal +attitude towards workloads. + +VMs of instance types will share physical CPU cores on a +time-slice basis with other VMs. + +### U Series Characteristics + +Specific characteristics of this series are: +- *Burstable CPU performance* - The workload has a baseline compute + performance but is permitted to burst beyond this baseline, if + excess compute resources are available. +- *vCPU-To-Memory Ratio (1:4)* - A vCPU-to-Memory ratio of 1:4, for less + noise per node. + +## O Series + +The O Series is based on the U Series, with the only difference +being that memory is overcommitted. + +*O* is the abbreviation for "Overcommitted". + +### UO Series Characteristics + +Specific characteristics of this series are: +- *Burstable CPU performance* - The workload has a baseline compute + performance but is permitted to burst beyond this baseline, if + excess compute resources are available. +- *Overcommitted Memory* - Memory is over-committed in order to achieve + a higher workload density. +- *vCPU-To-Memory Ratio (1:4)* - A vCPU-to-Memory ratio of 1:4, for less + noise per node. + +## CX Series + +The CX Series provides exclusive compute resources for compute +intensive applications. + +*CX* is the abbreviation of "Compute Exclusive". + +The exclusive resources are given to the compute threads of the +VM. In order to ensure this, some additional cores (depending +on the number of disks and NICs) will be requested to offload +the IO threading from cores dedicated to the workload. +In addition, in this series, the NUMA topology of the used +cores is provided to the VM. + +### CX Series Characteristics + +Specific characteristics of this series are: +- *Hugepages* - Hugepages are used in order to improve memory + performance. +- *Dedicated CPU* - Physical cores are exclusively assigned to every + vCPU in order to provide fixed and high compute guarantees to the + workload. +- *Isolated emulator threads* - Hypervisor emulator threads are isolated + from the vCPUs in order to reduce emaulation related impact on the + workload. +- *vNUMA* - Physical NUMA topology is reflected in the guest in order to + optimize guest sided cache utilization. +- *vCPU-To-Memory Ratio (1:2)* - A vCPU-to-Memory ratio of 1:2. + +## M Series + +The M Series provides resources for memory intensive +applications. + +*M* is the abbreviation of "Memory". + +### M Series Characteristics + +Specific characteristics of this series are: +- *Hugepages* - Hugepages are used in order to improve memory + performance. +- *Burstable CPU performance* - The workload has a baseline compute + performance but is permitted to burst beyond this baseline, if + excess compute resources are available. +- *vCPU-To-Memory Ratio (1:8)* - A vCPU-to-Memory ratio of 1:8, for much + less noise per node. + +## RT Series + +The RT Series provides resources for realtime applications, like Oslat. + +*RT* is the abbreviation for "realtime". + +This series of instance types requires nodes capable of running +realtime applications. + +### RT Series Characteristics + +Specific characteristics of this series are: +- *Hugepages* - Hugepages are used in order to improve memory + performance. +- *Dedicated CPU* - Physical cores are exclusively assigned to every + vCPU in order to provide fixed and high compute guarantees to the + workload. +- *Isolated emulator threads* - Hypervisor emulator threads are isolated + from the vCPUs in order to reduce emaulation related impact on the + workload. +- *vCPU-To-Memory Ratio (1:4)* - A vCPU-to-Memory ratio of 1:4 starting from + the medium size. + +## Development + +To get started with customizing or creating your own instancetypes and preferences +see [DEVELOPMENT.md](./DEVELOPMENT.md). + +## Resources + +The following instancetype resources are provided by Cozystack: + +Name | vCPUs | Memory +-----|-------|------- +cx1.2xlarge | 8 | 16Gi +cx1.4xlarge | 16 | 32Gi +cx1.8xlarge | 32 | 64Gi +cx1.large | 2 | 4Gi +cx1.medium | 1 | 2Gi +cx1.xlarge | 4 | 8Gi +gn1.2xlarge | 8 | 32Gi +gn1.4xlarge | 16 | 64Gi +gn1.8xlarge | 32 | 128Gi +gn1.xlarge | 4 | 16Gi +m1.2xlarge | 8 | 64Gi +m1.4xlarge | 16 | 128Gi +m1.8xlarge | 32 | 256Gi +m1.large | 2 | 16Gi +m1.xlarge | 4 | 32Gi +n1.2xlarge | 16 | 32Gi +n1.4xlarge | 32 | 64Gi +n1.8xlarge | 64 | 128Gi +n1.large | 4 | 8Gi +n1.medium | 4 | 4Gi +n1.xlarge | 8 | 16Gi +o1.2xlarge | 8 | 32Gi +o1.4xlarge | 16 | 64Gi +o1.8xlarge | 32 | 128Gi +o1.large | 2 | 8Gi +o1.medium | 1 | 4Gi +o1.micro | 1 | 1Gi +o1.nano | 1 | 512Mi +o1.small | 1 | 2Gi +o1.xlarge | 4 | 16Gi +rt1.2xlarge | 8 | 32Gi +rt1.4xlarge | 16 | 64Gi +rt1.8xlarge | 32 | 128Gi +rt1.large | 2 | 8Gi +rt1.medium | 1 | 4Gi +rt1.micro | 1 | 1Gi +rt1.small | 1 | 2Gi +rt1.xlarge | 4 | 16Gi +u1.2xlarge | 8 | 32Gi +u1.2xmedium | 2 | 4Gi +u1.4xlarge | 16 | 64Gi +u1.8xlarge | 32 | 128Gi +u1.large | 2 | 8Gi +u1.medium | 1 | 4Gi +u1.micro | 1 | 1Gi +u1.nano | 1 | 512Mi +u1.small | 1 | 2Gi +u1.xlarge | 4 | 16Gi + +The following preference resources are provided by Cozystack: + +Name | Guest OS +-----|--------- +alpine | Alpine +centos.7 | CentOS 7 +centos.7.desktop | CentOS 7 +centos.stream10 | CentOS Stream 10 +centos.stream10.desktop | CentOS Stream 10 +centos.stream8 | CentOS Stream 8 +centos.stream8.desktop | CentOS Stream 8 +centos.stream8.dpdk | CentOS Stream 8 +centos.stream9 | CentOS Stream 9 +centos.stream9.desktop | CentOS Stream 9 +centos.stream9.dpdk | CentOS Stream 9 +cirros | Cirros +fedora | Fedora (amd64) +fedora.arm64 | Fedora (arm64) +opensuse.leap | OpenSUSE Leap +opensuse.tumbleweed | OpenSUSE Tumbleweed +rhel.10 | Red Hat Enterprise Linux 10 Beta (amd64) +rhel.10.arm64 | Red Hat Enterprise Linux 10 Beta (arm64) +rhel.7 | Red Hat Enterprise Linux 7 +rhel.7.desktop | Red Hat Enterprise Linux 7 +rhel.8 | Red Hat Enterprise Linux 8 +rhel.8.desktop | Red Hat Enterprise Linux 8 +rhel.8.dpdk | Red Hat Enterprise Linux 8 +rhel.9 | Red Hat Enterprise Linux 9 (amd64) +rhel.9.arm64 | Red Hat Enterprise Linux 9 (arm64) +rhel.9.desktop | Red Hat Enterprise Linux 9 Desktop (amd64) +rhel.9.dpdk | Red Hat Enterprise Linux 9 DPDK (amd64) +rhel.9.realtime | Red Hat Enterprise Linux 9 Realtime (amd64) +sles | SUSE Linux Enterprise Server +ubuntu | Ubuntu +windows.10 | Microsoft Windows 10 +windows.10.virtio | Microsoft Windows 10 (virtio) +windows.11 | Microsoft Windows 11 +windows.11.virtio | Microsoft Windows 11 (virtio) +windows.2k16 | Microsoft Windows Server 2016 +windows.2k16.virtio | Microsoft Windows Server 2016 (virtio) +windows.2k19 | Microsoft Windows Server 2019 +windows.2k19.virtio | Microsoft Windows Server 2019 (virtio) +windows.2k22 | Microsoft Windows Server 2022 +windows.2k22.virtio | Microsoft Windows Server 2022 (virtio) +windows.2k25 | Microsoft Windows Server 2025 +windows.2k25.virtio | Microsoft Windows Server 2025 (virtio) + diff --git a/content/en/docs/v0/virtualization/vm-disk.md b/content/en/docs/v0/virtualization/vm-disk.md new file mode 100644 index 00000000..a6ed5f6c --- /dev/null +++ b/content/en/docs/v0/virtualization/vm-disk.md @@ -0,0 +1,36 @@ +--- +title: "Virtual Machine Disk" +linkTitle: "Virtual Machine Disk" +weight: 20 +aliases: + - /docs/v0/reference/applications/vm-disk + - /docs/virtualization/vm-disk + - /docs/reference/applications/vm-disk +--- + + + + +A Virtual Machine Disk + +## Parameters + +### Common parameters + +| Name | Description | Type | Value | +| ------------------- | ------------------------------------------------------------------------------------------------------------------------ | ---------- | ------------ | +| `source` | The source image location used to create a disk. | `object` | `{}` | +| `source.image` | Use image by name. | `*object` | `null` | +| `source.image.name` | Name of the image to use (uploaded as "golden image" or from the list: `ubuntu`, `fedora`, `cirros`, `alpine`, `talos`). | `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/content/en/docs/v0/virtualization/vm-image.md b/content/en/docs/v0/virtualization/vm-image.md new file mode 100644 index 00000000..f6b4ab10 --- /dev/null +++ b/content/en/docs/v0/virtualization/vm-image.md @@ -0,0 +1,128 @@ +--- +title: "Creating and Using Named VM Images" +linkTitle: "Golden Images" +description: "Guide to creating, managing, and using golden (named) VM images in Cozystack to speed up virtual machine deployment." +weight: 35 +aliases: + - /docs/virtualization/vm-image +--- + + + +Golden images in Cozystack allow administrators to prepare **named operating system images** that users can later reuse when creating virtual machines. +This guide explains the benefits of golden images, how to create them, and how to use them when deploying VMs. + +By default, every time a user creates a virtual machine, Cozystack downloads the required image from its source URL. +This can become a bottleneck when multiple VMs are created in quick succession. +Golden images solve this problem by caching the image locally, eliminating repeated downloads and speeding up deployment. + +## Naming Conventions (Important) + +Cozystack automatically adds prefixes to internal Kubernetes resources: + +| User-visible name | Resource Kind | Actual resource name | +|-------------------|---------------|----------------------| +| `` | DataVolume in `cozy-public` (golden image) | `vm-image-` | +| `` | DataVolume created from VMDisk | `vm-disk-` | +| `` | VirtualMachine created from VMInstance | `vm-instance-` | + +This means if you create a VMInstance named `ubuntu`, the VirtualMachine in Kubernetes will be `vm-instance-ubuntu`. + + +## Creating Golden Images + +Creating named VM images (golden images) requires an administrator account in Cozystack. + +The simplest way to create named VM images is by using the CLI script. +The [`cdi_golden_image_create.sh`](https://github.com/cozystack/cozystack/blob/main/hack/cdi_golden_image_create.sh) script can be downloaded from the Cozystack repository: + +```bash +wget https://github.com/cozystack/cozystack/blob/main/hack/cdi_golden_image_create.sh +chmod +x cdi_golden_image_create.sh +``` + +This script uses your `kubectl` configuration. +Before running it, ensure that your configuration points to the target Cozystack cluster. + +To create a named image, or to download one of the default images, run the script with the image name and its URL: + +```bash +cdi_golden_image_create.sh '' 'https://' +``` + +For example, all five default images, available with the `virtual-machine` application, can be downloaded for faster use: + +```bash +cdi_golden_image_create.sh 'ubuntu' 'https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img' +cdi_golden_image_create.sh 'fedora' 'https://download.fedoraproject.org/pub/fedora/linux/releases/40/Cloud/x86_64/images/Fedora-Cloud-Base-Generic.x86_64-40-1.14.qcow2' +cdi_golden_image_create.sh 'cirros' 'https://download.cirros-cloud.net/0.6.2/cirros-0.6.2-x86_64-disk.img' +cdi_golden_image_create.sh 'alpine' 'https://dl-cdn.alpinelinux.org/alpine/v3.20/releases/cloud/nocloud_alpine-3.20.2-x86_64-bios-tiny-r0.qcow2' +cdi_golden_image_create.sh 'talos' 'https://github.com/siderolabs/talos/releases/download/v1.7.6/nocloud-amd64.raw.xz' +``` + +Internally, the script creates Kubernetes resources of `kind: DataVolume` in the `cozy-public` namespace. +The resource name is the disk’s name prefixed with `vm-image-`. +For example, the resource `vm-image-ubuntu` creates a saved image named `ubuntu`. + +You can track the process by running the following commands: +```bash +kubectl -n cozy-public get dv +kubectl -n cozy-public describe dv vm-image-ubuntu +``` + +## Using Golden Images + +### Simple Virtual Machine + +Simple virtual machines (deployed with the `virtual-machine` application in Cozystack) already include a set of predefined named disk images. +By default, users can choose from `ubuntu`, `fedora`, `cirros`, `alpine`, and `talos`. + +These images are named but, in the default configuration, they are downloaded each time a VM is created. +Using golden images allows these files to be downloaded once and stored locally, significantly speeding up VM deployment. + +The next step is to create a VMDisk, which we will later attach to our future VM: + +```bash +kubectl -n tenant-root create -f- < + + +A Virtual Machine (VM) simulates computer hardware, enabling various operating systems and applications to run in an isolated environment. + +## Deployment Details + +The virtual machine is managed and hosted through KubeVirt, allowing you to harness the benefits of virtualization within your Kubernetes ecosystem. + +- Docs: [KubeVirt User Guide](https://kubevirt.io/user-guide/) +- GitHub: [KubeVirt Repository](https://github.com/kubevirt/kubevirt) + +## Accessing virtual machine + +You can access the virtual machine using the virtctl tool: +- [KubeVirt User Guide - Virtctl Client Tool](https://kubevirt.io/user-guide/user_workloads/virtctl_client_tool/) + +To access the serial console: + +``` +virtctl console +``` + +To access the VM using VNC: + +``` +virtctl vnc +``` + +To SSH into the VM: + +``` +virtctl ssh @ +``` + +## Parameters + +### Common parameters + +| Name | Description | Type | Value | +| ------------------- | ------------------------------------------------------------------- | ---------- | ----------- | +| `external` | Enable external access from outside the cluster. | `bool` | `false` | +| `externalMethod` | Method to pass through traffic to the VM. | `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 (e.g. "sata"). | `string` | `""` | +| `subnets` | Additional subnets | `[]object` | `[]` | +| `subnets[i].name` | Subnet name | `string` | `""` | +| `gpus` | List of GPUs to attach (NVIDIA driver requires at least 4 GiB RAM). | `[]object` | `[]` | +| `gpus[i].name` | The name of the GPU resource to attach. | `string` | `""` | +| `resources` | Resource configuration for the virtual machine. | `object` | `{}` | +| `resources.cpu` | Number of CPU cores allocated. | `quantity` | `""` | +| `resources.memory` | Amount of memory allocated. | `quantity` | `""` | +| `resources.sockets` | Number of CPU sockets (vCPU topology). | `quantity` | `""` | +| `sshKeys` | List of SSH public keys for authentication. | `[]string` | `[]` | +| `cloudInit` | Cloud-init user data. | `string` | `""` | +| `cloudInitSeed` | Seed string to generate SMBIOS UUID for the VM. | `string` | `""` | + + +## U Series + +The U Series is quite neutral and provides resources for +general purpose applications. + +*U* is the abbreviation for "Universal", hinting at the universal +attitude towards workloads. + +VMs of instance types will share physical CPU cores on a +time-slice basis with other VMs. + +### U Series Characteristics + +Specific characteristics of this series are: +- *Burstable CPU performance* - The workload has a baseline compute + performance but is permitted to burst beyond this baseline, if + excess compute resources are available. +- *vCPU-To-Memory Ratio (1:4)* - A vCPU-to-Memory ratio of 1:4, for less + noise per node. + +## O Series + +The O Series is based on the U Series, with the only difference +being that memory is overcommitted. + +*O* is the abbreviation for "Overcommitted". + +### UO Series Characteristics + +Specific characteristics of this series are: +- *Burstable CPU performance* - The workload has a baseline compute + performance but is permitted to burst beyond this baseline, if + excess compute resources are available. +- *Overcommitted Memory* - Memory is over-committed in order to achieve + a higher workload density. +- *vCPU-To-Memory Ratio (1:4)* - A vCPU-to-Memory ratio of 1:4, for less + noise per node. + +## CX Series + +The CX Series provides exclusive compute resources for compute +intensive applications. + +*CX* is the abbreviation of "Compute Exclusive". + +The exclusive resources are given to the compute threads of the +VM. In order to ensure this, some additional cores (depending +on the number of disks and NICs) will be requested to offload +the IO threading from cores dedicated to the workload. +In addition, in this series, the NUMA topology of the used +cores is provided to the VM. + +### CX Series Characteristics + +Specific characteristics of this series are: +- *Hugepages* - Hugepages are used in order to improve memory + performance. +- *Dedicated CPU* - Physical cores are exclusively assigned to every + vCPU in order to provide fixed and high compute guarantees to the + workload. +- *Isolated emulator threads* - Hypervisor emulator threads are isolated + from the vCPUs in order to reduce emaulation related impact on the + workload. +- *vNUMA* - Physical NUMA topology is reflected in the guest in order to + optimize guest sided cache utilization. +- *vCPU-To-Memory Ratio (1:2)* - A vCPU-to-Memory ratio of 1:2. + +## M Series + +The M Series provides resources for memory intensive +applications. + +*M* is the abbreviation of "Memory". + +### M Series Characteristics + +Specific characteristics of this series are: +- *Hugepages* - Hugepages are used in order to improve memory + performance. +- *Burstable CPU performance* - The workload has a baseline compute + performance but is permitted to burst beyond this baseline, if + excess compute resources are available. +- *vCPU-To-Memory Ratio (1:8)* - A vCPU-to-Memory ratio of 1:8, for much + less noise per node. + +## RT Series + +The RT Series provides resources for realtime applications, like Oslat. + +*RT* is the abbreviation for "realtime". + +This series of instance types requires nodes capable of running +realtime applications. + +### RT Series Characteristics + +Specific characteristics of this series are: +- *Hugepages* - Hugepages are used in order to improve memory + performance. +- *Dedicated CPU* - Physical cores are exclusively assigned to every + vCPU in order to provide fixed and high compute guarantees to the + workload. +- *Isolated emulator threads* - Hypervisor emulator threads are isolated + from the vCPUs in order to reduce emaulation related impact on the + workload. +- *vCPU-To-Memory Ratio (1:4)* - A vCPU-to-Memory ratio of 1:4 starting from + the medium size. + +## Development + +To get started with customizing or creating your own instancetypes and preferences +see [DEVELOPMENT.md](./DEVELOPMENT.md). + +## Resources + +The following instancetype resources are provided by Cozystack: + +Name | vCPUs | Memory +-----|-------|------- +cx1.2xlarge | 8 | 16Gi +cx1.4xlarge | 16 | 32Gi +cx1.8xlarge | 32 | 64Gi +cx1.large | 2 | 4Gi +cx1.medium | 1 | 2Gi +cx1.xlarge | 4 | 8Gi +gn1.2xlarge | 8 | 32Gi +gn1.4xlarge | 16 | 64Gi +gn1.8xlarge | 32 | 128Gi +gn1.xlarge | 4 | 16Gi +m1.2xlarge | 8 | 64Gi +m1.4xlarge | 16 | 128Gi +m1.8xlarge | 32 | 256Gi +m1.large | 2 | 16Gi +m1.xlarge | 4 | 32Gi +n1.2xlarge | 16 | 32Gi +n1.4xlarge | 32 | 64Gi +n1.8xlarge | 64 | 128Gi +n1.large | 4 | 8Gi +n1.medium | 4 | 4Gi +n1.xlarge | 8 | 16Gi +o1.2xlarge | 8 | 32Gi +o1.4xlarge | 16 | 64Gi +o1.8xlarge | 32 | 128Gi +o1.large | 2 | 8Gi +o1.medium | 1 | 4Gi +o1.micro | 1 | 1Gi +o1.nano | 1 | 512Mi +o1.small | 1 | 2Gi +o1.xlarge | 4 | 16Gi +rt1.2xlarge | 8 | 32Gi +rt1.4xlarge | 16 | 64Gi +rt1.8xlarge | 32 | 128Gi +rt1.large | 2 | 8Gi +rt1.medium | 1 | 4Gi +rt1.micro | 1 | 1Gi +rt1.small | 1 | 2Gi +rt1.xlarge | 4 | 16Gi +u1.2xlarge | 8 | 32Gi +u1.2xmedium | 2 | 4Gi +u1.4xlarge | 16 | 64Gi +u1.8xlarge | 32 | 128Gi +u1.large | 2 | 8Gi +u1.medium | 1 | 4Gi +u1.micro | 1 | 1Gi +u1.nano | 1 | 512Mi +u1.small | 1 | 2Gi +u1.xlarge | 4 | 16Gi + +The following preference resources are provided by Cozystack: + +Name | Guest OS +-----|--------- +alpine | Alpine +centos.7 | CentOS 7 +centos.7.desktop | CentOS 7 +centos.stream10 | CentOS Stream 10 +centos.stream10.desktop | CentOS Stream 10 +centos.stream8 | CentOS Stream 8 +centos.stream8.desktop | CentOS Stream 8 +centos.stream8.dpdk | CentOS Stream 8 +centos.stream9 | CentOS Stream 9 +centos.stream9.desktop | CentOS Stream 9 +centos.stream9.dpdk | CentOS Stream 9 +cirros | Cirros +fedora | Fedora (amd64) +fedora.arm64 | Fedora (arm64) +opensuse.leap | OpenSUSE Leap +opensuse.tumbleweed | OpenSUSE Tumbleweed +rhel.10 | Red Hat Enterprise Linux 10 Beta (amd64) +rhel.10.arm64 | Red Hat Enterprise Linux 10 Beta (arm64) +rhel.7 | Red Hat Enterprise Linux 7 +rhel.7.desktop | Red Hat Enterprise Linux 7 +rhel.8 | Red Hat Enterprise Linux 8 +rhel.8.desktop | Red Hat Enterprise Linux 8 +rhel.8.dpdk | Red Hat Enterprise Linux 8 +rhel.9 | Red Hat Enterprise Linux 9 (amd64) +rhel.9.arm64 | Red Hat Enterprise Linux 9 (arm64) +rhel.9.desktop | Red Hat Enterprise Linux 9 Desktop (amd64) +rhel.9.dpdk | Red Hat Enterprise Linux 9 DPDK (amd64) +rhel.9.realtime | Red Hat Enterprise Linux 9 Realtime (amd64) +sles | SUSE Linux Enterprise Server +ubuntu | Ubuntu +windows.10 | Microsoft Windows 10 +windows.10.virtio | Microsoft Windows 10 (virtio) +windows.11 | Microsoft Windows 11 +windows.11.virtio | Microsoft Windows 11 (virtio) +windows.2k16 | Microsoft Windows Server 2016 +windows.2k16.virtio | Microsoft Windows Server 2016 (virtio) +windows.2k19 | Microsoft Windows Server 2019 +windows.2k19.virtio | Microsoft Windows Server 2019 (virtio) +windows.2k22 | Microsoft Windows Server 2022 +windows.2k22.virtio | Microsoft Windows Server 2022 (virtio) +windows.2k25 | Microsoft Windows Server 2025 +windows.2k25.virtio | Microsoft Windows Server 2025 (virtio) + diff --git a/content/en/docs/v0/virtualization/windows.md b/content/en/docs/v0/virtualization/windows.md new file mode 100644 index 00000000..048ce307 --- /dev/null +++ b/content/en/docs/v0/virtualization/windows.md @@ -0,0 +1,216 @@ +--- +title: "Running Windows VMs in Cozystack" +linkTitle: "Windows VMs" +description: "Running Windows VMs in Cozystack" +weight: 50 +aliases: + - /docs/v0/operations/virtualization/windows + - /docs/virtualization/windows + - /docs/operations/virtualization/windows +--- + +Cozystack can run Windows virtual machines. +This guide explains the prerequisites and steps required to boot up a virtual machine running Windows OS. + + +## Prerequisites + +- Windows installation ISO image. +- Virtio drivers ISO image. +- KubeVirt client `virtctl` [installed in your local environment](https://kubevirt.io/user-guide/user_workloads/virtctl_client_tool/) + and configured for your tenant's namespace. +- Cozystack version v0.34.2 or later. + +## Installation + +Creating a virtual machine running Windows OS starts with creating `VMDisk` objects +and continues with creating a `VMInstance`. + +### 1. Create VMDisk objects + +You need **three disks**: + +1. **Installation ISO** – optical. +2. **Virtio drivers ISO** – optical. +3. **System disk** – non‑optical. + +The following example uses minimally recommended storage volumes. + +```yaml +apiVersion: apps.cozystack.io/v1alpha1 +kind: VMDisk +metadata: + name: win2k25-iso +spec: + source: + http: + url: https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1742.240906-0331.ge_release_svc_refresh_SERVER_EVAL_x64FRE_en-us.iso + optical: true + storage: 6Gi + storageClass: replicated +--- +apiVersion: apps.cozystack.io/v1alpha1 +kind: VMDisk +metadata: + name: virtio-drivers +spec: + source: + http: + url: https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso + optical: true + storage: 1Gi + storageClass: replicated +--- +apiVersion: apps.cozystack.io/v1alpha1 +kind: VMDisk +metadata: + name: win2k25-system +spec: + optical: false + storage: 50Gi + storageClass: replicated +``` + +### 2. Create a VMInstance + +Pick a **Virtio‑ready** instance profile and attach an empty system disk. +Choose from the available Virtio profiles: + +```text +windows.10.virtio +windows.11.virtio +windows.2k16.virtio +windows.2k19.virtio +windows.2k22.virtio +windows.2k25.virtio +``` + +Create a `VMInstance` object as shown in this example: + +```yaml +apiVersion: apps.cozystack.io/v1alpha1 +kind: VMInstance +metadata: + name: win2k25-demo +spec: + running: true + instanceType: "u1.xlarge" + instanceProfile: windows.2k25.virtio # picked from the list above + disks: + - name: win2k25-system + - name: win2k25-iso + - name: virtio-drivers +``` + +### 3. Install Windows + +1. Open the console using the `virtctl` client: + + ```bash + virtctl vnc vm-instance-win2k25-demo + ``` + +2. Proceed with the standard Windows setup. + +3. When prompted **"Where do you want to install Windows?"** select **Load driver**, + then browse to the Virtio CD‑ROM, for example `E:\viostor\amd64\`. + +4. After the virtual disk appears, continue installation and let Windows reboot. + +5. After the first reboot, detach the Windows installation disk (`win2k25-iso`) and Virtio drivers (`virtio-drivers`) from the VMInstance. + + +## Converting an Existing Windows Image + +If you already have a Windows disk produced on VMware, Hyper‑V, or another cloud, +you can follow this path to make it Virtio‑ready in Cozystack. + + +### 1. Create a dummy VMDisk for Virtio driver + +Create a dummy VMDisk which will be used to handle the installation of Virtio driver: + +```yaml +apiVersion: apps.cozystack.io/v1alpha1 +kind: VMDisk +metadata: + name: dummy-disk-for-virtio +spec: + optical: false + storage: "1Gi" + storageClass: "replicated" +``` + +### 2. Launch with a drive and non‑Virtio bus + +When creating a `VMInstance`, attach your system disk with bus `sata` and the dummy disk with an unspecified bus — +the disk will then default to the Virtio SCSI bus. +You may also mount the Virtio ISO at the same time to simplify driver installation. + +```yaml +spec: + instanceProfile: windows.2k25.virtio + disks: + - name: win2k19-system + bus: sata + - name: dummy-disk-for-virtio + - name: virtio-drivers + bus: sata +``` + + +### 3. Install Virtio storage drivers + +Follow these steps to install Virtio drivers: + +1. Mount `virtio-win.iso` inside the guest. +2. Run setup wizard to install the drivers +3. Make sure that driver installation is successful: + 1. Open the Device Manager + 2. You should see the SCSI device listed with the exclamation point icon beside it. + 3. If driver is not installed, right‑click the device and select **Update Driver**. + 4. Choose **Install the hardware that I manually select from a list**, then **Show All Devices**, then **Next**. + 5. Click **Have Disk…**, browse to the `.inf`, and finish the wizard. + +Alternatively, right‑click the `.inf` in the Explorer and select **Install**. + +### 4. Switch to the Virtio bus + +Once drivers are installed, you need to switch to the Virtio bus. +Follow these steps: + +1. Power off the VM. +2. Edit the `VMInstance` and remove the `bus: sata` line from the system disk, as well the dummy disk: + + ```yaml + spec: + disks: + - name: win2k19-system + # bus: sata + #- name: dummy-disk-for-virtio + ``` + +3. Apply the manifest and power the VM back on. Windows should boot normally using Virtio. +4. The dummy disk can now be removed: + + ```bash + kubectl delete vmdisk dummy-disk-for-virtio + ``` + +## Network MTU considerations + +Cozystack sets MTU size to 1400 on every vNIC. +Windows correctly detects this only when using VirtioNet. +With legacy network drivers you may experience packet loss. + +To force Windows to respect MTU 1400, run the following commands in PowerShell: + +```powershell +# List interfaces +Get-NetIPInterface + +# Set MTU permanently +Set-NetIPInterface -InterfaceAlias "Ethernet Instance 0" -NlMtuBytes 1400 +``` + +Using a Virtio profile is strongly recommended. diff --git a/content/en/docs/v1/.gitkeep b/content/en/docs/v1/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/content/en/docs/v1/_index.md b/content/en/docs/v1/_index.md new file mode 100644 index 00000000..dd75a939 --- /dev/null +++ b/content/en/docs/v1/_index.md @@ -0,0 +1,17 @@ +--- +title: "Cozystack v1 Documentation" +linkTitle: "Cozystack v1" +description: "Free PaaS platform and framework for building clouds" +taxonomyCloud: [] +cascade: + type: docs +weight: 10 +aliases: + - /docs/v1/reference +--- + +Cozystack is a free PaaS platform and framework for building clouds + +With Cozystack, you can transform your bunch of servers into an intelligent system with a simple REST API for spawning Kubernetes clusters, Database-as-a-Service, virtual machines, load balancers, HTTP caching services, and other services with ease. + +You can use Cozystack to build your own cloud or to provide a cost-effective development environments. diff --git a/content/en/docs/applications/_include/clickhouse.md b/content/en/docs/v1/applications/_include/clickhouse.md similarity index 76% rename from content/en/docs/applications/_include/clickhouse.md rename to content/en/docs/v1/applications/_include/clickhouse.md index 7d05f8f0..f0efd893 100644 --- a/content/en/docs/applications/_include/clickhouse.md +++ b/content/en/docs/v1/applications/_include/clickhouse.md @@ -5,5 +5,6 @@ description: "" weight: 10 aliases: - /docs/reference/applications/clickhouse + - /docs/v1/reference/applications/clickhouse --- diff --git a/content/en/docs/applications/_include/ferretdb.md b/content/en/docs/v1/applications/_include/ferretdb.md similarity index 73% rename from content/en/docs/applications/_include/ferretdb.md rename to content/en/docs/v1/applications/_include/ferretdb.md index 344239df..ffb86393 100644 --- a/content/en/docs/applications/_include/ferretdb.md +++ b/content/en/docs/v1/applications/_include/ferretdb.md @@ -4,5 +4,6 @@ linkTitle: "FerretDB" weight: 20 aliases: - /docs/reference/applications/ferretdb + - /docs/v1/reference/applications/ferretdb --- diff --git a/content/en/docs/applications/_include/kafka.md b/content/en/docs/v1/applications/_include/kafka.md similarity index 73% rename from content/en/docs/applications/_include/kafka.md rename to content/en/docs/v1/applications/_include/kafka.md index 8e51a4d4..e5c56db9 100644 --- a/content/en/docs/applications/_include/kafka.md +++ b/content/en/docs/v1/applications/_include/kafka.md @@ -4,5 +4,6 @@ linkTitle: "Kafka" weight: 30 aliases: - /docs/reference/applications/kafka + - /docs/v1/reference/applications/kafka --- diff --git a/content/en/docs/applications/_include/mongodb.md b/content/en/docs/v1/applications/_include/mongodb.md similarity index 73% rename from content/en/docs/applications/_include/mongodb.md rename to content/en/docs/v1/applications/_include/mongodb.md index b74f068d..88324f13 100644 --- a/content/en/docs/applications/_include/mongodb.md +++ b/content/en/docs/v1/applications/_include/mongodb.md @@ -4,5 +4,6 @@ linkTitle: "MongoDB" weight: 65 aliases: - /docs/reference/applications/mongodb + - /docs/v1/reference/applications/mongodb --- diff --git a/content/en/docs/applications/_include/mysql.md b/content/en/docs/v1/applications/_include/mysql.md similarity index 73% rename from content/en/docs/applications/_include/mysql.md rename to content/en/docs/v1/applications/_include/mysql.md index b4c200f8..2716d891 100644 --- a/content/en/docs/applications/_include/mysql.md +++ b/content/en/docs/v1/applications/_include/mysql.md @@ -4,5 +4,6 @@ linkTitle: "MariaDB" weight: 40 aliases: - /docs/reference/applications/mariadb + - /docs/v1/reference/applications/mariadb --- diff --git a/content/en/docs/applications/_include/nats.md b/content/en/docs/v1/applications/_include/nats.md similarity index 73% rename from content/en/docs/applications/_include/nats.md rename to content/en/docs/v1/applications/_include/nats.md index fc9d535c..60bb511f 100644 --- a/content/en/docs/applications/_include/nats.md +++ b/content/en/docs/v1/applications/_include/nats.md @@ -4,5 +4,6 @@ linkTitle: "NATS" weight: 50 aliases: - /docs/reference/applications/nats + - /docs/v1/reference/applications/nats --- diff --git a/content/en/docs/applications/_include/postgres.md b/content/en/docs/v1/applications/_include/postgres.md similarity index 74% rename from content/en/docs/applications/_include/postgres.md rename to content/en/docs/v1/applications/_include/postgres.md index 08167500..774bfbae 100644 --- a/content/en/docs/applications/_include/postgres.md +++ b/content/en/docs/v1/applications/_include/postgres.md @@ -4,5 +4,6 @@ linkTitle: "PostgreSQL" weight: 60 aliases: - /docs/reference/applications/postgres + - /docs/v1/reference/applications/postgres --- diff --git a/content/en/docs/applications/_include/rabbitmq.md b/content/en/docs/v1/applications/_include/rabbitmq.md similarity index 73% rename from content/en/docs/applications/_include/rabbitmq.md rename to content/en/docs/v1/applications/_include/rabbitmq.md index d0da41a7..6f59b9bd 100644 --- a/content/en/docs/applications/_include/rabbitmq.md +++ b/content/en/docs/v1/applications/_include/rabbitmq.md @@ -4,5 +4,6 @@ linkTitle: "RabbitMQ" weight: 70 aliases: - /docs/reference/applications/rabbitmq + - /docs/v1/reference/applications/rabbitmq --- diff --git a/content/en/docs/applications/_include/redis.md b/content/en/docs/v1/applications/_include/redis.md similarity index 73% rename from content/en/docs/applications/_include/redis.md rename to content/en/docs/v1/applications/_include/redis.md index e725c4bd..b8fdad02 100644 --- a/content/en/docs/applications/_include/redis.md +++ b/content/en/docs/v1/applications/_include/redis.md @@ -4,5 +4,6 @@ linkTitle: "Redis" weight: 80 aliases: - /docs/reference/applications/redis + - /docs/v1/reference/applications/redis --- diff --git a/content/en/docs/applications/_include/tenant.md b/content/en/docs/v1/applications/_include/tenant.md similarity index 74% rename from content/en/docs/applications/_include/tenant.md rename to content/en/docs/v1/applications/_include/tenant.md index f01be6cf..907c37ae 100644 --- a/content/en/docs/applications/_include/tenant.md +++ b/content/en/docs/v1/applications/_include/tenant.md @@ -4,5 +4,6 @@ linkTitle: "Tenant" weight: 90 aliases: - /docs/reference/applications/tenant + - /docs/v1/reference/applications/tenant --- diff --git a/content/en/docs/applications/_index.md b/content/en/docs/v1/applications/_index.md similarity index 93% rename from content/en/docs/applications/_index.md rename to content/en/docs/v1/applications/_index.md index 31d05206..d0c85f56 100644 --- a/content/en/docs/applications/_index.md +++ b/content/en/docs/v1/applications/_index.md @@ -4,8 +4,8 @@ linkTitle: "Managed Applications" description: "Learn how to deploy, configure, access, and backup managed applications in Cozystack." weight: 45 aliases: - - /docs/components - - /docs/guides/applications + - /docs/v1/components + - /docs/v1/guides/applications --- ## Available Application Versions diff --git a/content/en/docs/applications/clickhouse.md b/content/en/docs/v1/applications/clickhouse.md similarity index 98% rename from content/en/docs/applications/clickhouse.md rename to content/en/docs/v1/applications/clickhouse.md index 88315457..dd4eb43e 100644 --- a/content/en/docs/applications/clickhouse.md +++ b/content/en/docs/v1/applications/clickhouse.md @@ -4,12 +4,12 @@ linkTitle: "ClickHouse" description: "" weight: 10 aliases: - - /docs/reference/applications/clickhouse + - /docs/v1/reference/applications/clickhouse --- diff --git a/content/en/docs/applications/external.md b/content/en/docs/v1/applications/external.md similarity index 96% rename from content/en/docs/applications/external.md rename to content/en/docs/v1/applications/external.md index 3da33ca4..1b223f64 100644 --- a/content/en/docs/applications/external.md +++ b/content/en/docs/v1/applications/external.md @@ -8,7 +8,7 @@ weight: 5 Since v0.37.0, Cozystack administrators can add applications from external sources in addition to the standard application catalog. These applications will appear in the same application catalog and behave like regular managed applications for platform users. -This guide explains howto define a managed application package and how to add it to Cozystack. +This guide explains how to define a managed application package and how to add it to Cozystack. ## 1. Create an Application Package Repository diff --git a/content/en/docs/applications/ferretdb.md b/content/en/docs/v1/applications/ferretdb.md similarity index 98% rename from content/en/docs/applications/ferretdb.md rename to content/en/docs/v1/applications/ferretdb.md index b77cfdfc..78c5bb9f 100644 --- a/content/en/docs/applications/ferretdb.md +++ b/content/en/docs/v1/applications/ferretdb.md @@ -3,12 +3,12 @@ title: "Managed FerretDB Service" linkTitle: "FerretDB" weight: 20 aliases: - - /docs/reference/applications/ferretdb + - /docs/v1/reference/applications/ferretdb --- diff --git a/content/en/docs/applications/kafka.md b/content/en/docs/v1/applications/kafka.md similarity index 98% rename from content/en/docs/applications/kafka.md rename to content/en/docs/v1/applications/kafka.md index 770c9c34..1e3b0dcd 100644 --- a/content/en/docs/applications/kafka.md +++ b/content/en/docs/v1/applications/kafka.md @@ -3,12 +3,12 @@ title: "Managed Kafka Service" linkTitle: "Kafka" weight: 30 aliases: - - /docs/reference/applications/kafka + - /docs/v1/reference/applications/kafka --- diff --git a/content/en/docs/applications/mongodb.md b/content/en/docs/v1/applications/mongodb.md similarity index 99% rename from content/en/docs/applications/mongodb.md rename to content/en/docs/v1/applications/mongodb.md index 0a6c001c..70e9fe44 100644 --- a/content/en/docs/applications/mongodb.md +++ b/content/en/docs/v1/applications/mongodb.md @@ -3,12 +3,12 @@ title: "Managed MongoDB Service" linkTitle: "MongoDB" weight: 65 aliases: - - /docs/reference/applications/mongodb + - /docs/v1/reference/applications/mongodb --- @@ -124,3 +124,4 @@ Run `helm upgrade` after MongoDB is ready to populate the credentials secret wit | `bootstrap.recoveryTime` | Timestamp for point-in-time recovery; empty means latest. | `string` | `""` | | `bootstrap.backupName` | Name of backup to restore from. | `string` | `""` | + diff --git a/content/en/docs/applications/mysql.md b/content/en/docs/v1/applications/mysql.md similarity index 95% rename from content/en/docs/applications/mysql.md rename to content/en/docs/v1/applications/mysql.md index 66cbf185..94b8a4b2 100644 --- a/content/en/docs/applications/mysql.md +++ b/content/en/docs/v1/applications/mysql.md @@ -3,12 +3,12 @@ title: "Managed MariaDB Service" linkTitle: "MariaDB" weight: 40 aliases: - - /docs/reference/applications/mariadb + - /docs/v1/reference/applications/mariadb --- @@ -28,7 +28,7 @@ This managed service is controlled by mariadb-operator, ensuring efficient manag ### How to switch master/slave replica ```bash -kubectl edit mariadb +kubectl edit mariadb ``` update: @@ -67,11 +67,11 @@ more details: - **Replication can't be finished with various errors** - **Replication can't be finished in case if `binlog` purged** - Until `mariadbbackup` is not used to bootstrap a node by mariadb-operator (this feature is not inmplemented yet), follow these manual steps to fix it: + Until `mariadbbackup` is not used to bootstrap a node by mariadb-operator (this feature is not implemented yet), follow these manual steps to fix it: https://github.com/mariadb-operator/mariadb-operator/issues/141#issuecomment-1804760231 -- **Corrupted indicies** - Sometimes some indecies can be corrupted on master replica, you can recover them from slave: +- **Corrupted indices** + Sometimes some indices can be corrupted on master replica, you can recover them from slave: ```bash mysqldump -h -P 3306 -u -p --column-statistics=0
~/tmp/fix-table.sql diff --git a/content/en/docs/applications/nats.md b/content/en/docs/v1/applications/nats.md similarity index 98% rename from content/en/docs/applications/nats.md rename to content/en/docs/v1/applications/nats.md index 0c6b0a2f..f073bc01 100644 --- a/content/en/docs/applications/nats.md +++ b/content/en/docs/v1/applications/nats.md @@ -3,12 +3,12 @@ title: "Managed NATS Service" linkTitle: "NATS" weight: 50 aliases: - - /docs/reference/applications/nats + - /docs/v1/reference/applications/nats --- diff --git a/content/en/docs/applications/postgres.md b/content/en/docs/v1/applications/postgres.md similarity index 99% rename from content/en/docs/applications/postgres.md rename to content/en/docs/v1/applications/postgres.md index 05706179..b1d4827e 100644 --- a/content/en/docs/applications/postgres.md +++ b/content/en/docs/v1/applications/postgres.md @@ -3,12 +3,12 @@ title: "Managed PostgreSQL Service" linkTitle: "PostgreSQL" weight: 60 aliases: - - /docs/reference/applications/postgres + - /docs/v1/reference/applications/postgres --- diff --git a/content/en/docs/applications/rabbitmq.md b/content/en/docs/v1/applications/rabbitmq.md similarity index 97% rename from content/en/docs/applications/rabbitmq.md rename to content/en/docs/v1/applications/rabbitmq.md index 0322e0af..170cba75 100644 --- a/content/en/docs/applications/rabbitmq.md +++ b/content/en/docs/v1/applications/rabbitmq.md @@ -3,12 +3,12 @@ title: "Managed RabbitMQ Service" linkTitle: "RabbitMQ" weight: 70 aliases: - - /docs/reference/applications/rabbitmq + - /docs/v1/reference/applications/rabbitmq --- diff --git a/content/en/docs/applications/redis.md b/content/en/docs/v1/applications/redis.md similarity index 97% rename from content/en/docs/applications/redis.md rename to content/en/docs/v1/applications/redis.md index dd71d18a..26bd835c 100644 --- a/content/en/docs/applications/redis.md +++ b/content/en/docs/v1/applications/redis.md @@ -3,12 +3,12 @@ title: "Managed Redis Service" linkTitle: "Redis" weight: 80 aliases: - - /docs/reference/applications/redis + - /docs/v1/reference/applications/redis --- diff --git a/content/en/docs/applications/tenant.md b/content/en/docs/v1/applications/tenant.md similarity index 98% rename from content/en/docs/applications/tenant.md rename to content/en/docs/v1/applications/tenant.md index bf45e954..65a7dc3a 100644 --- a/content/en/docs/applications/tenant.md +++ b/content/en/docs/v1/applications/tenant.md @@ -3,12 +3,12 @@ title: "Tenant Application Reference" linkTitle: "Tenant" weight: 90 aliases: - - /docs/reference/applications/tenant + - /docs/v1/reference/applications/tenant --- diff --git a/content/en/docs/cozystack-api/_index.md b/content/en/docs/v1/cozystack-api/_index.md similarity index 99% rename from content/en/docs/cozystack-api/_index.md rename to content/en/docs/v1/cozystack-api/_index.md index c9e1bc5c..e24621db 100644 --- a/content/en/docs/cozystack-api/_index.md +++ b/content/en/docs/v1/cozystack-api/_index.md @@ -3,7 +3,7 @@ title: Cozystack API description: Cozystack API weight: 70 aliases: -- /docs/development/cozystack-api + - /docs/v1/development/cozystack-api --- ## Cozystack API diff --git a/content/en/docs/v1/cozystack-api/api.json b/content/en/docs/v1/cozystack-api/api.json new file mode 100644 index 00000000..ca7a975a --- /dev/null +++ b/content/en/docs/v1/cozystack-api/api.json @@ -0,0 +1 @@ +{"openapi":"3.0.0","info":{"title":"Apps","version":"0.1-fa5a81e359826a59"},"paths":{"/apis/apps.cozystack.io/v1alpha1/":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"get available resources","operationId":"getAppsCozystackIoV1alpha1APIResources","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"}}}}}}},"/apis/apps.cozystack.io/v1alpha1/bootboxes":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind BootBox","operationId":"listAppsCozystackIoV1alpha1BootBoxForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBoxList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBoxList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBoxList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBoxList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBoxList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"BootBox","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/buckets":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind Bucket","operationId":"listAppsCozystackIoV1alpha1BucketForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BucketList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BucketList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BucketList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BucketList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BucketList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Bucket","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/clickhouses":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind ClickHouse","operationId":"listAppsCozystackIoV1alpha1ClickHouseForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouseList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouseList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouseList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouseList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouseList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"ClickHouse","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/etcds":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind Etcd","operationId":"listAppsCozystackIoV1alpha1EtcdForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.EtcdList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.EtcdList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.EtcdList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.EtcdList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.EtcdList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Etcd","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/ferretdbs":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind FerretDB","operationId":"listAppsCozystackIoV1alpha1FerretDBForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDBList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDBList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDBList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDBList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDBList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"FerretDB","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/httpcaches":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind HTTPCache","operationId":"listAppsCozystackIoV1alpha1HTTPCacheForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCacheList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCacheList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCacheList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCacheList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCacheList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"HTTPCache","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/infos":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind Info","operationId":"listAppsCozystackIoV1alpha1InfoForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.InfoList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.InfoList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.InfoList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.InfoList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.InfoList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Info","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/ingresses":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind Ingress","operationId":"listAppsCozystackIoV1alpha1IngressForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.IngressList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.IngressList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.IngressList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.IngressList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.IngressList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Ingress","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/kafkas":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind Kafka","operationId":"listAppsCozystackIoV1alpha1KafkaForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.KafkaList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.KafkaList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.KafkaList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.KafkaList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.KafkaList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Kafka","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/kuberneteses":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind Kubernetes","operationId":"listAppsCozystackIoV1alpha1KubernetesForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.KubernetesList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.KubernetesList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.KubernetesList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.KubernetesList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.KubernetesList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Kubernetes","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/monitorings":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind Monitoring","operationId":"listAppsCozystackIoV1alpha1MonitoringForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MonitoringList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MonitoringList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MonitoringList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MonitoringList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MonitoringList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Monitoring","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/mysqls":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind MySQL","operationId":"listAppsCozystackIoV1alpha1MySQLForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQLList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQLList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQLList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQLList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQLList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"MySQL","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/bootboxes":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind BootBox","operationId":"listAppsCozystackIoV1alpha1NamespacedBootBox","parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBoxList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBoxList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBoxList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBoxList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBoxList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"BootBox","version":"v1alpha1"}},"post":{"tags":["appsCozystackIo_v1alpha1"],"description":"create a BootBox","operationId":"createAppsCozystackIoV1alpha1NamespacedBootBox","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBox"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBox"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBox"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBox"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBox"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBox"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBox"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBox"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBox"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBox"}}}}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"BootBox","version":"v1alpha1"}},"parameters":[{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/bootboxes/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"read the specified BootBox","operationId":"readAppsCozystackIoV1alpha1NamespacedBootBox","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBox"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBox"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBox"}}}}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"BootBox","version":"v1alpha1"}},"put":{"tags":["appsCozystackIo_v1alpha1"],"description":"replace the specified BootBox","operationId":"replaceAppsCozystackIoV1alpha1NamespacedBootBox","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBox"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBox"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBox"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBox"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBox"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBox"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBox"}}}}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"BootBox","version":"v1alpha1"}},"delete":{"tags":["appsCozystackIo_v1alpha1"],"description":"delete a BootBox","operationId":"deleteAppsCozystackIoV1alpha1NamespacedBootBox","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"gracePeriodSeconds","in":"query","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","schema":{"type":"integer","uniqueItems":true}},{"name":"orphanDependents","in":"query","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","schema":{"type":"boolean","uniqueItems":true}},{"name":"propagationPolicy","in":"query","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"BootBox","version":"v1alpha1"}},"patch":{"tags":["appsCozystackIo_v1alpha1"],"description":"partially update the specified BootBox","operationId":"patchAppsCozystackIoV1alpha1NamespacedBootBox","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}},{"name":"force","in":"query","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","schema":{"type":"boolean","uniqueItems":true}}],"requestBody":{"content":{"application/apply-patch+yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/merge-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBox"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBox"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBox"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBox"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBox"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBox"}}}}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"BootBox","version":"v1alpha1"}},"parameters":[{"name":"name","in":"path","description":"name of the BootBox","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/buckets":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind Bucket","operationId":"listAppsCozystackIoV1alpha1NamespacedBucket","parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BucketList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BucketList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BucketList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BucketList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BucketList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Bucket","version":"v1alpha1"}},"post":{"tags":["appsCozystackIo_v1alpha1"],"description":"create a Bucket","operationId":"createAppsCozystackIoV1alpha1NamespacedBucket","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Bucket"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Bucket"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Bucket"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Bucket"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Bucket"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Bucket"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Bucket"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Bucket"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Bucket"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Bucket"}}}}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Bucket","version":"v1alpha1"}},"parameters":[{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/buckets/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"read the specified Bucket","operationId":"readAppsCozystackIoV1alpha1NamespacedBucket","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Bucket"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Bucket"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Bucket"}}}}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Bucket","version":"v1alpha1"}},"put":{"tags":["appsCozystackIo_v1alpha1"],"description":"replace the specified Bucket","operationId":"replaceAppsCozystackIoV1alpha1NamespacedBucket","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Bucket"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Bucket"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Bucket"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Bucket"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Bucket"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Bucket"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Bucket"}}}}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Bucket","version":"v1alpha1"}},"delete":{"tags":["appsCozystackIo_v1alpha1"],"description":"delete a Bucket","operationId":"deleteAppsCozystackIoV1alpha1NamespacedBucket","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"gracePeriodSeconds","in":"query","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","schema":{"type":"integer","uniqueItems":true}},{"name":"orphanDependents","in":"query","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","schema":{"type":"boolean","uniqueItems":true}},{"name":"propagationPolicy","in":"query","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Bucket","version":"v1alpha1"}},"patch":{"tags":["appsCozystackIo_v1alpha1"],"description":"partially update the specified Bucket","operationId":"patchAppsCozystackIoV1alpha1NamespacedBucket","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}},{"name":"force","in":"query","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","schema":{"type":"boolean","uniqueItems":true}}],"requestBody":{"content":{"application/apply-patch+yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/merge-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Bucket"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Bucket"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Bucket"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Bucket"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Bucket"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Bucket"}}}}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Bucket","version":"v1alpha1"}},"parameters":[{"name":"name","in":"path","description":"name of the Bucket","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/clickhouses":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind ClickHouse","operationId":"listAppsCozystackIoV1alpha1NamespacedClickHouse","parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouseList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouseList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouseList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouseList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouseList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"ClickHouse","version":"v1alpha1"}},"post":{"tags":["appsCozystackIo_v1alpha1"],"description":"create a ClickHouse","operationId":"createAppsCozystackIoV1alpha1NamespacedClickHouse","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouse"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouse"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouse"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouse"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouse"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouse"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouse"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouse"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouse"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouse"}}}}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"ClickHouse","version":"v1alpha1"}},"parameters":[{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/clickhouses/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"read the specified ClickHouse","operationId":"readAppsCozystackIoV1alpha1NamespacedClickHouse","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouse"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouse"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouse"}}}}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"ClickHouse","version":"v1alpha1"}},"put":{"tags":["appsCozystackIo_v1alpha1"],"description":"replace the specified ClickHouse","operationId":"replaceAppsCozystackIoV1alpha1NamespacedClickHouse","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouse"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouse"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouse"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouse"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouse"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouse"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouse"}}}}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"ClickHouse","version":"v1alpha1"}},"delete":{"tags":["appsCozystackIo_v1alpha1"],"description":"delete a ClickHouse","operationId":"deleteAppsCozystackIoV1alpha1NamespacedClickHouse","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"gracePeriodSeconds","in":"query","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","schema":{"type":"integer","uniqueItems":true}},{"name":"orphanDependents","in":"query","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","schema":{"type":"boolean","uniqueItems":true}},{"name":"propagationPolicy","in":"query","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"ClickHouse","version":"v1alpha1"}},"patch":{"tags":["appsCozystackIo_v1alpha1"],"description":"partially update the specified ClickHouse","operationId":"patchAppsCozystackIoV1alpha1NamespacedClickHouse","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}},{"name":"force","in":"query","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","schema":{"type":"boolean","uniqueItems":true}}],"requestBody":{"content":{"application/apply-patch+yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/merge-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouse"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouse"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouse"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouse"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouse"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouse"}}}}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"ClickHouse","version":"v1alpha1"}},"parameters":[{"name":"name","in":"path","description":"name of the ClickHouse","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/etcds":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind Etcd","operationId":"listAppsCozystackIoV1alpha1NamespacedEtcd","parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.EtcdList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.EtcdList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.EtcdList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.EtcdList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.EtcdList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Etcd","version":"v1alpha1"}},"post":{"tags":["appsCozystackIo_v1alpha1"],"description":"create an Etcd","operationId":"createAppsCozystackIoV1alpha1NamespacedEtcd","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Etcd"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Etcd"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Etcd"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Etcd"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Etcd"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Etcd"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Etcd"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Etcd"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Etcd"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Etcd"}}}}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Etcd","version":"v1alpha1"}},"parameters":[{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/etcds/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"read the specified Etcd","operationId":"readAppsCozystackIoV1alpha1NamespacedEtcd","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Etcd"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Etcd"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Etcd"}}}}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Etcd","version":"v1alpha1"}},"put":{"tags":["appsCozystackIo_v1alpha1"],"description":"replace the specified Etcd","operationId":"replaceAppsCozystackIoV1alpha1NamespacedEtcd","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Etcd"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Etcd"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Etcd"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Etcd"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Etcd"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Etcd"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Etcd"}}}}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Etcd","version":"v1alpha1"}},"delete":{"tags":["appsCozystackIo_v1alpha1"],"description":"delete an Etcd","operationId":"deleteAppsCozystackIoV1alpha1NamespacedEtcd","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"gracePeriodSeconds","in":"query","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","schema":{"type":"integer","uniqueItems":true}},{"name":"orphanDependents","in":"query","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","schema":{"type":"boolean","uniqueItems":true}},{"name":"propagationPolicy","in":"query","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Etcd","version":"v1alpha1"}},"patch":{"tags":["appsCozystackIo_v1alpha1"],"description":"partially update the specified Etcd","operationId":"patchAppsCozystackIoV1alpha1NamespacedEtcd","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}},{"name":"force","in":"query","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","schema":{"type":"boolean","uniqueItems":true}}],"requestBody":{"content":{"application/apply-patch+yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/merge-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Etcd"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Etcd"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Etcd"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Etcd"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Etcd"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Etcd"}}}}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Etcd","version":"v1alpha1"}},"parameters":[{"name":"name","in":"path","description":"name of the Etcd","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/ferretdbs":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind FerretDB","operationId":"listAppsCozystackIoV1alpha1NamespacedFerretDB","parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDBList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDBList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDBList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDBList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDBList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"FerretDB","version":"v1alpha1"}},"post":{"tags":["appsCozystackIo_v1alpha1"],"description":"create a FerretDB","operationId":"createAppsCozystackIoV1alpha1NamespacedFerretDB","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDB"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDB"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDB"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDB"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDB"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDB"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDB"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDB"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDB"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDB"}}}}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"FerretDB","version":"v1alpha1"}},"parameters":[{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/ferretdbs/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"read the specified FerretDB","operationId":"readAppsCozystackIoV1alpha1NamespacedFerretDB","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDB"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDB"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDB"}}}}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"FerretDB","version":"v1alpha1"}},"put":{"tags":["appsCozystackIo_v1alpha1"],"description":"replace the specified FerretDB","operationId":"replaceAppsCozystackIoV1alpha1NamespacedFerretDB","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDB"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDB"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDB"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDB"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDB"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDB"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDB"}}}}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"FerretDB","version":"v1alpha1"}},"delete":{"tags":["appsCozystackIo_v1alpha1"],"description":"delete a FerretDB","operationId":"deleteAppsCozystackIoV1alpha1NamespacedFerretDB","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"gracePeriodSeconds","in":"query","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","schema":{"type":"integer","uniqueItems":true}},{"name":"orphanDependents","in":"query","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","schema":{"type":"boolean","uniqueItems":true}},{"name":"propagationPolicy","in":"query","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"FerretDB","version":"v1alpha1"}},"patch":{"tags":["appsCozystackIo_v1alpha1"],"description":"partially update the specified FerretDB","operationId":"patchAppsCozystackIoV1alpha1NamespacedFerretDB","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}},{"name":"force","in":"query","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","schema":{"type":"boolean","uniqueItems":true}}],"requestBody":{"content":{"application/apply-patch+yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/merge-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDB"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDB"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDB"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDB"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDB"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDB"}}}}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"FerretDB","version":"v1alpha1"}},"parameters":[{"name":"name","in":"path","description":"name of the FerretDB","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/httpcaches":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind HTTPCache","operationId":"listAppsCozystackIoV1alpha1NamespacedHTTPCache","parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCacheList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCacheList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCacheList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCacheList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCacheList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"HTTPCache","version":"v1alpha1"}},"post":{"tags":["appsCozystackIo_v1alpha1"],"description":"create a HTTPCache","operationId":"createAppsCozystackIoV1alpha1NamespacedHTTPCache","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCache"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCache"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCache"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCache"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCache"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCache"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCache"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCache"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCache"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCache"}}}}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"HTTPCache","version":"v1alpha1"}},"parameters":[{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/httpcaches/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"read the specified HTTPCache","operationId":"readAppsCozystackIoV1alpha1NamespacedHTTPCache","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCache"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCache"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCache"}}}}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"HTTPCache","version":"v1alpha1"}},"put":{"tags":["appsCozystackIo_v1alpha1"],"description":"replace the specified HTTPCache","operationId":"replaceAppsCozystackIoV1alpha1NamespacedHTTPCache","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCache"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCache"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCache"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCache"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCache"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCache"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCache"}}}}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"HTTPCache","version":"v1alpha1"}},"delete":{"tags":["appsCozystackIo_v1alpha1"],"description":"delete a HTTPCache","operationId":"deleteAppsCozystackIoV1alpha1NamespacedHTTPCache","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"gracePeriodSeconds","in":"query","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","schema":{"type":"integer","uniqueItems":true}},{"name":"orphanDependents","in":"query","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","schema":{"type":"boolean","uniqueItems":true}},{"name":"propagationPolicy","in":"query","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"HTTPCache","version":"v1alpha1"}},"patch":{"tags":["appsCozystackIo_v1alpha1"],"description":"partially update the specified HTTPCache","operationId":"patchAppsCozystackIoV1alpha1NamespacedHTTPCache","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}},{"name":"force","in":"query","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","schema":{"type":"boolean","uniqueItems":true}}],"requestBody":{"content":{"application/apply-patch+yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/merge-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCache"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCache"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCache"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCache"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCache"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCache"}}}}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"HTTPCache","version":"v1alpha1"}},"parameters":[{"name":"name","in":"path","description":"name of the HTTPCache","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/infos":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind Info","operationId":"listAppsCozystackIoV1alpha1NamespacedInfo","parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.InfoList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.InfoList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.InfoList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.InfoList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.InfoList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Info","version":"v1alpha1"}},"post":{"tags":["appsCozystackIo_v1alpha1"],"description":"create an Info","operationId":"createAppsCozystackIoV1alpha1NamespacedInfo","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Info"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Info"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Info"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Info"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Info"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Info"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Info"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Info"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Info"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Info"}}}}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Info","version":"v1alpha1"}},"parameters":[{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/infos/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"read the specified Info","operationId":"readAppsCozystackIoV1alpha1NamespacedInfo","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Info"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Info"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Info"}}}}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Info","version":"v1alpha1"}},"put":{"tags":["appsCozystackIo_v1alpha1"],"description":"replace the specified Info","operationId":"replaceAppsCozystackIoV1alpha1NamespacedInfo","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Info"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Info"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Info"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Info"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Info"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Info"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Info"}}}}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Info","version":"v1alpha1"}},"delete":{"tags":["appsCozystackIo_v1alpha1"],"description":"delete an Info","operationId":"deleteAppsCozystackIoV1alpha1NamespacedInfo","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"gracePeriodSeconds","in":"query","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","schema":{"type":"integer","uniqueItems":true}},{"name":"orphanDependents","in":"query","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","schema":{"type":"boolean","uniqueItems":true}},{"name":"propagationPolicy","in":"query","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Info","version":"v1alpha1"}},"patch":{"tags":["appsCozystackIo_v1alpha1"],"description":"partially update the specified Info","operationId":"patchAppsCozystackIoV1alpha1NamespacedInfo","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}},{"name":"force","in":"query","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","schema":{"type":"boolean","uniqueItems":true}}],"requestBody":{"content":{"application/apply-patch+yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/merge-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Info"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Info"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Info"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Info"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Info"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Info"}}}}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Info","version":"v1alpha1"}},"parameters":[{"name":"name","in":"path","description":"name of the Info","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/ingresses":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind Ingress","operationId":"listAppsCozystackIoV1alpha1NamespacedIngress","parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.IngressList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.IngressList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.IngressList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.IngressList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.IngressList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Ingress","version":"v1alpha1"}},"post":{"tags":["appsCozystackIo_v1alpha1"],"description":"create an Ingress","operationId":"createAppsCozystackIoV1alpha1NamespacedIngress","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Ingress"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Ingress"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Ingress"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Ingress"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Ingress"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Ingress"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Ingress"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Ingress"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Ingress"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Ingress"}}}}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Ingress","version":"v1alpha1"}},"parameters":[{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/ingresses/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"read the specified Ingress","operationId":"readAppsCozystackIoV1alpha1NamespacedIngress","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Ingress"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Ingress"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Ingress"}}}}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Ingress","version":"v1alpha1"}},"put":{"tags":["appsCozystackIo_v1alpha1"],"description":"replace the specified Ingress","operationId":"replaceAppsCozystackIoV1alpha1NamespacedIngress","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Ingress"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Ingress"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Ingress"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Ingress"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Ingress"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Ingress"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Ingress"}}}}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Ingress","version":"v1alpha1"}},"delete":{"tags":["appsCozystackIo_v1alpha1"],"description":"delete an Ingress","operationId":"deleteAppsCozystackIoV1alpha1NamespacedIngress","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"gracePeriodSeconds","in":"query","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","schema":{"type":"integer","uniqueItems":true}},{"name":"orphanDependents","in":"query","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","schema":{"type":"boolean","uniqueItems":true}},{"name":"propagationPolicy","in":"query","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Ingress","version":"v1alpha1"}},"patch":{"tags":["appsCozystackIo_v1alpha1"],"description":"partially update the specified Ingress","operationId":"patchAppsCozystackIoV1alpha1NamespacedIngress","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}},{"name":"force","in":"query","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","schema":{"type":"boolean","uniqueItems":true}}],"requestBody":{"content":{"application/apply-patch+yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/merge-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Ingress"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Ingress"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Ingress"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Ingress"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Ingress"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Ingress"}}}}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Ingress","version":"v1alpha1"}},"parameters":[{"name":"name","in":"path","description":"name of the Ingress","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/kafkas":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind Kafka","operationId":"listAppsCozystackIoV1alpha1NamespacedKafka","parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.KafkaList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.KafkaList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.KafkaList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.KafkaList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.KafkaList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Kafka","version":"v1alpha1"}},"post":{"tags":["appsCozystackIo_v1alpha1"],"description":"create a Kafka","operationId":"createAppsCozystackIoV1alpha1NamespacedKafka","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kafka"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kafka"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kafka"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kafka"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kafka"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kafka"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kafka"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kafka"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kafka"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kafka"}}}}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Kafka","version":"v1alpha1"}},"parameters":[{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/kafkas/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"read the specified Kafka","operationId":"readAppsCozystackIoV1alpha1NamespacedKafka","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kafka"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kafka"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kafka"}}}}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Kafka","version":"v1alpha1"}},"put":{"tags":["appsCozystackIo_v1alpha1"],"description":"replace the specified Kafka","operationId":"replaceAppsCozystackIoV1alpha1NamespacedKafka","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kafka"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kafka"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kafka"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kafka"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kafka"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kafka"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kafka"}}}}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Kafka","version":"v1alpha1"}},"delete":{"tags":["appsCozystackIo_v1alpha1"],"description":"delete a Kafka","operationId":"deleteAppsCozystackIoV1alpha1NamespacedKafka","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"gracePeriodSeconds","in":"query","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","schema":{"type":"integer","uniqueItems":true}},{"name":"orphanDependents","in":"query","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","schema":{"type":"boolean","uniqueItems":true}},{"name":"propagationPolicy","in":"query","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Kafka","version":"v1alpha1"}},"patch":{"tags":["appsCozystackIo_v1alpha1"],"description":"partially update the specified Kafka","operationId":"patchAppsCozystackIoV1alpha1NamespacedKafka","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}},{"name":"force","in":"query","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","schema":{"type":"boolean","uniqueItems":true}}],"requestBody":{"content":{"application/apply-patch+yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/merge-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kafka"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kafka"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kafka"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kafka"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kafka"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kafka"}}}}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Kafka","version":"v1alpha1"}},"parameters":[{"name":"name","in":"path","description":"name of the Kafka","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/kuberneteses":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind Kubernetes","operationId":"listAppsCozystackIoV1alpha1NamespacedKubernetes","parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.KubernetesList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.KubernetesList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.KubernetesList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.KubernetesList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.KubernetesList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Kubernetes","version":"v1alpha1"}},"post":{"tags":["appsCozystackIo_v1alpha1"],"description":"create Kubernetes","operationId":"createAppsCozystackIoV1alpha1NamespacedKubernetes","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kubernetes"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kubernetes"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kubernetes"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kubernetes"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kubernetes"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kubernetes"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kubernetes"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kubernetes"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kubernetes"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kubernetes"}}}}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Kubernetes","version":"v1alpha1"}},"parameters":[{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/kuberneteses/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"read the specified Kubernetes","operationId":"readAppsCozystackIoV1alpha1NamespacedKubernetes","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kubernetes"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kubernetes"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kubernetes"}}}}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Kubernetes","version":"v1alpha1"}},"put":{"tags":["appsCozystackIo_v1alpha1"],"description":"replace the specified Kubernetes","operationId":"replaceAppsCozystackIoV1alpha1NamespacedKubernetes","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kubernetes"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kubernetes"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kubernetes"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kubernetes"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kubernetes"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kubernetes"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kubernetes"}}}}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Kubernetes","version":"v1alpha1"}},"delete":{"tags":["appsCozystackIo_v1alpha1"],"description":"delete Kubernetes","operationId":"deleteAppsCozystackIoV1alpha1NamespacedKubernetes","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"gracePeriodSeconds","in":"query","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","schema":{"type":"integer","uniqueItems":true}},{"name":"orphanDependents","in":"query","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","schema":{"type":"boolean","uniqueItems":true}},{"name":"propagationPolicy","in":"query","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Kubernetes","version":"v1alpha1"}},"patch":{"tags":["appsCozystackIo_v1alpha1"],"description":"partially update the specified Kubernetes","operationId":"patchAppsCozystackIoV1alpha1NamespacedKubernetes","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}},{"name":"force","in":"query","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","schema":{"type":"boolean","uniqueItems":true}}],"requestBody":{"content":{"application/apply-patch+yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/merge-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kubernetes"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kubernetes"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kubernetes"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kubernetes"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kubernetes"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kubernetes"}}}}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Kubernetes","version":"v1alpha1"}},"parameters":[{"name":"name","in":"path","description":"name of the Kubernetes","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/monitorings":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind Monitoring","operationId":"listAppsCozystackIoV1alpha1NamespacedMonitoring","parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MonitoringList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MonitoringList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MonitoringList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MonitoringList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MonitoringList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Monitoring","version":"v1alpha1"}},"post":{"tags":["appsCozystackIo_v1alpha1"],"description":"create a Monitoring","operationId":"createAppsCozystackIoV1alpha1NamespacedMonitoring","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Monitoring"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Monitoring"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Monitoring"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Monitoring"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Monitoring"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Monitoring"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Monitoring"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Monitoring"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Monitoring"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Monitoring"}}}}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Monitoring","version":"v1alpha1"}},"parameters":[{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/monitorings/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"read the specified Monitoring","operationId":"readAppsCozystackIoV1alpha1NamespacedMonitoring","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Monitoring"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Monitoring"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Monitoring"}}}}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Monitoring","version":"v1alpha1"}},"put":{"tags":["appsCozystackIo_v1alpha1"],"description":"replace the specified Monitoring","operationId":"replaceAppsCozystackIoV1alpha1NamespacedMonitoring","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Monitoring"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Monitoring"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Monitoring"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Monitoring"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Monitoring"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Monitoring"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Monitoring"}}}}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Monitoring","version":"v1alpha1"}},"delete":{"tags":["appsCozystackIo_v1alpha1"],"description":"delete a Monitoring","operationId":"deleteAppsCozystackIoV1alpha1NamespacedMonitoring","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"gracePeriodSeconds","in":"query","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","schema":{"type":"integer","uniqueItems":true}},{"name":"orphanDependents","in":"query","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","schema":{"type":"boolean","uniqueItems":true}},{"name":"propagationPolicy","in":"query","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Monitoring","version":"v1alpha1"}},"patch":{"tags":["appsCozystackIo_v1alpha1"],"description":"partially update the specified Monitoring","operationId":"patchAppsCozystackIoV1alpha1NamespacedMonitoring","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}},{"name":"force","in":"query","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","schema":{"type":"boolean","uniqueItems":true}}],"requestBody":{"content":{"application/apply-patch+yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/merge-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Monitoring"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Monitoring"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Monitoring"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Monitoring"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Monitoring"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Monitoring"}}}}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Monitoring","version":"v1alpha1"}},"parameters":[{"name":"name","in":"path","description":"name of the Monitoring","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/mysqls":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind MySQL","operationId":"listAppsCozystackIoV1alpha1NamespacedMySQL","parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQLList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQLList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQLList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQLList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQLList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"MySQL","version":"v1alpha1"}},"post":{"tags":["appsCozystackIo_v1alpha1"],"description":"create a MySQL","operationId":"createAppsCozystackIoV1alpha1NamespacedMySQL","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQL"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQL"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQL"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQL"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQL"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQL"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQL"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQL"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQL"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQL"}}}}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"MySQL","version":"v1alpha1"}},"parameters":[{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/mysqls/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"read the specified MySQL","operationId":"readAppsCozystackIoV1alpha1NamespacedMySQL","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQL"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQL"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQL"}}}}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"MySQL","version":"v1alpha1"}},"put":{"tags":["appsCozystackIo_v1alpha1"],"description":"replace the specified MySQL","operationId":"replaceAppsCozystackIoV1alpha1NamespacedMySQL","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQL"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQL"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQL"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQL"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQL"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQL"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQL"}}}}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"MySQL","version":"v1alpha1"}},"delete":{"tags":["appsCozystackIo_v1alpha1"],"description":"delete a MySQL","operationId":"deleteAppsCozystackIoV1alpha1NamespacedMySQL","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"gracePeriodSeconds","in":"query","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","schema":{"type":"integer","uniqueItems":true}},{"name":"orphanDependents","in":"query","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","schema":{"type":"boolean","uniqueItems":true}},{"name":"propagationPolicy","in":"query","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"MySQL","version":"v1alpha1"}},"patch":{"tags":["appsCozystackIo_v1alpha1"],"description":"partially update the specified MySQL","operationId":"patchAppsCozystackIoV1alpha1NamespacedMySQL","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}},{"name":"force","in":"query","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","schema":{"type":"boolean","uniqueItems":true}}],"requestBody":{"content":{"application/apply-patch+yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/merge-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQL"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQL"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQL"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQL"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQL"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQL"}}}}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"MySQL","version":"v1alpha1"}},"parameters":[{"name":"name","in":"path","description":"name of the MySQL","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/natses":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind NATS","operationId":"listAppsCozystackIoV1alpha1NamespacedNATS","parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATSList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATSList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATSList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATSList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATSList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"NATS","version":"v1alpha1"}},"post":{"tags":["appsCozystackIo_v1alpha1"],"description":"create a NATS","operationId":"createAppsCozystackIoV1alpha1NamespacedNATS","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATS"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATS"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATS"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATS"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATS"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATS"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATS"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATS"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATS"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATS"}}}}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"NATS","version":"v1alpha1"}},"parameters":[{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/natses/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"read the specified NATS","operationId":"readAppsCozystackIoV1alpha1NamespacedNATS","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATS"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATS"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATS"}}}}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"NATS","version":"v1alpha1"}},"put":{"tags":["appsCozystackIo_v1alpha1"],"description":"replace the specified NATS","operationId":"replaceAppsCozystackIoV1alpha1NamespacedNATS","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATS"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATS"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATS"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATS"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATS"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATS"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATS"}}}}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"NATS","version":"v1alpha1"}},"delete":{"tags":["appsCozystackIo_v1alpha1"],"description":"delete a NATS","operationId":"deleteAppsCozystackIoV1alpha1NamespacedNATS","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"gracePeriodSeconds","in":"query","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","schema":{"type":"integer","uniqueItems":true}},{"name":"orphanDependents","in":"query","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","schema":{"type":"boolean","uniqueItems":true}},{"name":"propagationPolicy","in":"query","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"NATS","version":"v1alpha1"}},"patch":{"tags":["appsCozystackIo_v1alpha1"],"description":"partially update the specified NATS","operationId":"patchAppsCozystackIoV1alpha1NamespacedNATS","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}},{"name":"force","in":"query","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","schema":{"type":"boolean","uniqueItems":true}}],"requestBody":{"content":{"application/apply-patch+yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/merge-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATS"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATS"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATS"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATS"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATS"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATS"}}}}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"NATS","version":"v1alpha1"}},"parameters":[{"name":"name","in":"path","description":"name of the NATS","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/postgreses":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind Postgres","operationId":"listAppsCozystackIoV1alpha1NamespacedPostgres","parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.PostgresList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.PostgresList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.PostgresList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.PostgresList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.PostgresList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Postgres","version":"v1alpha1"}},"post":{"tags":["appsCozystackIo_v1alpha1"],"description":"create Postgres","operationId":"createAppsCozystackIoV1alpha1NamespacedPostgres","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Postgres"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Postgres"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Postgres"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Postgres"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Postgres"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Postgres"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Postgres"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Postgres"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Postgres"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Postgres"}}}}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Postgres","version":"v1alpha1"}},"parameters":[{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/postgreses/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"read the specified Postgres","operationId":"readAppsCozystackIoV1alpha1NamespacedPostgres","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Postgres"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Postgres"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Postgres"}}}}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Postgres","version":"v1alpha1"}},"put":{"tags":["appsCozystackIo_v1alpha1"],"description":"replace the specified Postgres","operationId":"replaceAppsCozystackIoV1alpha1NamespacedPostgres","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Postgres"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Postgres"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Postgres"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Postgres"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Postgres"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Postgres"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Postgres"}}}}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Postgres","version":"v1alpha1"}},"delete":{"tags":["appsCozystackIo_v1alpha1"],"description":"delete Postgres","operationId":"deleteAppsCozystackIoV1alpha1NamespacedPostgres","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"gracePeriodSeconds","in":"query","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","schema":{"type":"integer","uniqueItems":true}},{"name":"orphanDependents","in":"query","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","schema":{"type":"boolean","uniqueItems":true}},{"name":"propagationPolicy","in":"query","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Postgres","version":"v1alpha1"}},"patch":{"tags":["appsCozystackIo_v1alpha1"],"description":"partially update the specified Postgres","operationId":"patchAppsCozystackIoV1alpha1NamespacedPostgres","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}},{"name":"force","in":"query","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","schema":{"type":"boolean","uniqueItems":true}}],"requestBody":{"content":{"application/apply-patch+yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/merge-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Postgres"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Postgres"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Postgres"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Postgres"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Postgres"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Postgres"}}}}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Postgres","version":"v1alpha1"}},"parameters":[{"name":"name","in":"path","description":"name of the Postgres","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/rabbitmqs":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind RabbitMQ","operationId":"listAppsCozystackIoV1alpha1NamespacedRabbitMQ","parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"RabbitMQ","version":"v1alpha1"}},"post":{"tags":["appsCozystackIo_v1alpha1"],"description":"create a RabbitMQ","operationId":"createAppsCozystackIoV1alpha1NamespacedRabbitMQ","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQ"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQ"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQ"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQ"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQ"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQ"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQ"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQ"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQ"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQ"}}}}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"RabbitMQ","version":"v1alpha1"}},"parameters":[{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/rabbitmqs/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"read the specified RabbitMQ","operationId":"readAppsCozystackIoV1alpha1NamespacedRabbitMQ","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQ"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQ"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQ"}}}}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"RabbitMQ","version":"v1alpha1"}},"put":{"tags":["appsCozystackIo_v1alpha1"],"description":"replace the specified RabbitMQ","operationId":"replaceAppsCozystackIoV1alpha1NamespacedRabbitMQ","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQ"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQ"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQ"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQ"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQ"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQ"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQ"}}}}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"RabbitMQ","version":"v1alpha1"}},"delete":{"tags":["appsCozystackIo_v1alpha1"],"description":"delete a RabbitMQ","operationId":"deleteAppsCozystackIoV1alpha1NamespacedRabbitMQ","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"gracePeriodSeconds","in":"query","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","schema":{"type":"integer","uniqueItems":true}},{"name":"orphanDependents","in":"query","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","schema":{"type":"boolean","uniqueItems":true}},{"name":"propagationPolicy","in":"query","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"RabbitMQ","version":"v1alpha1"}},"patch":{"tags":["appsCozystackIo_v1alpha1"],"description":"partially update the specified RabbitMQ","operationId":"patchAppsCozystackIoV1alpha1NamespacedRabbitMQ","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}},{"name":"force","in":"query","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","schema":{"type":"boolean","uniqueItems":true}}],"requestBody":{"content":{"application/apply-patch+yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/merge-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQ"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQ"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQ"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQ"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQ"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQ"}}}}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"RabbitMQ","version":"v1alpha1"}},"parameters":[{"name":"name","in":"path","description":"name of the RabbitMQ","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/redises":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind Redis","operationId":"listAppsCozystackIoV1alpha1NamespacedRedis","parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RedisList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RedisList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RedisList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RedisList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RedisList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Redis","version":"v1alpha1"}},"post":{"tags":["appsCozystackIo_v1alpha1"],"description":"create Redis","operationId":"createAppsCozystackIoV1alpha1NamespacedRedis","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Redis"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Redis"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Redis"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Redis"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Redis"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Redis"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Redis"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Redis"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Redis"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Redis"}}}}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Redis","version":"v1alpha1"}},"parameters":[{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/redises/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"read the specified Redis","operationId":"readAppsCozystackIoV1alpha1NamespacedRedis","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Redis"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Redis"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Redis"}}}}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Redis","version":"v1alpha1"}},"put":{"tags":["appsCozystackIo_v1alpha1"],"description":"replace the specified Redis","operationId":"replaceAppsCozystackIoV1alpha1NamespacedRedis","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Redis"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Redis"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Redis"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Redis"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Redis"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Redis"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Redis"}}}}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Redis","version":"v1alpha1"}},"delete":{"tags":["appsCozystackIo_v1alpha1"],"description":"delete Redis","operationId":"deleteAppsCozystackIoV1alpha1NamespacedRedis","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"gracePeriodSeconds","in":"query","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","schema":{"type":"integer","uniqueItems":true}},{"name":"orphanDependents","in":"query","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","schema":{"type":"boolean","uniqueItems":true}},{"name":"propagationPolicy","in":"query","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Redis","version":"v1alpha1"}},"patch":{"tags":["appsCozystackIo_v1alpha1"],"description":"partially update the specified Redis","operationId":"patchAppsCozystackIoV1alpha1NamespacedRedis","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}},{"name":"force","in":"query","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","schema":{"type":"boolean","uniqueItems":true}}],"requestBody":{"content":{"application/apply-patch+yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/merge-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Redis"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Redis"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Redis"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Redis"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Redis"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Redis"}}}}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Redis","version":"v1alpha1"}},"parameters":[{"name":"name","in":"path","description":"name of the Redis","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/seaweedfses":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind SeaweedFS","operationId":"listAppsCozystackIoV1alpha1NamespacedSeaweedFS","parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFSList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFSList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFSList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFSList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFSList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"SeaweedFS","version":"v1alpha1"}},"post":{"tags":["appsCozystackIo_v1alpha1"],"description":"create a SeaweedFS","operationId":"createAppsCozystackIoV1alpha1NamespacedSeaweedFS","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFS"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFS"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFS"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFS"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFS"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFS"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFS"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFS"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFS"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFS"}}}}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"SeaweedFS","version":"v1alpha1"}},"parameters":[{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/seaweedfses/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"read the specified SeaweedFS","operationId":"readAppsCozystackIoV1alpha1NamespacedSeaweedFS","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFS"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFS"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFS"}}}}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"SeaweedFS","version":"v1alpha1"}},"put":{"tags":["appsCozystackIo_v1alpha1"],"description":"replace the specified SeaweedFS","operationId":"replaceAppsCozystackIoV1alpha1NamespacedSeaweedFS","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFS"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFS"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFS"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFS"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFS"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFS"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFS"}}}}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"SeaweedFS","version":"v1alpha1"}},"delete":{"tags":["appsCozystackIo_v1alpha1"],"description":"delete a SeaweedFS","operationId":"deleteAppsCozystackIoV1alpha1NamespacedSeaweedFS","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"gracePeriodSeconds","in":"query","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","schema":{"type":"integer","uniqueItems":true}},{"name":"orphanDependents","in":"query","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","schema":{"type":"boolean","uniqueItems":true}},{"name":"propagationPolicy","in":"query","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"SeaweedFS","version":"v1alpha1"}},"patch":{"tags":["appsCozystackIo_v1alpha1"],"description":"partially update the specified SeaweedFS","operationId":"patchAppsCozystackIoV1alpha1NamespacedSeaweedFS","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}},{"name":"force","in":"query","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","schema":{"type":"boolean","uniqueItems":true}}],"requestBody":{"content":{"application/apply-patch+yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/merge-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFS"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFS"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFS"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFS"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFS"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFS"}}}}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"SeaweedFS","version":"v1alpha1"}},"parameters":[{"name":"name","in":"path","description":"name of the SeaweedFS","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/tcpbalancers":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind TCPBalancer","operationId":"listAppsCozystackIoV1alpha1NamespacedTCPBalancer","parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancerList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancerList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancerList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancerList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancerList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"TCPBalancer","version":"v1alpha1"}},"post":{"tags":["appsCozystackIo_v1alpha1"],"description":"create a TCPBalancer","operationId":"createAppsCozystackIoV1alpha1NamespacedTCPBalancer","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancer"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancer"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancer"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancer"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancer"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancer"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancer"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancer"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancer"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancer"}}}}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"TCPBalancer","version":"v1alpha1"}},"parameters":[{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/tcpbalancers/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"read the specified TCPBalancer","operationId":"readAppsCozystackIoV1alpha1NamespacedTCPBalancer","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancer"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancer"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancer"}}}}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"TCPBalancer","version":"v1alpha1"}},"put":{"tags":["appsCozystackIo_v1alpha1"],"description":"replace the specified TCPBalancer","operationId":"replaceAppsCozystackIoV1alpha1NamespacedTCPBalancer","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancer"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancer"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancer"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancer"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancer"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancer"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancer"}}}}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"TCPBalancer","version":"v1alpha1"}},"delete":{"tags":["appsCozystackIo_v1alpha1"],"description":"delete a TCPBalancer","operationId":"deleteAppsCozystackIoV1alpha1NamespacedTCPBalancer","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"gracePeriodSeconds","in":"query","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","schema":{"type":"integer","uniqueItems":true}},{"name":"orphanDependents","in":"query","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","schema":{"type":"boolean","uniqueItems":true}},{"name":"propagationPolicy","in":"query","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"TCPBalancer","version":"v1alpha1"}},"patch":{"tags":["appsCozystackIo_v1alpha1"],"description":"partially update the specified TCPBalancer","operationId":"patchAppsCozystackIoV1alpha1NamespacedTCPBalancer","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}},{"name":"force","in":"query","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","schema":{"type":"boolean","uniqueItems":true}}],"requestBody":{"content":{"application/apply-patch+yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/merge-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancer"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancer"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancer"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancer"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancer"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancer"}}}}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"TCPBalancer","version":"v1alpha1"}},"parameters":[{"name":"name","in":"path","description":"name of the TCPBalancer","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/tenants":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind Tenant","operationId":"listAppsCozystackIoV1alpha1NamespacedTenant","parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TenantList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TenantList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TenantList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TenantList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TenantList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Tenant","version":"v1alpha1"}},"post":{"tags":["appsCozystackIo_v1alpha1"],"description":"create a Tenant","operationId":"createAppsCozystackIoV1alpha1NamespacedTenant","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Tenant"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Tenant"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Tenant"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Tenant"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Tenant"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Tenant"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Tenant"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Tenant"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Tenant"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Tenant"}}}}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Tenant","version":"v1alpha1"}},"parameters":[{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/tenants/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"read the specified Tenant","operationId":"readAppsCozystackIoV1alpha1NamespacedTenant","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Tenant"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Tenant"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Tenant"}}}}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Tenant","version":"v1alpha1"}},"put":{"tags":["appsCozystackIo_v1alpha1"],"description":"replace the specified Tenant","operationId":"replaceAppsCozystackIoV1alpha1NamespacedTenant","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Tenant"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Tenant"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Tenant"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Tenant"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Tenant"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Tenant"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Tenant"}}}}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Tenant","version":"v1alpha1"}},"delete":{"tags":["appsCozystackIo_v1alpha1"],"description":"delete a Tenant","operationId":"deleteAppsCozystackIoV1alpha1NamespacedTenant","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"gracePeriodSeconds","in":"query","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","schema":{"type":"integer","uniqueItems":true}},{"name":"orphanDependents","in":"query","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","schema":{"type":"boolean","uniqueItems":true}},{"name":"propagationPolicy","in":"query","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Tenant","version":"v1alpha1"}},"patch":{"tags":["appsCozystackIo_v1alpha1"],"description":"partially update the specified Tenant","operationId":"patchAppsCozystackIoV1alpha1NamespacedTenant","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}},{"name":"force","in":"query","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","schema":{"type":"boolean","uniqueItems":true}}],"requestBody":{"content":{"application/apply-patch+yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/merge-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Tenant"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Tenant"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Tenant"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Tenant"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Tenant"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Tenant"}}}}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Tenant","version":"v1alpha1"}},"parameters":[{"name":"name","in":"path","description":"name of the Tenant","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/virtualmachines":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind VirtualMachine","operationId":"listAppsCozystackIoV1alpha1NamespacedVirtualMachine","parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachineList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachineList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachineList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachineList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachineList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VirtualMachine","version":"v1alpha1"}},"post":{"tags":["appsCozystackIo_v1alpha1"],"description":"create a VirtualMachine","operationId":"createAppsCozystackIoV1alpha1NamespacedVirtualMachine","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachine"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachine"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachine"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachine"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachine"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachine"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachine"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachine"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachine"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachine"}}}}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VirtualMachine","version":"v1alpha1"}},"parameters":[{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/virtualmachines/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"read the specified VirtualMachine","operationId":"readAppsCozystackIoV1alpha1NamespacedVirtualMachine","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachine"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachine"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachine"}}}}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VirtualMachine","version":"v1alpha1"}},"put":{"tags":["appsCozystackIo_v1alpha1"],"description":"replace the specified VirtualMachine","operationId":"replaceAppsCozystackIoV1alpha1NamespacedVirtualMachine","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachine"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachine"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachine"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachine"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachine"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachine"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachine"}}}}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VirtualMachine","version":"v1alpha1"}},"delete":{"tags":["appsCozystackIo_v1alpha1"],"description":"delete a VirtualMachine","operationId":"deleteAppsCozystackIoV1alpha1NamespacedVirtualMachine","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"gracePeriodSeconds","in":"query","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","schema":{"type":"integer","uniqueItems":true}},{"name":"orphanDependents","in":"query","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","schema":{"type":"boolean","uniqueItems":true}},{"name":"propagationPolicy","in":"query","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VirtualMachine","version":"v1alpha1"}},"patch":{"tags":["appsCozystackIo_v1alpha1"],"description":"partially update the specified VirtualMachine","operationId":"patchAppsCozystackIoV1alpha1NamespacedVirtualMachine","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}},{"name":"force","in":"query","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","schema":{"type":"boolean","uniqueItems":true}}],"requestBody":{"content":{"application/apply-patch+yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/merge-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachine"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachine"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachine"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachine"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachine"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachine"}}}}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VirtualMachine","version":"v1alpha1"}},"parameters":[{"name":"name","in":"path","description":"name of the VirtualMachine","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/vmdisks":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind VMDisk","operationId":"listAppsCozystackIoV1alpha1NamespacedVMDisk","parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDiskList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDiskList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDiskList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDiskList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDiskList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VMDisk","version":"v1alpha1"}},"post":{"tags":["appsCozystackIo_v1alpha1"],"description":"create a VMDisk","operationId":"createAppsCozystackIoV1alpha1NamespacedVMDisk","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDisk"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDisk"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDisk"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDisk"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDisk"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDisk"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDisk"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDisk"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDisk"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDisk"}}}}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VMDisk","version":"v1alpha1"}},"parameters":[{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/vmdisks/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"read the specified VMDisk","operationId":"readAppsCozystackIoV1alpha1NamespacedVMDisk","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDisk"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDisk"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDisk"}}}}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VMDisk","version":"v1alpha1"}},"put":{"tags":["appsCozystackIo_v1alpha1"],"description":"replace the specified VMDisk","operationId":"replaceAppsCozystackIoV1alpha1NamespacedVMDisk","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDisk"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDisk"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDisk"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDisk"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDisk"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDisk"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDisk"}}}}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VMDisk","version":"v1alpha1"}},"delete":{"tags":["appsCozystackIo_v1alpha1"],"description":"delete a VMDisk","operationId":"deleteAppsCozystackIoV1alpha1NamespacedVMDisk","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"gracePeriodSeconds","in":"query","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","schema":{"type":"integer","uniqueItems":true}},{"name":"orphanDependents","in":"query","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","schema":{"type":"boolean","uniqueItems":true}},{"name":"propagationPolicy","in":"query","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VMDisk","version":"v1alpha1"}},"patch":{"tags":["appsCozystackIo_v1alpha1"],"description":"partially update the specified VMDisk","operationId":"patchAppsCozystackIoV1alpha1NamespacedVMDisk","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}},{"name":"force","in":"query","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","schema":{"type":"boolean","uniqueItems":true}}],"requestBody":{"content":{"application/apply-patch+yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/merge-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDisk"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDisk"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDisk"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDisk"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDisk"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDisk"}}}}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VMDisk","version":"v1alpha1"}},"parameters":[{"name":"name","in":"path","description":"name of the VMDisk","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/vminstances":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind VMInstance","operationId":"listAppsCozystackIoV1alpha1NamespacedVMInstance","parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstanceList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstanceList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstanceList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstanceList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstanceList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VMInstance","version":"v1alpha1"}},"post":{"tags":["appsCozystackIo_v1alpha1"],"description":"create a VMInstance","operationId":"createAppsCozystackIoV1alpha1NamespacedVMInstance","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstance"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstance"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstance"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstance"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstance"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstance"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstance"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstance"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstance"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstance"}}}}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VMInstance","version":"v1alpha1"}},"parameters":[{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/vminstances/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"read the specified VMInstance","operationId":"readAppsCozystackIoV1alpha1NamespacedVMInstance","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstance"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstance"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstance"}}}}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VMInstance","version":"v1alpha1"}},"put":{"tags":["appsCozystackIo_v1alpha1"],"description":"replace the specified VMInstance","operationId":"replaceAppsCozystackIoV1alpha1NamespacedVMInstance","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstance"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstance"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstance"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstance"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstance"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstance"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstance"}}}}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VMInstance","version":"v1alpha1"}},"delete":{"tags":["appsCozystackIo_v1alpha1"],"description":"delete a VMInstance","operationId":"deleteAppsCozystackIoV1alpha1NamespacedVMInstance","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"gracePeriodSeconds","in":"query","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","schema":{"type":"integer","uniqueItems":true}},{"name":"orphanDependents","in":"query","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","schema":{"type":"boolean","uniqueItems":true}},{"name":"propagationPolicy","in":"query","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VMInstance","version":"v1alpha1"}},"patch":{"tags":["appsCozystackIo_v1alpha1"],"description":"partially update the specified VMInstance","operationId":"patchAppsCozystackIoV1alpha1NamespacedVMInstance","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}},{"name":"force","in":"query","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","schema":{"type":"boolean","uniqueItems":true}}],"requestBody":{"content":{"application/apply-patch+yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/merge-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstance"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstance"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstance"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstance"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstance"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstance"}}}}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VMInstance","version":"v1alpha1"}},"parameters":[{"name":"name","in":"path","description":"name of the VMInstance","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/vpns":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind VPN","operationId":"listAppsCozystackIoV1alpha1NamespacedVPN","parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPNList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPNList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPNList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPNList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPNList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VPN","version":"v1alpha1"}},"post":{"tags":["appsCozystackIo_v1alpha1"],"description":"create a VPN","operationId":"createAppsCozystackIoV1alpha1NamespacedVPN","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPN"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPN"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPN"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPN"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPN"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPN"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPN"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPN"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPN"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPN"}}}}},"x-kubernetes-action":"post","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VPN","version":"v1alpha1"}},"parameters":[{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/namespaces/{namespace}/vpns/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"read the specified VPN","operationId":"readAppsCozystackIoV1alpha1NamespacedVPN","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPN"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPN"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPN"}}}}},"x-kubernetes-action":"get","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VPN","version":"v1alpha1"}},"put":{"tags":["appsCozystackIo_v1alpha1"],"description":"replace the specified VPN","operationId":"replaceAppsCozystackIoV1alpha1NamespacedVPN","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPN"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPN"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPN"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPN"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPN"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPN"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPN"}}}}},"x-kubernetes-action":"put","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VPN","version":"v1alpha1"}},"delete":{"tags":["appsCozystackIo_v1alpha1"],"description":"delete a VPN","operationId":"deleteAppsCozystackIoV1alpha1NamespacedVPN","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"gracePeriodSeconds","in":"query","description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","schema":{"type":"integer","uniqueItems":true}},{"name":"orphanDependents","in":"query","description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","schema":{"type":"boolean","uniqueItems":true}},{"name":"propagationPolicy","in":"query","description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","schema":{"type":"string","uniqueItems":true}}],"requestBody":{"content":{"*/*":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Status"}}}}},"x-kubernetes-action":"delete","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VPN","version":"v1alpha1"}},"patch":{"tags":["appsCozystackIo_v1alpha1"],"description":"partially update the specified VPN","operationId":"patchAppsCozystackIoV1alpha1NamespacedVPN","parameters":[{"name":"dryRun","in":"query","description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","schema":{"type":"string","uniqueItems":true}},{"name":"fieldManager","in":"query","description":"fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).","schema":{"type":"string","uniqueItems":true}},{"name":"fieldValidation","in":"query","description":"fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.","schema":{"type":"string","uniqueItems":true}},{"name":"force","in":"query","description":"Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.","schema":{"type":"boolean","uniqueItems":true}}],"requestBody":{"content":{"application/apply-patch+yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}},"application/merge-patch+json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPN"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPN"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPN"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPN"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPN"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPN"}}}}},"x-kubernetes-action":"patch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VPN","version":"v1alpha1"}},"parameters":[{"name":"name","in":"path","description":"name of the VPN","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/natses":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind NATS","operationId":"listAppsCozystackIoV1alpha1NATSForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATSList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATSList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATSList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATSList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATSList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"NATS","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/postgreses":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind Postgres","operationId":"listAppsCozystackIoV1alpha1PostgresForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.PostgresList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.PostgresList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.PostgresList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.PostgresList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.PostgresList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Postgres","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/rabbitmqs":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind RabbitMQ","operationId":"listAppsCozystackIoV1alpha1RabbitMQForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"RabbitMQ","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/redises":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind Redis","operationId":"listAppsCozystackIoV1alpha1RedisForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RedisList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RedisList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RedisList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RedisList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RedisList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Redis","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/seaweedfses":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind SeaweedFS","operationId":"listAppsCozystackIoV1alpha1SeaweedFSForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFSList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFSList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFSList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFSList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFSList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"SeaweedFS","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/tcpbalancers":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind TCPBalancer","operationId":"listAppsCozystackIoV1alpha1TCPBalancerForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancerList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancerList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancerList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancerList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancerList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"TCPBalancer","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/tenants":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind Tenant","operationId":"listAppsCozystackIoV1alpha1TenantForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TenantList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TenantList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TenantList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TenantList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TenantList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Tenant","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/virtualmachines":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind VirtualMachine","operationId":"listAppsCozystackIoV1alpha1VirtualMachineForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachineList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachineList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachineList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachineList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachineList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VirtualMachine","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/vmdisks":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind VMDisk","operationId":"listAppsCozystackIoV1alpha1VMDiskForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDiskList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDiskList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDiskList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDiskList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDiskList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VMDisk","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/vminstances":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind VMInstance","operationId":"listAppsCozystackIoV1alpha1VMInstanceForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstanceList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstanceList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstanceList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstanceList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstanceList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VMInstance","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/vpns":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"list or watch objects of kind VPN","operationId":"listAppsCozystackIoV1alpha1VPNForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPNList"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPNList"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPNList"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPNList"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPNList"}}}}},"x-kubernetes-action":"list","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VPN","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/bootboxes":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of BootBox. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1BootBoxListForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"BootBox","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/buckets":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of Bucket. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1BucketListForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Bucket","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/clickhouses":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of ClickHouse. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1ClickHouseListForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"ClickHouse","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/etcds":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of Etcd. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1EtcdListForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Etcd","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/ferretdbs":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of FerretDB. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1FerretDBListForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"FerretDB","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/httpcaches":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of HTTPCache. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1HTTPCacheListForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"HTTPCache","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/infos":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of Info. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1InfoListForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Info","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/ingresses":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of Ingress. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1IngressListForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Ingress","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/kafkas":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of Kafka. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1KafkaListForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Kafka","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/kuberneteses":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of Kubernetes. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1KubernetesListForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Kubernetes","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/monitorings":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of Monitoring. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1MonitoringListForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Monitoring","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/mysqls":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of MySQL. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1MySQLListForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"MySQL","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/bootboxes":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of BootBox. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1NamespacedBootBoxList","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"BootBox","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/bootboxes/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch changes to an object of kind BootBox. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","operationId":"watchAppsCozystackIoV1alpha1NamespacedBootBox","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"BootBox","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"name","in":"path","description":"name of the BootBox","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/buckets":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of Bucket. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1NamespacedBucketList","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Bucket","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/buckets/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch changes to an object of kind Bucket. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","operationId":"watchAppsCozystackIoV1alpha1NamespacedBucket","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Bucket","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"name","in":"path","description":"name of the Bucket","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/clickhouses":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of ClickHouse. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1NamespacedClickHouseList","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"ClickHouse","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/clickhouses/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch changes to an object of kind ClickHouse. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","operationId":"watchAppsCozystackIoV1alpha1NamespacedClickHouse","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"ClickHouse","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"name","in":"path","description":"name of the ClickHouse","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/etcds":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of Etcd. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1NamespacedEtcdList","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Etcd","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/etcds/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch changes to an object of kind Etcd. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","operationId":"watchAppsCozystackIoV1alpha1NamespacedEtcd","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Etcd","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"name","in":"path","description":"name of the Etcd","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/ferretdbs":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of FerretDB. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1NamespacedFerretDBList","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"FerretDB","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/ferretdbs/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch changes to an object of kind FerretDB. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","operationId":"watchAppsCozystackIoV1alpha1NamespacedFerretDB","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"FerretDB","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"name","in":"path","description":"name of the FerretDB","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/httpcaches":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of HTTPCache. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1NamespacedHTTPCacheList","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"HTTPCache","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/httpcaches/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch changes to an object of kind HTTPCache. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","operationId":"watchAppsCozystackIoV1alpha1NamespacedHTTPCache","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"HTTPCache","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"name","in":"path","description":"name of the HTTPCache","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/infos":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of Info. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1NamespacedInfoList","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Info","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/infos/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch changes to an object of kind Info. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","operationId":"watchAppsCozystackIoV1alpha1NamespacedInfo","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Info","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"name","in":"path","description":"name of the Info","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/ingresses":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of Ingress. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1NamespacedIngressList","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Ingress","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/ingresses/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch changes to an object of kind Ingress. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","operationId":"watchAppsCozystackIoV1alpha1NamespacedIngress","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Ingress","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"name","in":"path","description":"name of the Ingress","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/kafkas":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of Kafka. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1NamespacedKafkaList","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Kafka","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/kafkas/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch changes to an object of kind Kafka. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","operationId":"watchAppsCozystackIoV1alpha1NamespacedKafka","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Kafka","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"name","in":"path","description":"name of the Kafka","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/kuberneteses":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of Kubernetes. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1NamespacedKubernetesList","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Kubernetes","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/kuberneteses/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch changes to an object of kind Kubernetes. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","operationId":"watchAppsCozystackIoV1alpha1NamespacedKubernetes","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Kubernetes","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"name","in":"path","description":"name of the Kubernetes","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/monitorings":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of Monitoring. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1NamespacedMonitoringList","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Monitoring","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/monitorings/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch changes to an object of kind Monitoring. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","operationId":"watchAppsCozystackIoV1alpha1NamespacedMonitoring","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Monitoring","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"name","in":"path","description":"name of the Monitoring","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/mysqls":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of MySQL. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1NamespacedMySQLList","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"MySQL","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/mysqls/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch changes to an object of kind MySQL. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","operationId":"watchAppsCozystackIoV1alpha1NamespacedMySQL","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"MySQL","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"name","in":"path","description":"name of the MySQL","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/natses":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of NATS. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1NamespacedNATSList","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"NATS","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/natses/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch changes to an object of kind NATS. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","operationId":"watchAppsCozystackIoV1alpha1NamespacedNATS","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"NATS","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"name","in":"path","description":"name of the NATS","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/postgreses":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of Postgres. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1NamespacedPostgresList","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Postgres","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/postgreses/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch changes to an object of kind Postgres. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","operationId":"watchAppsCozystackIoV1alpha1NamespacedPostgres","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Postgres","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"name","in":"path","description":"name of the Postgres","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/rabbitmqs":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of RabbitMQ. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1NamespacedRabbitMQList","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"RabbitMQ","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/rabbitmqs/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch changes to an object of kind RabbitMQ. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","operationId":"watchAppsCozystackIoV1alpha1NamespacedRabbitMQ","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"RabbitMQ","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"name","in":"path","description":"name of the RabbitMQ","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/redises":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of Redis. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1NamespacedRedisList","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Redis","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/redises/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch changes to an object of kind Redis. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","operationId":"watchAppsCozystackIoV1alpha1NamespacedRedis","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Redis","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"name","in":"path","description":"name of the Redis","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/seaweedfses":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of SeaweedFS. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1NamespacedSeaweedFSList","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"SeaweedFS","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/seaweedfses/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch changes to an object of kind SeaweedFS. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","operationId":"watchAppsCozystackIoV1alpha1NamespacedSeaweedFS","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"SeaweedFS","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"name","in":"path","description":"name of the SeaweedFS","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/tcpbalancers":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of TCPBalancer. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1NamespacedTCPBalancerList","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"TCPBalancer","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/tcpbalancers/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch changes to an object of kind TCPBalancer. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","operationId":"watchAppsCozystackIoV1alpha1NamespacedTCPBalancer","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"TCPBalancer","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"name","in":"path","description":"name of the TCPBalancer","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/tenants":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of Tenant. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1NamespacedTenantList","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Tenant","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/tenants/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch changes to an object of kind Tenant. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","operationId":"watchAppsCozystackIoV1alpha1NamespacedTenant","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Tenant","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"name","in":"path","description":"name of the Tenant","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/virtualmachines":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of VirtualMachine. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1NamespacedVirtualMachineList","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VirtualMachine","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/virtualmachines/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch changes to an object of kind VirtualMachine. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","operationId":"watchAppsCozystackIoV1alpha1NamespacedVirtualMachine","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VirtualMachine","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"name","in":"path","description":"name of the VirtualMachine","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/vmdisks":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of VMDisk. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1NamespacedVMDiskList","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VMDisk","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/vmdisks/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch changes to an object of kind VMDisk. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","operationId":"watchAppsCozystackIoV1alpha1NamespacedVMDisk","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VMDisk","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"name","in":"path","description":"name of the VMDisk","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/vminstances":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of VMInstance. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1NamespacedVMInstanceList","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VMInstance","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/vminstances/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch changes to an object of kind VMInstance. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","operationId":"watchAppsCozystackIoV1alpha1NamespacedVMInstance","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VMInstance","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"name","in":"path","description":"name of the VMInstance","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/vpns":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of VPN. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1NamespacedVPNList","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VPN","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/namespaces/{namespace}/vpns/{name}":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch changes to an object of kind VPN. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.","operationId":"watchAppsCozystackIoV1alpha1NamespacedVPN","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watch","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VPN","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"name","in":"path","description":"name of the VPN","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"namespace","in":"path","description":"object name and auth scope, such as for teams and projects","required":true,"schema":{"type":"string","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/natses":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of NATS. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1NATSListForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"NATS","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/postgreses":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of Postgres. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1PostgresListForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Postgres","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/rabbitmqs":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of RabbitMQ. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1RabbitMQListForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"RabbitMQ","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/redises":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of Redis. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1RedisListForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Redis","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/seaweedfses":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of SeaweedFS. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1SeaweedFSListForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"SeaweedFS","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/tcpbalancers":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of TCPBalancer. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1TCPBalancerListForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"TCPBalancer","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/tenants":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of Tenant. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1TenantListForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"Tenant","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/virtualmachines":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of VirtualMachine. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1VirtualMachineListForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VirtualMachine","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/vmdisks":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of VMDisk. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1VMDiskListForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VMDisk","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/vminstances":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of VMInstance. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1VMInstanceListForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VMInstance","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]},"/apis/apps.cozystack.io/v1alpha1/watch/vpns":{"get":{"tags":["appsCozystackIo_v1alpha1"],"description":"watch individual changes to a list of VPN. deprecated: use the 'watch' parameter with a list operation instead.","operationId":"watchAppsCozystackIoV1alpha1VPNListForAllNamespaces","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/json;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/vnd.kubernetes.protobuf;stream=watch":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}},"application/yaml":{"schema":{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"}}}}},"x-kubernetes-action":"watchlist","x-kubernetes-group-version-kind":{"group":"apps.cozystack.io","kind":"VPN","version":"v1alpha1"}},"parameters":[{"name":"allowWatchBookmarks","in":"query","description":"allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.","schema":{"type":"boolean","uniqueItems":true}},{"name":"continue","in":"query","description":"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.","schema":{"type":"string","uniqueItems":true}},{"name":"fieldSelector","in":"query","description":"A selector to restrict the list of returned objects by their fields. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"labelSelector","in":"query","description":"A selector to restrict the list of returned objects by their labels. Defaults to everything.","schema":{"type":"string","uniqueItems":true}},{"name":"limit","in":"query","description":"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.","schema":{"type":"integer","uniqueItems":true}},{"name":"pretty","in":"query","description":"If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget).","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersion","in":"query","description":"resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"resourceVersionMatch","in":"query","description":"resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset","schema":{"type":"string","uniqueItems":true}},{"name":"sendInitialEvents","in":"query","description":"`sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n\nWhen `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n- `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n\nDefaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise.","schema":{"type":"boolean","uniqueItems":true}},{"name":"timeoutSeconds","in":"query","description":"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.","schema":{"type":"integer","uniqueItems":true}},{"name":"watch","in":"query","description":"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.","schema":{"type":"boolean","uniqueItems":true}}]}},"components":{"schemas":{"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBox":{"description":"Application is an example type with a spec and a status.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"appVersion":{"type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"}]},"spec":{"type":"object","title":"Chart Values","properties":{"machines":{"description":"Configuration of physical machine instances","type":"array","default":[],"items":{"type":"object","required":["arch","hostname","ip","leaseTime","uefi"],"properties":{"arch":{"description":"Architecture","type":"string"},"hostname":{"description":"Hostname","type":"string"},"ip":{"type":"object","required":["address"],"properties":{"address":{"description":"IP address","type":"object","required":["address","gateway","netmask"],"properties":{"address":{"description":"IP address","type":"string"},"gateway":{"description":"IP gateway","type":"string"},"netmask":{"description":"Netmask","type":"string"}}}}},"leaseTime":{"description":"Lease time","type":"integer"},"mac":{"description":"MAC addresses","type":"array","items":{"type":"string"}},"nameServers":{"description":"Name servers","type":"array","items":{"type":"string"}},"timeServers":{"description":"Time servers","type":"array","items":{"type":"string"}},"uefi":{"description":"UEFI","type":"boolean"}}}},"whitelist":{"description":"List of client networks","type":"array","default":[],"items":{"type":"string"}},"whitelistHTTP":{"description":"Secure HTTP by enabling client networks whitelisting","type":"boolean","default":true}},"additionalProperties":true},"status":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBoxStatus"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBoxStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"BootBox","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBoxList":{"description":"ApplicationList is a list of Application objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"items":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBoxList"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBox"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}]}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"BootBoxList","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BootBoxStatus":{"description":"ApplicationStatus is the status of a Application.","type":"object","properties":{"conditions":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Condition"}]}},"version":{"description":"Conditions holds the conditions for the Application.","type":"string"}}},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Bucket":{"description":"Application is an example type with a spec and a status.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"appVersion":{"type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"}]},"spec":{"type":"object","title":"Chart Values","additionalProperties":true},"status":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BucketStatus"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BucketStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"Bucket","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BucketList":{"description":"ApplicationList is a list of Application objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"items":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BucketList"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Bucket"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}]}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"BucketList","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.BucketStatus":{"description":"ApplicationStatus is the status of a Application.","type":"object","properties":{"conditions":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Condition"}]}},"version":{"description":"Conditions holds the conditions for the Application.","type":"string"}}},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouse":{"description":"Application is an example type with a spec and a status.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"appVersion":{"type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"}]},"spec":{"type":"object","title":"Chart Values","properties":{"backup":{"description":"Backup configuration","type":"object","default":{},"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"},"enabled":{"description":"Enable regular backups, default is `false`","type":"boolean","default":false},"resticPassword":{"description":"Password for Restic backup encryption","type":"string","default":"\u003cpassword\u003e"},"s3AccessKey":{"description":"Access key for S3, used for authentication","type":"string","default":"\u003cyour-access-key\u003e"},"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":"\u003cyour-secret-key\u003e"},"schedule":{"description":"Cron schedule for automated backups","type":"string","default":"0 2 * * *"}}},"clickhouseKeeper":{"description":"Clickhouse Keeper configuration","type":"object","default":{},"required":["resourcesPreset"],"properties":{"enabled":{"description":"Deploy ClickHouse Keeper for cluster coordination","type":"boolean","default":true},"replicas":{"description":"Number of Keeper replicas","type":"integer","default":3},"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":"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}}},"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 available to each replica","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 (RAM) available to each replica","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"}}}}},"additionalProperties":true},"status":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouseStatus"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouseStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"ClickHouse","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouseList":{"description":"ApplicationList is a list of Application objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"items":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouseList"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouse"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}]}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"ClickHouseList","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.ClickHouseStatus":{"description":"ApplicationStatus is the status of a Application.","type":"object","properties":{"conditions":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Condition"}]}},"version":{"description":"Conditions holds the conditions for the Application.","type":"string"}}},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Etcd":{"description":"Application is an example type with a spec and a status.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"appVersion":{"type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"}]},"spec":{"type":"object","title":"Chart Values","properties":{"replicas":{"description":"Number of etcd replicas","type":"integer","default":3},"resources":{"description":"Resource configuration for etcd","type":"object","default":{},"properties":{"cpu":{"description":"The number of CPU cores allocated","default":4,"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":"The amount of memory allocated","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}}},"size":{"description":"Persistent Volume size","default":"4Gi","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"}},"additionalProperties":true},"status":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.EtcdStatus"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.EtcdStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"Etcd","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.EtcdList":{"description":"ApplicationList is a list of Application objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"items":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.EtcdList"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Etcd"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}]}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"EtcdList","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.EtcdStatus":{"description":"ApplicationStatus is the status of a Application.","type":"object","properties":{"conditions":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Condition"}]}},"version":{"description":"Conditions holds the conditions for the Application.","type":"string"}}},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDB":{"description":"Application is an example type with a spec and a status.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"appVersion":{"type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"}]},"spec":{"type":"object","title":"Chart Values","properties":{"backup":{"description":"Backup configuration","type":"object","default":{},"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, default is `false`.","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":"\u003cyour-access-key\u003e"},"s3SecretKey":{"description":"Secret key for S3, used for authentication","type":"string","default":"\u003cyour-secret-key\u003e"},"schedule":{"description":"Cron schedule for automated backups","type":"string","default":"0 2 * * * *"}}},"bootstrap":{"description":"Bootstrap (recovery) configuration","type":"object","default":{},"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":{},"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 available to each replica","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 (RAM) available to each replica","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"}}}}},"additionalProperties":true},"status":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDBStatus"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDBStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"FerretDB","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDBList":{"description":"ApplicationList is a list of Application objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"items":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDBList"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDB"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}]}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"FerretDBList","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.FerretDBStatus":{"description":"ApplicationStatus is the status of a Application.","type":"object","properties":{"conditions":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Condition"}]}},"version":{"description":"Conditions holds the conditions for the Application.","type":"string"}}},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCache":{"description":"Application is an example type with a spec and a status.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"appVersion":{"type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"}]},"spec":{"type":"object","title":"Chart Values","properties":{"endpoints":{"description":"Endpoints configuration, as a list of \u003cip:port\u003e","type":"array","default":[],"items":{"type":"string"}},"external":{"description":"Enable external access from outside the cluster","type":"boolean","default":false},"haproxy":{"description":"HAProxy configuration","type":"object","default":{},"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 available to each replica","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 (RAM) available to each replica","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":{},"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 available to each replica","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 (RAM) available to each replica","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"}},"additionalProperties":true},"status":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCacheStatus"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCacheStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"HTTPCache","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCacheList":{"description":"ApplicationList is a list of Application objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"items":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCacheList"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCache"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}]}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"HTTPCacheList","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.HTTPCacheStatus":{"description":"ApplicationStatus is the status of a Application.","type":"object","properties":{"conditions":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Condition"}]}},"version":{"description":"Conditions holds the conditions for the Application.","type":"string"}}},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Info":{"description":"Application is an example type with a spec and a status.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"appVersion":{"type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"}]},"spec":{"type":"object","title":"Chart Values","additionalProperties":true},"status":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.InfoStatus"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.InfoStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"Info","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.InfoList":{"description":"ApplicationList is a list of Application objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"items":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.InfoList"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Info"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}]}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"InfoList","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.InfoStatus":{"description":"ApplicationStatus is the status of a Application.","type":"object","properties":{"conditions":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Condition"}]}},"version":{"description":"Conditions holds the conditions for the Application.","type":"string"}}},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Ingress":{"description":"Application is an example type with a spec and a status.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"appVersion":{"type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"}]},"spec":{"type":"object","title":"Chart Values","properties":{"cloudflareProxy":{"description":"Restoring original visitor IPs when Cloudflare proxied is enabled","type":"boolean","default":false},"replicas":{"description":"Number of ingress-nginx replicas","type":"integer","default":2},"resources":{"description":"Explicit CPU and memory configuration for each ingress-nginx replica. When left empty, the preset defined in `resourcesPreset` is applied.","type":"object","default":{},"properties":{"cpu":{"description":"CPU available to each replica","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 (RAM) available to each replica","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"]},"whitelist":{"description":"List of client networks","type":"array","default":[],"items":{"type":"string"}}},"additionalProperties":true},"status":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.IngressStatus"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.IngressStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"Ingress","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.IngressList":{"description":"ApplicationList is a list of Application objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"items":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.IngressList"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Ingress"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}]}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"IngressList","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.IngressStatus":{"description":"ApplicationStatus is the status of a Application.","type":"object","properties":{"conditions":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Condition"}]}},"version":{"description":"Conditions holds the conditions for the Application.","type":"string"}}},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kafka":{"description":"Application is an example type with a spec and a status.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"appVersion":{"type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"}]},"spec":{"type":"object","title":"Chart Values","properties":{"external":{"description":"Enable external access from outside the cluster","type":"boolean","default":false},"kafka":{"description":"Kafka configuration","type":"object","default":{},"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 available to each replica","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 (RAM) available to each replica","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":{},"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 available to each replica","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 (RAM) available to each replica","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"}}}},"additionalProperties":true},"status":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.KafkaStatus"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.KafkaStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"Kafka","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.KafkaList":{"description":"ApplicationList is a list of Application objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"items":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.KafkaList"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kafka"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}]}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"KafkaList","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.KafkaStatus":{"description":"ApplicationStatus is the status of a Application.","type":"object","properties":{"conditions":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Condition"}]}},"version":{"description":"Conditions holds the conditions for the Application.","type":"string"}}},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kubernetes":{"description":"Application is an example type with a spec and a status.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"appVersion":{"type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"}]},"spec":{"type":"object","title":"Chart Values","properties":{"addons":{"description":"Cluster addons configuration","type":"object","default":{},"required":["certManager","cilium","coredns","fluxcd","gatewayAPI","gpuOperator","ingressNginx","monitoringAgents","velero","verticalPodAutoscaler"],"properties":{"certManager":{"description":"Cert-manager: automatically creates and manages SSL/TLS certificate","type":"object","default":{},"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":{},"required":["valuesOverride"],"properties":{"valuesOverride":{"description":"Custom values to override","type":"object","default":{},"x-kubernetes-preserve-unknown-fields":true}}},"coredns":{"description":"Coredns","type":"object","default":{},"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":{},"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":{},"required":["enabled"],"properties":{"enabled":{"description":"Enable the Gateway API","type":"boolean","default":false}}},"gpuOperator":{"description":"GPU-operator: NVIDIA GPU Operator","type":"object","default":{},"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":{},"required":["enabled","exposeMethod","valuesOverride"],"properties":{"enabled":{"description":"Enable the Ingress-NGINX controller (requires nodes labeled with the 'ingress-nginx' role).","type":"boolean","default":false},"exposeMethod":{"description":"Method to expose the Ingress-NGINX controller. Allowed values: `Proxied`, `LoadBalancer`.","type":"string","default":"Proxied","enum":["Proxied","LoadBalancer"]},"hosts":{"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`.","type":"array","default":[],"items":{"type":"string"}},"valuesOverride":{"description":"Custom values to override","type":"object","default":{},"x-kubernetes-preserve-unknown-fields":true}}},"monitoringAgents":{"description":"MonitoringAgents","type":"object","default":{},"required":["enabled","valuesOverride"],"properties":{"enabled":{"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","default":false},"valuesOverride":{"description":"Custom values to override","type":"object","default":{},"x-kubernetes-preserve-unknown-fields":true}}},"velero":{"description":"Velero","type":"object","default":{},"required":["enabled","valuesOverride"],"properties":{"enabled":{"description":"Enable Velero for backup and recovery of a tenant Kubernetes cluster.","type":"boolean","default":false},"valuesOverride":{"description":"Custom values to override","type":"object","default":{},"x-kubernetes-preserve-unknown-fields":true}}},"verticalPodAutoscaler":{"description":"VerticalPodAutoscaler","type":"object","default":{},"required":["valuesOverride"],"properties":{"valuesOverride":{"description":"Custom values to override","type":"object","default":{},"x-kubernetes-preserve-unknown-fields":true}}}}},"controlPlane":{"description":"Control Plane Configuration","type":"object","default":{},"required":["apiServer","controllerManager","konnectivity","replicas","scheduler"],"properties":{"apiServer":{"description":"Control plane API server configuration.","type":"object","default":{},"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":{},"properties":{"cpu":{"description":"CPU available to each worker node","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 (RAM) available to each worker node","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":"medium","enum":["nano","micro","small","medium","large","xlarge","2xlarge"]}}},"controllerManager":{"description":"Controller Manager configuration.","type":"object","default":{},"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":"CPU available to each worker node","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 (RAM) available to each worker node","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":{},"required":["server"],"properties":{"server":{"description":"Konnectivity server configuration.","type":"object","default":{},"required":["resources","resourcesPreset"],"properties":{"resources":{"description":"Explicit CPU and memory configuration for Konnectivity. When left empty, the preset defined in `resourcesPreset` is applied.","type":"object","default":{},"properties":{"cpu":{"description":"CPU available to each worker node","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 (RAM) available to each worker node","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"]}}}}},"replicas":{"description":"Number of replicas for Kubernetes control plane components.","type":"integer","default":2},"scheduler":{"description":"Scheduler configuration.","type":"object","default":{},"required":["resources","resourcesPreset"],"properties":{"resources":{"description":"Explicit CPU and memory configuration for the Scheduler. When left empty, the preset defined in `resourcesPreset` is applied.","type":"object","default":{},"properties":{"cpu":{"description":"CPU available to each worker node","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 (RAM) available to each worker node","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"]}}}}},"host":{"description":"Hostname used to access the Kubernetes cluster externally. Defaults to `\u003ccluster-name\u003e.\u003ctenant-host\u003e` 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","default":"20Gi","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","default":[],"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","default":"u1.medium"},"maxReplicas":{"description":"Maximum amount of replicas","type":"integer","default":10},"minReplicas":{"description":"Minimum amount of replicas","type":"integer","default":0},"resources":{"description":"Resources available to each worker node","type":"object","default":{},"properties":{"cpu":{"description":"CPU available to each worker node","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 (RAM) available to each worker node","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":{"description":"StorageClass used to store the data","type":"string","default":"replicated"},"version":{"description":"Kubernetes version given as vMAJOR.MINOR. Available are versions from 1.28 to 1.33.","type":"string","default":"v1.33","enum":["v1.28","v1.29","v1.30","v1.31","v1.32","v1.33"]}},"additionalProperties":true},"status":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.KubernetesStatus"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.KubernetesStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"Kubernetes","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.KubernetesList":{"description":"ApplicationList is a list of Application objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"items":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.KubernetesList"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Kubernetes"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}]}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"KubernetesList","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.KubernetesStatus":{"description":"ApplicationStatus is the status of a Application.","type":"object","properties":{"conditions":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Condition"}]}},"version":{"description":"Conditions holds the conditions for the Application.","type":"string"}}},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Monitoring":{"description":"Application is an example type with a spec and a status.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"appVersion":{"type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"}]},"spec":{"type":"object","title":"Chart Values","properties":{"alerta":{"description":"Configuration for Alerta service","type":"object","default":{},"properties":{"alerts":{"description":"Configuration for alerts","type":"object","default":{},"properties":{"telegram":{"description":"Configuration for Telegram alerts","type":"object","default":{},"required":["chatID","disabledSeverity","token"],"properties":{"chatID":{"description":"Specify multiple ID's separated by comma. Get yours in https://t.me/chatid_echo_bot","type":"string"},"disabledSeverity":{"description":"List of severity without alerts, separated by comma like: \"informational,warning\"","type":"string"},"token":{"description":"Telegram token for your bot","type":"string"}}}}},"resources":{"description":"Resources configuration","type":"object","default":{},"properties":{"limits":{"type":"object","default":{},"properties":{"cpu":{"description":"CPU limit (maximum available CPU)","default":1,"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 limit (maximum available memory)","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}}},"requests":{"type":"object","default":{},"properties":{"cpu":{"description":"CPU request (minimum available CPU)","default":"100m","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 request (minimum available memory)","default":"256Mi","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}}}}},"storage":{"description":"Persistent Volume size for the database","type":"string","default":"10Gi"},"storageClassName":{"description":"StorageClass used to store the data","type":"string"}}},"grafana":{"description":"Configuration for Grafana","type":"object","default":{},"properties":{"db":{"description":"Database configuration","type":"object","default":{},"properties":{"size":{"description":"Persistent Volume size for the database","type":"string","default":"10Gi"}}},"resources":{"description":"Resources configuration","type":"object","default":{},"properties":{"limits":{"type":"object","default":{},"properties":{"cpu":{"description":"CPU limit (maximum available CPU)","default":1,"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 limit (maximum available memory)","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}}},"requests":{"type":"object","default":{},"properties":{"cpu":{"description":"CPU request (minimum available CPU)","default":"100m","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 request (minimum available memory)","default":"256Mi","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}}}}}}},"host":{"description":"The hostname used to access the grafana externally (defaults to 'grafana' subdomain for the tenant host).","type":"string"},"logsStorages":{"description":"Configuration of logs storage instances","type":"array","default":[{"name":"generic","retentionPeriod":"1","storage":"10Gi","storageClassName":"replicated"}],"items":{"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","default":"1"},"storage":{"description":"Persistent Volume size for the storage instance","type":"string","default":"10Gi"},"storageClassName":{"description":"StorageClass used to store the data","type":"string","default":"replicated"}}}},"metricsStorages":{"description":"Configuration of metrics storage instances","type":"array","default":[{"deduplicationInterval":"15s","name":"shortterm","retentionPeriod":"3d","storage":"10Gi","storageClassName":""},{"deduplicationInterval":"5m","name":"longterm","retentionPeriod":"14d","storage":"10Gi","storageClassName":""}],"items":{"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","default":"10Gi"},"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":"Limits (maximum allowed/available resources )","type":"object","properties":{"cpu":{"description":"CPU limit (maximum available CPU)","default":1,"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 limit (maximum available memory)","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}}},"minAllowed":{"description":"Requests (minimum allowed/available resources)","type":"object","properties":{"cpu":{"description":"CPU request (minimum available CPU)","default":"100m","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 request (minimum available memory)","default":"256Mi","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}}}}},"vmselect":{"description":"Configuration for vmselect component of the storage instance","type":"object","properties":{"maxAllowed":{"description":"Limits (maximum allowed/available resources )","type":"object","properties":{"cpu":{"description":"CPU limit (maximum available CPU)","default":1,"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 limit (maximum available memory)","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}}},"minAllowed":{"description":"Requests (minimum allowed/available resources)","type":"object","properties":{"cpu":{"description":"CPU request (minimum available CPU)","default":"100m","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 request (minimum available memory)","default":"256Mi","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}}}}},"vmstorage":{"description":"Configuration for vmstorage component of the storage instance","type":"object","properties":{"maxAllowed":{"description":"Limits (maximum allowed/available resources )","type":"object","properties":{"cpu":{"description":"CPU limit (maximum available CPU)","default":1,"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 limit (maximum available memory)","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}}},"minAllowed":{"description":"Requests (minimum allowed/available resources)","type":"object","properties":{"cpu":{"description":"CPU request (minimum available CPU)","default":"100m","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 request (minimum available memory)","default":"256Mi","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}}}}}}}}},"additionalProperties":true},"status":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MonitoringStatus"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MonitoringStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"Monitoring","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MonitoringList":{"description":"ApplicationList is a list of Application objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"items":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MonitoringList"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Monitoring"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}]}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"MonitoringList","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MonitoringStatus":{"description":"ApplicationStatus is the status of a Application.","type":"object","properties":{"conditions":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Condition"}]}},"version":{"description":"Conditions holds the conditions for the Application.","type":"string"}}},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQL":{"description":"Application is an example type with a spec and a status.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"appVersion":{"type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"}]},"spec":{"type":"object","title":"Chart Values","properties":{"backup":{"description":"Backup configuration","type":"object","default":{},"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"},"enabled":{"description":"Enable regular backups, default is `false`.","type":"boolean","default":false},"resticPassword":{"description":"Password for Restic backup encryption","type":"string","default":"\u003cpassword\u003e"},"s3AccessKey":{"description":"Access key for S3, used for authentication","type":"string","default":"\u003cyour-access-key\u003e"},"s3Bucket":{"description":"S3 bucket used for storing backups","type":"string","default":"s3.example.org/mysql-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":"\u003cyour-secret-key\u003e"},"schedule":{"description":"Cron schedule for automated backups","type":"string","default":"0 2 * * *"}}},"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 available to each replica","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 (RAM) available to each replica","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"}}}}},"additionalProperties":true},"status":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQLStatus"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQLStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"MySQL","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQLList":{"description":"ApplicationList is a list of Application objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"items":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQLList"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQL"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}]}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"MySQLList","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.MySQLStatus":{"description":"ApplicationStatus is the status of a Application.","type":"object","properties":{"conditions":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Condition"}]}},"version":{"description":"Conditions holds the conditions for the Application.","type":"string"}}},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATS":{"description":"Application is an example type with a spec and a status.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"appVersion":{"type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"}]},"spec":{"type":"object","title":"Chart Values","properties":{"config":{"description":"NATS configuration","type":"object","default":{},"properties":{"merge":{"description":"Additional configuration to merge into NATS config (see example)","type":"object","default":{},"x-kubernetes-preserve-unknown-fields":true},"resolver":{"description":"Additional resolver configuration to merge into NATS config (see example)","type":"object","default":{},"x-kubernetes-preserve-unknown-fields":true}}},"external":{"description":"Enable external access from outside the cluster","type":"boolean","default":false},"jetstream":{"description":"Jetstream configuration","type":"object","default":{},"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 available to each replica","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 (RAM) available to each replica","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"}}}}},"additionalProperties":true},"status":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATSStatus"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATSStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"NATS","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATSList":{"description":"ApplicationList is a list of Application objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"items":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATSList"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATS"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}]}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"NATSList","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.NATSStatus":{"description":"ApplicationStatus is the status of a Application.","type":"object","properties":{"conditions":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Condition"}]}},"version":{"description":"Conditions holds the conditions for the Application.","type":"string"}}},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Postgres":{"description":"Application is an example type with a spec and a status.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"appVersion":{"type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"}]},"spec":{"type":"object","title":"Chart Values","properties":{"backup":{"description":"Backup configuration","type":"object","default":{},"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":"\u003cyour-access-key\u003e"},"s3SecretKey":{"description":"Secret key for S3, used for authentication","type":"string","default":"\u003cyour-secret-key\u003e"},"schedule":{"description":"Cron schedule for automated backups","type":"string","default":"0 2 * * * *"}}},"bootstrap":{"description":"Bootstrap configuration","type":"object","default":{},"required":["enabled","oldName"],"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","default":{},"additionalProperties":{"type":"object","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":{"description":"Enable external access from outside the cluster","type":"boolean","default":false},"postgresql":{"description":"PostgreSQL server configuration","type":"object","default":{},"required":["parameters"],"properties":{"parameters":{"description":"PostgreSQL server parameters","type":"object","default":{},"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","default":{},"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":"Explicit CPU and memory configuration for each PostgreSQL replica. When left empty, the preset defined in `resourcesPreset` is applied.","type":"object","default":{},"properties":{"cpu":{"description":"CPU available to each replica","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 (RAM) available to each replica","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"},"replication":{"description":"Whether the user has replication privileges","type":"boolean"}}}}},"additionalProperties":true},"status":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.PostgresStatus"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.PostgresStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"Postgres","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.PostgresList":{"description":"ApplicationList is a list of Application objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"items":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.PostgresList"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Postgres"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}]}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"PostgresList","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.PostgresStatus":{"description":"ApplicationStatus is the status of a Application.","type":"object","properties":{"conditions":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Condition"}]}},"version":{"description":"Conditions holds the conditions for the Application.","type":"string"}}},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQ":{"description":"Application is an example type with a spec and a status.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"appVersion":{"type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"}]},"spec":{"type":"object","title":"Chart Values","properties":{"external":{"description":"Enable external access from outside the cluster","type":"boolean","default":false},"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 available to each replica","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 (RAM) available to each replica","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"}}}},"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"}}}}}}}},"additionalProperties":true},"status":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQStatus"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"RabbitMQ","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQList":{"description":"ApplicationList is a list of Application objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"items":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQList"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQ"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}]}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"RabbitMQList","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RabbitMQStatus":{"description":"ApplicationStatus is the status of a Application.","type":"object","properties":{"conditions":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Condition"}]}},"version":{"description":"Conditions holds the conditions for the Application.","type":"string"}}},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Redis":{"description":"Application is an example type with a spec and a status.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"appVersion":{"type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"}]},"spec":{"type":"object","title":"Chart Values","properties":{"authEnabled":{"description":"Enable password generation","type":"boolean","default":true},"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 available to each replica","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 (RAM) available to each replica","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"}},"additionalProperties":true},"status":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RedisStatus"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RedisStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"Redis","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RedisList":{"description":"ApplicationList is a list of Application objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"items":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RedisList"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Redis"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}]}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"RedisList","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.RedisStatus":{"description":"ApplicationStatus is the status of a Application.","type":"object","properties":{"conditions":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Condition"}]}},"version":{"description":"Conditions holds the conditions for the Application.","type":"string"}}},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFS":{"description":"Application is an example type with a spec and a status.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"appVersion":{"type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"}]},"spec":{"type":"object","title":"Chart Values","properties":{"db":{"description":"Database Configuration","type":"object","default":{},"required":["resources","resourcesPreset"],"properties":{"replicas":{"description":"Number of database replicas","type":"integer","default":2},"resources":{"description":"Explicit CPU and memory configuration for the database. When left empty, the preset defined in `resourcesPreset` is applied.","type":"object","default":{},"properties":{"cpu":{"description":"The number of CPU cores allocated","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":"The amount of memory allocated","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","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"}}},"filer":{"description":"Filer service configuration","type":"object","default":{},"required":["resources","resourcesPreset"],"properties":{"grpcHost":{"description":"The hostname used to expose or access the filer service externally.","type":"string"},"grpcPort":{"description":"The port used to access the filer service externally.","type":"integer","default":443},"replicas":{"description":"Number of filer replicas","type":"integer","default":2},"resources":{"description":"Explicit CPU and memory configuration for the filer. When left empty, the preset defined in `resourcesPreset` is applied.","type":"object","default":{},"properties":{"cpu":{"description":"The number of CPU cores allocated","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":"The amount of memory allocated","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"]},"whitelist":{"description":"A list of IP addresses or CIDR ranges that are allowed to access the filer service.","type":"array","default":[],"items":{"type":"string"}}}},"host":{"description":"The hostname used to access the SeaweedFS externally (defaults to 's3' subdomain for the tenant host).","type":"string"},"master":{"description":"Master service configuration","type":"object","default":{},"required":["resources","resourcesPreset"],"properties":{"replicas":{"description":"Number of master replicas","type":"integer","default":3},"resources":{"description":"Explicit CPU and memory configuration for the master. When left empty, the preset defined in `resourcesPreset` is applied.","type":"object","default":{},"properties":{"cpu":{"description":"The number of CPU cores allocated","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":"The amount of memory allocated","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"]}}},"replicationFactor":{"description":"Replication factor: number of replicas for each volume in the SeaweedFS cluster.","type":"integer","default":2},"s3":{"description":"S3 service configuration","type":"object","default":{},"required":["resources","resourcesPreset"],"properties":{"replicas":{"description":"Number of s3 replicas","type":"integer","default":2},"resources":{"description":"Explicit CPU and memory configuration for the s3. When left empty, the preset defined in `resourcesPreset` is applied.","type":"object","default":{},"properties":{"cpu":{"description":"The number of CPU cores allocated","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":"The amount of memory allocated","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"]}}},"topology":{"description":"The topology of the SeaweedFS cluster. (allowed values: Simple, MultiZone, Client)","type":"string","default":"Simple","enum":["Simple","MultiZone","Client"]},"volume":{"description":"Volume service configuration","type":"object","default":{},"required":["resources","resourcesPreset"],"properties":{"replicas":{"description":"Number of volume replicas","type":"integer","default":2},"resources":{"description":"Explicit CPU and memory configuration for the volume. When left empty, the preset defined in `resourcesPreset` is applied.","type":"object","default":{},"properties":{"cpu":{"description":"The number of CPU cores allocated","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":"The amount of memory allocated","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","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"},"zones":{"description":"A map of zones for MultiZone topology. Each zone can have its own number of replicas and size.","type":"object","default":{},"additionalProperties":{"type":"object","properties":{"replicas":{"description":"Number of replicas in the zone","type":"integer"},"size":{"description":"Zone 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}}}}}}},"additionalProperties":true},"status":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFSStatus"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFSStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"SeaweedFS","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFSList":{"description":"ApplicationList is a list of Application objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"items":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFSList"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFS"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}]}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"SeaweedFSList","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.SeaweedFSStatus":{"description":"ApplicationStatus is the status of a Application.","type":"object","properties":{"conditions":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Condition"}]}},"version":{"description":"Conditions holds the conditions for the Application.","type":"string"}}},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancer":{"description":"Application is an example type with a spec and a status.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"appVersion":{"type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"}]},"spec":{"type":"object","title":"Chart Values","properties":{"external":{"description":"Enable external access from outside the cluster","type":"boolean","default":false},"httpAndHttps":{"description":"HTTP and HTTPS configuration","type":"object","default":{},"required":["mode","targetPorts"],"properties":{"endpoints":{"description":"Endpoint addresses list","type":"array","default":[],"items":{"type":"string"}},"mode":{"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":{},"required":["http","https"],"properties":{"http":{"description":"HTTP port number.","type":"integer","default":80},"https":{"description":"HTTPS port number.","type":"integer","default":443}}}}},"replicas":{"description":"Number of HAProxy replicas","type":"integer","default":2},"resources":{"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 available to each replica","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 (RAM) available to each replica","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"]},"whitelist":{"description":"List of allowed client networks","type":"array","default":[],"items":{"type":"string"}},"whitelistHTTP":{"description":"Secure HTTP by whitelisting client networks, `false` by default.","type":"boolean","default":false}},"additionalProperties":true},"status":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancerStatus"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancerStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"TCPBalancer","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancerList":{"description":"ApplicationList is a list of Application objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"items":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancerList"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancer"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}]}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"TCPBalancerList","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TCPBalancerStatus":{"description":"ApplicationStatus is the status of a Application.","type":"object","properties":{"conditions":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Condition"}]}},"version":{"description":"Conditions holds the conditions for the Application.","type":"string"}}},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Tenant":{"description":"Application is an example type with a spec and a status.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"appVersion":{"type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"}]},"spec":{"type":"object","title":"Chart Values","properties":{"etcd":{"description":"Deploy own Etcd cluster","type":"boolean","default":false},"host":{"description":"The hostname used to access tenant services (defaults to using the tenant name as a subdomain for it's parent tenant host).","type":"string"},"ingress":{"description":"Deploy own Ingress Controller","type":"boolean","default":false},"isolated":{"description":"Enforce tenant namespace with network policies, `true` by default","type":"boolean","default":true},"monitoring":{"description":"Deploy own Monitoring Stack","type":"boolean","default":false},"resourceQuotas":{"description":"Define resource quotas for the tenant","type":"object","default":{},"additionalProperties":{"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}},"seaweedfs":{"description":"Deploy own SeaweedFS","type":"boolean","default":false}},"additionalProperties":true},"status":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TenantStatus"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TenantStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"Tenant","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TenantList":{"description":"ApplicationList is a list of Application objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"items":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TenantList"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.Tenant"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}]}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"TenantList","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.TenantStatus":{"description":"ApplicationStatus is the status of a Application.","type":"object","properties":{"conditions":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Condition"}]}},"version":{"description":"Conditions holds the conditions for the Application.","type":"string"}}},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDisk":{"description":"Application is an example type with a spec and a status.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"appVersion":{"type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"}]},"spec":{"type":"object","title":"Chart Values","properties":{"optical":{"description":"Defines if disk should be considered optical","type":"boolean","default":false},"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"}},"additionalProperties":true},"status":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDiskStatus"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDiskStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"VMDisk","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDiskList":{"description":"ApplicationList is a list of Application objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"items":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDiskList"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDisk"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}]}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"VMDiskList","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMDiskStatus":{"description":"ApplicationStatus is the status of a Application.","type":"object","properties":{"conditions":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Condition"}]}},"version":{"description":"Conditions holds the conditions for the Application.","type":"string"}}},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstance":{"description":"Application is an example type with a spec and a status.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"appVersion":{"type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"}]},"spec":{"type":"object","title":"Chart Values","properties":{"cloudInit":{"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/reference/examples.html).","type":"string"},"cloudInitSeed":{"description":"A seed string to generate an SMBIOS UUID for the VM.","type":"string"},"disks":{"description":"List of disks to attach","type":"array","default":[],"items":{"type":"object","required":["name"],"properties":{"bus":{"description":"Disk bus type, such as \"sata\"","type":"string"},"name":{"description":"Disk name","type":"string"}}}},"external":{"description":"Enable external access from outside the cluster","type":"boolean","default":false},"externalMethod":{"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":{"description":"Ports to forward from outside the cluster","type":"array","default":[22],"items":{"type":"integer"}},"gpus":{"description":"List of GPUs to attach (WARN: NVIDIA driver requires at least 4 GiB of RAM)","type":"array","default":[],"items":{"type":"object","required":["name"],"properties":{"name":{"description":"Name of GPU, such as \"nvidia.com/AD102GL_L40S\"","type":"string"}}}},"instanceProfile":{"description":"Virtual Machine preferences profile","type":"string","default":"ubuntu","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",""]},"instanceType":{"description":"Virtual Machine instance type","type":"string","default":"u1.medium"},"resources":{"description":"Resources","type":"object","default":{},"properties":{"cpu":{"description":"The number of CPU cores allocated to the virtual machine","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":"The amount of memory allocated to the virtual machine","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":{"description":"The number of CPU sockets allocated to the virtual machine (used to define vCPU topology)","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}}},"running":{"description":"Determines if the virtual machine should be running","type":"boolean","default":true},"sshKeys":{"description":"List of SSH public keys for authentication. Can be a single key or a list of keys.","type":"array","default":[],"items":{"type":"string"}}},"additionalProperties":true},"status":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstanceStatus"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstanceStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"VMInstance","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstanceList":{"description":"ApplicationList is a list of Application objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"items":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstanceList"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstance"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}]}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"VMInstanceList","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VMInstanceStatus":{"description":"ApplicationStatus is the status of a Application.","type":"object","properties":{"conditions":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Condition"}]}},"version":{"description":"Conditions holds the conditions for the Application.","type":"string"}}},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPN":{"description":"Application is an example type with a spec and a status.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"appVersion":{"type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"}]},"spec":{"type":"object","title":"Chart Values","properties":{"external":{"description":"Enable external access from outside the cluster","type":"boolean","default":false},"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 available to each replica","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 (RAM) available to each replica","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"}}}}},"additionalProperties":true},"status":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPNStatus"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPNStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"VPN","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPNList":{"description":"ApplicationList is a list of Application objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"items":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPNList"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPN"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}]}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"VPNList","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VPNStatus":{"description":"ApplicationStatus is the status of a Application.","type":"object","properties":{"conditions":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Condition"}]}},"version":{"description":"Conditions holds the conditions for the Application.","type":"string"}}},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachine":{"description":"Application is an example type with a spec and a status.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"appVersion":{"type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"}]},"spec":{"type":"object","title":"Chart Values","properties":{"cloudInit":{"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/reference/examples.html).","type":"string"},"cloudInitSeed":{"description":"A seed string to generate an SMBIOS UUID for the VM.","type":"string"},"external":{"description":"Enable external access from outside the cluster","type":"boolean","default":false},"externalMethod":{"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":{"description":"Specify ports to forward from outside the cluster","type":"array","default":[22],"items":{"type":"integer"}},"gpus":{"description":"List of GPUs to attach","type":"array","default":[],"items":{"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"}}}},"instanceProfile":{"description":"Virtual Machine preferences profile","type":"string","default":"ubuntu","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",""]},"instanceType":{"description":"Virtual Machine instance type","type":"string","default":"u1.medium"},"resources":{"description":"Resources","type":"object","default":{},"properties":{"cpu":{"description":"The number of CPU cores allocated to the virtual machine","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":"The amount of memory allocated to the virtual machine","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":{"description":"The number of CPU sockets allocated to the virtual machine (used to define vCPU topology)","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}}},"running":{"description":"if the virtual machine should be running","type":"boolean","default":true},"sshKeys":{"description":"List of SSH public keys for authentication. Can be a single key or a list of keys.","type":"array","default":[],"items":{"type":"string"}},"systemDisk":{"description":"System disk configuration","type":"object","default":{},"required":["image","storage"],"properties":{"image":{"description":"The base image for the virtual machine. Allowed values: `ubuntu`, `cirros`, `alpine`, `fedora` and `talos`","type":"string","default":"ubuntu","enum":["ubuntu","cirros","alpine","fedora","talos"]},"storage":{"description":"The size of the disk allocated for the virtual machine","type":"string","default":"5Gi"},"storageClass":{"description":"StorageClass used to store the data","type":"string","default":"replicated"}}}},"additionalProperties":true},"status":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachineStatus"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachineStatus"}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"VirtualMachine","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachineList":{"description":"ApplicationList is a list of Application objects.","type":"object","required":["items"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"items":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachineList"}],"$ref":"#/components/schemas/com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachine"}},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}]}},"x-kubernetes-group-version-kind":[{"group":"apps.cozystack.io","kind":"VirtualMachineList","version":"v1alpha1"}]},"com.github.cozystack.cozystack.pkg.apis.apps.v1alpha1.VirtualMachineStatus":{"description":"ApplicationStatus is the status of a Application.","type":"object","properties":{"conditions":{"type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Condition"}]}},"version":{"description":"Conditions holds the conditions for the Application.","type":"string"}}},"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSON":{"description":"JSON represents any valid JSON value. These types are supported: bool, int64, float64, string, []interface{}, map[string]interface{} and nil."},"io.k8s.apimachinery.pkg.apis.meta.v1.APIResource":{"description":"APIResource specifies the name of a resource and whether it is namespaced.","type":"object","required":["name","singularName","namespaced","kind","verbs"],"properties":{"categories":{"description":"categories is a list of the grouped resources this resource belongs to (e.g. 'all')","type":"array","items":{"type":"string","default":""},"x-kubernetes-list-type":"atomic"},"group":{"description":"group is the preferred group of the resource. Empty implies the group of the containing resource list. For subresources, this may have a different value, for example: Scale\".","type":"string"},"kind":{"description":"kind is the kind for the resource (e.g. 'Foo' is the kind for a resource 'foo')","type":"string","default":""},"name":{"description":"name is the plural name of the resource.","type":"string","default":""},"namespaced":{"description":"namespaced indicates if a resource is namespaced or not.","type":"boolean","default":false},"shortNames":{"description":"shortNames is a list of suggested short names of the resource.","type":"array","items":{"type":"string","default":""},"x-kubernetes-list-type":"atomic"},"singularName":{"description":"singularName is the singular name of the resource. This allows clients to handle plural and singular opaquely. The singularName is more correct for reporting status on a single item and both singular and plural are allowed from the kubectl CLI interface.","type":"string","default":""},"storageVersionHash":{"description":"The hash value of the storage version, the version this resource is converted to when written to the data store. Value must be treated as opaque by clients. Only equality comparison on the value is valid. This is an alpha feature and may change or be removed in the future. The field is populated by the apiserver only if the StorageVersionHash feature gate is enabled. This field will remain optional even if it graduates.","type":"string"},"verbs":{"description":"verbs is a list of supported kube verbs (this includes get, list, watch, create, update, patch, delete, deletecollection, and proxy)","type":"array","items":{"type":"string","default":""}},"version":{"description":"version is the preferred version of the resource. Empty implies the version of the containing resource list For subresources, this may have a different value, for example: v1 (while inside a v1beta1 version of the core resource's group)\".","type":"string"}}},"io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList":{"description":"APIResourceList is a list of APIResource, it is used to expose the name of the resources supported in a specific group and version, and if the resource is namespaced.","type":"object","required":["groupVersion","resources"],"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"groupVersion":{"description":"groupVersion is the group and version this APIResourceList is for.","type":"string","default":""},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"resources":{"description":"resources contains the name of the resources and if they are namespaced.","type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.APIResource"}]},"x-kubernetes-list-type":"atomic"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"APIResourceList","version":"v1"}]},"io.k8s.apimachinery.pkg.apis.meta.v1.Condition":{"description":"Condition contains details for one aspect of the current state of this API Resource.","type":"object","required":["type","status","lastTransitionTime","reason","message"],"properties":{"lastTransitionTime":{"description":"lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.","allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Time"}]},"message":{"description":"message is a human readable message indicating details about the transition. This may be an empty string.","type":"string","default":""},"observedGeneration":{"description":"observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.","type":"integer","format":"int64"},"reason":{"description":"reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.","type":"string","default":""},"status":{"description":"status of the condition, one of True, False, Unknown.","type":"string","default":""},"type":{"description":"type of condition in CamelCase or in foo.example.com/CamelCase.","type":"string","default":""}}},"io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions":{"description":"DeleteOptions may be provided when deleting an API object.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"dryRun":{"description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","type":"array","items":{"type":"string","default":""},"x-kubernetes-list-type":"atomic"},"gracePeriodSeconds":{"description":"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.","type":"integer","format":"int64"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"orphanDependents":{"description":"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.","type":"boolean"},"preconditions":{"description":"Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be returned.","allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Preconditions"}]},"propagationPolicy":{"description":"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.","type":"string"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"DeleteOptions","version":"v1"},{"group":"apps.cozystack.io","kind":"DeleteOptions","version":"v1alpha1"},{"group":"helm.toolkit.fluxcd.io","kind":"DeleteOptions","version":"v2"}]},"io.k8s.apimachinery.pkg.apis.meta.v1.FieldsV1":{"description":"FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\u003cindex\u003e', where \u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff","type":"object"},"io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta":{"description":"ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.","type":"object","properties":{"continue":{"description":"continue may be set if the user set a limit on the number of items returned, and indicates that the server has more data available. The value is opaque and may be used to issue another request to the endpoint that served this list to retrieve the next set of available objects. Continuing a consistent list may not be possible if the server configuration has changed or more than a few minutes have passed. The resourceVersion field returned when using this continue value will be identical to the value in the first response, unless you have received this token from an error message.","type":"string"},"remainingItemCount":{"description":"remainingItemCount is the number of subsequent items in the list which are not included in this list response. If the list request contained label or field selectors, then the number of remaining items is unknown and the field will be left unset and omitted during serialization. If the list is complete (either because it is not chunking or because this is the last chunk), then there are no more remaining items and this field will be left unset and omitted during serialization. Servers older than v1.15 do not set this field. The intended use of the remainingItemCount is *estimating* the size of a collection. Clients should not rely on the remainingItemCount to be set or to be exact.","type":"integer","format":"int64"},"resourceVersion":{"description":"String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency","type":"string"},"selfLink":{"description":"Deprecated: selfLink is a legacy read-only field that is no longer populated by the system.","type":"string"}}},"io.k8s.apimachinery.pkg.apis.meta.v1.ManagedFieldsEntry":{"description":"ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.","type":"string"},"fieldsType":{"description":"FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"","type":"string"},"fieldsV1":{"description":"FieldsV1 holds the first JSON version format as described in the \"FieldsV1\" type.","allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.FieldsV1"}]},"manager":{"description":"Manager is an identifier of the workflow managing these fields.","type":"string"},"operation":{"description":"Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.","type":"string"},"subresource":{"description":"Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.","type":"string"},"time":{"description":"Time is the timestamp of when the ManagedFields entry was added. The timestamp will also be updated if a field is added, the manager changes any of the owned fields value or removes a field. The timestamp does not update when a field is removed from the entry because another manager took it over.","allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Time"}]}}},"io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta":{"description":"ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.","type":"object","properties":{"annotations":{"description":"Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations","type":"object","additionalProperties":{"type":"string","default":""}},"creationTimestamp":{"description":"CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata","allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Time"}]},"deletionGracePeriodSeconds":{"description":"Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.","type":"integer","format":"int64"},"deletionTimestamp":{"description":"DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata","allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Time"}]},"finalizers":{"description":"Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.","type":"array","items":{"type":"string","default":""},"x-kubernetes-list-type":"set","x-kubernetes-patch-strategy":"merge"},"generateName":{"description":"GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will return a 409.\n\nApplied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency","type":"string"},"generation":{"description":"A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.","type":"integer","format":"int64"},"labels":{"description":"Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels","type":"object","additionalProperties":{"type":"string","default":""}},"managedFields":{"description":"ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.","type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ManagedFieldsEntry"}]},"x-kubernetes-list-type":"atomic"},"name":{"description":"Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names","type":"string"},"namespace":{"description":"Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n\nMust be a DNS_LABEL. Cannot be updated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces","type":"string"},"ownerReferences":{"description":"List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.","type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.OwnerReference"}]},"x-kubernetes-list-map-keys":["uid"],"x-kubernetes-list-type":"map","x-kubernetes-patch-merge-key":"uid","x-kubernetes-patch-strategy":"merge"},"resourceVersion":{"description":"An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\n\nPopulated by the system. Read-only. Value must be treated as opaque by clients and . More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency","type":"string"},"selfLink":{"description":"Deprecated: selfLink is a legacy read-only field that is no longer populated by the system.","type":"string"},"uid":{"description":"UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#uids","type":"string"}}},"io.k8s.apimachinery.pkg.apis.meta.v1.OwnerReference":{"description":"OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.","type":"object","required":["apiVersion","kind","name","uid"],"properties":{"apiVersion":{"description":"API version of the referent.","type":"string","default":""},"blockOwnerDeletion":{"description":"If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. See https://kubernetes.io/docs/concepts/architecture/garbage-collection/#foreground-deletion for how the garbage collector interacts with this field and enforces the foreground deletion. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.","type":"boolean"},"controller":{"description":"If true, this reference points to the managing controller.","type":"boolean"},"kind":{"description":"Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string","default":""},"name":{"description":"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names","type":"string","default":""},"uid":{"description":"UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#uids","type":"string","default":""}},"x-kubernetes-map-type":"atomic"},"io.k8s.apimachinery.pkg.apis.meta.v1.Patch":{"description":"Patch is provided to give a concrete name and type to the Kubernetes PATCH request body.","type":"object"},"io.k8s.apimachinery.pkg.apis.meta.v1.Preconditions":{"description":"Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out.","type":"object","properties":{"resourceVersion":{"description":"Specifies the target ResourceVersion","type":"string"},"uid":{"description":"Specifies the target UID.","type":"string"}}},"io.k8s.apimachinery.pkg.apis.meta.v1.Status":{"description":"Status is a return value for calls that don't return other objects.","type":"object","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"code":{"description":"Suggested HTTP return code for this status, 0 if not set.","type":"integer","format":"int32"},"details":{"description":"Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.","allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.StatusDetails"}],"x-kubernetes-list-type":"atomic"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"message":{"description":"A human-readable description of the status of this operation.","type":"string"},"metadata":{"description":"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta"}]},"reason":{"description":"A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.","type":"string"},"status":{"description":"Status of the operation. One of: \"Success\" or \"Failure\". More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status","type":"string"}},"x-kubernetes-group-version-kind":[{"group":"","kind":"Status","version":"v1"}]},"io.k8s.apimachinery.pkg.apis.meta.v1.StatusCause":{"description":"StatusCause provides more information about an api.Status failure, including cases when multiple errors are encountered.","type":"object","properties":{"field":{"description":"The field of the resource that has caused this error, as named by its JSON serialization. May include dot and postfix notation for nested attributes. Arrays are zero-indexed. Fields may appear more than once in an array of causes due to fields having multiple errors. Optional.\n\nExamples:\n \"name\" - the field \"name\" on the current resource\n \"items[0].name\" - the field \"name\" on the first array entry in \"items\"","type":"string"},"message":{"description":"A human-readable description of the cause of the error. This field may be presented as-is to a reader.","type":"string"},"reason":{"description":"A machine-readable description of the cause of the error. If this value is empty there is no information available.","type":"string"}}},"io.k8s.apimachinery.pkg.apis.meta.v1.StatusDetails":{"description":"StatusDetails is a set of additional properties that MAY be set by the server to provide additional information about a response. The Reason field of a Status object defines what attributes will be set. Clients must ignore fields that do not match the defined type of each attribute, and should assume that any attribute may be empty, invalid, or under defined.","type":"object","properties":{"causes":{"description":"The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.","type":"array","items":{"default":{},"allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.StatusCause"}]},"x-kubernetes-list-type":"atomic"},"group":{"description":"The group attribute of the resource associated with the status StatusReason.","type":"string"},"kind":{"description":"The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"name":{"description":"The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).","type":"string"},"retryAfterSeconds":{"description":"If specified, the time in seconds before the operation should be retried. Some errors may indicate the client must take an alternate action - for those errors this field may indicate how long to wait before taking the alternate action.","type":"integer","format":"int32"},"uid":{"description":"UID of the resource. (when there is a single resource which can be described). More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#uids","type":"string"}}},"io.k8s.apimachinery.pkg.apis.meta.v1.Time":{"description":"Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.","type":"string","format":"date-time"},"io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent":{"description":"Event represents a single event to a watched resource.","type":"object","required":["type","object"],"properties":{"object":{"description":"Object is:\n * If Type is Added or Modified: the new state of the object.\n * If Type is Deleted: the state of the object immediately before deletion.\n * If Type is Error: *Status is recommended; other types may make sense\n depending on context.","allOf":[{"$ref":"#/components/schemas/io.k8s.apimachinery.pkg.runtime.RawExtension"}]},"type":{"type":"string","default":""}},"x-kubernetes-group-version-kind":[{"group":"","kind":"WatchEvent","version":"v1"},{"group":"apps.cozystack.io","kind":"WatchEvent","version":"v1alpha1"},{"group":"helm.toolkit.fluxcd.io","kind":"WatchEvent","version":"v2"}]},"io.k8s.apimachinery.pkg.runtime.RawExtension":{"description":"RawExtension is used to hold extensions in external versions.\n\nTo use this, make a field which has RawExtension as its type in your external, versioned struct, and Object in your internal struct. You also need to register your various plugin types.\n\n// Internal package:\n\n\ttype MyAPIObject struct {\n\t\truntime.TypeMeta `json:\",inline\"`\n\t\tMyPlugin runtime.Object `json:\"myPlugin\"`\n\t}\n\n\ttype PluginA struct {\n\t\tAOption string `json:\"aOption\"`\n\t}\n\n// External package:\n\n\ttype MyAPIObject struct {\n\t\truntime.TypeMeta `json:\",inline\"`\n\t\tMyPlugin runtime.RawExtension `json:\"myPlugin\"`\n\t}\n\n\ttype PluginA struct {\n\t\tAOption string `json:\"aOption\"`\n\t}\n\n// On the wire, the JSON will look something like this:\n\n\t{\n\t\t\"kind\":\"MyAPIObject\",\n\t\t\"apiVersion\":\"v1\",\n\t\t\"myPlugin\": {\n\t\t\t\"kind\":\"PluginA\",\n\t\t\t\"aOption\":\"foo\",\n\t\t},\n\t}\n\nSo what happens? Decode first uses json or yaml to unmarshal the serialized data into your external MyAPIObject. That causes the raw JSON to be stored, but not unpacked. The next step is to copy (using pkg/conversion) into the internal struct. The runtime package's DefaultScheme has conversion functions installed which will unpack the JSON stored in RawExtension, turning it into the correct object type, and storing it in the Object. (TODO: In the case where the object is of an unknown type, a runtime.Unknown object will be created and stored.)","type":"object"}}}} \ No newline at end of file diff --git a/content/en/docs/v1/cozystack-api/rest.md b/content/en/docs/v1/cozystack-api/rest.md new file mode 100644 index 00000000..61f18797 --- /dev/null +++ b/content/en/docs/v1/cozystack-api/rest.md @@ -0,0 +1,9 @@ +--- +title: REST API Reference +linkTitle: REST API +description: "Cozystack REST API Reference" +type: swagger +weight: 10 +--- + +{{< swaggerui src="/docs/v1/cozystack-api/api.json" >}} diff --git a/content/en/docs/development.md b/content/en/docs/v1/development.md similarity index 98% rename from content/en/docs/development.md rename to content/en/docs/v1/development.md index 92c297bb..41034e8c 100644 --- a/content/en/docs/development.md +++ b/content/en/docs/v1/development.md @@ -4,7 +4,7 @@ title: Cozystack Internals and Developer Guides description: Cozystack Internals and Development weight: 100 aliases: -- /docs/development/development + - /docs/v1/development/development --- @@ -267,6 +267,6 @@ make login # Downloads the kubeconfig into a temporary directory and runs a s make proxy # Enable a SOCKS5 proxy server; mirrord and gost must be installed. ``` -Socks5 proxy can be configured in a browser to access services of a cluster running in sandbox. Firefox has an handy extension for toogling proxy on/off: +Socks5 proxy can be configured in a browser to access services of a cluster running in sandbox. Firefox has a handy extension for toogling proxy on/off: - [Proxy Toggle](https://addons.mozilla.org/en-US/firefox/addon/proxy-toggle/) diff --git a/content/en/docs/getting-started/_index.md b/content/en/docs/v1/getting-started/_index.md similarity index 98% rename from content/en/docs/getting-started/_index.md rename to content/en/docs/v1/getting-started/_index.md index efbdc15e..b1ad7b9f 100644 --- a/content/en/docs/getting-started/_index.md +++ b/content/en/docs/v1/getting-started/_index.md @@ -4,7 +4,7 @@ linkTitle: "Getting Started" description: "Make your first steps, run a home lab, build a POC with Cozystack." weight: 10 aliases: -- /docs/get-started + - /docs/v1/get-started --- This tutorial will guide you through your first deployment of a Cozystack cluster. diff --git a/content/en/docs/getting-started/create-tenant.md b/content/en/docs/v1/getting-started/create-tenant.md similarity index 91% rename from content/en/docs/getting-started/create-tenant.md rename to content/en/docs/v1/getting-started/create-tenant.md index dce8241b..9434893d 100644 --- a/content/en/docs/getting-started/create-tenant.md +++ b/content/en/docs/v1/getting-started/create-tenant.md @@ -16,16 +16,16 @@ Before you begin: - Complete the previous steps of the tutorial to get - a [Cozystack cluster]({{% ref "/docs/getting-started/install-cozystack" %}}) running, + a [Cozystack cluster]({{% ref "/docs/v1/getting-started/install-cozystack" %}}) running, with storage, networking, and management dashboard configured. - Make sure you can access the dashboard, as described in the - [previous step of the tutorial]({{% ref "/docs/getting-started/install-cozystack" %}}). + [previous step of the tutorial]({{% ref "/docs/v1/getting-started/install-cozystack" %}}). - If you're using OIDC, users and roles must be configured. - See the [OIDC guide]({{% ref "/docs/operations/oidc" %}}) for details on how to work with the built-in OIDC server. + See the [OIDC guide]({{% ref "/docs/v1/operations/oidc" %}}) for details on how to work with the built-in OIDC server. -During [Kubernetes installation]({{% ref "/docs/getting-started/install-kubernetes" %}}) for Cozystack, +During [Kubernetes installation]({{% ref "/docs/v1/getting-started/install-kubernetes" %}}) for Cozystack, you should have obtained the administrative `kubeconfig` file for your new cluster. Keep it at hand — it may be useful later for troubleshooting. However, for day-to-day operations, you'll want to create user-specific credentials. @@ -39,7 +39,7 @@ Each tenant has its own set of applications and one or more nested Kubernetes cl Tenant users have full access to their clusters. Optionally, you can configure quotas for each tenant to limit resource usage and prevent overconsumption. -To learn more about tenants, read the [Core Concepts]({{% ref "/docs/guides/concepts#tenant-system" %}}) guide. +To learn more about tenants, read the [Core Concepts]({{% ref "/docs/v1/guides/concepts#tenant-system" %}}) guide. ## Create a Tenant @@ -137,7 +137,7 @@ The method to retrieve it depends on whether OIDC is enabled in your Cozystack s ### With OIDC Enabled You can retrieve the kubeconfig file directly from the dashboard, as described in the -[OIDC guide]({{% ref "/docs/operations/oidc/enable_oidc#step-4-retrieve-kubeconfig" %}}). +[OIDC guide]({{% ref "/docs/v1/operations/oidc/enable_oidc#step-4-retrieve-kubeconfig" %}}). ### Without OIDC diff --git a/content/en/docs/getting-started/deploy-app.md b/content/en/docs/v1/getting-started/deploy-app.md similarity index 99% rename from content/en/docs/getting-started/deploy-app.md rename to content/en/docs/v1/getting-started/deploy-app.md index fd7bf754..2127d034 100644 --- a/content/en/docs/getting-started/deploy-app.md +++ b/content/en/docs/v1/getting-started/deploy-app.md @@ -25,7 +25,7 @@ Once you're done, you’ll have a working setup ready for your own applications Before you begin: -- **Cozystack cluster** should already be [installed and running]({{% ref "/docs/getting-started/install-cozystack" %}}). +- **Cozystack cluster** should already be [installed and running]({{% ref "/docs/v1/getting-started/install-cozystack" %}}). You won’t need to install or configure anything on the infrastructure level—this guide assumes that part is already done, possibly by you or someone else on your team. - **Tenant and credentials:** You must have access to your tenant in Cozystack. diff --git a/content/en/docs/getting-started/install-cozystack.md b/content/en/docs/v1/getting-started/install-cozystack.md similarity index 98% rename from content/en/docs/getting-started/install-cozystack.md rename to content/en/docs/v1/getting-started/install-cozystack.md index 2a1f33a4..7b316d6d 100644 --- a/content/en/docs/getting-started/install-cozystack.md +++ b/content/en/docs/v1/getting-started/install-cozystack.md @@ -55,14 +55,14 @@ However, let's overview and explain each value: - `root-host` is used as the main domain for all services created under Cozystack, such as the dashboard, Grafana, Keycloak, etc. - `api-server-endpoint` is the Cluster API endpoint. It's used for generating kubeconfig files for your users. It is recommended to use routable IP addresses instead of local ones. - `data.bundle-name: "paas-full"` means that we're using the Cozystack bundle `paas-full`, the most complete set of components. - Learn more about bundles in the [Cozystack Bundles reference]({{% ref "/docs/operations/configuration/bundles" %}}). + Learn more about bundles in the [Cozystack Bundles reference]({{% ref "/docs/v1/operations/configuration/bundles" %}}). - `data.expose-services: "dashboard,api"` means that we want to make Cozystack dashboard (UI) and API accessible by users. - `ipv4-*` are internal networking configurations for the underlying Kubernetes cluster. -You can learn more about this configuration file in the [Cozystack ConfigMap reference]({{% ref "/docs/operations/configuration/configmap" %}}). +You can learn more about this configuration file in the [Cozystack ConfigMap reference]({{% ref "/docs/v1/operations/configuration/configmap" %}}). {{% alert color="info" %}} -Cozystack gathers anonymous usage statistics by default. Learn more about what data is collected and how to opt out in the [Telemetry Documentation]({{% ref "/docs/operations/configuration/telemetry" %}}). +Cozystack gathers anonymous usage statistics by default. Learn more about what data is collected and how to opt out in the [Telemetry Documentation]({{% ref "/docs/v1/operations/configuration/telemetry" %}}). {{% /alert %}} @@ -309,7 +309,7 @@ This step has two options depending on your available infrastructure: - For VMs and dedicated servers from cloud providers, choose the public IP setup. [Most cloud providers don't support MetalLB](https://metallb.universe.tf/installation/clouds/). - Check out the [provider-specific installation]({{% ref "/docs/install/providers" %}}) section. + Check out the [provider-specific installation]({{% ref "/docs/v1/install/providers" %}}) section. It may have instructions for your provider, which you can use to deploy a production-ready cluster. ### 4.a MetalLB Setup @@ -646,4 +646,4 @@ In this example, `grafana.example.org` is located at 192.168.100.200. ## Next Step -Continue the Cozystack tutorial by [creating a user tenant]({{% ref "/docs/getting-started/create-tenant" %}}). +Continue the Cozystack tutorial by [creating a user tenant]({{% ref "/docs/v1/getting-started/create-tenant" %}}). diff --git a/content/en/docs/getting-started/install-kubernetes.md b/content/en/docs/v1/getting-started/install-kubernetes.md similarity index 78% rename from content/en/docs/getting-started/install-kubernetes.md rename to content/en/docs/v1/getting-started/install-kubernetes.md index 41d51c9d..d580d9da 100644 --- a/content/en/docs/getting-started/install-kubernetes.md +++ b/content/en/docs/v1/getting-started/install-kubernetes.md @@ -7,14 +7,14 @@ weight: 15 ## Objectives -We start this step of the tutorial, having [three nodes with Talos Linux installed on them]({{% ref "/docs/getting-started/install-talos" %}}). +We start this step of the tutorial, having [three nodes with Talos Linux installed on them]({{% ref "/docs/v1/getting-started/install-talos" %}}). As a result of this step, we will have a Kubernetes cluster installed, configured, and ready to install Cozystack. We will also have a `kubeconfig` for this cluster, and will have performed basic checks on the cluster. ## Installing Kubernetes -Install and bootstrap a Kubernetes cluster using [Talm]({{% ref "/docs/install/kubernetes/talm" %}}), a declarative CLI configuration tool with ready configuration presets for Cozystack. +Install and bootstrap a Kubernetes cluster using [Talm]({{% ref "/docs/v1/install/kubernetes/talm" %}}), a declarative CLI configuration tool with ready configuration presets for Cozystack. {{% alert color="info" %}} This part of the tutorial is being reworked. @@ -24,7 +24,7 @@ It will include simplified instructions for Talm installation, without all the e ## Next Step -Continue the Cozystack tutorial by [installing and configuring Cozystack]({{% ref "/docs/getting-started/install-cozystack" %}}). +Continue the Cozystack tutorial by [installing and configuring Cozystack]({{% ref "/docs/v1/getting-started/install-cozystack" %}}). Extra tasks: diff --git a/content/en/docs/getting-started/install-talos.md b/content/en/docs/v1/getting-started/install-talos.md similarity index 86% rename from content/en/docs/getting-started/install-talos.md rename to content/en/docs/v1/getting-started/install-talos.md index 9f9072c0..1971bbbf 100644 --- a/content/en/docs/getting-started/install-talos.md +++ b/content/en/docs/v1/getting-started/install-talos.md @@ -4,21 +4,21 @@ linkTitle: "1. Install Talos" description: "Install Talos Linux on any machine using cozystack/boot-to-talos." weight: 10 aliases: - - /docs/getting-started/first-deployment - - /docs/getting-started/deploy-cluster + - /docs/v1/getting-started/first-deployment + - /docs/v1/getting-started/deploy-cluster --- ## Before you begin Make sure that you have nodes (bare-metal servers or VMs) that fit the -[hardware requirements]({{% ref "/docs/getting-started/requirements" %}}). +[hardware requirements]({{% ref "/docs/v1/getting-started/requirements" %}}). ## Objectives On this step of the tutorial you will install Talos Linux on bare-metal servers or VMs running some other Linux distribution. The tutorial is using `boot-to-talos`, a simple-to-use CLI app made by Cozystack team for users and teams adopting Cozystack. -There are multiple ways to [install Talos Linux for Cozystack]({{% ref "/docs/install/talos" %}}), not used here and covered in separate guides. +There are multiple ways to [install Talos Linux for Cozystack]({{% ref "/docs/v1/install/talos" %}}), not used here and covered in separate guides. ## Installation @@ -86,11 +86,11 @@ Continue? [yes]: ## Next Step -Continue the Cozystack tutorial by [installing and bootstrapping a Kubernetes cluster using Talm]({{% ref "/docs/getting-started/install-kubernetes" %}}). +Continue the Cozystack tutorial by [installing and bootstrapping a Kubernetes cluster using Talm]({{% ref "/docs/v1/getting-started/install-kubernetes" %}}). Extra tasks: -- Read the [Talos Linux overview]({{% ref "/docs/guides/talos" %}}) to learn why Talos Linux is the optimal OS choice for Cozystack +- Read the [Talos Linux overview]({{% ref "/docs/v1/guides/talos" %}}) to learn why Talos Linux is the optimal OS choice for Cozystack and what it brings to the platform. -- Learn more about [`boot-to-talos`]({{% ref "/docs/install/talos/boot-to-talos#about-the-application" %}}). +- Learn more about [`boot-to-talos`]({{% ref "/docs/v1/install/talos/boot-to-talos#about-the-application" %}}). - Check out [github.com/cozystack/boot-to-talos](https://github.com/cozystack/boot-to-talos) and give it a star! \ No newline at end of file diff --git a/content/en/docs/getting-started/requirements.md b/content/en/docs/v1/getting-started/requirements.md similarity index 88% rename from content/en/docs/getting-started/requirements.md rename to content/en/docs/v1/getting-started/requirements.md index 564c1e6d..27a37e3b 100644 --- a/content/en/docs/getting-started/requirements.md +++ b/content/en/docs/v1/getting-started/requirements.md @@ -23,7 +23,7 @@ To run this tutorial, you will need the following setup: **Cluster nodes:** three bare-metal servers or virtual machines. Hardware requirements depend on your usage scenario: -{{< include "docs/install/_include/hardware-config-tabs.md" >}} +{{< include "docs/v1/install/_include/hardware-config-tabs.md" >}} **Storage:** - **Primary Disk**: Used for Talos Linux, etcd storage, and downloaded images. Low latency is required. @@ -31,7 +31,7 @@ To run this tutorial, you will need the following setup: **OS:** - Any Linux distribution, for example, Ubuntu.
-- There are [other installation methods]({{% ref "/docs/install/talos" %}}) which require either any Linux or no OS at all to start. +- There are [other installation methods]({{% ref "/docs/v1/install/talos" %}}) which require either any Linux or no OS at all to start. **BIOS/UEFI Settings:** - **Secure Boot must be disabled.**
@@ -48,5 +48,5 @@ To run this tutorial, you will need the following setup: - Nested virtualization enabled.
Required for virtual machines and tenant kubernetes clusters. -For a more detailed explanation of hardware requirements for different setups, refer to the [Hardware Requirements]({{% ref "/docs/install/hardware-requirements" %}}) +For a more detailed explanation of hardware requirements for different setups, refer to the [Hardware Requirements]({{% ref "/docs/v1/install/hardware-requirements" %}}) diff --git a/content/en/docs/guides/_index.md b/content/en/docs/v1/guides/_index.md similarity index 100% rename from content/en/docs/guides/_index.md rename to content/en/docs/v1/guides/_index.md diff --git a/content/en/docs/guides/concepts.md b/content/en/docs/v1/guides/concepts.md similarity index 91% rename from content/en/docs/guides/concepts.md rename to content/en/docs/v1/guides/concepts.md index fec8cf7e..2d211c67 100644 --- a/content/en/docs/guides/concepts.md +++ b/content/en/docs/v1/guides/concepts.md @@ -4,7 +4,7 @@ linkTitle: Key Concepts description: "Learn about the key concepts of Cozystack, such as management cluster, tenants, and bundles." weight: 10 aliases: - - /docs/concepts + - /docs/v1/concepts --- Cozystack is an open-source, Kubernetes-native platform that turns bare-metal or virtual infrastructure into a fully featured, multi-tenant cloud. @@ -38,7 +38,7 @@ Some cloud providers use the term "projects" for a similar entity. When Cozystack is used to build a private cloud and an internal development platform, a tenant usually belongs to a team or subteam. In a hosting business, where Cozystack is the foundation of a public cloud, a tenant can belong to a customer. -Read more: [Tenant System]({{% ref "docs/guides/tenants" %}}). +Read more: [Tenant System]({{% ref "docs/v1/guides/tenants" %}}). ## Tenant Cluster @@ -48,7 +48,7 @@ These are not namespaces of the management cluster, but complete Kubernetes-in-K Tenant clusters are what many cloud providers call "managed Kubernetes". They are used as development, testing, and production environments. -Read more: [tenant Kubernetes clusters]({{% ref "docs/kubernetes" %}}). +Read more: [tenant Kubernetes clusters]({{% ref "docs/v1/kubernetes" %}}). ## Managed Applications @@ -58,7 +58,7 @@ These include relational databases (PostgreSQL, MySQL/MariaDB), NoSQL/queues (Re Tenants, tenant Kubernetes clusters, and VMs are also managed applications in terms of Cozystack. They are created with the same user workflow and are managed with Helm and Flux, just as other applications. -Read more: [managed applications]({{% ref "/docs/applications" %}}). +Read more: [managed applications]({{% ref "/docs/v1/applications" %}}). ## Cozystack API @@ -70,7 +70,7 @@ This approach combines well with role-based access control. Non-administrative users can use `kubectl` to access the management cluster, but their kubeconfig will authorize them only to create custom resources in their tenants. -Read more: [Cozystack API]({{% ref "/docs/cozystack-api" %}}). +Read more: [Cozystack API]({{% ref "/docs/v1/cozystack-api" %}}). ## Bundles @@ -78,4 +78,4 @@ Bundles are pre-defined combinations of Cozystack components. Each bundle is tested, versioned, and guaranteed to work as a unit. They simplify installation, reduce the risk of misconfiguration, and make it easier to choose the right set of features for your deployment. -Read more: [Bundles]({{% ref "/docs/operations/configuration/bundles" %}}). +Read more: [Bundles]({{% ref "/docs/v1/operations/configuration/bundles" %}}). diff --git a/content/en/docs/guides/platform-stack/_index.md b/content/en/docs/v1/guides/platform-stack/_index.md similarity index 85% rename from content/en/docs/guides/platform-stack/_index.md rename to content/en/docs/v1/guides/platform-stack/_index.md index 55d5b856..6869ca80 100644 --- a/content/en/docs/guides/platform-stack/_index.md +++ b/content/en/docs/v1/guides/platform-stack/_index.md @@ -24,7 +24,7 @@ Talos Linux is a Linux distribution made and optimized for a single purpose: to It provides the foundation for reliability and security in a Cozystack cluster. Its use allows Cozystack to limit the technology stack, improving stability and security. -Read more about it in the [Talos Linux]({{%ref "/docs/guides/talos" %}}) section. +Read more about it in the [Talos Linux]({{% ref "/docs/v1/guides/talos" %}}) section. ### Kubernetes @@ -128,7 +128,7 @@ but also from outside your cluster network. HAProxy is an advanced and widely known TCP balancer. It continuously checks service availability and carefully balances production traffic between them in real time. -See the application reference: [TCP Balancer]({{% ref "/docs/networking/tcp-balancer" %}}) +See the application reference: [TCP Balancer]({{% ref "/docs/v1/networking/tcp-balancer" %}}) ### SeaweedFS @@ -144,10 +144,10 @@ Cozystack includes a set of Kubernetes operators, used for managing system servi Cozystack is shipped with a number of user-side applications, pre-configured for reliability and resource efficiency, coming with monitoring and observability included: -- [Tenant Kubernetes clusters]({{% ref "/docs/kubernetes" %}}), fully-functional managed Kubernetes clusters for development and production workloads. -- [Managed applications]({{% ref "/docs/applications" %}}), such as databases and queues. -- [Virtual machines]({{% ref "/docs/virtualization" %}}), supporting Linux and Windows OS. -- [Networking appliances]({{% ref "/docs/networking" %}}), including VPN, HTTP cache, TCP load balancer, and virtual routers. +- [Tenant Kubernetes clusters]({{% ref "/docs/v1/kubernetes" %}}), fully-functional managed Kubernetes clusters for development and production workloads. +- [Managed applications]({{% ref "/docs/v1/applications" %}}), such as databases and queues. +- [Virtual machines]({{% ref "/docs/v1/virtualization" %}}), supporting Linux and Windows OS. +- [Networking appliances]({{% ref "/docs/v1/networking" %}}), including VPN, HTTP cache, TCP load balancer, and virtual routers. ### Managed Kubernetes @@ -171,18 +171,18 @@ This architecture ensures isolated, scalable, and efficient Kubernetes environme - Supported version: Kubernetes v1.32.4 - Operator: [aenix-io/etcd-operator](https://github.com/aenix-io/etcd-operator) v0.4.2 -- Managed application reference: [Kubernetes]({{% ref "/docs/kubernetes" %}}) +- Managed application reference: [Kubernetes]({{% ref "/docs/v1/kubernetes" %}}) ### Virtual Machines -In Cozystack, virtualization features are powered by [KubeVirt]({{% ref "/docs/guides/platform-stack#kubevirt" %}}). +In Cozystack, virtualization features are powered by [KubeVirt]({{% ref "/docs/v1/guides/platform-stack#kubevirt" %}}). Cozystack has a number of applications providing virtualization functionality: -- [Simple virtual machine]({{% ref "/docs/virtualization/virtual-machine" %}}). -- [Virtual machine instance]({{% ref "/docs/virtualization/vm-instance" %}}) with more advanced configuration. -- [Virtual machine disk]({{% ref "/docs/virtualization/vm-disk" %}}), offering a choice of image sources. -- [VM image (Golden Disk)]({{% ref "/docs/virtualization/vm-image" %}}), which makes OS images locally available, improving VM creation time and saving network traffic. +- [Simple virtual machine]({{% ref "/docs/v1/virtualization/virtual-machine" %}}). +- [Virtual machine instance]({{% ref "/docs/v1/virtualization/vm-instance" %}}) with more advanced configuration. +- [Virtual machine disk]({{% ref "/docs/v1/virtualization/vm-disk" %}}), offering a choice of image sources. +- [VM image (Golden Disk)]({{% ref "/docs/v1/virtualization/vm-image" %}}), which makes OS images locally available, improving VM creation time and saving network traffic. ### ClickHouse @@ -194,7 +194,7 @@ In the Cozystack platform, we use the Altinity operator to provide ClickHouse. - Supported version: 24.9.2.42 - Kubernetes operator: [Altinity/clickhouse-operator](https://github.com/Altinity/clickhouse-operator) v0.25.0 - Website: [clickhouse.com](https://clickhouse.com/) -- Managed application reference: [ClickHouse]({{% ref "/docs/applications/clickhouse" %}}) +- Managed application reference: [ClickHouse]({{% ref "/docs/v1/applications/clickhouse" %}}) ### FerretDB @@ -205,7 +205,7 @@ In Cozystack, it is backed by PostgreSQL. - Supported version: FerretDB 1.24.0. - Website: [ferretdb.io](https://www.ferretdb.io/) -- Managed application reference: [FerretDB]({{% ref "/docs/applications/ferretdb" %}}) +- Managed application reference: [FerretDB]({{% ref "/docs/v1/applications/ferretdb" %}}) ### Kafka @@ -218,7 +218,7 @@ to run an Apache Kafka cluster on Kubernetes in various deployment configuration - Supported version: Apache Kafka 3.9.0 - Kubernetes operator: [strimzi/strimzi-kafka-operator](https://github.com/strimzi/strimzi-kafka-operator) v0.45.0 - Website: [kafka.apache.org](https://kafka.apache.org/) -- Managed application reference: [Kafka]({{% ref "/docs/applications/kafka" %}}) +- Managed application reference: [Kafka]({{% ref "/docs/v1/applications/kafka" %}}) ### MySQL (MariaDB) @@ -233,7 +233,7 @@ as well as schedules for creating backups using [Restic](https://restic.net/), o - Supported version: MariaDB 11.4.3 - Kubernetes operator: [mariadb-operator/mariadb-operator](https://github.com/mariadb-operator/mariadb-operator) v0.18.0 - Website: [mariadb.com](https://mariadb.com/) -- Managed application reference: [MySQL]({{% ref "/docs/applications/mysql" %}}) +- Managed application reference: [MySQL]({{% ref "/docs/v1/applications/mysql" %}}) ### NATS Messaging @@ -243,7 +243,7 @@ It provides a data layer for cloud native applications, IoT messaging, and micro - Supported version: NATS 2.10.17 - Website: [nats.io](https://nats.io/) -- Managed application reference: [NATS]({{% ref "/docs/applications/nats" %}}) +- Managed application reference: [NATS]({{% ref "/docs/v1/applications/nats" %}}) ### PostgreSQL @@ -256,7 +256,7 @@ This is managed with the increasingly popular CloudNativePG operator within the - Supported version: PostgreSQL 17 - Kubernetes operator: [cloudnative-pg/cloudnative-pg](https://github.com/cloudnative-pg/cloudnative-pg) v1.24.0 - Website: [cloudnative-pg.io](https://cloudnative-pg.io/) -- Managed application reference: [PostgreSQL]({{% ref "/docs/applications/postgres" %}}) +- Managed application reference: [PostgreSQL]({{% ref "/docs/v1/applications/postgres" %}}) ### RabbitMQ @@ -267,7 +267,7 @@ The platform-side implementation allows you to create failover clusters managed - Supported version: RabbitMQ 4.1.0+ (latest stable version) - Kubernetes operator: [rabbitmq/cluster-operator](https://github.com/rabbitmq/cluster-operator) v1.10.0 - Website: [rabbitmq.com](https://www.rabbitmq.com/) -- Managed application reference: [RabbitMQ]({{% ref "/docs/applications/rabbitmq" %}}) +- Managed application reference: [RabbitMQ]({{% ref "/docs/v1/applications/rabbitmq" %}}) ### Redis @@ -280,7 +280,7 @@ This is managed by the spotahome/redis-operator. - Supported version: Redis 6.2.6+ (based on `alpine`) - Kubernetes operator: [spotahome/redis-operator](https://github.com/spotahome/redis-operator) v1.3.0-rc1 - Website: [redis.io](https://redis.io/) -- Managed application reference: [Redis]({{% ref "/docs/applications/redis" %}}) +- Managed application reference: [Redis]({{% ref "/docs/v1/applications/redis" %}}) ### VPN Service @@ -294,7 +294,7 @@ This enables fast internet access while complicating traffic analysis and blocki - Supported version: Outline Server, v1.12.3+ (stable) - Website: [getoutline.org](https://getoutline.org/) -- Managed application reference: [VPN]({{% ref "/docs/networking/vpn" %}}) +- Managed application reference: [VPN]({{% ref "/docs/v1/networking/vpn" %}}) ### HTTP Cache @@ -306,7 +306,7 @@ It also supports horizontal scaling without duplicating data on multiple servers - Included versions: Nginx 1.25.3, HAProxy latest stable. - Website: [nginx.org](https://nginx.org/) -- Managed application reference: [HTTP Cache]({{% ref "/docs/networking/http-cache" %}}) +- Managed application reference: [HTTP Cache]({{% ref "/docs/v1/networking/http-cache" %}}) ### TCP Balancer @@ -316,11 +316,11 @@ It efficiently distributes incoming TCP traffic across multiple backend servers, TCP Load Balancer service is powered by [HAProxy](https://www.haproxy.org/), a mature and reliable TCP load balancer. -- Managed application reference: [TCP balancer]({{% ref "/docs/networking/tcp-balancer" %}}) +- Managed application reference: [TCP balancer]({{% ref "/docs/v1/networking/tcp-balancer" %}}) - Docs: [HAProxy Documentation](https://www.haproxy.com/documentation/) ### Tenants Tenants in Cozystack are implemented as managed applications. -Learn more about tenants in [Tenant System]({{% ref "/docs/guides/tenants" %}}). +Learn more about tenants in [Tenant System]({{% ref "/docs/v1/guides/tenants" %}}). diff --git a/content/en/docs/v1/guides/platform-stack/cozystack-layers.png b/content/en/docs/v1/guides/platform-stack/cozystack-layers.png new file mode 100644 index 00000000..ff82049e Binary files /dev/null and b/content/en/docs/v1/guides/platform-stack/cozystack-layers.png differ diff --git a/content/en/docs/guides/resource-management/_index.md b/content/en/docs/v1/guides/resource-management/_index.md similarity index 100% rename from content/en/docs/guides/resource-management/_index.md rename to content/en/docs/v1/guides/resource-management/_index.md diff --git a/content/en/docs/guides/talos.md b/content/en/docs/v1/guides/talos.md similarity index 100% rename from content/en/docs/guides/talos.md rename to content/en/docs/v1/guides/talos.md diff --git a/content/en/docs/guides/tenants/_index.md b/content/en/docs/v1/guides/tenants/_index.md similarity index 89% rename from content/en/docs/guides/tenants/_index.md rename to content/en/docs/v1/guides/tenants/_index.md index 7cbe3c02..133ba595 100644 --- a/content/en/docs/guides/tenants/_index.md +++ b/content/en/docs/v1/guides/tenants/_index.md @@ -10,7 +10,7 @@ A **tenant** in Cozystack is the primary unit of isolation and security, analogo Each tenant represents an isolated environment with its own resources, networking, and RBAC (role-based access control). Some cloud providers use the term "projects" for a similar entity. -Cozystack administrators and users create tenants using the [Tenant application]({{% ref "/docs/applications/tenant" %}}) +Cozystack administrators and users create tenants using the [Tenant application]({{% ref "/docs/v1/applications/tenant" %}}) from the application catalog. Tenants can be created via the Cozystack dashboard (UI), `kubectl`, or directly via Cozystack API. @@ -30,7 +30,7 @@ In turn, children can use their parent's services. ### Sharing Cluster Services -Tenants may have [cluster services]({{% ref "/docs/operations/services" %}}) deployed in them. +Tenants may have [cluster services]({{% ref "/docs/v1/operations/services" %}}) deployed in them. Cluster services are middleware services providing core functionality to the tenants and user-facing applications. The `root` tenant has a set of services like `etcd`, `ingress`, and `monitoring` by default. @@ -40,8 +40,8 @@ For example, a Cozystack user creates the following tenants and services: - Tenant `foo` inside of tenant `root`, having its own instances of `etcd` and `monitoring` running. - Tenant `bar` inside of tenant `foo`, having its own instance of `etcd`. -- [Tenant Kubernetes cluster]({{% ref "/docs/kubernetes" %}}) and a - [Postgres database]({{% ref "/docs/applications/postgres" %}}) in the tenant `bar`. +- [Tenant Kubernetes cluster]({{% ref "/docs/v1/kubernetes" %}}) and a + [Postgres database]({{% ref "/docs/v1/applications/postgres" %}}) in the tenant `bar`. All applications need services like `ingress` and `monitoring`. Since tenant `bar` does not have these services, the applications will use the parent tenant's services. @@ -80,5 +80,5 @@ For example: ### Reference -See the reference for the application implementing tenant management: [`tenant`]({{% ref "/docs/applications/tenant#parameters" %}}) +See the reference for the application implementing tenant management: [`tenant`]({{% ref "/docs/v1/applications/tenant#parameters" %}}) diff --git a/content/en/docs/v1/guides/tenants/tenants1.png b/content/en/docs/v1/guides/tenants/tenants1.png new file mode 100644 index 00000000..3a024287 Binary files /dev/null and b/content/en/docs/v1/guides/tenants/tenants1.png differ diff --git a/content/en/docs/v1/guides/tenants/tenants2.png b/content/en/docs/v1/guides/tenants/tenants2.png new file mode 100644 index 00000000..81369d2f Binary files /dev/null and b/content/en/docs/v1/guides/tenants/tenants2.png differ diff --git a/content/en/docs/guides/use-cases/_index.md b/content/en/docs/v1/guides/use-cases/_index.md similarity index 82% rename from content/en/docs/guides/use-cases/_index.md rename to content/en/docs/v1/guides/use-cases/_index.md index a9a9e9ab..63ce485b 100644 --- a/content/en/docs/guides/use-cases/_index.md +++ b/content/en/docs/v1/guides/use-cases/_index.md @@ -4,5 +4,5 @@ linkTitle: "Use Cases" description: "Cozystack use cases." weight: 30 aliases: - - /docs/use-cases + - /docs/v1/use-cases --- diff --git a/content/en/docs/guides/use-cases/kubernetes-distribution.md b/content/en/docs/v1/guides/use-cases/kubernetes-distribution.md similarity index 95% rename from content/en/docs/guides/use-cases/kubernetes-distribution.md rename to content/en/docs/v1/guides/use-cases/kubernetes-distribution.md index efd8bdf2..55b63ae8 100644 --- a/content/en/docs/guides/use-cases/kubernetes-distribution.md +++ b/content/en/docs/v1/guides/use-cases/kubernetes-distribution.md @@ -4,7 +4,7 @@ linkTitle: Kubernetes Distribution description: "How to use Cozystack as Kubernetes distribution" weight: 30 aliases: - - /docs/use-cases/kubernetes-distribution + - /docs/v1/use-cases/kubernetes-distribution --- You can use Cozystack as Kubernetes distribution for Bare Metal diff --git a/content/en/docs/guides/use-cases/private-cloud.md b/content/en/docs/v1/guides/use-cases/private-cloud.md similarity index 96% rename from content/en/docs/guides/use-cases/private-cloud.md rename to content/en/docs/v1/guides/use-cases/private-cloud.md index f6facb2c..106ab219 100644 --- a/content/en/docs/guides/use-cases/private-cloud.md +++ b/content/en/docs/v1/guides/use-cases/private-cloud.md @@ -4,7 +4,7 @@ linkTitle: Private Cloud description: "How to use Cozystack to build private cloud" weight: 20 aliases: - - /docs/use-cases/private-cloud + - /docs/v1/use-cases/private-cloud --- You can use Cozystack as platform to build a private cloud powered by Infrastructure-as-Code diff --git a/content/en/docs/guides/use-cases/public-cloud.md b/content/en/docs/v1/guides/use-cases/public-cloud.md similarity index 96% rename from content/en/docs/guides/use-cases/public-cloud.md rename to content/en/docs/v1/guides/use-cases/public-cloud.md index ad7f2fbc..d8902c69 100644 --- a/content/en/docs/guides/use-cases/public-cloud.md +++ b/content/en/docs/v1/guides/use-cases/public-cloud.md @@ -4,7 +4,7 @@ linkTitle: Public Cloud description: "How to use Cozystack to build public cloud" weight: 10 aliases: - - /docs/use-cases/public-cloud + - /docs/v1/use-cases/public-cloud --- You can use Cozystack as backend for a public cloud diff --git a/content/en/docs/v1/install/_include/hardware-config-tabs.md b/content/en/docs/v1/install/_include/hardware-config-tabs.md new file mode 100644 index 00000000..db030a87 --- /dev/null +++ b/content/en/docs/v1/install/_include/hardware-config-tabs.md @@ -0,0 +1,67 @@ +{{< tabs name="hardware_config" >}} +{{% tab name="Minimal" %}} + +Here are the baseline requirements for running a small installation. +The minimum recommended configuration for each node is as follows: + +| Component | Requirement | +|------------------|--------------| +| Hosts | 3x Physical hosts (or VMs with host CPU passthrough) | +| Architecture | x86_64 | +| CPU | 8 cores | +| RAM | 24 GB | +| Primary Disk | 50 GB SSD (or RAW for VMs) | +| Secondary Disk | 256 GB SSD (raw) | + +**Suitable for:** +- Dev/Test environments +- Small demonstration setups +- 1-2 Tenants +- Up to 3 Kubernetes clusters +- Few VMs or Databases + +{{% /tab %}} +{{% tab name="Recommended" %}} + +For small production environments, the recommended configuration for each node is as follows: + +| Component | Requirement | +|------------------|--------------| +| Hosts | 3x Physical hosts | +| Architecture | x86_64 | +| CPU | 16-32 cores | +| RAM | 64 GB | +| Primary Disk | 100 GB SSD or NVMe | +| Secondary Disk | 1-2 TB SSD or NVMe | + +**Suitable for:** +- Small to medium production environments +- 5-10 Tenants +- 5+ Kubernetes clusters +- Dozens Virtual Machines or Databases +- S3-compatible storage + +{{% /tab %}} +{{% tab name="Optimal" %}} + +For medium to large production environments, the optimal configuration for each node is as follows: + +| Component | Requirement | +|------------------|--------------| +| Hosts | 6x+ Physical hosts | +| Architecture | x86_64 | +| CPU | 32-64 cores | +| RAM | 128-256 GB | +| Primary Disk | 200 GB SSD or NVMe | +| Secondary Disk | 4-10 TB NVMe | + +**Suitable for:** +- Large production environments +- 20+ Tenants +- Dozens Kubernetes clusters +- Hundreds of Virtual Machines and Databases +- S3-compatible storage + +{{% /tab %}} +{{< /tabs >}} + diff --git a/content/en/docs/install/_index.md b/content/en/docs/v1/install/_index.md similarity index 77% rename from content/en/docs/install/_index.md rename to content/en/docs/v1/install/_index.md index 33560d13..d1cbf4da 100644 --- a/content/en/docs/install/_index.md +++ b/content/en/docs/v1/install/_index.md @@ -4,13 +4,13 @@ linkTitle: "Deploying Cozystack" description: "Learn how to deploy a Cozystack cluster using Talos Linux and Kubernetes. This guide covers installation, configuration, and best practices for a reliable and secure Cozystack deployment." weight: 30 aliases: - - /docs/talos - - /docs/operations/talos + - /docs/v1/talos + - /docs/v1/operations/talos --- ## Cozystack Tutorial -If this is your first time installing Cozystack, consider [going through the Cozystack tutorial]({{% ref "/docs/getting-started" %}}). +If this is your first time installing Cozystack, consider [going through the Cozystack tutorial]({{% ref "/docs/v1/getting-started" %}}). It shows the shortest way to getting a proof-of-concept Cozystack cluster. ## Generic Installation Path @@ -36,16 +36,16 @@ The key difference of such installation is in using proxy registries for images: There are specific guides for cloud providers, covering all the steps from preparing infrastructure to installing and configuring Cozystack. If that's your case, we recommend using the guides below: -- [Hetzner]({{% ref "/docs/install/providers/hetzner" %}}) -- [Oracle Cloud Infrastructure (OCI)]({{% ref "/docs/install/providers/oracle-cloud" %}}) -- [Servers.com]({{% ref "/docs/install/providers/servers-com" %}}) +- [Hetzner]({{% ref "/docs/v1/install/providers/hetzner" %}}) +- [Oracle Cloud Infrastructure (OCI)]({{% ref "/docs/v1/install/providers/oracle-cloud" %}}) +- [Servers.com]({{% ref "/docs/v1/install/providers/servers-com" %}}) ## Upgrading and Post-deployment Configuration -After you've deployed a cluster, proceed to the [Cluster Administration]({{% ref "/docs/operations" %}}) section for +After you've deployed a cluster, proceed to the [Cluster Administration]({{% ref "/docs/v1/operations" %}}) section for the next actions: -- [Configure OIDC]({{% ref "/docs/operations/oidc" %}}) -- [Deploy Cozystack in a Multi-Datacenter Setup]({{% ref "/docs/operations/stretched" %}}) -- [Upgrading Cozystack]({{% ref "/docs/operations/cluster/upgrade" %}}) +- [Configure OIDC]({{% ref "/docs/v1/operations/oidc" %}}) +- [Deploy Cozystack in a Multi-Datacenter Setup]({{% ref "/docs/v1/operations/stretched" %}}) +- [Upgrading Cozystack]({{% ref "/docs/v1/operations/cluster/upgrade" %}}) diff --git a/content/en/docs/install/cozystack/_index.md b/content/en/docs/v1/install/cozystack/_index.md similarity index 96% rename from content/en/docs/install/cozystack/_index.md rename to content/en/docs/v1/install/cozystack/_index.md index 74ea2ab5..c52d0d08 100644 --- a/content/en/docs/install/cozystack/_index.md +++ b/content/en/docs/v1/install/cozystack/_index.md @@ -6,17 +6,17 @@ weight: 30 --- **The third step** in deploying a Cozystack cluster is to install Cozystack on a Kubernetes cluster that has been previously installed and configured on Talos Linux nodes. -A prerequisite to this step is having [installed a Kubernetes cluster]({{% ref "/docs/install/kubernetes" %}}). +A prerequisite to this step is having [installed a Kubernetes cluster]({{% ref "/docs/v1/install/kubernetes" %}}). -If this is your first time installing Cozystack, consider starting with the [Cozystack tutorial]({{% ref "/docs/getting-started" %}}). +If this is your first time installing Cozystack, consider starting with the [Cozystack tutorial]({{% ref "/docs/v1/getting-started" %}}). To plan a production-ready installation, follow the guide below. It mirrors the tutorial in structure, but gives much more details and explains various installation options. ## 1. Define Cluster Configuration -Installing Cozystack starts with a single [ConfigMap]({{% ref "/docs/operations/configuration/configmap" %}}). -This ConfigMap includes [Cozystack bundle]({{% ref "/docs/operations/configuration/bundles" %}}) and [components setup]({{% ref "/docs/operations/configuration/components" %}}), +Installing Cozystack starts with a single [ConfigMap]({{% ref "/docs/v1/operations/configuration/configmap" %}}). +This ConfigMap includes [Cozystack bundle]({{% ref "/docs/v1/operations/configuration/bundles" %}}) and [components setup]({{% ref "/docs/v1/operations/configuration/components" %}}), key network settings, exposed services, and other options. Cozystack configuration can be updated after installing it. @@ -41,7 +41,7 @@ data: ipv4-join-cidr: "100.64.0.0/16" ``` -For the explanation of each configuration parameter, see the [ConfigMap reference]({{% ref "/docs/operations/configuration/configmap" %}}). +For the explanation of each configuration parameter, see the [ConfigMap reference]({{% ref "/docs/v1/operations/configuration/configmap" %}}). ### 1.1. Choose a Bundle @@ -51,16 +51,16 @@ Bundle `paas-full` is the most complete one, as it covers all layers from hardwa Choose it if you deploy Cozystack on bare metal or VMs and if you want to use its full power. If you deploy Cozystack on a provided Kubernetes cluster, or if you only want to deploy a Kubernetes cluster without services, -refer to the [bundles overview and comparison]({{% ref "/docs/operations/configuration/bundles" %}}). +refer to the [bundles overview and comparison]({{% ref "/docs/v1/operations/configuration/bundles" %}}). ### 1.2. Fine-tune the Components You can add some optional components or remove ones that are included by default. -Refer to the [components reference]({{% ref "/docs/operations/configuration/components" %}}). +Refer to the [components reference]({{% ref "/docs/v1/operations/configuration/components" %}}). If you deploy on VMs or dedicated servers of a cloud provider, you'll likely need to disable MetalLB and enable a provider-specific load balancer, or use a different network setup. -Check out the [provider-specific installation]({{% ref "/docs/install/providers" %}}) section. +Check out the [provider-specific installation]({{% ref "/docs/v1/install/providers" %}}) section. It may include a complete guide for your provider that you can use to deploy a production-ready cluster. ### 1.3. Define Network Configuration @@ -80,7 +80,7 @@ ipv4-join-cidr: "100.64.0.0/16" ``` {{% alert color="info" %}} -Cozystack gathers anonymous usage statistics by default. Learn more about what data is collected and how to opt out in the [Telemetry Documentation]({{% ref "/docs/operations/configuration/telemetry" %}}). +Cozystack gathers anonymous usage statistics by default. Learn more about what data is collected and how to opt out in the [Telemetry Documentation]({{% ref "/docs/v1/operations/configuration/telemetry" %}}). {{% /alert %}} @@ -354,7 +354,7 @@ This step has two options depending on your available infrastructure: - For VMs and dedicated servers from cloud providers, choose the public IP setup. [Most cloud providers don't support MetalLB](https://metallb.universe.tf/installation/clouds/). - Check out the [provider-specific installation]({{% ref "/docs/install/providers" %}}) section. + Check out the [provider-specific installation]({{% ref "/docs/v1/install/providers" %}}) section. It may have instructions for your provider, which you can use to deploy a production-ready cluster. ### 4.a MetalLB Setup @@ -678,5 +678,5 @@ In this example, `grafana.example.org` is located at 192.168.100.200. ## Next Steps -- [Configure OIDC]({{% ref "/docs/operations/oidc/" %}}). -- [Create a user tenant]({{% ref "/docs/getting-started/create-tenant" %}}). +- [Configure OIDC]({{% ref "/docs/v1/operations/oidc/" %}}). +- [Create a user tenant]({{% ref "/docs/v1/getting-started/create-tenant" %}}). diff --git a/content/en/docs/install/hardware-requirements.md b/content/en/docs/v1/install/hardware-requirements.md similarity index 90% rename from content/en/docs/install/hardware-requirements.md rename to content/en/docs/v1/install/hardware-requirements.md index afec71b4..91b174f6 100644 --- a/content/en/docs/install/hardware-requirements.md +++ b/content/en/docs/v1/install/hardware-requirements.md @@ -4,11 +4,11 @@ linkTitle: "Hardware Requirements" description: "Define the hardware requirements for your Cozystack use case." weight: 5 aliases: - - /docs/getting-started/hardware-requirements - - /docs/talos/hardware-requirements + - /docs/v1/getting-started/hardware-requirements + - /docs/v1/talos/hardware-requirements --- -Cozystack utilizes [Talos Linux]({{% ref "/docs/guides/talos" %}}), a minimalistic Linux distribution designed solely to run Kubernetes. +Cozystack utilizes [Talos Linux]({{% ref "/docs/v1/guides/talos" %}}), a minimalistic Linux distribution designed solely to run Kubernetes. Usually, this means you cannot share a server with any services other than those run by Cozystack. The good news is that whichever service you need, Cozystack will run it perfectly: securely, efficiently, and in a fully containerized or virtualized environment. @@ -16,7 +16,7 @@ in a fully containerized or virtualized environment. Hardware requirements depend on your usage scenario. Below are several common deployment options; review them to determine which setup fits your needs best. -{{< include "docs/install/_include/hardware-config-tabs.md" >}} +{{< include "docs/v1/install/_include/hardware-config-tabs.md" >}} **Compute:** @@ -47,12 +47,12 @@ Separating disks by role is the primary and more reliable option. It does not affect the Talos installation. Learn more about configuring Linstor StorageClass from the - [Deploy Cozystack tutorial](https://cozystack.io/docs/getting-started/install-cozystack/#configure-storage) + [Deploy Cozystack tutorial]({{% ref "/docs/v1/getting-started/install-cozystack#3-configure-storage" %}}) **Using a single disk** It's possible to use a single disk with space allocated for user storage. -See [How to install Talos on a single-disk machine]({{% ref "/docs/install/how-to/single-disk" %}}) +See [How to install Talos on a single-disk machine]({{% ref "/docs/v1/install/how-to/single-disk" %}}) Using a local SSD disk is recommended. **Networking:** @@ -85,7 +85,7 @@ For a production environment, consider the following: ## Distributed Cluster -You can build a [distributed cluster]({{% ref "/docs/operations/stretched/" %}}) with Cozystack. +You can build a [distributed cluster]({{% ref "/docs/v1/operations/stretched/" %}}) with Cozystack. **Networking:** @@ -118,4 +118,4 @@ Achieving high availability adds to the basic production environment requirement ## System Resource Planning -For detailed recommendations on system resource allocation (CPU and memory) per node, based on cluster scale and number of tenants, refer to [System Resource Planning Recommendations]({{% ref "/docs/install/resource-planning" %}}). +For detailed recommendations on system resource allocation (CPU and memory) per node, based on cluster scale and number of tenants, refer to [System Resource Planning Recommendations]({{% ref "/docs/v1/install/resource-planning" %}}). diff --git a/content/en/docs/install/how-to/_index.md b/content/en/docs/v1/install/how-to/_index.md similarity index 100% rename from content/en/docs/install/how-to/_index.md rename to content/en/docs/v1/install/how-to/_index.md diff --git a/content/en/docs/install/how-to/hugepages.md b/content/en/docs/v1/install/how-to/hugepages.md similarity index 100% rename from content/en/docs/install/how-to/hugepages.md rename to content/en/docs/v1/install/how-to/hugepages.md diff --git a/content/en/docs/install/how-to/kubespan.md b/content/en/docs/v1/install/how-to/kubespan.md similarity index 100% rename from content/en/docs/install/how-to/kubespan.md rename to content/en/docs/v1/install/how-to/kubespan.md diff --git a/content/en/docs/install/how-to/public-ip.md b/content/en/docs/v1/install/how-to/public-ip.md similarity index 100% rename from content/en/docs/install/how-to/public-ip.md rename to content/en/docs/v1/install/how-to/public-ip.md diff --git a/content/en/docs/install/how-to/single-disk.md b/content/en/docs/v1/install/how-to/single-disk.md similarity index 91% rename from content/en/docs/install/how-to/single-disk.md rename to content/en/docs/v1/install/how-to/single-disk.md index 83f4a9dd..1b374747 100644 --- a/content/en/docs/install/how-to/single-disk.md +++ b/content/en/docs/v1/install/how-to/single-disk.md @@ -4,14 +4,14 @@ linkTitle: "Install on a single disk" description: "How to install Talos on a single-disk machine, allocating space on system disk for user storage" weight: 100 aliases: - - /docs/operations/faq/single-disk-installation + - /docs/v1/operations/faq/single-disk-installation --- Default Talos setup assumes that each node has a primary and secondary disks, used for system and user storage, respectively. However, it's possible to use a single disk, allocating space for user storage. -This configuration must be applied with the first [`talosctl apply`]({{% ref "/docs/install/kubernetes/talosctl#3-apply-node-configuration" %}}) -or [`talm apply`]({{% ref "/docs/install/kubernetes/talm#3-apply-node-configuration" %}}) +This configuration must be applied with the first [`talosctl apply`]({{% ref "/docs/v1/install/kubernetes/talosctl#3-apply-node-configuration" %}}) +or [`talm apply`]({{% ref "/docs/v1/install/kubernetes/talm#3-apply-node-configuration" %}}) — the one with the `-i` (`--insecure`) flag. Applying changes after initialization will not have any effect. diff --git a/content/en/docs/install/kubernetes/_index.md b/content/en/docs/v1/install/kubernetes/_index.md similarity index 83% rename from content/en/docs/install/kubernetes/_index.md rename to content/en/docs/v1/install/kubernetes/_index.md index d908726c..fc326aec 100644 --- a/content/en/docs/install/kubernetes/_index.md +++ b/content/en/docs/v1/install/kubernetes/_index.md @@ -4,17 +4,17 @@ linkTitle: "2. Install Kubernetes" description: "Step 2: Installing and configuring a Kubernetes cluster on Talos Linux nodes, ready for Cozystack installation." weight: 20 aliases: - - /docs/operations/talos/configuration - - /docs/talos/bootstrap - - /docs/talos/configuration + - /docs/v1/operations/talos/configuration + - /docs/v1/talos/bootstrap + - /docs/v1/talos/configuration --- **The second step** in deploying a Cozystack cluster is to install and configure a Kubernetes cluster on Talos Linux nodes. -A prerequisite to this step is having [installed Talos Linux]({{% ref "/docs/install/talos" %}}). +A prerequisite to this step is having [installed Talos Linux]({{% ref "/docs/v1/install/talos" %}}). The result is a Kubernetes cluster installed, configured, and ready to install Cozystack. -If this is your first time installing Cozystack, [start with the Cozystack tutorial]({{% ref "/docs/getting-started" %}}). +If this is your first time installing Cozystack, [start with the Cozystack tutorial]({{% ref "/docs/v1/getting-started" %}}). ## Installation Options @@ -30,4 +30,4 @@ If you encounter problems with installation, refer to the [Troubleshooting secti ## Further Steps - After installing and configuring Kubernetes on top of Talos Linux nodes, you will have a Kubernetes cluster ready to - [install and configure Cozystack]({{% ref "/docs/install/cozystack" %}}). + [install and configure Cozystack]({{% ref "/docs/v1/install/cozystack" %}}). diff --git a/content/en/docs/install/kubernetes/air-gapped.md b/content/en/docs/v1/install/kubernetes/air-gapped.md similarity index 95% rename from content/en/docs/install/kubernetes/air-gapped.md rename to content/en/docs/v1/install/kubernetes/air-gapped.md index 061c5391..9c577c71 100644 --- a/content/en/docs/install/kubernetes/air-gapped.md +++ b/content/en/docs/v1/install/kubernetes/air-gapped.md @@ -4,8 +4,8 @@ linkTitle: Air-Gapped description: "Bootstrap a Cozystack cluster in an isolated (air-gapped) environment with container registry mirrors." weight: 20 aliases: - - /docs/operations/talos/configuration/air-gapped - - /docs/talos/bootstrap/air-gapped + - /docs/v1/operations/talos/configuration/air-gapped + - /docs/v1/talos/bootstrap/air-gapped --- ## Introduction @@ -130,7 +130,7 @@ Finally, bootstrap the cluster as usual: talm bootstrap -f nodes/node1.yaml ``` -Read the [Talm configuration guide]({{% ref "/docs/install/kubernetes/talm" %}}) to learn more. +Read the [Talm configuration guide]({{% ref "/docs/v1/install/kubernetes/talm" %}}) to learn more. ### Using talosctl @@ -146,7 +146,7 @@ Finally, bootstrap the cluster using one of the nodes: talosctl bootstrap -n -e ``` -Read the [`talosctl` configuration guide]({{% ref "/docs/install/kubernetes/talosctl" %}}) to learn more. +Read the [`talosctl` configuration guide]({{% ref "/docs/v1/install/kubernetes/talosctl" %}}) to learn more. ## 5. Configure Container Registry Mirrors for Tenant Kubernetes diff --git a/content/en/docs/install/kubernetes/talm.md b/content/en/docs/v1/install/kubernetes/talm.md similarity index 97% rename from content/en/docs/install/kubernetes/talm.md rename to content/en/docs/v1/install/kubernetes/talm.md index 1b168a2f..8650690f 100644 --- a/content/en/docs/install/kubernetes/talm.md +++ b/content/en/docs/v1/install/kubernetes/talm.md @@ -4,9 +4,9 @@ linkTitle: Talm description: "`talm` is a declarative CLI tool made by Cozystack devs and optimized for deploying Cozystack.
Recommended for infrastructure-as-code and GitOps." weight: 5 aliases: - - /docs/operations/talos/configuration/talm - - /docs/talos/bootstrap/talm - - /docs/talos/configuration/talm + - /docs/v1/operations/talos/configuration/talm + - /docs/v1/talos/bootstrap/talm + - /docs/v1/talos/configuration/talm --- This guide explains how to install and configure Kubernetes on a Talos Linux cluster using Talm. @@ -18,7 +18,7 @@ Talm comes with pre-built presets for Cozystack. ## Prerequisites -By the start of this guide you should have [Talos Linux installed]({{% ref "/docs/install/talos" %}}), but not initialized (bootstrapped), on several nodes. +By the start of this guide you should have [Talos Linux installed]({{% ref "/docs/v1/install/talos" %}}), but not initialized (bootstrapped), on several nodes. These nodes should belong to one subnet or have public IPs. This guide uses an example where the nodes of a cluster are located in the subnet `192.168.123.0/24`, having the following IP addresses: @@ -323,4 +323,4 @@ was disabled in the Talos configuration to enable Cozystack installing its own C Now you have a Kubernetes cluster bootstrapped and ready for installing Cozystack. To complete the installation, follow the deployment guide, starting with the -[Install Cozystack]({{% ref "/docs/getting-started/install-cozystack" %}}) section. +[Install Cozystack]({{% ref "/docs/v1/getting-started/install-cozystack" %}}) section. diff --git a/content/en/docs/install/kubernetes/talos-bootstrap.md b/content/en/docs/v1/install/kubernetes/talos-bootstrap.md similarity index 96% rename from content/en/docs/install/kubernetes/talos-bootstrap.md rename to content/en/docs/v1/install/kubernetes/talos-bootstrap.md index 5d0205ce..4813dfe4 100644 --- a/content/en/docs/install/kubernetes/talos-bootstrap.md +++ b/content/en/docs/v1/install/kubernetes/talos-bootstrap.md @@ -4,9 +4,9 @@ linkTitle: talos-bootstrap description: "`talos-bootstrap` is a CLI for step-by-step cluster bootstrapping, made by Cozystack devs.
Recommended for first deployments." weight: 10 aliases: - - /docs/talos/bootstrap/talos-bootstrap - - /docs/talos/configuration/talos-bootstrap - - /docs/operations/talos/configuration/talos-bootstrap + - /docs/v1/talos/bootstrap/talos-bootstrap + - /docs/v1/talos/configuration/talos-bootstrap + - /docs/v1/operations/talos/configuration/talos-bootstrap --- [talos-bootstrap](https://github.com/cozystack/talos-bootstrap/) is an interactive script for bootstrapping Kubernetes clusters on Talos OS. @@ -206,4 +206,4 @@ This happens because the default CNI plugin was disabled in the previous step to Now you have a Kubernetes cluster bootstrapped and ready for installing Cozystack. To complete the installation, follow the deployment guide, starting with the -[Install Cozystack]({{% ref "/docs/getting-started/install-cozystack" %}}) section. +[Install Cozystack]({{% ref "/docs/v1/getting-started/install-cozystack" %}}) section. diff --git a/content/en/docs/install/kubernetes/talosctl.md b/content/en/docs/v1/install/kubernetes/talosctl.md similarity index 97% rename from content/en/docs/install/kubernetes/talosctl.md rename to content/en/docs/v1/install/kubernetes/talosctl.md index 70aac64a..de5e46e9 100644 --- a/content/en/docs/install/kubernetes/talosctl.md +++ b/content/en/docs/v1/install/kubernetes/talosctl.md @@ -4,9 +4,9 @@ linkTitle: talosctl description: "`talosctl` is the default CLI of Talos Linux, requiring more boilerplate code, but giving full flexibility in configuration." weight: 15 aliases: - - /docs/talos/bootstrap/talosctl - - /docs/talos/configuration/talosctl - - /docs/operations/talos/configuration/talosctl + - /docs/v1/talos/bootstrap/talosctl + - /docs/v1/talos/configuration/talosctl + - /docs/v1/operations/talos/configuration/talosctl --- This guide explains how to prepare a Talos Linux cluster for deploying Cozystack using `talosctl`, @@ -263,4 +263,4 @@ This happens because the default CNI plugin was disabled in the previous step to Now you have a Kubernetes cluster bootstrapped and ready for installing Cozystack. To complete the installation, follow the deployment guide, starting with the -[Install Cozystack]({{% ref "/docs/getting-started/install-cozystack" %}}) section. +[Install Cozystack]({{% ref "/docs/v1/getting-started/install-cozystack" %}}) section. diff --git a/content/en/docs/install/kubernetes/troubleshooting.md b/content/en/docs/v1/install/kubernetes/troubleshooting.md similarity index 100% rename from content/en/docs/install/kubernetes/troubleshooting.md rename to content/en/docs/v1/install/kubernetes/troubleshooting.md diff --git a/content/en/docs/install/providers/_index.md b/content/en/docs/v1/install/providers/_index.md similarity index 96% rename from content/en/docs/install/providers/_index.md rename to content/en/docs/v1/install/providers/_index.md index 63e199df..7e9dac39 100644 --- a/content/en/docs/install/providers/_index.md +++ b/content/en/docs/v1/install/providers/_index.md @@ -4,7 +4,7 @@ linkTitle: "Provider-Specific Guides" description: "Guides for deploying Cozystack clusters on specific cloud and hosting providers." weight: 40 aliases: - - /docs/talos/install + - /docs/v1/talos/install --- This section has guides for deploying Cozystack clusters on specific cloud and hosting providers. diff --git a/content/en/docs/install/providers/hetzner.md b/content/en/docs/v1/install/providers/hetzner.md similarity index 95% rename from content/en/docs/install/providers/hetzner.md rename to content/en/docs/v1/install/providers/hetzner.md index f282fce5..1c42b909 100644 --- a/content/en/docs/install/providers/hetzner.md +++ b/content/en/docs/v1/install/providers/hetzner.md @@ -4,9 +4,9 @@ linkTitle: Hetzner.com description: "How to install Cozystack in Hetzner" weight: 30 aliases: - - /docs/operations/talos/installation/hetzner - - /docs/talos/installation/hetzner - - /docs/talos/install/hetzner + - /docs/v1/operations/talos/installation/hetzner + - /docs/v1/talos/installation/hetzner + - /docs/v1/talos/install/hetzner --- This guide will help you to install Cozystack on a dedicated server from [Hetzner](https://www.hetzner.com/). @@ -15,7 +15,7 @@ There are several steps to follow, including preparing the infrastructure, insta ## Prepare Infrastructure and Networking -Installation on Hetzner includes the common [hardware requirements]({{% ref "/docs/install/hardware-requirements" %}}) with several additions. +Installation on Hetzner includes the common [hardware requirements]({{% ref "/docs/v1/install/hardware-requirements" %}}) with several additions. ### Networking Options @@ -81,7 +81,7 @@ The first stage of deploying Cozystack is to install Talos Linux on the dedicate Talos is a Linux distribution made for running Kubernetes in the most secure and efficient way. To learn why Cozystack adopted Talos as the foundation of the cluster, -read [Talos Linux in Cozystack]({{% ref "/docs/guides/talos" %}}). +read [Talos Linux in Cozystack]({{% ref "/docs/v1/guides/talos" %}}). ### 1.1 Install boot-to-talos in Rescue Mode @@ -135,10 +135,10 @@ Once all nodes are booted into Talos, proceed to the next section and configure ## 2. Install Kubernetes Cluster Now, when Talos is booted in the maintenance mode, it should receive configuration and set up a Kubernetes cluster. -There are [several options]({{% ref "/docs/install/kubernetes" %}}) to write and apply Talos configuration. +There are [several options]({{% ref "/docs/v1/install/kubernetes" %}}) to write and apply Talos configuration. This guide will focus on [Talm](https://github.com/cozystack/talm), Cozystack's own Talos configuration management tool. -This part of the guide is based on the generic [Talm guide]({{% ref "/docs/install/kubernetes/talm" %}}), +This part of the guide is based on the generic [Talm guide]({{% ref "/docs/v1/install/kubernetes/talm" %}}), but has instructions and examples specific to Hetzner. ### 2.1. Prepare Node Configuration with Talm @@ -161,7 +161,7 @@ but has instructions and examples specific to Hetzner. A bunch of files is now created in the `hetzner-cluster` directory. To learn more about the role of each file, refer to the - [Talm guide]({{% ref "docs/install/kubernetes/talm#1-initialize-cluster-configuration" %}}). + [Talm guide]({{% ref "docs/v1/install/kubernetes/talm#1-initialize-cluster-configuration" %}}). 1. Edit `values.yaml`, modifying the following values: @@ -417,7 +417,7 @@ Now it needs a token to create a load balancer resource in Hetzner. ### 3.3 Configure Storage with LINSTOR Configuring LINSTOR in Hetzner has no difference from other infrastructure setups. -Follow the [Storage configuration guide]({{% ref "docs/getting-started/install-cozystack#3-configure-storage" %}}) from the Cozystack tutorial. +Follow the [Storage configuration guide]({{% ref "docs/v1/getting-started/install-cozystack#3-configure-storage" %}}) from the Cozystack tutorial. ### 3.4. Start Services in the Root Tenant diff --git a/content/en/docs/install/providers/oracle-cloud.md b/content/en/docs/v1/install/providers/oracle-cloud.md similarity index 97% rename from content/en/docs/install/providers/oracle-cloud.md rename to content/en/docs/v1/install/providers/oracle-cloud.md index 0102e863..b15dffae 100644 --- a/content/en/docs/install/providers/oracle-cloud.md +++ b/content/en/docs/v1/install/providers/oracle-cloud.md @@ -4,15 +4,15 @@ linkTitle: Oracle Cloud description: "How to install Cozystack in Oracle Cloud Infrastructure" weight: 25 aliases: - - /docs/operations/talos/installation/oracle-cloud - - /docs/talos/install/oracle-cloud + - /docs/v1/operations/talos/installation/oracle-cloud + - /docs/v1/talos/install/oracle-cloud --- ## Introduction This guide explains how to install Talos on Oracle Cloud Infrastructure and deploy a Kubernetes cluster that is ready for Cozystack. After completing the guide, you will be ready to proceed with -[installing Cozystack itself]({{% ref "/docs/getting-started/install-cozystack" %}}). +[installing Cozystack itself]({{% ref "/docs/v1/getting-started/install-cozystack" %}}). {{% alert color="info" %}} This guide was created to support deployment of development clusters by the Cozystack team. @@ -46,7 +46,7 @@ The first step is to make a Talos Linux installation image available for use in ## 2. Create Infrastructure The goal of this step is to prepare the infrastructure according to the -[Cozystack cluster requirements]({{% ref "/docs/install/hardware-requirements" %}}). +[Cozystack cluster requirements]({{% ref "/docs/v1/install/hardware-requirements" %}}). This can be done manually using the Oracle Cloud dashboard or with Terraform. @@ -381,4 +381,4 @@ The next stage is to initialize Talos nodes and bootstrap a Kubernetes cluster. Now you have a Kubernetes cluster prepared for installing Cozystack. To complete the installation, follow the deployment guide, starting with the -[Install Cozystack]({{% ref "/docs/getting-started/install-cozystack" %}}) section. +[Install Cozystack]({{% ref "/docs/v1/getting-started/install-cozystack" %}}) section. diff --git a/content/en/docs/install/providers/servers-com/_index.md b/content/en/docs/v1/install/providers/servers-com/_index.md similarity index 98% rename from content/en/docs/install/providers/servers-com/_index.md rename to content/en/docs/v1/install/providers/servers-com/_index.md index b7e95094..1637016c 100644 --- a/content/en/docs/install/providers/servers-com/_index.md +++ b/content/en/docs/v1/install/providers/servers-com/_index.md @@ -4,9 +4,9 @@ linkTitle: Servers.com description: "Install Cozystack in the Servers.com infrastructure." weight: 40 aliases: - - /docs/operations/talos/installation/servers_com - - /docs/talos/installation/servers_com - - /docs/talos/install/servers_com + - /docs/v1/operations/talos/installation/servers_com + - /docs/v1/talos/installation/servers_com + - /docs/v1/talos/install/servers_com --- ## Before Installation diff --git a/content/en/docs/v1/install/providers/servers-com/img/l2_segments1.png b/content/en/docs/v1/install/providers/servers-com/img/l2_segments1.png new file mode 100644 index 00000000..0ff562d2 Binary files /dev/null and b/content/en/docs/v1/install/providers/servers-com/img/l2_segments1.png differ diff --git a/content/en/docs/v1/install/providers/servers-com/img/l2_segments2.png b/content/en/docs/v1/install/providers/servers-com/img/l2_segments2.png new file mode 100644 index 00000000..3a0a4b31 Binary files /dev/null and b/content/en/docs/v1/install/providers/servers-com/img/l2_segments2.png differ diff --git a/content/en/docs/v1/install/providers/servers-com/img/l2_segments3.png b/content/en/docs/v1/install/providers/servers-com/img/l2_segments3.png new file mode 100644 index 00000000..88f51c1e Binary files /dev/null and b/content/en/docs/v1/install/providers/servers-com/img/l2_segments3.png differ diff --git a/content/en/docs/v1/install/providers/servers-com/img/public_ip.png b/content/en/docs/v1/install/providers/servers-com/img/public_ip.png new file mode 100644 index 00000000..7931cbd5 Binary files /dev/null and b/content/en/docs/v1/install/providers/servers-com/img/public_ip.png differ diff --git a/content/en/docs/v1/install/providers/servers-com/img/ssh_gpg_keys1.png b/content/en/docs/v1/install/providers/servers-com/img/ssh_gpg_keys1.png new file mode 100644 index 00000000..93141fe0 Binary files /dev/null and b/content/en/docs/v1/install/providers/servers-com/img/ssh_gpg_keys1.png differ diff --git a/content/en/docs/v1/install/providers/servers-com/img/ssh_gpg_keys2.png b/content/en/docs/v1/install/providers/servers-com/img/ssh_gpg_keys2.png new file mode 100644 index 00000000..7abbfcc0 Binary files /dev/null and b/content/en/docs/v1/install/providers/servers-com/img/ssh_gpg_keys2.png differ diff --git a/content/en/docs/v1/install/providers/servers-com/img/ssh_gpg_keys3.png b/content/en/docs/v1/install/providers/servers-com/img/ssh_gpg_keys3.png new file mode 100644 index 00000000..e648037c Binary files /dev/null and b/content/en/docs/v1/install/providers/servers-com/img/ssh_gpg_keys3.png differ diff --git a/content/en/docs/v1/install/providers/servers-com/img/type_native.png b/content/en/docs/v1/install/providers/servers-com/img/type_native.png new file mode 100644 index 00000000..2c698563 Binary files /dev/null and b/content/en/docs/v1/install/providers/servers-com/img/type_native.png differ diff --git a/content/en/docs/install/resource-planning.md b/content/en/docs/v1/install/resource-planning.md similarity index 100% rename from content/en/docs/install/resource-planning.md rename to content/en/docs/v1/install/resource-planning.md diff --git a/content/en/docs/v1/install/talos/_index.md b/content/en/docs/v1/install/talos/_index.md new file mode 100644 index 00000000..5f950c6f --- /dev/null +++ b/content/en/docs/v1/install/talos/_index.md @@ -0,0 +1,38 @@ +--- +title: "Installing Talos Linux on Bare Metal or Virtual Machines" +linkTitle: "1. Install Talos" +description: "Step 1: Installing Talos Linux on virtual machines or bare metal, ready to bootstrap Cozystack cluster." +weight: 10 +aliases: + - /docs/v1/talos/installation + - /docs/v1/talos/install + - /docs/v1/operations/talos/installation + - /docs/v1/operations/talos +--- + +**The first step** in deploying a Cozystack cluster is to install Talos Linux on your bare-metal servers or virtual machines. +Ensure the VMs or bare-metal servers are provisioned before you begin. +To plan the installation, see the [hardware requirements]({{% ref "/docs/v1/install/hardware-requirements" %}}). + +If this is your first time installing Cozystack, consider [starting with the Cozystack tutorial]({{% ref "/docs/v1/getting-started" %}}). + +## Installation Options + +There are several methods to install Talos on any bare metal server or virtual machine. +They have various limitations and optimal use cases: + +- **Recommended:** [Boot to Talos Linux from another Linux OS using `boot-to-talos`]({{% ref "/docs/v1/install/talos/boot-to-talos" %}}) — + a simple installation method, which can be used completely from userspace, and with no external dependencies except the Talos image. + + Choose this option if you are new to Talos or if you have VMs with pre-installed OS from a cloud provider. +- [Install using temporary DHCP and PXE servers running in Docker containers]({{% ref "/docs/v1/install/talos/pxe" %}}) — + requires an extra management machine, but allows for installing on multiple hosts at once. +- [Install using ISO image]({{% ref "/docs/v1/install/talos/iso" %}}) — optimal for systems which can automate ISO installation. + +## Further Steps + +- After installing Talos Linux, you will have a number of nodes ready for the next step, which is to + [install and bootstrap a Kubernetes cluster]({{% ref "/docs/v1/install/kubernetes" %}}). + +- Read the [Talos Linux overview]({{% ref "/docs/v1/guides/talos" %}}) to learn why Talos Linux is the optimal OS choice for Cozystack + and what it brings to the platform. diff --git a/content/en/docs/install/talos/boot-to-talos.md b/content/en/docs/v1/install/talos/boot-to-talos.md similarity index 98% rename from content/en/docs/install/talos/boot-to-talos.md rename to content/en/docs/v1/install/talos/boot-to-talos.md index 0ca61914..49727c11 100644 --- a/content/en/docs/install/talos/boot-to-talos.md +++ b/content/en/docs/v1/install/talos/boot-to-talos.md @@ -4,7 +4,7 @@ linkTitle: boot-to-talos description: "Install Talos Linux using boot-to-talos, a convenient CLI application requiring nothing but a Talos image." weight: 5 aliases: - - /docs/talos/install/kexec + - /docs/v1/talos/install/kexec --- This guide explains how to install Talos Linux on a host running any other Linux distribution using `boot-to-talos`. @@ -146,4 +146,4 @@ When using the **install** mode, `boot-to-talos` performs the following steps: ## Next Steps -Once you have installed Talos, proceed by [installing and bootstrapping a Kubernetes cluster]({{% ref "/docs/install/kubernetes" %}}). +Once you have installed Talos, proceed by [installing and bootstrapping a Kubernetes cluster]({{% ref "/docs/v1/install/kubernetes" %}}). diff --git a/content/en/docs/install/talos/iso.md b/content/en/docs/v1/install/talos/iso.md similarity index 81% rename from content/en/docs/install/talos/iso.md rename to content/en/docs/v1/install/talos/iso.md index f5a552e7..7255b2b6 100644 --- a/content/en/docs/install/talos/iso.md +++ b/content/en/docs/v1/install/talos/iso.md @@ -4,9 +4,9 @@ linkTitle: ISO description: "How to install Talos Linux using ISO" weight: 20 aliases: - - /docs/talos/installation/iso - - /docs/talos/install/iso - - /docs/operations/talos/installation/iso + - /docs/v1/talos/installation/iso + - /docs/v1/talos/install/iso + - /docs/v1/operations/talos/installation/iso --- This guide explains how to install Talos Linux on bare metal servers or virtual machines. @@ -28,4 +28,4 @@ Note that Cozystack provides its own Talos builds, which are tested and optimize ## Next steps -Once you have installed Talos, proceed by [installing and bootstrapping a Kubernetes cluster]({{% ref "/docs/install/kubernetes" %}}). +Once you have installed Talos, proceed by [installing and bootstrapping a Kubernetes cluster]({{% ref "/docs/v1/install/kubernetes" %}}). diff --git a/content/en/docs/install/talos/pxe.md b/content/en/docs/v1/install/talos/pxe.md similarity index 93% rename from content/en/docs/install/talos/pxe.md rename to content/en/docs/v1/install/talos/pxe.md index bfb41107..7513e707 100644 --- a/content/en/docs/install/talos/pxe.md +++ b/content/en/docs/v1/install/talos/pxe.md @@ -4,9 +4,9 @@ linkTitle: PXE description: "How to install Talos Linux using temporary DHCP and PXE servers running in Docker containers." weight: 15 aliases: - - /docs/talos/installation/pxe - - /docs/talos/install/pxe - - /docs/operations/talos/installation/pxe + - /docs/v1/talos/installation/pxe + - /docs/v1/talos/install/pxe + - /docs/v1/operations/talos/installation/pxe --- This guide explains how to install Talos Linux on bare metal servers or virtual machines @@ -88,4 +88,4 @@ Now they should automatically boot from your PXE server. ## Next Steps -Once you have installed Talos, proceed by [installing and bootstrapping a Kubernetes cluster]({{% ref "/docs/install/kubernetes" %}}). +Once you have installed Talos, proceed by [installing and bootstrapping a Kubernetes cluster]({{% ref "/docs/v1/install/kubernetes" %}}). diff --git a/content/en/docs/introduction/_index.md b/content/en/docs/v1/introduction/_index.md similarity index 72% rename from content/en/docs/introduction/_index.md rename to content/en/docs/v1/introduction/_index.md index dab17c23..fe7a5e62 100644 --- a/content/en/docs/introduction/_index.md +++ b/content/en/docs/v1/introduction/_index.md @@ -8,23 +8,23 @@ weight: 9 ## What is Cozystack Cozystack is a Kubernetes-based framework for building a private cloud environment. -It can be used by a single company to run its own [private cloud]({{% ref "/docs/guides/use-cases/private-cloud" %}}) or by a service provider to offer a -[platform-as-a-service]({{% ref "/docs/guides/use-cases/public-cloud" %}}) to multiple customers. +It can be used by a single company to run its own [private cloud]({{% ref "/docs/v1/guides/use-cases/private-cloud" %}}) or by a service provider to offer a +[platform-as-a-service]({{% ref "/docs/v1/guides/use-cases/public-cloud" %}}) to multiple customers. Cozystack covers the most critical needs of a development team: -- [Kubernetes clusters]({{% ref "/docs/cozystack-api" %}}) for running applications in development and production -- Standard [managed applications]({{% ref "/docs/applications" %}}): databases, queue managers, caches, and more -- [Virtual machines]({{% ref "/docs/virtualization" %}}) +- [Kubernetes clusters]({{% ref "/docs/v1/cozystack-api" %}}) for running applications in development and production +- Standard [managed applications]({{% ref "/docs/v1/applications" %}}): databases, queue managers, caches, and more +- [Virtual machines]({{% ref "/docs/v1/virtualization" %}}) - Reliable distributed storage -[Cozystack platform stack]({{% ref "/docs/guides/platform-stack" %}}) includes reliable components that are typically installed +[Cozystack platform stack]({{% ref "/docs/v1/guides/platform-stack" %}}) includes reliable components that are typically installed in Kubernetes clusters separately. Here they're bundled and tested to work together seamlessly. The virtualization platform is also built-in and does not require additional hardware. Instead, virtual machines run directly inside Kubernetes. -Another powerful feature is the [tenant system]({{% ref "/docs/guides/concepts#tenant-system" %}}). +Another powerful feature is the [tenant system]({{% ref "/docs/v1/guides/concepts#tenant-system" %}}). It allows you to isolate individual developers, teams, or even entire companies in their own fully functional spaces—all on the same hardware. ## Key features @@ -36,13 +36,13 @@ The traditional approach of assigning each team a dedicated namespace can be too Teams may need multiple environments with identical namespace names, or they may lack the root permissions required to manage their own access models. -Cozystack's [tenant system]({{% ref "/docs/guides/concepts#tenant-system" %}}) solves these issues +Cozystack's [tenant system]({{% ref "/docs/v1/guides/concepts#tenant-system" %}}) solves these issues by allowing users to deploy a Kubernetes-in-Kubernetes environment with a single app. Users of nested Kubernetes clusters have full access and control. The quota system ensures optimal hardware utilization while isolating resources to prevent the “noisy neighbor” problem. Platform users can also generate detailed usage reports for each tenant. -The [single sign-on system]({{% ref "/docs/operations/oidc" %}}) in Cozystack is powered by Keycloak. +The [single sign-on system]({{% ref "/docs/v1/operations/oidc" %}}) in Cozystack is powered by Keycloak. The Kubernetes API—both in the root tenant and in nested tenants—supports SSO out of the box. ### Replicated Storage System @@ -56,13 +56,13 @@ It's even possible to replicate volumes across multiple data centers. Typically, you must choose between virtualization and containerization. Cozystack combines both in a single platform. There's no need to maintain a separate virtualization infrastructure. -In Cozystack, [virtual machines]({{% ref "/docs/virtualization" %}}) +In Cozystack, [virtual machines]({{% ref "/docs/v1/virtualization" %}}) run directly in Kubernetes and consume CPU, memory, GPU, and storage from the same Kubernetes resource pool. ### Managed Databases Without Overhead Even though Linux-on-Linux virtualization is highly efficient, it still introduces some overhead. -Cozystack avoids this by running [managed databases]({{% ref "/docs/applications" %}}) +Cozystack avoids this by running [managed databases]({{% ref "/docs/v1/applications" %}}) directly in containers on the host hardware. You can spin up multiple high-availability databases with dedicated IP addresses, all on limited hardware—yet each runs with direct access to CPU and storage. @@ -72,6 +72,6 @@ all on limited hardware—yet each runs with direct access to CPU and storage. We’re not aware of any other Kubernetes distribution with more built-in infrastructure components. (Seriously—send us a link if you find one!) Rather than manually installing components and controllers, you simply choose -a [Cozystack bundle]({{% ref "/docs/operations/configuration/bundles" %}}) that fits your needs. +a [Cozystack bundle]({{% ref "/docs/v1/operations/configuration/bundles" %}}) that fits your needs. All components are pre-configured, tested for compatibility, and updated alongside the Cozystack framework. diff --git a/content/en/docs/kubernetes/_include/_index.md b/content/en/docs/v1/kubernetes/_include/_index.md similarity index 83% rename from content/en/docs/kubernetes/_include/_index.md rename to content/en/docs/v1/kubernetes/_include/_index.md index 99d36bc4..ec8d389a 100644 --- a/content/en/docs/kubernetes/_include/_index.md +++ b/content/en/docs/v1/kubernetes/_include/_index.md @@ -5,4 +5,5 @@ description: "Learn to deploy and use isolated managed Kubernetes clusters in Co weight: 40 aliases: - /docs/reference/applications/kubernetes + - /docs/v1/reference/applications/kubernetes --- diff --git a/content/en/docs/kubernetes/_index.md b/content/en/docs/v1/kubernetes/_index.md similarity index 99% rename from content/en/docs/kubernetes/_index.md rename to content/en/docs/v1/kubernetes/_index.md index a64d82fc..5e147b8b 100644 --- a/content/en/docs/kubernetes/_index.md +++ b/content/en/docs/v1/kubernetes/_index.md @@ -4,11 +4,11 @@ linkTitle: "Managed Kubernetes" description: "Learn to deploy and use isolated managed Kubernetes clusters in Cozystack." weight: 40 aliases: - - /docs/reference/applications/kubernetes + - /docs/v1/reference/applications/kubernetes --- diff --git a/content/en/docs/kubernetes/backup-and-recovery.md b/content/en/docs/v1/kubernetes/backup-and-recovery.md similarity index 99% rename from content/en/docs/kubernetes/backup-and-recovery.md rename to content/en/docs/v1/kubernetes/backup-and-recovery.md index 88def28f..778fa16d 100644 --- a/content/en/docs/kubernetes/backup-and-recovery.md +++ b/content/en/docs/v1/kubernetes/backup-and-recovery.md @@ -4,7 +4,7 @@ linkTitle: Backup and Recovery description: "How to back up and restore resources in a Cozystack cluster." weight: 40 aliases: - - /docs/guides/backups + - /docs/v1/guides/backups --- {{% alert color="warning" %}} diff --git a/content/en/docs/kubernetes/relocate-etcd.md b/content/en/docs/v1/kubernetes/relocate-etcd.md similarity index 96% rename from content/en/docs/kubernetes/relocate-etcd.md rename to content/en/docs/v1/kubernetes/relocate-etcd.md index fdb35dc5..cadb5cf1 100644 --- a/content/en/docs/kubernetes/relocate-etcd.md +++ b/content/en/docs/v1/kubernetes/relocate-etcd.md @@ -43,4 +43,4 @@ kubectl wait --for=condition=ready pod -n $NAMESPACE $RM --timeout=2m kubectl etcd -n $NAMESPACE -p $RM members ``` -To learn more about tenant nesting and shared services, read the [Tenants guide]({{% ref "/docs/guides/tenants" %}}). +To learn more about tenant nesting and shared services, read the [Tenants guide]({{% ref "/docs/v1/guides/tenants" %}}). diff --git a/content/en/docs/networking/_include/http-cache.md b/content/en/docs/v1/networking/_include/http-cache.md similarity index 85% rename from content/en/docs/networking/_include/http-cache.md rename to content/en/docs/v1/networking/_include/http-cache.md index 0949ca02..4639af77 100644 --- a/content/en/docs/networking/_include/http-cache.md +++ b/content/en/docs/v1/networking/_include/http-cache.md @@ -5,5 +5,6 @@ description: "The Nginx-based HTTP caching service is designed to optimize web t weight: 20 aliases: - /docs/reference/applications/http-cache + - /docs/v1/reference/applications/http-cache --- diff --git a/content/en/docs/networking/_include/tcp-balancer.md b/content/en/docs/v1/networking/_include/tcp-balancer.md similarity index 84% rename from content/en/docs/networking/_include/tcp-balancer.md rename to content/en/docs/v1/networking/_include/tcp-balancer.md index 940e2628..ae0936a9 100644 --- a/content/en/docs/networking/_include/tcp-balancer.md +++ b/content/en/docs/v1/networking/_include/tcp-balancer.md @@ -5,5 +5,6 @@ description: "The Managed TCP Load Balancer Service simplifies the deployment an weight: 30 aliases: - /docs/reference/applications/tcp-balancer + - /docs/v1/reference/applications/tcp-balancer --- diff --git a/content/en/docs/networking/_include/vpc.md b/content/en/docs/v1/networking/_include/vpc.md similarity index 76% rename from content/en/docs/networking/_include/vpc.md rename to content/en/docs/v1/networking/_include/vpc.md index eac26d20..40c1076b 100644 --- a/content/en/docs/networking/_include/vpc.md +++ b/content/en/docs/v1/networking/_include/vpc.md @@ -5,5 +5,6 @@ description: "Dedicated subnets" weight: 10 aliases: - /docs/reference/applications/vpc + - /docs/v1/reference/applications/vpc --- diff --git a/content/en/docs/networking/_include/vpn.md b/content/en/docs/v1/networking/_include/vpn.md similarity index 86% rename from content/en/docs/networking/_include/vpn.md rename to content/en/docs/v1/networking/_include/vpn.md index 8338d65d..4a5d44da 100644 --- a/content/en/docs/networking/_include/vpn.md +++ b/content/en/docs/v1/networking/_include/vpn.md @@ -5,5 +5,6 @@ description: "Managed VPN Service simplifies the deployment and management of VP weight: 10 aliases: - /docs/reference/applications/vpn + - /docs/v1/reference/applications/vpn --- diff --git a/content/en/docs/networking/_index.md b/content/en/docs/v1/networking/_index.md similarity index 100% rename from content/en/docs/networking/_index.md rename to content/en/docs/v1/networking/_index.md diff --git a/content/en/docs/networking/http-cache.md b/content/en/docs/v1/networking/http-cache.md similarity index 98% rename from content/en/docs/networking/http-cache.md rename to content/en/docs/v1/networking/http-cache.md index c38ec17a..abbe9b7a 100644 --- a/content/en/docs/networking/http-cache.md +++ b/content/en/docs/v1/networking/http-cache.md @@ -4,12 +4,12 @@ linkTitle: "HTTP Cache" description: "The Nginx-based HTTP caching service is designed to optimize web traffic and enhance web application performance." weight: 20 aliases: - - /docs/reference/applications/http-cache + - /docs/v1/reference/applications/http-cache --- diff --git a/content/en/docs/networking/tcp-balancer.md b/content/en/docs/v1/networking/tcp-balancer.md similarity index 97% rename from content/en/docs/networking/tcp-balancer.md rename to content/en/docs/v1/networking/tcp-balancer.md index 726b7a5a..6383bfd1 100644 --- a/content/en/docs/networking/tcp-balancer.md +++ b/content/en/docs/v1/networking/tcp-balancer.md @@ -4,12 +4,12 @@ linkTitle: "TCP Load Balancer" description: "The Managed TCP Load Balancer Service simplifies the deployment and management of load balancers." weight: 30 aliases: - - /docs/reference/applications/tcp-balancer + - /docs/v1/reference/applications/tcp-balancer --- diff --git a/content/en/docs/networking/virtual-router.md b/content/en/docs/v1/networking/virtual-router.md similarity index 97% rename from content/en/docs/networking/virtual-router.md rename to content/en/docs/v1/networking/virtual-router.md index 8dbaeda5..45503beb 100644 --- a/content/en/docs/networking/virtual-router.md +++ b/content/en/docs/v1/networking/virtual-router.md @@ -4,7 +4,7 @@ linkTitle: "Virtual Routers" description: "Deploy a virtual router in a VM" weight: 40 aliases: - - /docs/operations/virtualization/virtual-router + - /docs/v1/operations/virtualization/virtual-router --- Starting with version [v0.27.0](https://github.com/cozystack/cozystack/releases/tag/v0.27.0), diff --git a/content/en/docs/networking/vpc.md b/content/en/docs/v1/networking/vpc.md similarity index 96% rename from content/en/docs/networking/vpc.md rename to content/en/docs/v1/networking/vpc.md index 493cc2f0..f981b6fb 100644 --- a/content/en/docs/networking/vpc.md +++ b/content/en/docs/v1/networking/vpc.md @@ -4,12 +4,12 @@ linkTitle: "VPC" description: "Dedicated subnets" weight: 10 aliases: - - /docs/reference/applications/vpc + - /docs/v1/reference/applications/vpc --- diff --git a/content/en/docs/networking/vpn.md b/content/en/docs/v1/networking/vpn.md similarity index 98% rename from content/en/docs/networking/vpn.md rename to content/en/docs/v1/networking/vpn.md index ff33c628..112609ac 100644 --- a/content/en/docs/networking/vpn.md +++ b/content/en/docs/v1/networking/vpn.md @@ -4,12 +4,12 @@ linkTitle: "VPN" description: "Managed VPN Service simplifies the deployment and management of VPN server, enabling you to establish secure connections with ease." weight: 10 aliases: - - /docs/reference/applications/vpn + - /docs/v1/reference/applications/vpn --- diff --git a/content/en/docs/operations/_index.md b/content/en/docs/v1/operations/_index.md similarity index 100% rename from content/en/docs/operations/_index.md rename to content/en/docs/v1/operations/_index.md diff --git a/content/en/docs/operations/cluster/_index.md b/content/en/docs/v1/operations/cluster/_index.md similarity index 100% rename from content/en/docs/operations/cluster/_index.md rename to content/en/docs/v1/operations/cluster/_index.md diff --git a/content/en/docs/operations/cluster/rotate-ca.md b/content/en/docs/v1/operations/cluster/rotate-ca.md similarity index 100% rename from content/en/docs/operations/cluster/rotate-ca.md rename to content/en/docs/v1/operations/cluster/rotate-ca.md diff --git a/content/en/docs/operations/cluster/scaling.md b/content/en/docs/v1/operations/cluster/scaling.md similarity index 93% rename from content/en/docs/operations/cluster/scaling.md rename to content/en/docs/v1/operations/cluster/scaling.md index 1b73b704..bf1a970d 100644 --- a/content/en/docs/operations/cluster/scaling.md +++ b/content/en/docs/v1/operations/cluster/scaling.md @@ -9,10 +9,10 @@ weight: 20 Adding a node is done in a way similar to regular Cozystack installation. -1. [Install Talos on the node]({{% ref "/docs/install/talos" %}}), using the Cozystack's custom-built Talos image. +1. [Install Talos on the node]({{% ref "/docs/v1/install/talos" %}}), using the Cozystack's custom-built Talos image. -1. Generate the configuration for the new node, using the [Talm]({{% ref "/docs/install/kubernetes/talm#3-generate-node-configuration-files" %}}) - or [talosctl]({{% ref "/docs/install/kubernetes/talosctl#2-generate-node-configuration-files" %}}) guide. +1. Generate the configuration for the new node, using the [Talm]({{% ref "/docs/v1/install/kubernetes/talm#3-generate-node-configuration-files" %}}) + or [talosctl]({{% ref "/docs/v1/install/kubernetes/talosctl#2-generate-node-configuration-files" %}}) guide. For example, configuring a control plane node: @@ -25,8 +25,8 @@ Adding a node is done in a way similar to regular Cozystack installation. talm template -e 192.168.123.20 -n 192.168.123.20 -t templates/worker.yaml -i > nodes/nodeN.yaml ``` -1. Apply the generated configuration to the node, using the [Talm]({{% ref "/docs/install/kubernetes/talm#41-apply-configuration-files" %}}) - or [talosctl]({{% ref "/docs/install/kubernetes/talosctl#3-apply-node-configuration" %}}) guide. +1. Apply the generated configuration to the node, using the [Talm]({{% ref "/docs/v1/install/kubernetes/talm#41-apply-configuration-files" %}}) + or [talosctl]({{% ref "/docs/v1/install/kubernetes/talosctl#3-apply-node-configuration" %}}) guide. For example: ```bash diff --git a/content/en/docs/operations/cluster/upgrade.md b/content/en/docs/v1/operations/cluster/upgrade.md similarity index 88% rename from content/en/docs/operations/cluster/upgrade.md rename to content/en/docs/v1/operations/cluster/upgrade.md index a471e1d9..885d89f2 100644 --- a/content/en/docs/operations/cluster/upgrade.md +++ b/content/en/docs/v1/operations/cluster/upgrade.md @@ -4,8 +4,8 @@ linkTitle: "Upgrading Cozystack" description: "Upgrade Cozystack system components." weight: 10 aliases: - - /docs/upgrade - - /docs/operations/upgrade + - /docs/v1/upgrade + - /docs/v1/operations/upgrade --- ## About Cozystack Versions @@ -31,7 +31,7 @@ To learn more about Cozystack release process, read the [Cozystack Release Workf Before upgrading, check the current status of your Cozystack cluster by following steps from -- [Troubleshooting Checklist]({{% ref "/docs/operations/troubleshooting/#troubleshooting-checklist" %}}) +- [Troubleshooting Checklist]({{% ref "/docs/v1/operations/troubleshooting/#troubleshooting-checklist" %}}) Make sure that the Cozystack ConfigMap contains all the necessary variables: If there are missing keys in `data.*`, add them. @@ -54,7 +54,7 @@ data: ... ``` -Learn more about this file and its contents from the [Cozystack ConfigMap reference]({{% ref "/docs/operations/configuration/configmap" %}}). +Learn more about this file and its contents from the [Cozystack ConfigMap reference]({{% ref "/docs/v1/operations/configuration/configmap" %}}). ### 2. Apply the new manifest file @@ -88,5 +88,5 @@ kubectl logs -n cozy-system deploy/cozystack --previous To make sure everything works as expected, repeat the steps from - - [Troubleshooting Checklist]({{% ref "/docs/operations/troubleshooting/#troubleshooting-checklist" %}}) + - [Troubleshooting Checklist]({{% ref "/docs/v1/operations/troubleshooting/#troubleshooting-checklist" %}}) diff --git a/content/en/docs/operations/configuration/_index.md b/content/en/docs/v1/operations/configuration/_index.md similarity index 100% rename from content/en/docs/operations/configuration/_index.md rename to content/en/docs/v1/operations/configuration/_index.md diff --git a/content/en/docs/v1/operations/configuration/bundles.md b/content/en/docs/v1/operations/configuration/bundles.md new file mode 100644 index 00000000..b690592f --- /dev/null +++ b/content/en/docs/v1/operations/configuration/bundles.md @@ -0,0 +1,205 @@ +--- +title: "Cozystack Bundles: Overview and Comparison" +linkTitle: "Bundles" +description: "Cozystack bundles reference: composition, configuration, and troubleshooting." +weight: 20 +aliases: + - /docs/v1/guides/bundles + - /docs/v1/operations/bundles/ + - /docs/v1/operations/bundles/paas-full + - /docs/v1/operations/bundles/paas-hosted + - /docs/v1/operations/bundles/distro-full + - /docs/v1/operations/bundles/distro-hosted + - /docs/v1/install/cozystack/bundles +--- + +## Introduction + +**Bundles** are pre-defined combinations of Cozystack components. +Each bundle is tested, versioned, and guaranteed to work as a unit. +They simplify installation, reduce the risk of misconfiguration, and make it easier to choose the right set of features for your deployment. + +This guide is for infrastructure engineers, DevOps teams, and platform architects planning to deploy Cozystack in different environments. +It explains how Cozystack bundles help tailor the installation to specific needs—whether you're building a fully featured platform-as-a-service +or just need a minimal Kubernetes cluster. + + +## Bundles Overview + +| Component | [paas-full] | [iaas-full]* | [paas-hosted] | [distro-full] | [distro-hosted] | +|:------------------------------|:-----------------------|:------------------------|:---------------|:----------------------|:----------------------| +| [Managed Kubernetes][k8s] | ✔ | ✔ | | | | +| [Managed Applications][apps] | ✔ | | ✔ | | | +| [Virtual Machines][vm] | ✔ | ✔ | | | | +| Cozystack Dashboard (UI) | ✔ | ✔ | ✔ | | | +| [Cozystack API][api] | ✔ | ✔ | ✔ | | | +| [Kubernetes Operators] | ✔ | | ✔ | ✔ (optional) | ✔ (optional) | +| [Monitoring subsystem] | ✔ | ✔ | ✔ | ✔ (optional) | ✔ (optional) | +| Storage subsystem | [LINSTOR] | [LINSTOR] | | [LINSTOR] | | +| Networking subsystem | [Kube-OVN] + [Cilium] | [Kube-OVN] + [Cilium] | | [Cilium] | | +| Virtualization subsystem | [KubeVirt] | [KubeVirt] | | [KubeVirt] (optional) | [KubeVirt] (optional) | +| OS and [Kubernetes] subsystem | [Talos Linux] | [Talos Linux] | | [Talos Linux] | | + +* Bundle `iaas-full` is currently on the roadmap, see [cozystack/cozystack#730][iaas-full-gh]. + +[apps]: {{% ref "/docs/v1/applications" %}} +[vm]: {{% ref "/docs/v1/virtualization" %}} +[k8s]: {{% ref "/docs/v1/kubernetes" %}} +[api]: {{% ref "/docs/v1/cozystack-api" %}} +[monitoring subsystem]: {{% ref "/docs/v1/guides/platform-stack#victoria-metrics" %}} +[linstor]: {{% ref "/docs/v1/guides/platform-stack#drbd" %}} +[kube-ovn]: {{% ref "/docs/v1/guides/platform-stack#kube-ovn" %}} +[cilium]: {{% ref "/docs/v1/guides/platform-stack#cilium" %}} +[kubevirt]: {{% ref "/docs/v1/guides/platform-stack#kubevirt" %}} +[talos linux]: {{% ref "/docs/v1/guides/platform-stack#talos-linux" %}} +[kubernetes]: {{% ref "/docs/v1/guides/platform-stack#kubernetes" %}} +[kubernetes operators]: https://github.com/cozystack/cozystack/blob/c0f742595f1e942a9bf4921e9655142cc9040551/packages/core/platform/bundles/paas-full.yaml#L185-L243 + +[paas-full-gh]: https://github.com/cozystack/cozystack/blob/main/packages/core/platform/bundles/paas-full.yaml +[iaas-full-gh]: https://github.com/cozystack/cozystack/issues/730 +[paas-hosted-gh]: https://github.com/cozystack/cozystack/blob/main/packages/core/platform/bundles/paas-hosted.yaml +[distro-full-gh]: https://github.com/cozystack/cozystack/blob/main/packages/core/platform/bundles/distro-full.yaml +[distro-hosted-gh]: https://github.com/cozystack/cozystack/blob/main/packages/core/platform/bundles/distro-hosted.yaml + +[paas-full]: {{% ref "/docs/v1/operations/configuration/bundles#paas-full" %}} +[iaas-full]: https://github.com/cozystack/cozystack/issues/730 +[paas-hosted]: {{% ref "/docs/v1/operations/configuration/bundles#paas-hosted" %}} +[distro-full]: {{% ref "/docs/v1/operations/configuration/bundles#distro-full" %}} +[distro-hosted]: {{% ref "/docs/v1/operations/configuration/bundles#distro-hosted" %}} + + +## Choosing the Right Bundle + +Bundles combine components from different layers to match particular needs. +Some are designed for full platform scenarios, others for cloud-hosted workloads or Kubernetes distributions. + +### `paas-full` + +`paas-full` is a full-featured PaaS and IaaS bundle, designed for installation on Talos Linux. +It includes all four layers and provides the full set of Cozystack components, enabling a comprehensive PaaS experience. +Some higher-layer components are optional and can be excluded during installation. + +`paas-full` is intended for installation on bare-metal servers or VMs. + +Bundle source: [paas-full.yaml][paas-full-gh]. + +Example configuration: + +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: cozystack + namespace: cozy-system +data: + bundle-name: "paas-full" + ipv4-pod-cidr: "10.244.0.0/16" + ipv4-pod-gateway: "10.244.0.1" + ipv4-svc-cidr: "10.96.0.0/16" + ipv4-join-cidr: "100.64.0.0/16" + root-host: "example.org" + api-server-endpoint: "https://192.168.100.10:6443" + expose-services: "api,dashboard,cdi-uploadproxy,vm-exportproxy" +``` + +### `paas-hosted` + +Cozystack can be installed as platform-as-a-service (PaaS) on top of an existing managed Kubernetes cluster, +typically provisioned from a cloud provider. +Bundle `paas-hosted` is made for this use case. +It can be used with [kind](https://kind.sigs.k8s.io/) and any cloud-based Kubernetes clusters. + +Bundle `paas-hosted` includes layers 3 and 4, providing Cozystack API and UI, managed applications, and tenant Kubernetes clusters. +It does not include CNI plugins, virtualization, or storage. + +The Kubernetes cluster used to deploy Cozystack must conform to the following requirements: + +- Listening address of some Kubernetes components must be changed from `localhost` to a routable address. +- Kubernetes API server must be reachable on `localhost`. + +Bundle source: [paas-hosted.yaml][paas-hosted-gh]. + +Example configuration: + +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: cozystack + namespace: cozy-system +data: + bundle-name: "paas-hosted" + root-host: "example.org" + api-server-endpoint: "https://192.168.100.10:6443" + expose-services: "api,dashboard" +``` + +### `distro-full` + +Cozystack can be used as a pure Kubernetes distribution for installing on Talos Linux over bare metal. +Bundle `distro-full` includes everything needed to make a ready-to-work Kubernetes cluster: + +- Talos as the operating system, +- Kubernetes distribution, +- Ready-to-use subsystems: networking, virtualization, and storage, +- Optional components: Monitoring and a set of Kubernetes operators. + +Bundle source: [distro-full.yaml][distro-full-gh]. + +Example configuration: + +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: cozystack + namespace: cozy-system +data: + bundle-name: "distro-full" + ipv4-pod-cidr: "10.244.0.0/16" + ipv4-svc-cidr: "10.96.0.0/16" + root-host: "example.org" + api-server-endpoint: "https://192.168.100.10:6443" +``` + +### `distro-hosted` + +This minimal Cozystack bundle adds extra functionality on top of a hosted Kubernetes cluster. +It includes three optional components: + +- Virtualization subsystem (as KubeVirt). +- Monitoring subsystem. +- Kubernetes operators. + +Bundle `distro-hosted` can be used with [kind](https://kind.sigs.k8s.io/) and any cloud-based Kubernetes clusters. +It does not include CNI plugins, virtualization, storage, or multitenancy. + +The Kubernetes cluster used to deploy Cozystack must conform to the following requirements: + +* Kubernetes cluster DNS domain must be set to `cozy.local`. +* Listening address of some Kubernetes components must be changed from `localhost` to a routable address. +* Kubernetes API server must be reachable on `localhost`. + +Bundle source: [distro-hosted.yaml][distro-hosted-gh]. + +### `iaas-full` + +This planned bundle offers a complete infrastructure-as-a-service setup. +It provides all Cozystack components except for Kubernetes operators +and preset managed applications. + +Bundle `iaas-full` is yet to be implemented in Cozystack. +See [cozystack/cozystack#730][iaas-full-gh]. + +## Learn More + +For a full list of configuration options for each bundle, refer to the +[ConfigMap reference]({{% ref "/docs/v1/operations/configuration/configmap" %}}). + +To see the full list of components, how to enable and disable them, refer to the +[Components reference]({{% ref "/docs/v1/operations/configuration/components" %}}). + +To deploy a selected bundle, follow the [Cozystack installation guide]({{% ref "/docs/v1/install/cozystack" %}}) +or [provider-specific guides]({{% ref "/docs/v1/install/providers" %}}). +However, if this your first time installing Cozystack, it's best to use the complete bundle `paas-full` and +go through the [Cozystack tutorial]({{% ref "/docs/v1/getting-started" %}}). diff --git a/content/en/docs/operations/configuration/components.md b/content/en/docs/v1/operations/configuration/components.md similarity index 89% rename from content/en/docs/operations/configuration/components.md rename to content/en/docs/v1/operations/configuration/components.md index 8e1e0b04..734f6168 100644 --- a/content/en/docs/operations/configuration/components.md +++ b/content/en/docs/v1/operations/configuration/components.md @@ -4,14 +4,14 @@ linkTitle: "Components" description: "Full reference for Cozystack components." weight: 30 aliases: - - /docs/install/cozystack/components + - /docs/v1/install/cozystack/components --- ### Overwriting Component Parameters You might want to override specific options for the components. To achieve this, you must specify values in JSON or YAML format using the `data.values-` option -in the [Cozystack ConfigMap]({{% ref "/docs/operations/configuration/configmap" %}}). +in the [Cozystack ConfigMap]({{% ref "/docs/v1/operations/configuration/configmap" %}}). For example, if you want to overwrite `k8sServiceHost` and `k8sServicePort` for cilium, take a look at its [values.yaml](https://github.com/cozystack/cozystack/blob/238061efbc0da61d60068f5de31d6eaa35c4d994/packages/system/cilium/values.yaml#L18-L19) file. @@ -40,7 +40,7 @@ Bundles have optional components that need to be explicitly enabled (included) i Regular bundle components can, on the other hand, be disabled (excluded) from the installation, when you don't need them. Use options `bundle-enable` and `bundle-disable`, providing comma-separated lists of the components. -For example, [installing Cozystack in Hetzner]({{% ref "/docs/install/providers/hetzner" %}}) +For example, [installing Cozystack in Hetzner]({{% ref "/docs/v1/install/providers/hetzner" %}}) requires swapping default load balancer, MetalLB, with one made specifically for Hetzner, called RobotLB: ```yaml diff --git a/content/en/docs/operations/configuration/configmap.md b/content/en/docs/v1/operations/configuration/configmap.md similarity index 89% rename from content/en/docs/operations/configuration/configmap.md rename to content/en/docs/v1/operations/configuration/configmap.md index 5389bbfa..208be0db 100644 --- a/content/en/docs/operations/configuration/configmap.md +++ b/content/en/docs/v1/operations/configuration/configmap.md @@ -4,13 +4,13 @@ linkTitle: "ConfigMap" description: "Reference for the Cozystack ConfigMap, which defines key configuration values for a Cozystack installation and operations." weight: 10 aliases: - - /docs/install/cozystack/configmap + - /docs/v1/install/cozystack/configmap --- This page explains the role of Cozystack's main ConfigMap and provides a full reference for its values. Cozystack's main configuration is defined by a single [Kubernetes ConfigMap](https://kubernetes.io/docs/concepts/configuration/configmap/). -This ConfigMap includes [Cozystack bundle]({{% ref "/docs/operations/configuration/bundles" %}}) and [components setup]({{% ref "/docs/operations/configuration/components" %}}), +This ConfigMap includes [Cozystack bundle]({{% ref "/docs/v1/operations/configuration/bundles" %}}) and [components setup]({{% ref "/docs/v1/operations/configuration/components" %}}), key network settings, exposed services, and other options. @@ -58,9 +58,9 @@ data: | `oidc-enabled` | `paas-full`, `paas-hosted` | Enable [oidc] feature in Cozystack (default: `false`) | | `cpu-allocation-ratio` | `paas-full`, `paas-hosted` | CPU allocation ratio: `1/cpu-allocation-ratio` CPU requested per 1 vCPU. Defaults to 10. See [Resource Management] for detailed explanation and examples. | -[enable-disable]: {{% ref "/docs/operations/configuration/components#enabling-and-disabling-components" %}} -[overwrite-parameters]: {{% ref "/docs/operations/configuration/components#overwriting-component-parameters" %}} -[Resource Management]: {{% ref "/docs/guides/resource-management#cpu-allocation-ratio" %}} -[oidc]: {{% ref "/docs/operations/oidc" %}} -[telemetry]: {{% ref "/docs/operations/configuration/telemetry" %}} +[enable-disable]: {{% ref "/docs/v1/operations/configuration/components#enabling-and-disabling-components" %}} +[overwrite-parameters]: {{% ref "/docs/v1/operations/configuration/components#overwriting-component-parameters" %}} +[Resource Management]: {{% ref "/docs/v1/guides/resource-management#cpu-allocation-ratio" %}} +[oidc]: {{% ref "/docs/v1/operations/oidc" %}} +[telemetry]: {{% ref "/docs/v1/operations/configuration/telemetry" %}} [kube-ovn]: https://kubeovn.github.io/docs/en/guide/subnet/#join-subnet diff --git a/content/en/docs/operations/configuration/telemetry.md b/content/en/docs/v1/operations/configuration/telemetry.md similarity index 98% rename from content/en/docs/operations/configuration/telemetry.md rename to content/en/docs/v1/operations/configuration/telemetry.md index 8c491d11..44cf133e 100644 --- a/content/en/docs/operations/configuration/telemetry.md +++ b/content/en/docs/v1/operations/configuration/telemetry.md @@ -4,8 +4,8 @@ linkTitle: "Telemetry" description: "Cozystack Telemetry" weight: 60 aliases: - - /docs/telemetry - - /docs/operations/telemetry + - /docs/v1/telemetry + - /docs/v1/operations/telemetry --- This document outlines the telemetry feature within the Cozystack project, detailing the rationale behind data collection, the nature of the data collected, data handling practices, and instructions for opting out. diff --git a/content/en/docs/operations/faq/_index.md b/content/en/docs/v1/operations/faq/_index.md similarity index 70% rename from content/en/docs/operations/faq/_index.md rename to content/en/docs/v1/operations/faq/_index.md index 029108af..fee04a3c 100644 --- a/content/en/docs/operations/faq/_index.md +++ b/content/en/docs/v1/operations/faq/_index.md @@ -4,8 +4,8 @@ linkTitle: "FAQ / How-tos" description: "Knowledge base with FAQ and advanced configurations" weight: 100 aliases: - - /docs/faq - - /docs/guides/faq + - /docs/v1/faq + - /docs/v1/guides/faq --- {{% alert title="Troubleshooting" %}} @@ -17,15 +17,15 @@ Troubleshooting advice can be found on our [Troubleshooting Cheatsheet](/docs/op ### How to allocate space on system disk for user storage -Deploying Cozystack, [How to install Talos on a single-disk machine]({{% ref "/docs/install/how-to/single-disk" %}}) +Deploying Cozystack, [How to install Talos on a single-disk machine]({{% ref "/docs/v1/install/how-to/single-disk" %}}) ### How to Enable KubeSpan -Deploying Cozystack, [How to Enable KubeSpan]({{% ref "/docs/install/how-to/kubespan" %}}) +Deploying Cozystack, [How to Enable KubeSpan]({{% ref "/docs/v1/install/how-to/kubespan" %}}) ### How to enable Hugepages -Deploying Cozystack, [How to enable Hugepages]({{% ref "/docs/install/how-to/hugepages" %}}). +Deploying Cozystack, [How to enable Hugepages]({{% ref "/docs/v1/install/how-to/hugepages" %}}). ### What if my cloud provider does not support MetalLB @@ -33,12 +33,12 @@ Deploying Cozystack, [How to enable Hugepages]({{% ref "/docs/install/how-to/hug Most cloud providers don't support MetalLB. Instead of using it, you can expose the main ingress controller using the external IPs method. -For deploying on Hetzner, follow the specialized [Hetzner installation guide]({{% ref "/docs/install/providers/hetzner" %}}). -For other providers, follow the [Cozystack installation guide, Public IP Setup]({{% ref "/docs/install/cozystack#4b-public-ip-setup" %}}). +For deploying on Hetzner, follow the specialized [Hetzner installation guide]({{% ref "/docs/v1/install/providers/hetzner" %}}). +For other providers, follow the [Cozystack installation guide, Public IP Setup]({{% ref "/docs/v1/install/cozystack#4b-public-ip-setup" %}}). ### Public-network Kubernetes deployment -Deploying Cozystack, [Deploy with public networks]({{% ref "/docs/install/how-to/public-ip" %}}). +Deploying Cozystack, [Deploy with public networks]({{% ref "/docs/v1/install/how-to/public-ip" %}}). ## Operations @@ -56,22 +56,22 @@ Here you can find reference repository to learn how to configure Cozystack servi ### How to generate kubeconfig for tenant users -Moved to [How to generate kubeconfig for tenant users]({{% ref "/docs/operations/faq/generate-kubeconfig" %}}). +Moved to [How to generate kubeconfig for tenant users]({{% ref "/docs/v1/operations/faq/generate-kubeconfig" %}}). ### How to Rotate Certificate Authority -Moved to Cluster Maintenance, [How to Rotate Certificate Authority]({{% ref "/docs/operations/cluster/rotate-ca" %}}). +Moved to Cluster Maintenance, [How to Rotate Certificate Authority]({{% ref "/docs/v1/operations/cluster/rotate-ca" %}}). ### How to cleanup etcd state -Moved to Troubleshooting: [How to clean up etcd state]({{% ref "/docs/operations/troubleshooting/etcd#how-to-clean-up-etcd-state" %}}). +Moved to Troubleshooting: [How to clean up etcd state]({{% ref "/docs/v1/operations/troubleshooting/etcd#how-to-clean-up-etcd-state" %}}). ## Bundles ### How to overwrite parameters for specific components -Moved to Cluster configuration, [Components reference]({{% ref "/docs/operations/configuration/components#overwriting-component-parameters" %}}). +Moved to Cluster configuration, [Components reference]({{% ref "/docs/v1/operations/configuration/components#overwriting-component-parameters" %}}). ### How to disable some components from bundle -Moved to Cluster configuration, [Components reference]({{% ref "/docs/operations/configuration/components#enabling-and-disabling-components" %}}). +Moved to Cluster configuration, [Components reference]({{% ref "/docs/v1/operations/configuration/components#enabling-and-disabling-components" %}}). diff --git a/content/en/docs/operations/faq/generate-kubeconfig.md b/content/en/docs/v1/operations/faq/generate-kubeconfig.md similarity index 100% rename from content/en/docs/operations/faq/generate-kubeconfig.md rename to content/en/docs/v1/operations/faq/generate-kubeconfig.md diff --git a/content/en/docs/operations/oidc/_index.md b/content/en/docs/v1/operations/oidc/_index.md similarity index 88% rename from content/en/docs/operations/oidc/_index.md rename to content/en/docs/v1/operations/oidc/_index.md index 7557f0da..697cafeb 100644 --- a/content/en/docs/operations/oidc/_index.md +++ b/content/en/docs/v1/operations/oidc/_index.md @@ -4,5 +4,5 @@ linkTitle: "OpenID Connect" description: "OIDC in Cozystack" weight: 36 aliases: - - /docs/oidc + - /docs/v1/oidc --- diff --git a/content/en/docs/operations/oidc/enable_oidc.md b/content/en/docs/v1/operations/oidc/enable_oidc.md similarity index 99% rename from content/en/docs/operations/oidc/enable_oidc.md rename to content/en/docs/v1/operations/oidc/enable_oidc.md index 71ac613e..c27b6802 100644 --- a/content/en/docs/operations/oidc/enable_oidc.md +++ b/content/en/docs/v1/operations/oidc/enable_oidc.md @@ -4,7 +4,7 @@ linkTitle: "OIDC Server" description: "How to enable OIDC Server" weight: 36 aliases: - - /docs/oidc/enable_oidc + - /docs/v1/oidc/enable_oidc --- ## Prerequisites diff --git a/content/en/docs/operations/oidc/identity_providers/_index.md b/content/en/docs/v1/operations/oidc/identity_providers/_index.md similarity index 78% rename from content/en/docs/operations/oidc/identity_providers/_index.md rename to content/en/docs/v1/operations/oidc/identity_providers/_index.md index 12a8e61c..63ae2f19 100644 --- a/content/en/docs/operations/oidc/identity_providers/_index.md +++ b/content/en/docs/v1/operations/oidc/identity_providers/_index.md @@ -4,5 +4,5 @@ linkTitle: "Identity providers" description: "Identity providers managment." weight: 70 aliases: - - /docs/oidc/identity_providers + - /docs/v1/oidc/identity_providers --- diff --git a/content/en/docs/operations/oidc/identity_providers/gitlab.md b/content/en/docs/v1/operations/oidc/identity_providers/gitlab.md similarity index 96% rename from content/en/docs/operations/oidc/identity_providers/gitlab.md rename to content/en/docs/v1/operations/oidc/identity_providers/gitlab.md index d9291a89..385eac71 100644 --- a/content/en/docs/operations/oidc/identity_providers/gitlab.md +++ b/content/en/docs/v1/operations/oidc/identity_providers/gitlab.md @@ -4,7 +4,7 @@ linkTitle: Gitlab description: "How to configure GitLab as an Identity Provider" weight: 30 aliases: - - /docs/oidc/identity_providers/gitlab + - /docs/v1/oidc/identity_providers/gitlab --- You can use Gitlab identity provider for Keycloak diff --git a/content/en/docs/operations/oidc/identity_providers/google.md b/content/en/docs/v1/operations/oidc/identity_providers/google.md similarity index 98% rename from content/en/docs/operations/oidc/identity_providers/google.md rename to content/en/docs/v1/operations/oidc/identity_providers/google.md index 796ed2c2..fd549dc9 100644 --- a/content/en/docs/operations/oidc/identity_providers/google.md +++ b/content/en/docs/v1/operations/oidc/identity_providers/google.md @@ -4,7 +4,7 @@ linkTitle: Google description: "How to configure Google as an Identity Provider" weight: 30 aliases: - - /docs/oidc/identity_providers/google + - /docs/v1/oidc/identity_providers/google --- ## Configure Google diff --git a/content/en/docs/operations/oidc/users_and_roles.md b/content/en/docs/v1/operations/oidc/users_and_roles.md similarity index 98% rename from content/en/docs/operations/oidc/users_and_roles.md rename to content/en/docs/v1/operations/oidc/users_and_roles.md index e9e9a99b..89ef10cd 100644 --- a/content/en/docs/operations/oidc/users_and_roles.md +++ b/content/en/docs/v1/operations/oidc/users_and_roles.md @@ -4,7 +4,7 @@ linkTitle: Users and roles description: "How to create users and add roles for them" weight: 50 aliases: - - /docs/oidc/users_and_roles + - /docs/v1/oidc/users_and_roles --- Creating users and add roles for them diff --git a/content/en/docs/v1/operations/services/_include/bootbox.md b/content/en/docs/v1/operations/services/_include/bootbox.md new file mode 100644 index 00000000..1648bc6b --- /dev/null +++ b/content/en/docs/v1/operations/services/_include/bootbox.md @@ -0,0 +1,5 @@ +--- +title: "BootBox Service Reference" +linkTitle: "BootBox" +--- + diff --git a/content/en/docs/v1/operations/services/_include/etcd.md b/content/en/docs/v1/operations/services/_include/etcd.md new file mode 100644 index 00000000..79395411 --- /dev/null +++ b/content/en/docs/v1/operations/services/_include/etcd.md @@ -0,0 +1,5 @@ +--- +title: "Etcd Service Reference" +linkTitle: "Etcd" +--- + diff --git a/content/en/docs/v1/operations/services/_include/ingress.md b/content/en/docs/v1/operations/services/_include/ingress.md new file mode 100644 index 00000000..0441212f --- /dev/null +++ b/content/en/docs/v1/operations/services/_include/ingress.md @@ -0,0 +1,5 @@ +--- +title: "Ingress-NGINX Controller Reference" +linkTitle: "Ingress" +--- + diff --git a/content/en/docs/v1/operations/services/_include/monitoring-overview.md b/content/en/docs/v1/operations/services/_include/monitoring-overview.md new file mode 100644 index 00000000..5475d5c2 --- /dev/null +++ b/content/en/docs/v1/operations/services/_include/monitoring-overview.md @@ -0,0 +1,119 @@ +## Data Flow Architecture + +```mermaid +flowchart TD + A[VMAgent] --> B[VMCluster] + B --> C[Grafana] + B --> D[Alerta] + E[Fluent Bit] --> F[VLogs] +``` + +## Component Descriptions + +- **VMAgent**: A lightweight agent that collects metrics from various sources and sends them to VictoriaMetrics. +- **VMCluster**: A VictoriaMetrics cluster that stores and processes time-series data for efficient querying. +- **Grafana**: An open-source platform for monitoring and observability with customizable dashboards. +- **Alerta**: An alerting system that processes and manages alerts from monitoring systems. +- **Fluent Bit**: A fast and lightweight log processor and forwarder. +- **VLogs**: VictoriaLogs, a high-performance log management system for storing and querying logs. + +## Visualization Architecture + +```mermaid +graph TD + A[VictoriaMetrics
VMCluster] --> B[Grafana] + C[VLogs] --> B + D[External Prometheus] --> B + E[Custom Application Metrics] --> B + B --> F[Pre-built Dashboards
Cluster Overview, Node Metrics, etc.] + B --> G[Custom Dashboards
Time Series, Stat, Table, etc.] + F --> H[Visualization
CPU Usage, Memory, Network] + G --> H +``` + +### Visualization Component Descriptions + +- **VictoriaMetrics VMCluster**: The core metrics storage and querying engine that provides data to Grafana. +- **VLogs**: VictoriaLogs system for log data integration into visualizations. +- **External Prometheus**: Additional metrics sources that can be integrated. +- **Custom Application Metrics**: User-defined metrics from applications. +- **Grafana**: The visualization platform that renders dashboards. +- **Pre-built Dashboards**: Standard dashboards for common monitoring views. +- **Custom Dashboards**: User-created dashboards with various panel types. +- **Visualization**: The final output showing metrics like CPU, memory, and network usage. + +## Monitoring Architecture + +```mermaid +graph TD + A[Kubernetes Cluster] --> B[VMAgent] + C[Applications] --> B + D[Infrastructure] --> B + B --> E[VictoriaMetrics VMCluster] + E --> F[Grafana] + E --> G[Alerta] + F --> H[Dashboards & Visualizations] + G --> I[Alerts & Notifications] +``` + +### Monitoring Architecture Component Descriptions + +- **Kubernetes Cluster**: The core platform where workloads run, providing metrics endpoints. +- **Applications**: User applications that expose custom metrics. +- **Infrastructure**: Underlying hardware and system metrics. +- **VMAgent**: Collects metrics from various sources and forwards them to VictoriaMetrics. +- **VictoriaMetrics VMCluster**: Stores and processes time-series metrics data. +- **Grafana**: Provides visualization and dashboarding capabilities. +- **Alerta**: Handles alerting and notification management. +- **Dashboards & Visualizations**: User interfaces for monitoring data. +- **Alerts & Notifications**: System for notifying operators of issues. + +## Alerting Flow + +```mermaid +flowchart TD + A[Metrics Collection
VMAgent] --> B[VictoriaMetrics
VMCluster] + B --> C[Alert Rules
Evaluation] + C --> D{Condition Met?} + D -->|Yes| E[Generate Alert] + D -->|No| A + E --> F[Alerta
Alert Manager] + F --> G[Grouping &
Deduplication] + G --> H[Routing &
Notification] + H --> I[Email/SMS/Slack/etc.] +``` + +### Alerting Flow Component Descriptions + +- **Metrics Collection**: Gathering of metrics by VMAgent from sources. +- **VictoriaMetrics VMCluster**: Storage and querying of metrics data. +- **Alert Rules Evaluation**: Checking metrics against predefined thresholds. +- **Generate Alert**: Creating alert instances when conditions are met. +- **Alerta Alert Manager**: Processing and managing alerts. +- **Grouping & Deduplication**: Organizing alerts to avoid duplicates. +- **Routing & Notification**: Directing alerts to appropriate channels. +- **Email/SMS/Slack/etc.**: Final delivery methods for notifications. + +## Logging Architecture + +```mermaid +graph TD + A[Application Logs] --> B[Fluent Bit] + C[Kubernetes
Container Logs] --> B + D[System Logs] --> B + B --> E[VictoriaLogs
VLogs] + E --> F[Grafana
Log Panels] + F --> G[Log Visualization
& Search] + E --> H[Log Queries
& Analysis] +``` + +### Logging Architecture Component Descriptions + +- **Application Logs**: Logs generated by user applications. +- **Kubernetes Container Logs**: Logs from containers running in Kubernetes. +- **System Logs**: Infrastructure and system-level logs. +- **Fluent Bit**: Lightweight log processor that collects and forwards logs. +- **VictoriaLogs VLogs**: High-performance log storage and querying system. +- **Grafana Log Panels**: Integration for visualizing logs in Grafana dashboards. +- **Log Visualization & Search**: Interfaces for exploring and searching log data. +- **Log Queries & Analysis**: Tools for querying and analyzing log information. \ No newline at end of file diff --git a/content/en/docs/v1/operations/services/_include/parameters.md b/content/en/docs/v1/operations/services/_include/parameters.md new file mode 100644 index 00000000..1ecb0872 --- /dev/null +++ b/content/en/docs/v1/operations/services/_include/parameters.md @@ -0,0 +1,6 @@ +--- +title: "Monitoring Parameters" +linkTitle: "Parameters" +description: "Configure and manage monitoring parameters in Cozystack." +weight: 1 +--- diff --git a/content/en/docs/v1/operations/services/_include/seaweedfs.md b/content/en/docs/v1/operations/services/_include/seaweedfs.md new file mode 100644 index 00000000..24524afd --- /dev/null +++ b/content/en/docs/v1/operations/services/_include/seaweedfs.md @@ -0,0 +1,5 @@ +--- +title: "SeaweedFS Service Reference" +linkTitle: "SeaweedFS" +--- + diff --git a/content/en/docs/operations/services/_index.md b/content/en/docs/v1/operations/services/_index.md similarity index 92% rename from content/en/docs/operations/services/_index.md rename to content/en/docs/v1/operations/services/_index.md index b1069f17..e7248620 100644 --- a/content/en/docs/operations/services/_index.md +++ b/content/en/docs/v1/operations/services/_index.md @@ -3,9 +3,6 @@ title: "Cluster Services Reference" linkTitle: "Cluster Services" description: "Learn about middleware system packages, deployed to tenants and providing major functionality to user apps." weight: 35 -menu: - docs: - weight: 35 --- ## Monitoring @@ -28,10 +25,10 @@ The monitoring system in Cozystack provides comprehensive observability for both Metrics flow from exporters (e.g., node-exporters, kube-state-metrics) to VMAgent, which then writes to VMCluster. Grafana queries VMCluster for visualization, and Alerta processes alerts from VMCluster or other sources. -For detailed configuration, see [Monitoring Hub Reference]({{% ref "docs/operations/services/monitoring" %}}). +For detailed configuration, see [Monitoring Hub Reference]({{% ref "docs/v1/operations/services/monitoring" %}}). Cozystack includes a number of cluster services. They are deployed through tenant settings, and not through the application catalog. Each tenant can have its own copy of cluster service or use the parent tenant's services. -Read more about the services sharing mechanism in [Tenant System]({{% ref "docs/guides/tenants#sharing-cluster-services" %}}) +Read more about the services sharing mechanism in [Tenant System]({{% ref "docs/v1/guides/tenants#sharing-cluster-services" %}}) diff --git a/content/en/docs/operations/services/bootbox.md b/content/en/docs/v1/operations/services/bootbox.md similarity index 97% rename from content/en/docs/operations/services/bootbox.md rename to content/en/docs/v1/operations/services/bootbox.md index 6ff41c84..aa7d9187 100644 --- a/content/en/docs/operations/services/bootbox.md +++ b/content/en/docs/v1/operations/services/bootbox.md @@ -5,7 +5,7 @@ linkTitle: "BootBox" @@ -31,3 +31,4 @@ source: https://github.com/cozystack/cozystack/blob/main/packages/extra/bootbox/ | `machines[i].timeServers` | Time servers. | `[]string` | `[]` | | `machines[i].uefi` | UEFI. | `bool` | `false` | + diff --git a/content/en/docs/operations/services/etcd.md b/content/en/docs/v1/operations/services/etcd.md similarity index 95% rename from content/en/docs/operations/services/etcd.md rename to content/en/docs/v1/operations/services/etcd.md index 608a76ee..2046e4d8 100644 --- a/content/en/docs/operations/services/etcd.md +++ b/content/en/docs/v1/operations/services/etcd.md @@ -5,7 +5,7 @@ linkTitle: "Etcd" @@ -23,3 +23,4 @@ source: https://github.com/cozystack/cozystack/blob/main/packages/extra/etcd/REA | `resources.cpu` | Number of CPU cores allocated. | `quantity` | `1000m` | | `resources.memory` | Amount of memory allocated. | `quantity` | `512Mi` | + diff --git a/content/en/docs/operations/services/ingress.md b/content/en/docs/v1/operations/services/ingress.md similarity index 97% rename from content/en/docs/operations/services/ingress.md rename to content/en/docs/v1/operations/services/ingress.md index 95b2817f..959e32be 100644 --- a/content/en/docs/operations/services/ingress.md +++ b/content/en/docs/v1/operations/services/ingress.md @@ -5,7 +5,7 @@ linkTitle: "Ingress" @@ -24,3 +24,4 @@ source: https://github.com/cozystack/cozystack/blob/main/packages/extra/ingress/ | `resources.memory` | Memory (RAM) available to each replica. | `quantity` | `""` | | `resourcesPreset` | Default sizing preset used when `resources` is omitted. | `string` | `micro` | + diff --git a/content/en/docs/v1/operations/services/monitoring/_index.md b/content/en/docs/v1/operations/services/monitoring/_index.md new file mode 100644 index 00000000..25f4f222 --- /dev/null +++ b/content/en/docs/v1/operations/services/monitoring/_index.md @@ -0,0 +1,5 @@ +--- +title: "Monitoring Hub Reference" +linkTitle: "Monitoring" +--- +{{< include "docs/v1/operations/services/_include/monitoring-overview.md" >}} \ No newline at end of file diff --git a/content/en/docs/operations/services/monitoring/alerting.md b/content/en/docs/v1/operations/services/monitoring/alerting.md similarity index 98% rename from content/en/docs/operations/services/monitoring/alerting.md rename to content/en/docs/v1/operations/services/monitoring/alerting.md index d69237ba..9ecbc4e3 100644 --- a/content/en/docs/operations/services/monitoring/alerting.md +++ b/content/en/docs/v1/operations/services/monitoring/alerting.md @@ -3,10 +3,6 @@ title: "Monitoring Alerting" linkTitle: "Alerting" description: "Configure and manage alerts in Cozystack monitoring system using Alerta and Alertmanager." weight: 36 -menu: - docs: - parent: "Monitoring" - weight: 20 --- ## Overview @@ -139,7 +135,7 @@ alerta: - warning ``` -For detailed configuration options, see [Monitoring Hub Reference]({{% ref "docs/operations/services/monitoring" %}}). +For detailed configuration options, see [Monitoring Hub Reference]({{% ref "docs/v1/operations/services/monitoring" %}}). ## Alert Examples diff --git a/content/en/docs/operations/services/monitoring/dashboards.md b/content/en/docs/v1/operations/services/monitoring/dashboards.md similarity index 96% rename from content/en/docs/operations/services/monitoring/dashboards.md rename to content/en/docs/v1/operations/services/monitoring/dashboards.md index d526d60f..a169dc4b 100644 --- a/content/en/docs/operations/services/monitoring/dashboards.md +++ b/content/en/docs/v1/operations/services/monitoring/dashboards.md @@ -3,10 +3,6 @@ title: "Monitoring Dashboards" linkTitle: "Dashboards" description: "Learn how to visualize metrics and create custom dashboards in Grafana for monitoring Cozystack clusters and applications." weight: 10 -menu: - docs: - parent: "Monitoring" - weight: 30 --- ## Overview @@ -21,7 +17,7 @@ To access Grafana and explore dashboards: 2. Log in using your tenant credentials (OIDC or token-based authentication). 3. Once logged in, you can browse pre-configured dashboards in the "Dashboards" section. -For initial setup and configuration details, refer to [Monitoring Setup]({{% ref "docs/operations/services/monitoring/setup" %}}). +For initial setup and configuration details, refer to [Monitoring Setup]({{% ref "docs/v1/operations/services/monitoring/setup" %}}). ## Pre-built Dashboards @@ -121,7 +117,7 @@ For applications exposing custom metrics: - Configure VMAgent in Cozystack to scrape these endpoints by updating the monitoring configuration. - Metrics will be ingested into VM and available for querying in Grafana. -Follow Prometheus [metric naming conventions](https://prometheus.io/docs/practices/naming/) to ensure compatibility. For configuration examples, see [Monitoring Hub Reference]({{% ref "docs/operations/services/monitoring" %}}). +Follow Prometheus [metric naming conventions](https://prometheus.io/docs/practices/naming/) to ensure compatibility. For configuration examples, see [Monitoring Hub Reference]({{% ref "docs/v1/operations/services/monitoring" %}}). ### Grafana Data Sources Integration @@ -155,4 +151,4 @@ Grafana in Cozystack is pre-configured with optimized data sources for seamless - **Configuration**: Automatically set up for tenant-specific log streams. - **Usage**: Add log panels to dashboards to combine metrics and logs, e.g., for troubleshooting application issues. -To modify data source settings, access the Grafana admin panel (admin privileges required) or update the monitoring configuration via the Cozystack API. For detailed parameters, refer to [Monitoring Hub Reference]({{% ref "docs/operations/services/monitoring" %}}). \ No newline at end of file +To modify data source settings, access the Grafana admin panel (admin privileges required) or update the monitoring configuration via the Cozystack API. For detailed parameters, refer to [Monitoring Hub Reference]({{% ref "docs/v1/operations/services/monitoring" %}}). \ No newline at end of file diff --git a/content/en/docs/operations/services/monitoring/logs.md b/content/en/docs/v1/operations/services/monitoring/logs.md similarity index 95% rename from content/en/docs/operations/services/monitoring/logs.md rename to content/en/docs/v1/operations/services/monitoring/logs.md index 5ff0e93c..e5ec2e53 100644 --- a/content/en/docs/operations/services/monitoring/logs.md +++ b/content/en/docs/v1/operations/services/monitoring/logs.md @@ -3,10 +3,6 @@ title: "Monitoring Logs" linkTitle: "Logs" description: "Learn how to collect, store, search, and analyze logs in Cozystack using Fluent Bit and VictoriaLogs for comprehensive observability." weight: 11 -menu: - docs: - parent: "Monitoring" - weight: 40 --- ## Collecting and Storing Logs @@ -25,7 +21,7 @@ Log storages are configured through the monitoring hub parameters. Each tenant c | `logsStorages[i].storage` | Persistent volume size | `string` | `"10Gi"` | | `logsStorages[i].storageClassName` | StorageClass for data persistence | `string` | `"replicated"` | -For detailed configuration options, see [Monitoring Hub Reference]({{% ref "docs/operations/services/monitoring" %}}). +For detailed configuration options, see [Monitoring Hub Reference]({{% ref "docs/v1/operations/services/monitoring" %}}). ### Fluent Bit Inputs and Outputs @@ -156,4 +152,4 @@ def log_event(level, message, **kwargs): logger.info(json.dumps(log_entry)) ``` -Ensure Fluent Bit parsers are configured to handle your log format. For setup details, see [Monitoring Setup]({{% ref "docs/operations/services/monitoring/setup" %}}). \ No newline at end of file +Ensure Fluent Bit parsers are configured to handle your log format. For setup details, see [Monitoring Setup]({{% ref "docs/v1/operations/services/monitoring/setup" %}}). \ No newline at end of file diff --git a/content/en/docs/operations/services/monitoring/parameters.md b/content/en/docs/v1/operations/services/monitoring/parameters.md similarity index 98% rename from content/en/docs/operations/services/monitoring/parameters.md rename to content/en/docs/v1/operations/services/monitoring/parameters.md index a19d17de..05adcfc6 100644 --- a/content/en/docs/operations/services/monitoring/parameters.md +++ b/content/en/docs/v1/operations/services/monitoring/parameters.md @@ -3,14 +3,10 @@ title: "Monitoring Parameters" linkTitle: "Parameters" description: "Configure and manage monitoring parameters in Cozystack." weight: 1 -menu: - docs: - parent: "Monitoring" - weight: 10 --- @@ -116,3 +112,4 @@ source: https://github.com/cozystack/cozystack/blob/main/packages/extra/monitori | `vmagent.externalLabels` | External labels applied to all metrics. | `object` | `{}` | | `vmagent.remoteWrite` | Remote write configuration. | `object` | `{}` | + diff --git a/content/en/docs/operations/services/monitoring/setup.md b/content/en/docs/v1/operations/services/monitoring/setup.md similarity index 99% rename from content/en/docs/operations/services/monitoring/setup.md rename to content/en/docs/v1/operations/services/monitoring/setup.md index fc9bba1d..454e40db 100644 --- a/content/en/docs/operations/services/monitoring/setup.md +++ b/content/en/docs/v1/operations/services/monitoring/setup.md @@ -3,10 +3,6 @@ title: "Monitoring Setup" linkTitle: "Setup" description: "Guide to setting up and configuring monitoring in Cozystack" weight: 2 -menu: - docs: - parent: "Monitoring" - weight: 11 --- ## Overview diff --git a/content/en/docs/operations/services/seaweedfs.md b/content/en/docs/v1/operations/services/seaweedfs.md similarity index 99% rename from content/en/docs/operations/services/seaweedfs.md rename to content/en/docs/v1/operations/services/seaweedfs.md index 11043c6c..bf98eafa 100644 --- a/content/en/docs/operations/services/seaweedfs.md +++ b/content/en/docs/v1/operations/services/seaweedfs.md @@ -5,7 +5,7 @@ linkTitle: "SeaweedFS" @@ -66,3 +66,4 @@ source: https://github.com/cozystack/cozystack/blob/main/packages/extra/seaweedf | `s3.resources.memory` | Amount of memory allocated. | `quantity` | `""` | | `s3.resourcesPreset` | Default sizing preset used when `resources` is omitted. | `string` | `small` | + diff --git a/content/en/docs/operations/stretched/_index.md b/content/en/docs/v1/operations/stretched/_index.md similarity index 92% rename from content/en/docs/operations/stretched/_index.md rename to content/en/docs/v1/operations/stretched/_index.md index f813809a..cd37acaf 100644 --- a/content/en/docs/operations/stretched/_index.md +++ b/content/en/docs/v1/operations/stretched/_index.md @@ -4,7 +4,7 @@ linkTitle: "Multi Datacenter" description: "How to run Cozystack on stretched Kubernetes cluster" weight: 37 aliases: - - /docs/stretched + - /docs/v1/stretched --- These guides will show you how to configure your cluster to run Cozystack on the nodes residing in different datacenters. diff --git a/content/en/docs/operations/stretched/drbd-tuning.md b/content/en/docs/v1/operations/stretched/drbd-tuning.md similarity index 94% rename from content/en/docs/operations/stretched/drbd-tuning.md rename to content/en/docs/v1/operations/stretched/drbd-tuning.md index cb225a08..2cbb3c83 100644 --- a/content/en/docs/operations/stretched/drbd-tuning.md +++ b/content/en/docs/v1/operations/stretched/drbd-tuning.md @@ -4,8 +4,8 @@ linkTitle: "LINSTOR DRBD" description: "Parameters required to make Linstor work in a stretched cluster" weight: 30 aliases: - - /docs/stretched/linstor - - /docs/operations/stretched/linstor + - /docs/v1/stretched/linstor + - /docs/v1/operations/stretched/linstor --- ## Introduction @@ -49,4 +49,4 @@ These values are tuned for inter-datacenter environments with higher latency tha Adjusting these settings helps avoid unnecessary fencing and workload disruption in stretched clusters. -Also note the guide on [generic DRBD tuning]({{% ref "/docs/storage/drbd-tuning" %}}). +Also note the guide on [generic DRBD tuning]({{% ref "/docs/v1/storage/drbd-tuning" %}}). diff --git a/content/en/docs/operations/stretched/etcd.md b/content/en/docs/v1/operations/stretched/etcd.md similarity index 98% rename from content/en/docs/operations/stretched/etcd.md rename to content/en/docs/v1/operations/stretched/etcd.md index d48d9751..696269d7 100644 --- a/content/en/docs/operations/stretched/etcd.md +++ b/content/en/docs/v1/operations/stretched/etcd.md @@ -4,7 +4,7 @@ linkTitle: "etcd configuration" description: "Parameters required to make etcd work in a stretched cluster" weight: 10 aliases: - - /docs/stretched/etcd + - /docs/v1/stretched/etcd --- ## Potential problems diff --git a/content/en/docs/operations/stretched/kubeSchedulerConfiguration.md b/content/en/docs/v1/operations/stretched/kubeSchedulerConfiguration.md similarity index 96% rename from content/en/docs/operations/stretched/kubeSchedulerConfiguration.md rename to content/en/docs/v1/operations/stretched/kubeSchedulerConfiguration.md index caa62230..df3dd53e 100644 --- a/content/en/docs/operations/stretched/kubeSchedulerConfiguration.md +++ b/content/en/docs/v1/operations/stretched/kubeSchedulerConfiguration.md @@ -4,7 +4,7 @@ linkTitle: "Kube scheduler configuration" description: "Kube scheduler configuration" weight: 20 aliases: - - /docs/stretched/kubeSchedulerConfiguration + - /docs/v1/stretched/kubeSchedulerConfiguration --- ## Label nodes diff --git a/content/en/docs/operations/stretched/labels.md b/content/en/docs/v1/operations/stretched/labels.md similarity index 97% rename from content/en/docs/operations/stretched/labels.md rename to content/en/docs/v1/operations/stretched/labels.md index 3805140a..d93eaef6 100644 --- a/content/en/docs/operations/stretched/labels.md +++ b/content/en/docs/v1/operations/stretched/labels.md @@ -4,7 +4,7 @@ linkTitle: "Topology node labels" description: "Label your nodes to help the workloads to be scheduled correctly" weight: 20 aliases: - - /docs/stretched/labels + - /docs/v1/stretched/labels --- ## How topology labels work diff --git a/content/en/docs/operations/stretched/linstor-dedicated-network.md b/content/en/docs/v1/operations/stretched/linstor-dedicated-network.md similarity index 96% rename from content/en/docs/operations/stretched/linstor-dedicated-network.md rename to content/en/docs/v1/operations/stretched/linstor-dedicated-network.md index 4c4ac4d9..12efc9ec 100644 --- a/content/en/docs/operations/stretched/linstor-dedicated-network.md +++ b/content/en/docs/v1/operations/stretched/linstor-dedicated-network.md @@ -23,13 +23,13 @@ while falling back to shared links between datacenters when needed. ## Prerequisites -This guide builds on the [Dedicated Network for LINSTOR]({{% ref "/docs/storage/dedicated-network" %}}) guide, +This guide builds on the [Dedicated Network for LINSTOR]({{% ref "/docs/v1/storage/dedicated-network" %}}) guide, adding additional methods and configuration patterns specific to multi-datacenter environments. To apply the patterns in this guide, it's important to understand how node interfaces and connection paths work. Be sure to review the previous guide first, as it explains these concepts in detail. To apply different node connection settings depending on node location, you’ll need to label your nodes accordingly. -Refer to the [Topology node labels guide]({{% ref "/docs/operations/stretched/labels" %}}) for instructions. +Refer to the [Topology node labels guide]({{% ref "/docs/v1/operations/stretched/labels" %}}) for instructions. This guide uses the `topology.kubernetes.io/zone` label to distinguish datacenters. ## Connection configuration diff --git a/content/en/docs/operations/stretched/seaweedfs-multidc.md b/content/en/docs/v1/operations/stretched/seaweedfs-multidc.md similarity index 100% rename from content/en/docs/operations/stretched/seaweedfs-multidc.md rename to content/en/docs/v1/operations/stretched/seaweedfs-multidc.md diff --git a/content/en/docs/operations/troubleshooting/_index.md b/content/en/docs/v1/operations/troubleshooting/_index.md similarity index 93% rename from content/en/docs/operations/troubleshooting/_index.md rename to content/en/docs/v1/operations/troubleshooting/_index.md index c969310c..6b54094c 100644 --- a/content/en/docs/operations/troubleshooting/_index.md +++ b/content/en/docs/v1/operations/troubleshooting/_index.md @@ -4,7 +4,7 @@ linkTitle: "Troubleshooting" description: "This guide shows the initial steps to check your cluster's health and discover problems." weight: 110 aliases: - - /docs/troubleshooting + - /docs/v1/troubleshooting --- This guide shows the initial steps to check your cluster's health and discover problems. @@ -109,19 +109,19 @@ Normally all of them should be `Ready` and `Release reconciliation succeeded` ### Cluster Bootstrapping -See the [Kubernetes installation troubleshooting]({{% ref "/docs/install/kubernetes/troubleshooting" %}}). +See the [Kubernetes installation troubleshooting]({{% ref "/docs/v1/install/kubernetes/troubleshooting" %}}). ### Cluster Maintenance #### Remove a failed node from the cluster -See the [Cluster Maintenance > Cluster Scaling]({{% ref "/docs/operations/cluster/scaling" %}}). +See the [Cluster Maintenance > Cluster Scaling]({{% ref "/docs/v1/operations/cluster/scaling" %}}). ### Flux CD -[Flux CD troubleshooting]({{% ref "/docs/operations/troubleshooting/flux-cd" %}}). +[Flux CD troubleshooting]({{% ref "/docs/v1/operations/troubleshooting/flux-cd" %}}). ### Kube-OVN -[Kube-OVN troubleshooting]({{% ref "/docs/operations/troubleshooting/kube-ovn" %}}). +[Kube-OVN troubleshooting]({{% ref "/docs/v1/operations/troubleshooting/kube-ovn" %}}). diff --git a/content/en/docs/operations/troubleshooting/etcd.md b/content/en/docs/v1/operations/troubleshooting/etcd.md similarity index 100% rename from content/en/docs/operations/troubleshooting/etcd.md rename to content/en/docs/v1/operations/troubleshooting/etcd.md diff --git a/content/en/docs/operations/troubleshooting/flux-cd.md b/content/en/docs/v1/operations/troubleshooting/flux-cd.md similarity index 100% rename from content/en/docs/operations/troubleshooting/flux-cd.md rename to content/en/docs/v1/operations/troubleshooting/flux-cd.md diff --git a/content/en/docs/operations/troubleshooting/kube-ovn.md b/content/en/docs/v1/operations/troubleshooting/kube-ovn.md similarity index 100% rename from content/en/docs/operations/troubleshooting/kube-ovn.md rename to content/en/docs/v1/operations/troubleshooting/kube-ovn.md diff --git a/content/en/docs/operations/troubleshooting/linstor-controller.md b/content/en/docs/v1/operations/troubleshooting/linstor-controller.md similarity index 100% rename from content/en/docs/operations/troubleshooting/linstor-controller.md rename to content/en/docs/v1/operations/troubleshooting/linstor-controller.md diff --git a/content/en/docs/operations/troubleshooting/linstor-database.md b/content/en/docs/v1/operations/troubleshooting/linstor-database.md similarity index 100% rename from content/en/docs/operations/troubleshooting/linstor-database.md rename to content/en/docs/v1/operations/troubleshooting/linstor-database.md diff --git a/content/en/docs/operations/troubleshooting/monitoring-troubleshooting.md b/content/en/docs/v1/operations/troubleshooting/monitoring-troubleshooting.md similarity index 90% rename from content/en/docs/operations/troubleshooting/monitoring-troubleshooting.md rename to content/en/docs/v1/operations/troubleshooting/monitoring-troubleshooting.md index 470c36f8..7f305764 100644 --- a/content/en/docs/operations/troubleshooting/monitoring-troubleshooting.md +++ b/content/en/docs/v1/operations/troubleshooting/monitoring-troubleshooting.md @@ -52,7 +52,7 @@ Ensure TLS is enabled for secure metric collection: - Verify certificates in the VMAgent configuration. - Check RBAC roles allow VMAgent to access required endpoints. -For more details, see [Monitoring Setup]({{% ref "/docs/operations/services/monitoring/setup" %}}). +For more details, see [Monitoring Setup]({{% ref "/docs/v1/operations/services/monitoring/setup" %}}). ## Alerts Not Arriving @@ -109,7 +109,7 @@ alerta: - Use RBAC to restrict alert access. - Enable TLS for alert endpoints. -See [Monitoring Alerting]({{% ref "/docs/operations/services/monitoring/alerting" %}}) for configuration details. +See [Monitoring Alerting]({{% ref "/docs/v1/operations/services/monitoring/alerting" %}}) for configuration details. ## Grafana Issues @@ -154,7 +154,7 @@ grafana: - Enable authentication and authorization. - Use TLS for Grafana access. -Refer to [Monitoring Dashboards]({{% ref "/docs/operations/services/monitoring/dashboards" %}}) for dashboard setup. +Refer to [Monitoring Dashboards]({{% ref "/docs/v1/operations/services/monitoring/dashboards" %}}) for dashboard setup. ## Log Collection Problems @@ -199,4 +199,4 @@ logsStorages: - Use RBAC for log access. - Enable TLS for log shipping. -For more information, see [Monitoring Logs]({{% ref "/docs/operations/services/monitoring/logs" %}}). \ No newline at end of file +For more information, see [Monitoring Logs]({{% ref "/docs/v1/operations/services/monitoring/logs" %}}). \ No newline at end of file diff --git a/content/en/docs/operations/troubleshooting/piraeus-custom-resources.md b/content/en/docs/v1/operations/troubleshooting/piraeus-custom-resources.md similarity index 100% rename from content/en/docs/operations/troubleshooting/piraeus-custom-resources.md rename to content/en/docs/v1/operations/troubleshooting/piraeus-custom-resources.md diff --git a/content/en/docs/v1/operations/upgrades/_index.md b/content/en/docs/v1/operations/upgrades/_index.md new file mode 100644 index 00000000..e0871f86 --- /dev/null +++ b/content/en/docs/v1/operations/upgrades/_index.md @@ -0,0 +1,33 @@ +--- +title: "Upgrades" +linkTitle: "Upgrades" +description: "Upgrade guides" +weight: 1 +--- + +## Upgrading to v1.0 + +Version 1.0 brings major change to Cozystack control-plane: it is now completely modular and is composed of independent packages. +To manage packages a cozystack-operator was introduced, which replaces previous installer. +Assets server is now replaced with a single oci image, and it could be replaced with a git repository if needed. + +However, underlying entities are still helm releases made of helm charts, so during an upgrade no workloads would be recreated or affected in any way. + +### 1. Prerequisites +Along with version 1.0 new management tools were introduced: `cozyhr` and `cozypkg`. You will need their latest versions to proceed with the upgrade. +- Take `cozypkg` from the Cozystack Releases page: https://github.com/cozystack/cozystack/releases +- Take `cozyhr` from its repository: https://github.com/cozystack/cozyhr/releases +You will also need regular tools such as flux, jq, kubectl, and such. + +### 2. Upgrade +- Upgrade to the most recent v0.4x version, such as v0.41.5 +- Apply `cozystack-crds.yaml` from the Cozystack Releases page, it contains definitions for new custom resources, such as Package and PackageSource. +- Apply `cozystack-operator.yaml` from the Cozystack Releases page, it will bring cozystack operator to the cluster. +- Generate and apply the main package for your installation with the `/hack/migrate-to-version-1.0.sh` script from the Cozystack repository. + It will gather values from existing configmaps in the `cozy-system` namespace, and assemble a `Package` resource with all the values. + +As soon as the Package is applied, the operator will start migrations and upgrades automatically. +Migrations will clean up legacy components (old installer, assets-server, and obsolete HelmReleases). +You can track the progress by checking `HelmRelease` statuses with `kubectl get hr -A`. + +And that's it! diff --git a/content/en/docs/operations/vpc/_index.md b/content/en/docs/v1/operations/vpc/_index.md similarity index 100% rename from content/en/docs/operations/vpc/_index.md rename to content/en/docs/v1/operations/vpc/_index.md diff --git a/content/en/docs/v1/operations/vpc/vm-subnets.png b/content/en/docs/v1/operations/vpc/vm-subnets.png new file mode 100644 index 00000000..d64aa090 Binary files /dev/null and b/content/en/docs/v1/operations/vpc/vm-subnets.png differ diff --git a/content/en/docs/v1/operations/vpc/vpc-subnets.png b/content/en/docs/v1/operations/vpc/vpc-subnets.png new file mode 100644 index 00000000..b38debff Binary files /dev/null and b/content/en/docs/v1/operations/vpc/vpc-subnets.png differ diff --git a/content/en/docs/v1/roadmap.html b/content/en/docs/v1/roadmap.html new file mode 100644 index 00000000..b9cfa348 --- /dev/null +++ b/content/en/docs/v1/roadmap.html @@ -0,0 +1,14 @@ +--- +title: "Cozystack Roadmap" +linkTitle: "Roadmap" +description: "Cozystack Roadmap" +weight: 200 +--- + +You can view our roadmap on GitHub Project.

+ +If you have some questions and comments about roadmap or need specific functionality, feel free to let us know.

+ +Join our community meetings. + + diff --git a/content/en/docs/storage/_index.md b/content/en/docs/v1/storage/_index.md similarity index 88% rename from content/en/docs/storage/_index.md rename to content/en/docs/v1/storage/_index.md index 98a80337..15027564 100644 --- a/content/en/docs/storage/_index.md +++ b/content/en/docs/v1/storage/_index.md @@ -4,7 +4,7 @@ linkTitle: "Storage" description: "Operational guides on the storage subsystem" weight: 55 aliases: - - /docs/operations/storage + - /docs/v1/operations/storage --- These guides will show you how to perform typical tasks related to the LINSTOR storage system in Cozystack. diff --git a/content/en/docs/storage/dedicated-network.md b/content/en/docs/v1/storage/dedicated-network.md similarity index 99% rename from content/en/docs/storage/dedicated-network.md rename to content/en/docs/v1/storage/dedicated-network.md index 5533ed85..cfe0e943 100644 --- a/content/en/docs/storage/dedicated-network.md +++ b/content/en/docs/v1/storage/dedicated-network.md @@ -4,7 +4,7 @@ linkTitle: "Dedicated Network" description: "Redirect LINSTOR replication traffic to a dedicated network interface for better reliability and performance." weight: 10 aliases: - - /docs/operations/storage/dedicated-network + - /docs/v1/operations/storage/dedicated-network --- This guide explains how to improve storage reliability and performance by redirecting LINSTOR replication traffic @@ -381,4 +381,4 @@ LINSTOR ==> node-connection path list node01 node02 ### Advanced CRD method See the example in -[Multi Datacenter dedicated storage network guide]({{% ref "/docs/operations/stretched/linstor-dedicated-network" %}}) +[Multi Datacenter dedicated storage network guide]({{% ref "/docs/v1/operations/stretched/linstor-dedicated-network" %}}) diff --git a/content/en/docs/storage/disk-encryption.md b/content/en/docs/v1/storage/disk-encryption.md similarity index 98% rename from content/en/docs/storage/disk-encryption.md rename to content/en/docs/v1/storage/disk-encryption.md index b7e5c321..c73252d4 100644 --- a/content/en/docs/storage/disk-encryption.md +++ b/content/en/docs/v1/storage/disk-encryption.md @@ -4,7 +4,7 @@ linkTitle: "Encrypted Storage" description: "Learn how to configure and use at-rest volume encryption for persistent volumes with LINSTOR" weight: 100 aliases: - - /docs/operations/storage/disk-encryption + - /docs/v1/operations/storage/disk-encryption --- Cozystack administrators can enable encrypted storage by creating a custom StorageClass. diff --git a/content/en/docs/storage/disk-preparation.md b/content/en/docs/v1/storage/disk-preparation.md similarity index 92% rename from content/en/docs/storage/disk-preparation.md rename to content/en/docs/v1/storage/disk-preparation.md index 19114228..b932ae79 100644 --- a/content/en/docs/storage/disk-preparation.md +++ b/content/en/docs/v1/storage/disk-preparation.md @@ -105,7 +105,7 @@ Typically, the system disk is `/dev/sda`, `/dev/vda`, or similar. ### Step 2: Locate Node Configuration -If you used [Talm]({{% ref "/docs/install/kubernetes/talm" %}}) to bootstrap your cluster, your node configurations are stored in `nodes/*.yaml` files in your cluster configuration directory. +If you used [Talm]({{% ref "/docs/v1/install/kubernetes/talm" %}}) to bootstrap your cluster, your node configurations are stored in `nodes/*.yaml` files in your cluster configuration directory. Each file corresponds to a specific node (e.g., `nodes/node1.yaml`, `nodes/node2.yaml`). @@ -234,7 +234,7 @@ If you need to wipe disks on worker nodes, ensure your node configuration allows ## Related Documentation -- [Using Talm to Bootstrap Cozystack]({{% ref "/docs/install/kubernetes/talm" %}}) -- [Configuring a Dedicated Network for LINSTOR]({{% ref "/docs/storage/dedicated-network" %}}) -- [Configuring DRBD Resync Controller]({{% ref "/docs/storage/drbd-tuning" %}}) -- [LINSTOR Troubleshooting]({{% ref "/docs/operations/troubleshooting/linstor-controller" %}}) +- [Using Talm to Bootstrap Cozystack]({{% ref "/docs/v1/install/kubernetes/talm" %}}) +- [Configuring a Dedicated Network for LINSTOR]({{% ref "/docs/v1/storage/dedicated-network" %}}) +- [Configuring DRBD Resync Controller]({{% ref "/docs/v1/storage/drbd-tuning" %}}) +- [LINSTOR Troubleshooting]({{% ref "/docs/v1/operations/troubleshooting/linstor-controller" %}}) diff --git a/content/en/docs/storage/drbd-tuning.md b/content/en/docs/v1/storage/drbd-tuning.md similarity index 96% rename from content/en/docs/storage/drbd-tuning.md rename to content/en/docs/v1/storage/drbd-tuning.md index 240fb401..9d23b3ed 100644 --- a/content/en/docs/storage/drbd-tuning.md +++ b/content/en/docs/v1/storage/drbd-tuning.md @@ -13,7 +13,7 @@ This allows you to optimize the speed of resynchronization without overloading t For detailed explanations of all available parameters and tuning recommendations, please refer to the official LINBIT guide: [Tuning the DRBD Resync Controller](https://kb.linbit.com/drbd/tuning-the-drbd-resync-controller/). -For a multi-datacenter setup, also read the [Multi-DC DRBD configuration]({{% ref "/docs/operations/stretched/drbd-tuning" %}}). +For a multi-datacenter setup, also read the [Multi-DC DRBD configuration]({{% ref "/docs/v1/operations/stretched/drbd-tuning" %}}). ## Recommended Settings for 10G Networks diff --git a/content/en/docs/storage/nfs.md b/content/en/docs/v1/storage/nfs.md similarity index 96% rename from content/en/docs/storage/nfs.md rename to content/en/docs/v1/storage/nfs.md index 05c888f6..c59c73e3 100644 --- a/content/en/docs/storage/nfs.md +++ b/content/en/docs/v1/storage/nfs.md @@ -4,7 +4,7 @@ linkTitle: "Using NFS" description: "Configure optional module `nfs-driver` to order volumes from NFS shares in Cozystack" weight: 30 aliases: - - /docs/operations/storage/nfs + - /docs/v1/operations/storage/nfs --- ## Enable NFS driver diff --git a/content/en/docs/virtualization/_include/virtual-machine.md b/content/en/docs/v1/virtualization/_include/virtual-machine.md similarity index 74% rename from content/en/docs/virtualization/_include/virtual-machine.md rename to content/en/docs/v1/virtualization/_include/virtual-machine.md index dd77d3c1..b55f3e3e 100644 --- a/content/en/docs/virtualization/_include/virtual-machine.md +++ b/content/en/docs/v1/virtualization/_include/virtual-machine.md @@ -4,5 +4,6 @@ linkTitle: "Virtual Machine (simple)" weight: 30 aliases: - /docs/reference/applications/virtual-machine + - /docs/v1/reference/applications/virtual-machine --- diff --git a/content/en/docs/virtualization/_include/vm-disk.md b/content/en/docs/v1/virtualization/_include/vm-disk.md similarity index 75% rename from content/en/docs/virtualization/_include/vm-disk.md rename to content/en/docs/v1/virtualization/_include/vm-disk.md index 7931eef0..a99e6a64 100644 --- a/content/en/docs/virtualization/_include/vm-disk.md +++ b/content/en/docs/v1/virtualization/_include/vm-disk.md @@ -4,5 +4,6 @@ linkTitle: "Virtual Machine Disk" weight: 20 aliases: - /docs/reference/applications/vm-disk + - /docs/v1/reference/applications/vm-disk --- diff --git a/content/en/docs/virtualization/_include/vm-instance.md b/content/en/docs/v1/virtualization/_include/vm-instance.md similarity index 72% rename from content/en/docs/virtualization/_include/vm-instance.md rename to content/en/docs/v1/virtualization/_include/vm-instance.md index e882cf4f..f9cc6cf5 100644 --- a/content/en/docs/virtualization/_include/vm-instance.md +++ b/content/en/docs/v1/virtualization/_include/vm-instance.md @@ -4,5 +4,6 @@ linkTitle: "Virtual Machine" weight: 10 aliases: - /docs/reference/applications/vm-instance + - /docs/v1/reference/applications/vm-instance --- diff --git a/content/en/docs/virtualization/_index.md b/content/en/docs/v1/virtualization/_index.md similarity index 90% rename from content/en/docs/virtualization/_index.md rename to content/en/docs/v1/virtualization/_index.md index 1b5787ff..a7cc0907 100644 --- a/content/en/docs/virtualization/_index.md +++ b/content/en/docs/v1/virtualization/_index.md @@ -4,8 +4,8 @@ linkTitle: "Virtualization" description: "Everything about deploying, configuring, and using virtual machines in Cozystack." weight: 50 aliases: - - /docs/operations/virtualization - - /docs/operations/virtualization/virtual-machines + - /docs/v1/operations/virtualization + - /docs/v1/operations/virtualization/virtual-machines --- This guide explains how virtualization works within Cozystack. @@ -25,7 +25,7 @@ It allows you to specify the bare minimum parameters to run a VM, but it only su For production workloads, it is recommended to use `vm-disk` and `vm-instance` instead. -See the application reference: [`virtual-machine`]({{% ref "/docs/virtualization/virtual-machine" %}}). +See the application reference: [`virtual-machine`]({{% ref "/docs/v1/virtualization/virtual-machine" %}}). ### Virtual Machine Disk @@ -93,7 +93,7 @@ optical: true Created disks can be attached to a Virtual Machine instance. -See the application reference: [`vm-disk`]({{% ref "/docs/virtualization/vm-disk" %}}). +See the application reference: [`vm-disk`]({{% ref "/docs/v1/virtualization/vm-disk" %}}). ### Virtual Machine Instance @@ -108,7 +108,7 @@ disks: The rest parameters are similar to Virtual Machine (simple). -See the application reference: [`vm-instance`]({{% ref "/docs/virtualization/vm-instance" %}}). +See the application reference: [`vm-instance`]({{% ref "/docs/v1/virtualization/vm-instance" %}}). ## Accessing Virtual Machines diff --git a/content/en/docs/virtualization/cloneable-vms.md b/content/en/docs/v1/virtualization/cloneable-vms.md similarity index 100% rename from content/en/docs/virtualization/cloneable-vms.md rename to content/en/docs/v1/virtualization/cloneable-vms.md diff --git a/content/en/docs/virtualization/gpu.md b/content/en/docs/v1/virtualization/gpu.md similarity index 99% rename from content/en/docs/virtualization/gpu.md rename to content/en/docs/v1/virtualization/gpu.md index 2d2f9dbc..ad7ffc0b 100644 --- a/content/en/docs/virtualization/gpu.md +++ b/content/en/docs/v1/virtualization/gpu.md @@ -4,7 +4,7 @@ linkTitle: "GPU Passthrough" description: "Running VMs with GPU Passthrough" weight: 40 aliases: - - /docs/operations/virtualization/gpu + - /docs/v1/operations/virtualization/gpu --- This section demonstrates how to deploy virtual machines (VMs) with GPU passthrough using Cozystack. diff --git a/content/en/docs/virtualization/mikrotik.md b/content/en/docs/v1/virtualization/mikrotik.md similarity index 96% rename from content/en/docs/virtualization/mikrotik.md rename to content/en/docs/v1/virtualization/mikrotik.md index 3410a5d4..b8d1b712 100644 --- a/content/en/docs/virtualization/mikrotik.md +++ b/content/en/docs/v1/virtualization/mikrotik.md @@ -4,8 +4,8 @@ linkTitle: "MikroTik RouterOS" description: "Deploying MikroTik RouterOS (CHR) as a virtual appliance on Cozystack" weight: 60 aliases: - - /docs/operations/virtualization/mikrotik - - /docs/networking/mikrotik + - /docs/v1/operations/virtualization/mikrotik + - /docs/v1/networking/mikrotik --- ## Prerequisites diff --git a/content/en/docs/virtualization/proxmox-migration.md b/content/en/docs/v1/virtualization/proxmox-migration.md similarity index 94% rename from content/en/docs/virtualization/proxmox-migration.md rename to content/en/docs/v1/virtualization/proxmox-migration.md index 7673663a..4e3d87a7 100644 --- a/content/en/docs/virtualization/proxmox-migration.md +++ b/content/en/docs/v1/virtualization/proxmox-migration.md @@ -207,6 +207,6 @@ Use this checklist to track your migration progress: After successful migration: -- Configure [cloud-init]({{% ref "/docs/virtualization/virtual-machine" %}}) for automated VM setup -- Review [instance types and profiles]({{% ref "/docs/virtualization/resources" %}}) for optimal resource allocation -- Consider creating [golden images]({{% ref "/docs/virtualization/vm-image" %}}) for future VM deployments +- Configure [cloud-init]({{% ref "/docs/v1/virtualization/virtual-machine" %}}) for automated VM setup +- Review [instance types and profiles]({{% ref "/docs/v1/virtualization/resources" %}}) for optimal resource allocation +- Consider creating [golden images]({{% ref "/docs/v1/virtualization/vm-image" %}}) for future VM deployments diff --git a/content/en/docs/virtualization/resources.md b/content/en/docs/v1/virtualization/resources.md similarity index 99% rename from content/en/docs/virtualization/resources.md rename to content/en/docs/v1/virtualization/resources.md index ded2f3dd..b697b0b9 100644 --- a/content/en/docs/virtualization/resources.md +++ b/content/en/docs/v1/virtualization/resources.md @@ -4,7 +4,7 @@ linkTitle: "Resources Reference" description: "Reference for VM Instance Types and Instance Profiles" weight: 100 aliases: - - /docs/operations/virtualization/resources + - /docs/v1/operations/virtualization/resources --- Each virtual machine has these two configuration settings: diff --git a/content/en/docs/virtualization/virtual-machine.md b/content/en/docs/v1/virtualization/virtual-machine.md similarity index 99% rename from content/en/docs/virtualization/virtual-machine.md rename to content/en/docs/v1/virtualization/virtual-machine.md index 7cfba011..57f68775 100644 --- a/content/en/docs/virtualization/virtual-machine.md +++ b/content/en/docs/v1/virtualization/virtual-machine.md @@ -3,12 +3,12 @@ title: "Virtual Machine (simple)" linkTitle: "Virtual Machine (simple)" weight: 30 aliases: - - /docs/reference/applications/virtual-machine + - /docs/v1/reference/applications/virtual-machine --- @@ -288,3 +288,4 @@ windows.2k22 | Microsoft Windows Server 2022 windows.2k22.virtio | Microsoft Windows Server 2022 (virtio) windows.2k25 | Microsoft Windows Server 2025 windows.2k25.virtio | Microsoft Windows Server 2025 (virtio) + diff --git a/content/en/docs/virtualization/vm-disk.md b/content/en/docs/v1/virtualization/vm-disk.md similarity index 96% rename from content/en/docs/virtualization/vm-disk.md rename to content/en/docs/v1/virtualization/vm-disk.md index 90af261d..f5084795 100644 --- a/content/en/docs/virtualization/vm-disk.md +++ b/content/en/docs/v1/virtualization/vm-disk.md @@ -3,12 +3,12 @@ title: "Virtual Machine Disk" linkTitle: "Virtual Machine Disk" weight: 20 aliases: - - /docs/reference/applications/vm-disk + - /docs/v1/reference/applications/vm-disk --- @@ -31,3 +31,4 @@ A Virtual Machine Disk | `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/content/en/docs/virtualization/vm-image.md b/content/en/docs/v1/virtualization/vm-image.md similarity index 100% rename from content/en/docs/virtualization/vm-image.md rename to content/en/docs/v1/virtualization/vm-image.md diff --git a/content/en/docs/virtualization/vm-instance.md b/content/en/docs/v1/virtualization/vm-instance.md similarity index 99% rename from content/en/docs/virtualization/vm-instance.md rename to content/en/docs/v1/virtualization/vm-instance.md index 27a5eee3..f8d5b374 100644 --- a/content/en/docs/virtualization/vm-instance.md +++ b/content/en/docs/v1/virtualization/vm-instance.md @@ -3,12 +3,12 @@ title: "Virtual Machine" linkTitle: "Virtual Machine" weight: 10 aliases: - - /docs/reference/applications/vm-instance + - /docs/v1/reference/applications/vm-instance --- @@ -287,3 +287,4 @@ windows.2k22 | Microsoft Windows Server 2022 windows.2k22.virtio | Microsoft Windows Server 2022 (virtio) windows.2k25 | Microsoft Windows Server 2025 windows.2k25.virtio | Microsoft Windows Server 2025 (virtio) + diff --git a/content/en/docs/virtualization/windows.md b/content/en/docs/v1/virtualization/windows.md similarity index 99% rename from content/en/docs/virtualization/windows.md rename to content/en/docs/v1/virtualization/windows.md index 56350f42..0c6ac853 100644 --- a/content/en/docs/virtualization/windows.md +++ b/content/en/docs/v1/virtualization/windows.md @@ -4,7 +4,7 @@ linkTitle: "Windows VMs" description: "Running Windows VMs in Cozystack" weight: 50 aliases: - - /docs/operations/virtualization/windows + - /docs/v1/operations/virtualization/windows --- Cozystack can run Windows virtual machines. diff --git a/hack/update_apps.sh b/hack/update_apps.sh index 6bf271c1..c4134292 100755 --- a/hack/update_apps.sh +++ b/hack/update_apps.sh @@ -108,7 +108,8 @@ EOF readme_url="${RAW_BASE_URL}/${app}/README.md" echo "Processing $app..." - if curl -fsSL "$readme_url" \ + if curl -fsSL --compressed "$readme_url" \ + | sed '1s/\xEF\xBB\xBF//' \ | awk 'NR==1 && /^#{1,2} / { next } { print }' >> "$dest_file"; then echo "✓ Appended README for $app -> $dest_file" else diff --git a/hugo.yaml b/hugo.yaml index 797ec17b..2cf566a7 100644 --- a/hugo.yaml +++ b/hugo.yaml @@ -95,14 +95,6 @@ languages: permalinks: blog: /:section/:year/:month/:slug/ -outputFormats: - SearchIndex: - baseName: index - mediaType: application/json - -outputs: - home: [HTML, SearchIndex] - page: [HTML, SearchIndex] params: description: Free Cloud Platform based on Kubernetes @@ -114,20 +106,19 @@ params: support: /support images: [img/cozystack-social.png] # Enable Algolia DocSearch - algolia_docsearch: true + search: + algolia: {} offlineSearch: false version_menu: "Versions" - version: "0.1" - archived_version: false version_menu_pagelinks: true - url_latest_version: https://cozystack.io/docs - #versions: - # - version: "v2.2" - # url: https://fluxcd.io - # - version: "v2.1" - # url: https://v2-1.docs.fluxcd.io - # - version: "v2.0" - # url: https://v2-0.docs.fluxcd.io + latest_version_id: "v1" + versions: + - version: "v1" + url: "/docs/v1/" + id: "v1" + - version: "v0" + url: "/docs/v0/" + id: "v0" logos: # navbar: flux-horizontal-white.png # hero: flux-horizontal-color.png diff --git a/layouts/partials/hooks/body-end.html b/layouts/partials/hooks/body-end.html index e556e9ce..3cf8ee44 100644 --- a/layouts/partials/hooks/body-end.html +++ b/layouts/partials/hooks/body-end.html @@ -1,5 +1,5 @@ -{{ if isset .Site.Params "algolia_docsearch" }} +{{ if and .Site.Params.search (isset .Site.Params.search "algolia") }}