mirror of
https://github.com/cozystack/cozystack.git
synced 2026-11-09 22:13:18 +09:00
Annotate storageClass as immutable across every stateful app whose chart exposes one — clickhouse, foundationdb, harbor, http-cache, kafka (Kafka + ZooKeeper), kubernetes (top-level only), mariadb, mongodb, nats, openbao, opensearch, postgres, qdrant, rabbitmq, redis, vm-disk. Without coverage across the catalogue the UI would render storageClass read-only on some apps and editable on others — a worse mental model than uniform behaviour. The annotation lands at the schema layer (CEL XValidation rule 'self == oldSelf' on values.schema.json / types.go / embedded openAPISchema in cozyrds/<app>.yaml). The cozystack aggregated apiserver does not yet evaluate CEL on application-backed resources; that is tracked at cozystack/cozystack#2657. The UI (cozystack/cozystack-ui#6) consumes the marker today. The PVC-pinning argument is identical for every chart: Kubernetes fixes a PVC's storageClassName at creation time, so editing this field on an existing resource never migrated data. The schema annotation makes that contract explicit. kubernetes.nodeGroups[name].storageClass is intentionally NOT annotated: the field is optional and undefaulted, so a strict 'self == oldSelf' rule would block any future attempt to set it on an existing node group. A richer ratcheting form is needed there — see docs/storage-immutability.md. A refactor in pkg/registry/apps/application/rest.go extracts the inline schema-build path into buildSpecSchema so it can be unit-tested. Three regression tests in rest_spec_schema_test.go pin the contract that x-kubernetes-validations survives the v1->internal->structural conversion (loaded from the actual MariaDB ApplicationDefinition fixture on disk, not a hand-edited mock). Each per-app README gains a one-line blockquote pointing to a new docs/storage-immutability.md that explains the contract and which consumers enforce it today. Requires cozystack/cozyvalues-gen with @immutable support — bump the pre-commit pin in .github/workflows/pre-commit.yml once the release exists. Assisted-By: Claude <noreply@anthropic.com> Signed-off-by: Aleksei Sviridkin <f@lex.la>
5.0 KiB
5.0 KiB
Managed OpenSearch Service
storageClassis annotated as immutable in the chart schema — seedocs/storage-immutability.mdfor the contract and which consumers enforce it.
Parameters
Common parameters
| Name | Description | Type | Value |
|---|---|---|---|
replicas |
Number of OpenSearch nodes in the cluster. | int |
3 |
resources |
Explicit CPU and memory configuration for each OpenSearch node. When omitted, the preset defined in resourcesPreset is applied. |
object |
{} |
resources.cpu |
CPU available to each node. | quantity |
"" |
resources.memory |
Memory (RAM) available to each node. | quantity |
"" |
resourcesPreset |
Default sizing preset used when resources is omitted. OpenSearch requires minimum 2Gi memory. |
string |
c1.medium |
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 |
topologySpreadPolicy |
How strictly to enforce pod distribution across nodes and zones. | string |
soft |
version |
OpenSearch major version to deploy. | string |
v2 |
Image configuration
| Name | Description | Type | Value |
|---|---|---|---|
images |
Container images used by the operator. | object |
{} |
images.opensearch |
OpenSearch image. | string |
"" |
Node roles configuration
| Name | Description | Type | Value |
|---|---|---|---|
nodeRoles |
Node roles configuration. | object |
{} |
nodeRoles.master |
Enable cluster_manager role. | bool |
true |
nodeRoles.data |
Enable data role. | bool |
true |
nodeRoles.ingest |
Enable ingest role. | bool |
true |
nodeRoles.ml |
Enable machine learning role. | bool |
false |
Users configuration
| Name | Description | Type | Value |
|---|---|---|---|
users |
Custom OpenSearch users configuration map. | map[string]object |
{} |
users[name].password |
Password for the user (auto-generated if omitted). | string |
"" |
users[name].roles |
List of OpenSearch roles. | []string |
[] |
OpenSearch Dashboards configuration
| Name | Description | Type | Value |
|---|---|---|---|
dashboards |
OpenSearch Dashboards configuration. | object |
{} |
dashboards.enabled |
Enable OpenSearch Dashboards deployment. | bool |
false |
dashboards.replicas |
Number of Dashboards replicas. | int |
1 |
dashboards.resources |
Explicit CPU and memory configuration for Dashboards. | object |
{} |
dashboards.resources.cpu |
CPU available to each node. | quantity |
"" |
dashboards.resources.memory |
Memory (RAM) available to each node. | quantity |
"" |
dashboards.resourcesPreset |
Default sizing preset for Dashboards. | string |
c1.small |